Name: series-workflowptm88 Phase: Failed StartedAt: 2026-08-07 22:10:11 +0000 UTC FinishedAt: 2026-08-07 22:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowptm88[0] Phase: Succeeded StartedAt: 2026-08-07 22:10:11 +0000 UTC FinishedAt: 2026-08-07 22:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowptm88[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 22:10:11 +0000 UTC FinishedAt: 2026-08-07 22:32:17 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5M2Y2MjZmNGJmMmZlZTIwZTAzNjM5MDFlZDM4ZmE2M2JlMzk5ZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG5pbmRleCAwZDBkOWM3ZmZhNGJmLi5iYTQ3ZGQxNTM4MzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xuQEAgLTcyOCw2ICYjNDM7NzI4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaGlfY2hhbm5lbF9jb25maWcgbWhpX3NpZXJyYV9lbTkxOXhfY2hhbm5lbHNbXSA9IHtcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxMywgXCYjMzQ7TUJJTVwmIzM0OywgMTI4LCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxNCwgXCYjMzQ7UU1JXCYjMzQ7LCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTUsIFwmIzM0O1FNSVwmIzM0OywgMzIsIDApLFxuJiM0MztcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgXCYjMzQ7SVBfQ1RSTFwmIzM0OywgMzIsIDApLFxuJiM0MztcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxOSwgXCYjMzQ7SVBfQ1RSTFwmIzM0OywgMzIsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX1VMKDMyLCBcJiMzNDtEVU5cJiMzNDssIDMyLCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgXCYjMzQ7RFVOXCYjMzQ7LCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfSFdfVUwoMTAwLCBcJiMzNDtJUF9IVzBcJiMzNDssIDUxMiwgMSksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMgYi9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuaW5kZXggYTMxZDg1NDBmYmI4NS4uM2FlZjkwZWMyMTc2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuQEAgLTEsOCAmIzQzOzEsMTIgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFx1MDAzY2xvaWMucG91bGFpbkBsaW5hcm8ub3JnXHUwMDNlICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWhpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93d2FuLmhcdTAwM2VcbiBcbiAvKiBNSEkgd3dhbiBmbGFncyAqL1xuQEAgLTE0LDYgJiM0MzsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHtcbiBcbiAjZGVmaW5lIE1ISV9XV0FOX01BWF9NVFVcdDB4ODAwMFxuIFxuJiM0MzsvKiBJUF9DVFJMIGNoYW5uZWwgbWVzc2FnZSB0aGF0IHNldHMgdGhlIG1vZGVtJiMzOTtzIERUUi9SVFMgY29udHJvbCBsaW5lcyAqL1xuJiM0MztzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7XG4mIzQzO1x0X19sZTMyIHByZWFtYmxlO1xuJiM0MztcdF9fbGUzMiBtc2dfaWQ7XG4mIzQzO1x0X19sZTMyIGRlc3RfaWQ7XG4mIzQzO1x0X19sZTMyIHNpemU7XG4mIzQzO1x0X19sZTMyIG1zZztcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUhJX0RUUl9DVFJMX01BR0lDXHQweDRDNTI1NDQzXHQvKiAmIzM5O0NUUkwmIzM5OyAqL1xuJiM0MzsjZGVmaW5lIE1ISV9EVFJfTVNHX0RUUlx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBNSElfRFRSX01TR19SVFNcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXHQweDEwXG4mIzQzO1xuJiM0MzsvKiBQZXItY29udHJvbGxlciBJUF9DVFJMIGNoYW5uZWwsIHVzZWQgdG8gc2lnbmFsIERUUi9SVFMgdG8gdGhhdCBtb2RlbSAqL1xuJiM0MztzdHJ1Y3QgbWhpX3d3YW5fZHRyIHtcbiYjNDM7XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKmNudHJsO1xuJiM0MztcdHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQobWhpX3d3YW5fZHRyX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XG4gc3RydWN0IG1oaV93d2FuX2RldiB7XG4gXHQvKiBMb3dlciBsZXZlbCBpcyBhIG1oaSBkZXYsIHVwcGVyIGxldmVsIGlzIGEgd3dhbiBwb3J0ICovXG4gXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcbkBAIC0xMDMsNiAmIzQzOzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdH1cbiB9XG4gXG4mIzQzOy8qIFNpZ25hbCB0aGUgbW9kZW0mIzM5O3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlciYjMzk7cyBJUF9DVFJMIGNoYW5uZWwgKi9cbiYjNDM7c3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4sIHVuc2lnbmVkIGludCBtZG1iaXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXHUwMDNlbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4mIzQzO1x0c3RydWN0IG1oaV9kZXZpY2UgKmN0cmxfZGV2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyAqZHRyX21zZztcbiYjNDM7XHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XG4mIzQzO1x0dTMyIG1zZyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkdHIsIFx1MDAyNm1oaV93d2FuX2R0cl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHRpZiAoZHRyLVx1MDAzZWNudHJsID09IGNudHJsKSB7XG4mIzQzO1x0XHRcdGN0cmxfZGV2ID0gZHRyLVx1MDAzZW1oaV9kZXY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoIWN0cmxfZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi9cbiYjNDM7XG4mIzQzO1x0ZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTtcbiYjNDM7XHRpZiAoIWR0cl9tc2cpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX0RUUilcbiYjNDM7XHRcdG1zZyB8PSBNSElfRFRSX01TR19EVFI7XG4mIzQzO1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX1JUUylcbiYjNDM7XHRcdG1zZyB8PSBNSElfRFRSX01TR19SVFM7XG4mIzQzO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlcHJlYW1ibGUgPSBjcHVfdG9fbGUzMihNSElfRFRSX0NUUkxfTUFHSUMpO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlbXNnX2lkID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9IT1NUX1NUQVRFKTtcbiYjNDM7XHRkdHJfbXNnLVx1MDAzZWRlc3RfaWQgPSBjcHVfdG9fbGUzMihtaGl3d2FuLVx1MDAzZW1oaV9kZXYtXHUwMDNldWxfY2hhbl9pZCk7XG4mIzQzO1x0ZHRyX21zZy1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlbXNnID0gY3B1X3RvX2xlMzIobXNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX3F1ZXVlX2J1ZihjdHJsX2RldiwgRE1BX1RPX0RFVklDRSwgZHRyX21zZywgc2l6ZW9mKCpkdHJfbXNnKSxcbiYjNDM7XHRcdFx0ICAgIE1ISV9FT1QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrZnJlZShkdHJfbXNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9kdHJfcnRzKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4mIzQzO3tcbiYjNDM7XHRtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KSxcbiYjNDM7XHRcdFx0ICAgICAgIG9uID8gVElPQ01fRFRSIHwgVElPQ01fUlRTIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3N0YXJ0KHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiA9IHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KTtcbkBAIC0xNjMsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4gXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxuIFx0LnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsXG4gXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuJiM0MztcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgbWhpX3VsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG5AQCAtMjU1LDYgJiM0MzszMzQsNTkgQEAgc3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpXG4gXHRrZnJlZShtaGl3d2FuKTtcbiB9XG4gXG4mIzQzOy8qIElQX0NUUkwgY2hhbm5lbCBkcml2ZXIsIGJvdW5kIHNlcGFyYXRlbHkgc28gdGhlIGRhdGEtcG9ydCBwYXRoIGlzIHVudG91Y2hlZCAqL1xuJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG1oaV9yZXN1bHQgKm1oaV9yZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHQvKiBNSEkgY29yZSBoYXMgZG9uZSB3aXRoIHRoZSBidWZmZXIsIHJlbGVhc2UgaXQgKi9cbiYjNDM7XHRrZnJlZShtaGlfcmVzdWx0LVx1MDAzZWJ1Zl9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KVxuJiM0Mzt7XG4mIzQzO1x0LyogTW9kZW0gc2VyaWFsIHN0YXRlIGlzIG5vdCBuZWVkZWQsIGRyb3AgaXQgKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtaGlfd3dhbl9kdHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkdHIgPSBremFsbG9jX29iaigqZHRyKTtcbiYjNDM7XHRpZiAoIWR0cilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtaGlfcHJlcGFyZV9mb3JfdHJhbnNmZXIobWhpX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0a2ZyZWUoZHRyKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkdHItXHUwMDNlY250cmwgPSBtaGlfZGV2LVx1MDAzZW1oaV9jbnRybDtcbiYjNDM7XHRkdHItXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XG4mIzQzO1x0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2LCBkdHIpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XHRsaXN0X2FkZChcdTAwMjZkdHItXHUwMDNlbm9kZSwgXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfcmVtb3ZlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2ZHRyLVx1MDAzZW5vZGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1xuJiM0MztcdG1oaV91bnByZXBhcmVfZnJvbV90cmFuc2ZlcihtaGlfZGV2KTtcbiYjNDM7XHRrZnJlZShkdHIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7XG4gXHR7IC5jaGFuID0gXCYjMzQ7RFVOXCYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcbiBcdHsgLmNoYW4gPSBcJiMzNDtEVU4yXCYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcbkBAIC0yNzgsNyAmIzQzOzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7XG4gXHR9LFxuIH07XG4gXG4tbW9kdWxlX21oaV9kcml2ZXIobWhpX3d3YW5fY3RybF9kcml2ZXIpO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7XG4mIzQzO1x0eyAuY2hhbiA9IFwmIzM0O0lQX0NUUkxcJiMzNDsgfSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fZHRyX2RyaXZlciA9IHtcbiYjNDM7XHQuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsXG4mIzQzO1x0LnJlbW92ZSA9IG1oaV93d2FuX2R0cl9yZW1vdmUsXG4mIzQzO1x0LnByb2JlID0gbWhpX3d3YW5fZHRyX3Byb2JlLFxuJiM0MztcdC51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsXG4mIzQzO1x0LmRsX3hmZXJfY2IgPSBtaGlfd3dhbl9kdHJfZGxfeGZlcl9jYixcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDttaGlfd3dhbl9kdHJcJiMzNDssXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG1oaV93d2FuX2N0cmxfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9jdHJsX2RyaXZlcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0Mzttb2R1bGVfaW5pdChtaGlfd3dhbl9jdHJsX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IG1oaV93d2FuX2N0cmxfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbiYjNDM7XHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2bWhpX3d3YW5fZHRyX2RyaXZlcik7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2V4aXQobWhpX3d3YW5fY3RybF9leGl0KTtcbiBcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNSEkgV1dBTiBDVFJMIERyaXZlclwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbmluZGV4IGZmYmNmMTFlNGU2ODEuLmY4Y2E5Y2RhM2M5YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXG5AQCAtNzU5LDggJiM0Mzs3NTksMTUgQEAgc3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbiBcdGlmICghcG9ydC1cdTAwM2VzdGFydF9jb3VudClcbiBcdFx0cmV0ID0gcG9ydC1cdTAwM2VvcHMtXHUwMDNlc3RhcnQocG9ydCk7XG4gXG4tXHRpZiAoIXJldClcbiYjNDM7XHRpZiAoIXJldCkge1xuIFx0XHRwb3J0LVx1MDAzZXN0YXJ0X2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiByYWlzZSBEVFIvUlRTIG9uIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydCAqL1xuJiM0MztcdFx0aWYgKHBvcnQtXHUwMDNlc3RhcnRfY291bnQgPT0gMSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKSB7XG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUztcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbkBAIC03NzMsNiAmIzQzOzc4MCwxMSBAQCBzdGF0aWMgdm9pZCB3d2FuX3BvcnRfb3Bfc3RvcChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbiBcdHBvcnQtXHUwMDNlc3RhcnRfY291bnQtLTtcbiBcdGlmICghcG9ydC1cdTAwM2VzdGFydF9jb3VudCkge1xuJiM0MztcdFx0LyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IGRyb3AgRFRSL1JUUyBvbiBsYXN0IGNsb3NlIG9mIGFuIEFUIHBvcnQgKi9cbiYjNDM7XHRcdGlmIChwb3J0LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuJiM0MztcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyBcdTAwMjY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTtcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChwb3J0LVx1MDAzZW9wcylcbiBcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VzdG9wKHBvcnQpO1xuIFx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2cG9ydC1cdTAwM2VyeHEpO1xuQEAgLTEwMzYsNiAmIzQzOzEwNDgsMTAgQEAgc3RhdGljIGxvbmcgd3dhbl9wb3J0X2ZvcHNfYXRfaW9jdGwoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyB8PSBtZG1iaXRzO1xuIFx0XHRlbHNlXG4gXHRcdFx0cG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgPSBtZG1iaXRzO1xuJiM0MztcdFx0aWYgKHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpXG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICEhKHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICAgICAgKFRJT0NNX0RUUiB8IFRJT0NNX1JUUykpKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93d2FuLmggYi9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuaW5kZXggMWUwZTJjYjUzNTc5OS4uYTc2ODQ5NTBkNzNiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvd3dhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuQEAgLTU3LDYgJiM0Mzs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7XG4gICogQHR4X2Jsb2NraW5nOiBPcHRpb25hbCBibG9ja2luZyByb3V0aW5lIHRoYXQgc2VuZHMgV1dBTiBwb3J0IHByb3RvY29sIGRhdGFcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXG4gICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy5cbiYjNDM7ICogQGR0cl9ydHM6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBhc3NlcnRzIChvbj10cnVlKSBvciBkZS1hc3NlcnRzIChvbj1mYWxzZSlcbiYjNDM7ICogICAgICAgICAgIHRoZSBEVFIgYW5kIFJUUyBtb2RlbSBjb250cm9sIGxpbmVzLlxuICAqXG4gICogVGhlIHd3YW5fcG9ydF9vcHMgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBvZiBsb3ctbGV2ZWwgb3BlcmF0aW9uc1xuICAqIHRoYXQgY29udHJvbCBhIFdXQU4gcG9ydCBkZXZpY2UuIEFsbCBmdW5jdGlvbnMgYXJlIG1hbmRhdG9yeSB1bmxlc3Mgc3BlY2lmaWVkLlxuQEAgLTcwLDYgJiM0Mzs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHtcbiBcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcdF9fcG9sbF90ICgqdHhfcG9sbCkoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xuJiM0MztcdHZvaWQgKCpkdHJfcnRzKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBib29sIG9uKTtcbiB9O1xuIFxuIC8qKiBzdHJ1Y3Qgd3dhbl9wb3J0X2NhcHMgLSBUaGUgV1dBTiBwb3J0IGNhcGJpbGl0aWVzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTNmNjI2ZjRiZjJmZWUyMGUwMzYzOTAxZWQzOGZhNjNiZTM5OWY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMjoyODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jCmluZGV4IDBkMGQ5YzdmZmE0YmYuLmJhNDdkZDE1MzgzN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYwpAQCAtNzI4LDYgJiM0Mzs3MjgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9jaGFubmVsX2NvbmZpZyBtaGlfc2llcnJhX2VtOTE5eF9jaGFubmVsc1tdID0gewogCU1ISV9DSEFOTkVMX0NPTkZJR19ETCgxMywgJiMzNDtNQklNJiMzNDssIDEyOCwgMCksCiAJTUhJX0NIQU5ORUxfQ09ORklHX1VMKDE0LCAmIzM0O1FNSSYjMzQ7LCAzMiwgMCksCiAJTUhJX0NIQU5ORUxfQ09ORklHX0RMKDE1LCAmIzM0O1FNSSYjMzQ7LCAzMiwgMCksCiYjNDM7CU1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgJiMzNDtJUF9DVFJMJiMzNDssIDMyLCAwKSwKJiM0MzsJTUhJX0NIQU5ORUxfQ09ORklHX0RMKDE5LCAmIzM0O0lQX0NUUkwmIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19VTCgzMiwgJiMzNDtEVU4mIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgJiMzNDtEVU4mIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19IV19VTCgxMDAsICYjMzQ7SVBfSFcwJiMzNDssIDUxMiwgMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYyBiL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCmluZGV4IGEzMWQ4NTQwZmJiODUuLjNhZWY5MGVjMjE3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCkBAIC0xLDggJiM0MzsxLDEyIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKGMpIDIwMjEsIExpbmFybyBMdGQgJmx0O2xvaWMucG91bGFpbkBsaW5hcm8ub3JnJmd0OyAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWhpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGVybWlvcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3d3YW4uaCZndDsKIAogLyogTUhJIHd3YW4gZmxhZ3MgKi8KQEAgLTE0LDYgJiM0MzsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHsKIAogI2RlZmluZSBNSElfV1dBTl9NQVhfTVRVCTB4ODAwMAogCiYjNDM7LyogSVBfQ1RSTCBjaGFubmVsIG1lc3NhZ2UgdGhhdCBzZXRzIHRoZSBtb2RlbSYjMzk7cyBEVFIvUlRTIGNvbnRyb2wgbGluZXMgKi8KJiM0MztzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7CiYjNDM7CV9fbGUzMiBwcmVhbWJsZTsKJiM0MzsJX19sZTMyIG1zZ19pZDsKJiM0MzsJX19sZTMyIGRlc3RfaWQ7CiYjNDM7CV9fbGUzMiBzaXplOwomIzQzOwlfX2xlMzIgbXNnOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUMJMHg0QzUyNTQ0MwkvKiAmIzM5O0NUUkwmIzM5OyAqLwomIzQzOyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSCQlCSVQoMCkKJiM0MzsjZGVmaW5lIE1ISV9EVFJfTVNHX1JUUwkJQklUKDEpCiYjNDM7I2RlZmluZSBNSElfRFRSX0hPU1RfU1RBVEUJMHgxMAomIzQzOwomIzQzOy8qIFBlci1jb250cm9sbGVyIElQX0NUUkwgY2hhbm5lbCwgdXNlZCB0byBzaWduYWwgRFRSL1JUUyB0byB0aGF0IG1vZGVtICovCiYjNDM7c3RydWN0IG1oaV93d2FuX2R0ciB7CiYjNDM7CXN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7CiYjNDM7CXN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgTElTVF9IRUFEKG1oaV93d2FuX2R0cl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG1oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKIHN0cnVjdCBtaGlfd3dhbl9kZXYgewogCS8qIExvd2VyIGxldmVsIGlzIGEgbWhpIGRldiwgdXBwZXIgbGV2ZWwgaXMgYSB3d2FuIHBvcnQgKi8KIAlzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjsKQEAgLTEwMyw2ICYjNDM7MTMxLDU2IEBAIHN0YXRpYyB2b2lkIG1oaV93d2FuX2N0cmxfcmVmaWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0KIH0KIAomIzQzOy8qIFNpZ25hbCB0aGUgbW9kZW0mIzM5O3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlciYjMzk7cyBJUF9DVFJMIGNoYW5uZWwgKi8KJiM0MztzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKmNudHJsID0gbWhpd3dhbi0mZ3Q7bWhpX2Rldi0mZ3Q7bWhpX2NudHJsOwomIzQzOwlzdHJ1Y3QgbWhpX2RldmljZSAqY3RybF9kZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyAqZHRyX21zZzsKJiM0MzsJc3RydWN0IG1oaV93d2FuX2R0ciAqZHRyOwomIzQzOwl1MzIgbXNnID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0ciwgJmFtcDttaGlfd3dhbl9kdHJfbGlzdCwgbm9kZSkgewomIzQzOwkJaWYgKGR0ci0mZ3Q7Y250cmwgPT0gY250cmwpIHsKJiM0MzsJCQljdHJsX2RldiA9IGR0ci0mZ3Q7bWhpX2RldjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoIWN0cmxfZGV2KQomIzQzOwkJcmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi8KJiM0MzsKJiM0MzsJZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTsKJiM0MzsJaWYgKCFkdHJfbXNnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChtZG1iaXRzICZhbXA7IFRJT0NNX0RUUikKJiM0MzsJCW1zZyB8PSBNSElfRFRSX01TR19EVFI7CiYjNDM7CWlmIChtZG1iaXRzICZhbXA7IFRJT0NNX1JUUykKJiM0MzsJCW1zZyB8PSBNSElfRFRSX01TR19SVFM7CiYjNDM7CiYjNDM7CWR0cl9tc2ctJmd0O3ByZWFtYmxlID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9DVFJMX01BR0lDKTsKJiM0MzsJZHRyX21zZy0mZ3Q7bXNnX2lkID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9IT1NUX1NUQVRFKTsKJiM0MzsJZHRyX21zZy0mZ3Q7ZGVzdF9pZCA9IGNwdV90b19sZTMyKG1oaXd3YW4tJmd0O21oaV9kZXYtJmd0O3VsX2NoYW5faWQpOwomIzQzOwlkdHJfbXNnLSZndDtzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpOwomIzQzOwlkdHJfbXNnLSZndDttc2cgPSBjcHVfdG9fbGUzMihtc2cpOwomIzQzOwomIzQzOwlyZXQgPSBtaGlfcXVldWVfYnVmKGN0cmxfZGV2LCBETUFfVE9fREVWSUNFLCBkdHJfbXNnLCBzaXplb2YoKmR0cl9tc2cpLAomIzQzOwkJCSAgICBNSElfRU9UKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtmcmVlKGR0cl9tc2cpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CW1oaV93d2FuX2N0cmxfc2VuZF9kdHIod3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpLAomIzQzOwkJCSAgICAgICBvbiA/IFRJT0NNX0RUUiB8IFRJT0NNX1JUUyA6IDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4gPSB3d2FuX3BvcnRfZ2V0X2RydmRhdGEocG9ydCk7CkBAIC0xNjMsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7CiAJLnN0YXJ0ID0gbWhpX3d3YW5fY3RybF9zdGFydCwKIAkuc3RvcCA9IG1oaV93d2FuX2N0cmxfc3RvcCwKIAkudHggPSBtaGlfd3dhbl9jdHJsX3R4LAomIzQzOwkuZHRyX3J0cyA9IG1oaV93d2FuX2N0cmxfZHRyX3J0cywKIH07CiAKIHN0YXRpYyB2b2lkIG1oaV91bF94ZmVyX2NiKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LApAQCAtMjU1LDYgJiM0MzszMzQsNTkgQEAgc3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpCiAJa2ZyZWUobWhpd3dhbik7CiB9CiAKJiM0MzsvKiBJUF9DVFJMIGNoYW5uZWwgZHJpdmVyLCBib3VuZCBzZXBhcmF0ZWx5IHNvIHRoZSBkYXRhLXBvcnQgcGF0aCBpcyB1bnRvdWNoZWQgKi8KJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KQomIzQzO3sKJiM0MzsJLyogTUhJIGNvcmUgaGFzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLCByZWxlYXNlIGl0ICovCiYjNDM7CWtmcmVlKG1oaV9yZXN1bHQtJmd0O2J1Zl9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdCkKJiM0Mzt7CiYjNDM7CS8qIE1vZGVtIHNlcmlhbCBzdGF0ZSBpcyBub3QgbmVlZGVkLCBkcm9wIGl0ICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWhpX3d3YW5fZHRyX3Byb2JlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHRyID0ga3phbGxvY19vYmooKmR0cik7CiYjNDM7CWlmICghZHRyKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9wcmVwYXJlX2Zvcl90cmFuc2ZlcihtaGlfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJa2ZyZWUoZHRyKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZHRyLSZndDtjbnRybCA9IG1oaV9kZXYtJmd0O21oaV9jbnRybDsKJiM0MzsJZHRyLSZndDttaGlfZGV2ID0gbWhpX2RldjsKJiM0MzsJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWhpX2Rldi0mZ3Q7ZGV2LCBkdHIpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO2R0ci0mZ3Q7bm9kZSwgJmFtcDttaGlfd3dhbl9kdHJfbGlzdCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHIgPSBkZXZfZ2V0X2RydmRhdGEoJmFtcDttaGlfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwlsaXN0X2RlbCgmYW1wO2R0ci0mZ3Q7bm9kZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKJiM0MzsJbWhpX3VucHJlcGFyZV9mcm9tX3RyYW5zZmVyKG1oaV9kZXYpOwomIzQzOwlrZnJlZShkdHIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7CiAJeyAuY2hhbiA9ICYjMzQ7RFVOJiMzNDssIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LAogCXsgLmNoYW4gPSAmIzM0O0RVTjImIzM0OywgLmRyaXZlcl9kYXRhID0gV1dBTl9QT1JUX0FUIH0sCkBAIC0yNzgsNyAmIzQzOzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7CiAJfSwKIH07CiAKLW1vZHVsZV9taGlfZHJpdmVyKG1oaV93d2FuX2N0cmxfZHJpdmVyKTsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7CiYjNDM7CXsgLmNoYW4gPSAmIzM0O0lQX0NUUkwmIzM0OyB9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWhpLCBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWhpX2RyaXZlciBtaGlfd3dhbl9kdHJfZHJpdmVyID0gewomIzQzOwkuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsCiYjNDM7CS5yZW1vdmUgPSBtaGlfd3dhbl9kdHJfcmVtb3ZlLAomIzQzOwkucHJvYmUgPSBtaGlfd3dhbl9kdHJfcHJvYmUsCiYjNDM7CS51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsCiYjNDM7CS5kbF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2IsCiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7bWhpX3d3YW5fZHRyJiMzNDssCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBtaGlfd3dhbl9jdHJsX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9kdHJfZHJpdmVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9jdHJsX2RyaXZlcik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQltaGlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9kdHJfZHJpdmVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7bW9kdWxlX2luaXQobWhpX3d3YW5fY3RybF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgbWhpX3d3YW5fY3RybF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwltaGlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9jdHJsX2RyaXZlcik7CiYjNDM7CW1oaV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO21oaV93d2FuX2R0cl9kcml2ZXIpOwomIzQzO30KJiM0Mzttb2R1bGVfZXhpdChtaGlfd3dhbl9jdHJsX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCB2MiYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01ISSBXV0FOIENUUkwgRHJpdmVyJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMKaW5kZXggZmZiY2YxMWU0ZTY4MS4uZjhjYTljZGEzYzlhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jCkBAIC03NTksOCAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgaW50IHd3YW5fcG9ydF9vcF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KQogCWlmICghcG9ydC0mZ3Q7c3RhcnRfY291bnQpCiAJCXJldCA9IHBvcnQtJmd0O29wcy0mZ3Q7c3RhcnQocG9ydCk7CiAKLQlpZiAoIXJldCkKJiM0MzsJaWYgKCFyZXQpIHsKIAkJcG9ydC0mZ3Q7c3RhcnRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IHJhaXNlIERUUi9SVFMgb24gZmlyc3Qgb3BlbiBvZiBhbiBBVCBwb3J0ICovCiYjNDM7CQlpZiAocG9ydC0mZ3Q7c3RhcnRfY291bnQgPT0gMSAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgPT0gV1dBTl9QT1JUX0FUICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMpIHsKJiM0MzsJCQlwb3J0LSZndDthdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTOwomIzQzOwkJCXBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0cyhwb3J0LCB0cnVlKTsKJiM0MzsJCX0KJiM0MzsJfQogCiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BvcnQtJmd0O29wc19sb2NrKTsKQEAgLTc3Myw2ICYjNDM7NzgwLDExIEBAIHN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpCiAJbXV0ZXhfbG9jaygmYW1wO3BvcnQtJmd0O29wc19sb2NrKTsKIAlwb3J0LSZndDtzdGFydF9jb3VudC0tOwogCWlmICghcG9ydC0mZ3Q7c3RhcnRfY291bnQpIHsKJiM0MzsJCS8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovCiYjNDM7CQlpZiAocG9ydC0mZ3Q7b3BzICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBXV0FOX1BPUlRfQVQgJmFtcDsmYW1wOyBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMpIHsKJiM0MzsJCQlwb3J0LSZndDthdF9kYXRhLm1kbWJpdHMgJmFtcDs9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKJiM0MzsJCQlwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMocG9ydCwgZmFsc2UpOwomIzQzOwkJfQogCQlpZiAocG9ydC0mZ3Q7b3BzKQogCQkJcG9ydC0mZ3Q7b3BzLSZndDtzdG9wKHBvcnQpOwogCQlza2JfcXVldWVfcHVyZ2UoJmFtcDtwb3J0LSZndDtyeHEpOwpAQCAtMTAzNiw2ICYjNDM7MTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJcG9ydC0mZ3Q7YXRfZGF0YS5tZG1iaXRzIHw9IG1kbWJpdHM7CiAJCWVsc2UKIAkJCXBvcnQtJmd0O2F0X2RhdGEubWRtYml0cyA9IG1kbWJpdHM7CiYjNDM7CQlpZiAocG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzKQomIzQzOwkJCXBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0cyhwb3J0LAomIzQzOwkJCQkJICAgISEocG9ydC0mZ3Q7YXRfZGF0YS5tZG1iaXRzICZhbXA7CiYjNDM7CQkJCQkgICAgICAoVElPQ01fRFRSIHwgVElPQ01fUlRTKSkpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmgKaW5kZXggMWUwZTJjYjUzNTc5OS4uYTc2ODQ5NTBkNzNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93d2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC93d2FuLmgKQEAgLTU3LDYgJiM0Mzs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7CiAgKiBAdHhfYmxvY2tpbmc6IE9wdGlvbmFsIGJsb2NraW5nIHJvdXRpbmUgdGhhdCBzZW5kcyBXV0FOIHBvcnQgcHJvdG9jb2wgZGF0YQogICogICAgICAgICAgICAgICB0byB0aGUgZGV2aWNlLgogICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy4KJiM0MzsgKiBAZHRyX3J0czogT3B0aW9uYWwgcm91dGluZSB0aGF0IGFzc2VydHMgKG9uPXRydWUpIG9yIGRlLWFzc2VydHMgKG9uPWZhbHNlKQomIzQzOyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy4KICAqCiAgKiBUaGUgd3dhbl9wb3J0X29wcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBsaXN0IG9mIGxvdy1sZXZlbCBvcGVyYXRpb25zCiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC4KQEAgLTcwLDYgJiM0Mzs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHsKIAlpbnQgKCp0eF9ibG9ja2luZykoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJX19wb2xsX3QgKCp0eF9wb2xsKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICBwb2xsX3RhYmxlICp3YWl0KTsKJiM0MzsJdm9pZCAoKmR0cl9ydHMpKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pOwogfTsKIAogLyoqIHN0cnVjdCB3d2FuX3BvcnRfY2FwcyAtIFRoZSBXV0FOIHBvcnQgY2FwYmlsaXRpZXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBEVFIvUlRTIFNpZ25hbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIERUUi9SVFMgc2lnbmFsaW5nIHN1cHBvcnQgb3ZlciBhbiBgSVBfQ1RSTGAgTUhJIGNoYW5uZWwuIFRoZXkmIzM5O3JlIHRvdWNoaW5nIGBtaGlfd3dhbl9jdHJsLmNgLCBgd3dhbl9jb3JlLmNgLCBhbmQgYHBjaV9nZW5lcmljLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGZhaXJseSBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZToKCiogICBBZGRlZCBgSVBfQ1RSTGAgdG8gYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSBjaGFubmVsLgoqICAgSW50cm9kdWNlZCBhIG5ldyBgbWhpX3d3YW5fZHRyX2RyaXZlcmAgZm9yIGhhbmRsaW5nIHRoZSBgSVBfQ1RSTGAgY2hhbm5lbCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcHByb2FjaCwgZW5jYXBzdWxhdGluZyB0aGUgY29udHJvbCBsb2dpYy4KKiAgIEltcGxlbWVudGVkIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYCBhbmQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBEVFIvUlRTIHNpZ25hbHMuIEdvb2QsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMuCiogICBNb2RpZmllZCBgd3dhbl9jb3JlLmNgIHRvIGNhbGwgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2Agd2hlbiBhbiBBVCBwb3J0IGlzIG9wZW5lZC9jbG9zZWQgb3IgdmlhIGlvY3RsLiBUaGlzIGlzIHRoZSBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIFdXQU4gY29yZS4gTWFrZXMgc2Vuc2UgZm9yIGhvdyB0aGUgV1dBTiBjb3JlIG1hbmFnZXMgdGhlIG1vZGVtIGNvbm5lY3Rpb24uCgpUaGUgcmVhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhpcyB3aWxsIGV2ZW4gd29yayBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgV1dBTiBjb3JlIGlzIG9idmlvdXNseSByZWFjaGFibGUsIHRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtLiBCdXQgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGlzIGEgZHJpdmVyIGZvciBNSEkgZGV2aWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGVtdWxhdGUgb3IgY3JlYXRlIE1ISSBkZXZpY2VzIGluIHNvZnR3YXJlLiBDYW4gd2UgZXZlbiBzaW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgYSBNSEkgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNSEkgaXMsIG9mIGNvdXJzZSwgYSBRdWFsY29tbSBtb2RlbSB0aGluZywgc28gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIGNyZWF0ZSBhIHNvZnR3YXJlIE1ISSBkZXZpY2UgZm9yIHRlc3RpbmcuIExldCBtZSBjaGVjayBmb3IgdGhhdC4uLiBMZXQmIzM5O3Mgc2VhcmNoIGZvciAmIzM0O01ISSBkZXZpY2UgY3JlYXRpb24mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfYWxsb2NfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDA5LVx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMDEwOlx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVx0aWYgKElTX0VSUihtaGlfZGV2KSkge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEyMjYtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMjI4LXtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzE4LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjAtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzc0LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcdFx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXHRcdGlmIChJU19FUlIobWhpX2RldikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ISSBDb250cm9sbGVyIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IE1ISSBkZXZpY2VzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhleSYjMzk7cmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB0aHJvdWdoIGFuIE1ISSBob3N0IGNvbnRyb2xsZXIuIEJ1dCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBpcyB0aGlzIGFsd2F5cyBhIGhhcmR3YXJlIHRoaW5nPyBJIG1lYW4sIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGVkaWNhdGVkIHNpbGljb24gY29tcG9uZW50LCBvciBjb3VsZCB0aGlzIGhvc3QgY29udHJvbGxlciBhbHNvIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlPyBJdCYjMzk7cyBhIHZhbGlkIHF1ZXN0aW9uLCB3b3J0aCBleHBsb3JpbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRvIGZpbmQgb3V0LCB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgY29kZWJhc2UuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCB3b3VsZCByZWdpc3RlciB0aGUgY29udHJvbGxlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAuIFRoYXQgc2hvdWxkIGVpdGhlciBsZWFkIG1lIHRvIHRoZSBoZWFydCBvZiBob3cgaXQgd29ya3Mgb3IgZWxpbWluYXRlIHNvbWUgYXZlbnVlcy4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBjbHVlIGluIHVuZGVyc3RhbmRpbmcgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfcmVnaXN0ZXJfY29udHJvbGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxuLS1cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNi0qIEluaXRpYXRlcyBwb3dlciBvbiBhbmQgc2h1dGRvd24gc2VxdWVuY2Vcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyOC1cdFx0XHRcdFx0XHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSlcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXHRtaGlfY29uZmlnLnRpbWVvdXRfbXMgPSBtaGlfdGltZW91dF9tcztcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXHUwMDI2bWhpX2NvbmZpZyk7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXHRpZiAocmV0KSB7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Nzg6XHRcdHBjaV9lcnIocGNpX2RldiwgXCYjMzQ7bWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaDo5OnN0cnVjdCBtaGlfY29udHJvbGxlciAqcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgdm9pZCBfX2lvbWVtICptaGlfYmFyLFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXHRcdFx0XHRcdFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTU3MD1zdGF0aWMgaW50IHFhaWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6NTk3Olx0cWRldi1cdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXHUwMDNlYmFyX21oaSwgbWhpX2lycSxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cdFx0XHRcdFx0XHQgICAgICAgcWRldi1cdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXHUwMDNlZmFtaWx5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MjAtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTA1NzpFWFBPUlRfU1lNQk9MX0dQTChtaGlfcmVnaXN0ZXJfY29udHJvbGxlcik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzNjM9c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNDM4Olx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTE4Nz1pbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoyNjU6XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC0zODEtICogRmllbGRzIG1hcmtlZCBhcyAocmVxdWlyZWQpIG5lZWQgdG8gYmUgcG9wdWxhdGVkIGJ5IHRoZSBjb250cm9sbGVyIGRyaXZlclxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0NS0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU1MS1cdFx0XHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUhJIENvbnRyb2xsZXIgUmVnaXN0cmF0aW9uIGFuZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTUhJIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBJIHNlZSBzZXZlcmFsIGRyaXZlcnMgcmVzcG9uc2libGU6IGBxYWljX2Rydi5jYCwgYHBjaV9nZW5lcmljLmNgLCBhbmQgdGhlIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBBbGwgb2YgdGhlc2UgYXJlIFBDSSBkcml2ZXJzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgTUhJIGlzIG9mdGVuIGltcGxlbWVudGVkIG92ZXIgUENJLiBIbW0sIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgTUhJIGl0c2VsZj8gTm8sIG5vdCBkaXJlY3RseS4gVGhhdCYjMzk7cyBjb25maXJtZWQuCgpSaWdodCwgYHBjaV9nZW5lcmljLmNgICppcyogYSBQQ0kgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGEga2V5IHBpZWNlLiBOb3csIGNhbiB3ZSBsZXZlcmFnZSBzeXprYWxsZXIgdG8gZnV6eiBNSEkgZGV2aWNlcz8gU3l6a2FsbGVyICpjYW4qIGluamVjdCBQQ0kgZGV2aWNlcyB1c2luZyBgc3l6X3BjaV9zZXR1cGAsIEkgcmVtZW1iZXIgdGhhdCBub3cuIEJ1dCBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGVtdWxhdGUgTUhJLiBJdCBjYW4gZW11bGF0ZSAqUENJKiBkZXZpY2VzLgoKU28sIHRoZSBzdHJhdGVneSBiZWNvbWVzOiBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uIGRlZmluZWQgaW4gYHBjaV9nZW5lcmljLmNgLCB0aGVuIGl0IHNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGFuIE1ISSBjb250cm9sbGVyLiBUaGF0JiMzOTtzIHRoZSBsaW5rLiBOZXh0IHN0ZXAgaXMgdG8gZmluZCBvdXQgd2hhdCBQQ0kgSURzIGBtaGlfcGNpX3Byb2JlYCBhY3R1YWxseSBiaW5kcyB0by4gR290dGEgY2hlY2sgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpX3BjaV9pZF90YWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9wY2lfZGV2X2luZm8gbWhpX25ldHByaXNtYV9mY3VuNjlfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTk0OS0vKiBLZWVwIHRoZSBsaXN0IHNvcnRlZCBiYXNlZCBvbiB0aGUgUElELiBOZXcgVklEIHNob3VsZCBiZSBhZGRlZCBhcyB0aGUgbGFzdCBlbnRyeSAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzo5NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1oaV9wY2lfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtOTUxLVx0e1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RQ09NLCAweDAxMTYpLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4NC19O1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxMDg1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtaGlfcGNpX2lkX3RhYmxlKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4Ni1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE3NjQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1oaV9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNzY1LVx0Lm5hbWVcdFx0PSBcJiMzNDttaGktcGNpLWdlbmVyaWNcJiMzNDssXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE3NjY6XHQuaWRfdGFibGVcdD0gbWhpX3BjaV9pZF90YWJsZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ny1cdC5wcm9iZVx0XHQ9IG1oaV9wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNSEkgYW5kIFN5emthbGxlcjogQSBRdWljayBJbnF1aXJ5KioKCk9rYXksIHNvIFN5emthbGxlciBoYXMgUENJIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIHdoaWNoIGlzIGdyZWF0LiBCdXQgTUhJLi4uIE1ISSBpcyBhIGJlYXN0LiBJdCYjMzk7cyBidWlsdCBvbiB0b3Agb2YgUENJLCBidXQgd2l0aCB0aGlzIHdob2xlIHJpbmcgYW5kIGRvb3JiZWxsIHN5c3RlbTsgaXQmIzM5O3MgcXVpdGUgaW50cmljYXRlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIG9mZmVyIGEgZGVkaWNhdGVkIE1ISSBlbXVsYXRvcj8gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHByb3RvY29sLCBpdCYjMzk7cyBub3QgYSBnaXZlbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBNSEkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyByZWFkaWx5IGF2YWlsYWJsZSBvciBhIHBvdGVudGlhbCByZXNlYXJjaCBwcm9qZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNSEkgRGV2aWNlIFNjZW5hcmlvKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkgd2FzIGFib3V0IHRvIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgZm9yIGBzeXMvbGludXhgLCBidXQgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciDigJMgSSBzaG91bGQgYmUgdXNpbmcgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgZm9yIHRob3NlIHN5emthbGxlciBzcGVjaWZpYyBzeXpsYW5nIGRlc2NyaXB0aW9ucy4gVGhlIHByb2JsZW0gaXMsIG5laXRoZXIgb2YgdGhvc2UgdG9vbHMgYXJlIGFjdHVhbGx5IGluIG15IGN1cnJlbnQgdG9vbHNldCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByb2FkYmxvY2suCgpSaWdodCwgdGhlIHByb21wdCBpdHNlbGYgZmxhZ2dlZCB0aGlzOiBpdCYjMzk7cyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IHRoZSBzdGFuZGFyZCB0b29sIGNhbiYjMzk7dCBoYW5kbGUgc3l6a2FsbGVyJiMzOTtzIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIGFueXRoaW5nIHdpdGggJiMzNDtzeXpfJiMzNDsuIEkgbmVlZCB0byBmaW5kIGFuIGFsdGVybmF0aXZlLgoKTGV0JiMzOTtzIHNoaWZ0IGdlYXJzLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBNSEkgZGV2aWNlcy4gSWYgc3l6a2FsbGVyIGlzIGFibGUgdG8gZW11bGF0ZSBhIFBDSSBkZXZpY2UsIHRoZW4sIHRoZW9yZXRpY2FsbHksIGl0IGNvdWxkIHRyaWdnZXIgdGhlIGBtaGlfcGNpX3Byb2JlYCBmdW5jdGlvbi4gSG93ZXZlciwgdGhhdCBwcm9iZSBmdW5jdGlvbiBpcyBnb2luZyB0byB0cnkgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGFjdHVhbCBkZXZpY2UsIGFuZCB0aGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKU28sIGxldCYjMzk7cyBkaWcgaW50byB3aGF0IGBtaGlfcGNpX3Byb2JlYCBhY3R1YWxseSAqZG9lcyouIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzMjk9c3RhdGljIGludCBtaGlfcGNpX2dlbmVyaWNfZWRsX3RyaWdnZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzYyLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxMzYzOnN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzY0LXtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE3NjQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1oaV9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ni1cdC5pZF90YWJsZVx0PSBtaGlfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNzY3Olx0LnByb2JlXHRcdD0gbWhpX3BjaV9wcm9iZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2OC1cdC5yZW1vdmVcdFx0PSBtaGlfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZSwgcmVhZHkgZm9yIGEgZmVsbG93IHNwZWNpYWxpc3Q6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBtaGlfcGNpX3Byb2JlIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwcm9iZSByb3V0aW5lIGhhcyBhbnkgZnVua3ksIG5vbi1zdGFuZGFyZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBQQ0kgaGFyZHdhcmUgdGhhdCBtaWdodCB0cmlwIHVwIFN5emthbGxlciYjMzk7cyBnZW5lcmljIFBDSSBlbXVsYXRvci4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBhbGwga25vdyBob3cgc2Vuc2l0aXZlIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGJpdHMgY2FuIGJlLiBJcyBpdCBnb2luZyB0byByZWx5IG9uIHVuZG9jdW1lbnRlZCByZWdpc3RlcnMsIHByb3ByaWV0YXJ5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgb3IgZGVlcGx5IHNwZWNpZmljIHRpbWluZyByZXF1aXJlbWVudHM/IElmIHNvLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtb2RlbCB0aG9zZSB3aXRoaW4gdGhlIGVtdWxhdG9yIG9yIGJlIGZvcmNlZCB0byBsb29rIGF0IGFub3RoZXIgbWVhbnMgb2YgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM2MzpcdHN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuMTM2NDpcdHtcbjEzNjU6XHRcdGNvbnN0IHN0cnVjdCBtaGlfcGNpX2Rldl9pbmZvICppbmZvID0gKHN0cnVjdCBtaGlfcGNpX2Rldl9pbmZvICopIGlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuMTM2NjpcdFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqbWhpX2NudHJsX2NvbmZpZztcbjEzNjc6XHRcdHN0cnVjdCBtaGlfcGNpX2RldmljZSAqbWhpX3BkZXY7XG4xMzY4Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybDtcbjEzNjk6XHRcdHVuc2lnbmVkIGludCBkbWFfZGF0YV93aWR0aDtcbjEzNzA6XHRcdGludCBlcnI7XG4xMzcxOlx0XG4xMzcyOlx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUhJIFBDSSBkZXZpY2UgZm91bmQ6ICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW5hbWUpO1xuMTM3MzpcdFxuMTM3NDpcdFx0LyogbWhpX3BkZXYubWhpX2NudHJsIG11c3QgYmUgemVyby1pbml0aWFsaXplZCAqL1xuMTM3NTpcdFx0bWhpX3BkZXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqbWhpX3BkZXYpLCBHRlBfS0VSTkVMKTtcbjEzNzY6XHRcdGlmICghbWhpX3BkZXYpXG4xMzc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTM3ODpcdFxuMTM3OTpcdFx0SU5JVF9XT1JLKFx1MDAyNm1oaV9wZGV2LVx1MDAzZXJlY292ZXJ5X3dvcmssIG1oaV9wY2lfcmVjb3Zlcnlfd29yayk7XG4xMzgwOlx0XG4xMzgxOlx0XHRpZiAocGRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNldmZfY29uZmlnKVxuMTM4MjpcdFx0XHRtaGlfY250cmxfY29uZmlnID0gaW5mby1cdTAwM2V2Zl9jb25maWc7XG4xMzgzOlx0XHRlbHNlXG4xMzg0Olx0XHRcdG1oaV9jbnRybF9jb25maWcgPSBpbmZvLVx1MDAzZWNvbmZpZztcbjEzODU6XHRcbjEzODY6XHRcdC8qIEluaXRpYWxpemUgaGVhbHRoIGNoZWNrIG1vbml0b3Igb25seSBmb3IgUGh5c2ljYWwgZnVuY3Rpb25zICovXG4xMzg3Olx0XHRpZiAoIXBkZXYtXHUwMDNlaXNfdmlydGZuKVxuMTM4ODpcdFx0XHR0aW1lcl9zZXR1cChcdTAwMjZtaGlfcGRldi1cdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGhlYWx0aF9jaGVjaywgMCk7XG4xMzg5Olx0XG4xMzkwOlx0XHRtaGlfY250cmwgPSBcdTAwMjZtaGlfcGRldi1cdTAwM2VtaGlfY250cmw7XG4xMzkxOlx0XG4xMzkyOlx0XHRkbWFfZGF0YV93aWR0aCA9IChwZGV2LVx1MDAzZWlzX3ZpcnRmbiBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2V2Zl9kbWFfZGF0YV93aWR0aCkgP1xuMTM5MzpcdFx0XHRcdCAgaW5mby1cdTAwM2V2Zl9kbWFfZGF0YV93aWR0aCA6IGluZm8tXHUwMDNlZG1hX2RhdGFfd2lkdGg7XG4xMzk0Olx0XG4xMzk1Olx0XHRtaGlfY250cmwtXHUwMDNlY250cmxfZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4xMzk2Olx0XHRtaGlfY250cmwtXHUwMDNlaW92YV9zdGFydCA9IDA7XG4xMzk3Olx0XHRtaGlfY250cmwtXHUwMDNlaW92YV9zdG9wID0gKGRtYV9hZGRyX3QpRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKTtcbjEzOTg6XHRcdG1oaV9jbnRybC1cdTAwM2Vmd19pbWFnZSA9IGluZm8tXHUwMDNlZnc7XG4xMzk5Olx0XHRtaGlfY250cmwtXHUwMDNlZWRsX2ltYWdlID0gaW5mby1cdTAwM2VlZGw7XG4xNDAwOlx0XG4xNDAxOlx0XHRtaGlfY250cmwtXHUwMDNlcmVhZF9yZWcgPSBtaGlfcGNpX3JlYWRfcmVnO1xuMTQwMjpcdFx0bWhpX2NudHJsLVx1MDAzZXdyaXRlX3JlZyA9IG1oaV9wY2lfd3JpdGVfcmVnO1xuMTQwMzpcdFx0bWhpX2NudHJsLVx1MDAzZXN0YXR1c19jYiA9IG1oaV9wY2lfc3RhdHVzX2NiO1xuMTQwNDpcdFx0bWhpX2NudHJsLVx1MDAzZXJ1bnRpbWVfZ2V0ID0gbWhpX3BjaV9ydW50aW1lX2dldDtcbjE0MDU6XHRcdG1oaV9jbnRybC1cdTAwM2VydW50aW1lX3B1dCA9IG1oaV9wY2lfcnVudGltZV9wdXQ7XG4xNDA2Olx0XHRtaGlfY250cmwtXHUwMDNlbXJ1ID0gaW5mby1cdTAwM2VtcnVfZGVmYXVsdDtcbjE0MDc6XHRcdG1oaV9jbnRybC1cdTAwM2VuYW1lID0gaW5mby1cdTAwM2VuYW1lO1xuMTQwODpcdFxuMTQwOTpcdFx0aWYgKCFwZGV2LVx1MDAzZWlzX3ZpcnRmbilcbjE0MTA6XHRcdFx0bWhpX3BkZXYtXHUwMDNlcmVzZXRfb25fcmVtb3ZlID0gaW5mby1cdTAwM2VyZXNldF9vbl9yZW1vdmU7XG4xNDExOlx0XG4xNDEyOlx0XHRpZiAoaW5mby1cdTAwM2VlZGxfdHJpZ2dlcilcbjE0MTM6XHRcdFx0bWhpX2NudHJsLVx1MDAzZWVkbF90cmlnZ2VyID0gbWhpX3BjaV9nZW5lcmljX2VkbF90cmlnZ2VyO1xuMTQxNDpcdFxuMTQxNTpcdFx0aWYgKGluZm8tXHUwMDNlc2lkZWJhbmRfd2FrZSkge1xuMTQxNjpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9nZXQgPSBtaGlfcGNpX3dha2VfZ2V0X25vcDtcbjE0MTc6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXdha2VfcHV0ID0gbWhpX3BjaV93YWtlX3B1dF9ub3A7XG4xNDE4Olx0XHRcdG1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSA9IG1oaV9wY2lfd2FrZV90b2dnbGVfbm9wO1xuMTQxOTpcdFx0fVxuMTQyMDpcdFxuMTQyMTpcdFx0ZXJyID0gbWhpX3BjaV9jbGFpbShtaGlfY250cmwsIGluZm8tXHUwMDNlYmFyX251bSwgRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKSk7XG4xNDIyOlx0XHRpZiAoZXJyKVxuMTQyMzpcdFx0XHRyZXR1cm4gZXJyO1xuMTQyNDpcdFxuMTQyNTpcdFx0ZXJyID0gbWhpX3BjaV9nZXRfaXJxcyhtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xuMTQyNjpcdFx0aWYgKGVycilcbjE0Mjc6XHRcdFx0cmV0dXJuIGVycjtcbjE0Mjg6XHRcbjE0Mjk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtaGlfcGRldik7XG4xNDMwOlx0XG4xNDMxOlx0XHQvKiBIYXZlIHN0b3JlZCBwY2kgY29uZnNwYWNlIGF0IGhhbmQgZm9yIHJlc3RvcmUgaW4gc3VkZGVuIFBDSSBlcnJvci5cbjE0MzI6XHRcdCAqIGNhY2hlIHRoZSBzdGF0ZSBsb2NhbGx5IGFuZCBkaXNjYXJkIHRoZSBQQ0kgY29yZSBvbmUuXG4xNDMzOlx0XHQgKi9cbjE0MzQ6XHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuMTQzNTpcdFx0bWhpX3BkZXYtXHUwMDNlcGNpX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuMTQzNjpcdFx0cGNpX2xvYWRfc2F2ZWRfc3RhdGUocGRldiwgTlVMTCk7XG4xNDM3Olx0XG4xNDM4Olx0XHRlcnIgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0cmV0dXJuIGVycjtcbjE0NDE6XHRcbjE0NDI6XHRcdC8qIE1ISSBidXMgZG9lcyBub3QgcG93ZXIgdXAgdGhlIGNvbnRyb2xsZXIgYnkgZGVmYXVsdCAqL1xuMTQ0MzpcdFx0ZXJyID0gbWhpX3ByZXBhcmVfZm9yX3Bvd2VyX3VwKG1oaV9jbnRybCk7XG4xNDQ0Olx0XHRpZiAoZXJyKSB7XG4xNDQ1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBwcmVwYXJlIE1ISSBjb250cm9sbGVyXFxuXCYjMzQ7KTtcbjE0NDY6XHRcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbjE0NDc6XHRcdH1cbjE0NDg6XHRcbjE0NDk6XHRcdGVyciA9IG1oaV9hc3luY19wb3dlcl91cChtaGlfY250cmwpO1xuMTQ1MDpcdFx0aWYgKGVycikge1xuMTQ1MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgdXAgTUhJIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTQ1MjpcdFx0XHRnb3RvIGVycl91bnByZXBhcmU7XG4xNDUzOlx0XHR9XG4xNDU0Olx0XG4xNDU1Olx0XHRzZXRfYml0KE1ISV9QQ0lfREVWX1NUQVJURUQsIFx1MDAyNm1oaV9wZGV2LVx1MDAzZXN0YXR1cyk7XG4xNDU2Olx0XG4xNDU3Olx0XHQvKiBzdGFydCBoZWFsdGggY2hlY2sgKi9cbjE0NTg6XHRcdGlmICghcGRldi1cdTAwM2Vpc192aXJ0Zm4pXG4xNDU5Olx0XHRcdG1vZF90aW1lcihcdTAwMjZtaGlfcGRldi1cdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGppZmZpZXMgJiM0MzsgSEVBTFRIX0NIRUNLX1BFUklPRCk7XG4xNDYwOlx0XG4xNDYxOlx0XHQvKiBBbGxvdyBydW50aW1lIHN1c3BlbmQgb25seSBpZiBib3RoIFBNRSBmcm9tIEQzSG90IGFuZCBNMyBhcmUgc3VwcG9ydGVkICovXG4xNDYyOlx0XHRpZiAocGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCkgXHUwMDI2XHUwMDI2ICEoaW5mby1cdTAwM2Vub19tMykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiB0aGUgYG1oaV9wY2lfcHJvYmVgIFJvdXRpbmUqKgoKT2theSwgc28gYG1oaV9wY2lfcHJvYmVgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgbG9va3MgbGlrZSBpdCBraWNrcyBvZmYgYSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zOiBgbWhpX3BjaV9jbGFpbWAsIGBtaGlfcGNpX2dldF9pcnFzYCwgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCwgYG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cGAsIGFuZCB0aGVuIGNydWNpYWxseSwgYG1oaV9hc3luY19wb3dlcl91cGAuIGBtaGlfYXN5bmNfcG93ZXJfdXBgIGlzIHRoZSBpbnRlcmVzdGluZyBvbmU7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGFuZCBpdCBzdGFydHMgYSB3b3JrZXIgdG8gYWN0dWFsbHkgKnRhbGsqIHRvIHRoZSBkZXZpY2UuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgZXhwZXJ0aXNlIGtpY2tzIGluLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIgZW11bGF0aW5nIGEgUENJIGRldmljZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHByb2JsZW0uIElmIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGEgKnJlYWwqIE1ISS1jYXBhYmxlIGRldmljZSwgYnV0IHJhdGhlciBhIHNpbXVsYXRlZCBvbmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUhJIHByb3RvY29sICh0aGF0IGlzLCB0aGUgQkhJLCBFRSwgZXRjLiBsYXllcnMpIHdvbiYjMzk7dCBiZSBmdWxseSByZWFsaXplZC4gVGhpcyBtZWFucyBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyBhbG1vc3QgZ3VhcmFudGVlZCB0byBlaXRoZXIgZmFpbCwgb3Igd29yc2UsIHRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgcmVzcG9uc2VzIGl0JiMzOTtzIG5ldmVyIGdvaW5nIHRvIGdldC4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGRldmljZXMgKHRoZSBjaGFubmVscykgd29uJiMzOTt0IGJlIGNyZWF0ZWQuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIERpZG4mIzM5O3QgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBNSEkgZGV2aWNlcyB0aGVtc2VsdmVzPyBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGEgZmFpbHVyZSBpbiBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBiZWNvbWVzIGV2ZW4gbW9yZSBjcml0aWNhbCBiZWNhdXNlLCBpZiBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIHJlc291cmNlcywgYSBmYWlsdXJlIHRoZXJlIGNvdWxkIHByZXZlbnQgZGV2aWNlIGNyZWF0aW9uIGF0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTE5Olx0aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuIDkyMDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXG4gOTIxOlx0e1xuIDkyMjpcdFx0c3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50O1xuIDkyMzpcdFx0c3RydWN0IG1oaV9jaGFuICptaGlfY2hhbjtcbiA5MjQ6XHRcdHN0cnVjdCBtaGlfY21kICptaGlfY21kO1xuIDkyNTpcdFx0c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXY7XG4gOTI2Olx0XHRpbnQgcmV0LCBpO1xuIDkyNzpcdFxuIDkyODpcdFx0aWYgKCFtaGlfY250cmwgfHwgIW1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYgfHwgIW1oaV9jbnRybC1cdTAwM2VyZWdzIHx8XG4gOTI5Olx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2VydW50aW1lX2dldCB8fCAhbWhpX2NudHJsLVx1MDAzZXJ1bnRpbWVfcHV0IHx8XG4gOTMwOlx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2VzdGF0dXNfY2IgfHwgIW1oaV9jbnRybC1cdTAwM2VyZWFkX3JlZyB8fFxuIDkzMTpcdFx0ICAgICFtaGlfY250cmwtXHUwMDNld3JpdGVfcmVnIHx8ICFtaGlfY250cmwtXHUwMDNlbnJfaXJxcyB8fFxuIDkzMjpcdFx0ICAgICFtaGlfY250cmwtXHUwMDNlaXJxIHx8ICFtaGlfY250cmwtXHUwMDNlcmVnX2xlbilcbiA5MzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTM0Olx0XG4gOTM1Olx0XHRyZXQgPSBwYXJzZV9jb25maWcobWhpX2NudHJsLCBjb25maWcpO1xuIDkzNjpcdFx0aWYgKHJldClcbiA5Mzc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTM4Olx0XG4gOTM5Olx0XHRtaGlfY250cmwtXHUwMDNlbWhpX2NtZCA9IGt6YWxsb2Nfb2JqcygqbWhpX2NudHJsLVx1MDAzZW1oaV9jbWQsIE5SX09GX0NNRF9SSU5HUyk7XG4gOTQwOlx0XHRpZiAoIW1oaV9jbnRybC1cdTAwM2VtaGlfY21kKSB7XG4gOTQxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gOTQyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfZXZlbnQ7XG4gOTQzOlx0XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtaGlfY250cmwtXHUwMDNldHJhbnNpdGlvbl9saXN0KTtcbiA5NDY6XHRcdG11dGV4X2luaXQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX211dGV4KTtcbiA5NDc6XHRcdHJ3bG9ja19pbml0KFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiA5NDg6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1oaV9jbnRybC1cdTAwM2V0cmFuc2l0aW9uX2xvY2spO1xuIDk0OTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXdsb2NrKTtcbiA5NTA6XHRcdElOSVRfV09SSyhcdTAwMjZtaGlfY250cmwtXHUwMDNlc3Rfd29ya2VyLCBtaGlfcG1fc3Rfd29ya2VyKTtcbiA5NTE6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXN0YXRlX2V2ZW50KTtcbiA5NTI6XHRcbiA5NTM6XHRcdG1oaV9jbnRybC1cdTAwM2VoaXByaW9fd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDttaGlfaGlwcmlvX3dxXCYjMzQ7LCBXUV9ISUdIUFJJKTtcbiA5NTQ6XHRcdGlmICghbWhpX2NudHJsLVx1MDAzZWhpcHJpb193cSkge1xuIDk1NTpcdFx0XHRkZXZfZXJyKG1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuIDk1NjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDk1NzpcdFx0XHRnb3RvIGVycl9mcmVlX2NtZDtcbiA5NTg6XHRcdH1cbiA5NTk6XHRcbiA5NjA6XHRcdG1oaV9jbWQgPSBtaGlfY250cmwtXHUwMDNlbWhpX2NtZDtcbiA5NjE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09GX0NNRF9SSU5HUzsgaSYjNDM7JiM0MzssIG1oaV9jbWQmIzQzOyYjNDM7KVxuIDk2MjpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtaGlfY21kLVx1MDAzZWxvY2spO1xuIDk2MzpcdFxuIDk2NDpcdFx0bWhpX2V2ZW50ID0gbWhpX2NudHJsLVx1MDAzZW1oaV9ldmVudDtcbiA5NjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1oaV9jbnRybC1cdTAwM2V0b3RhbF9ldl9yaW5nczsgaSYjNDM7JiM0MzssIG1oaV9ldmVudCYjNDM7JiM0MzspIHtcbiA5NjY6XHRcdFx0LyogU2tpcCBmb3Igb2ZmbG9hZCBldmVudHMgKi9cbiA5Njc6XHRcdFx0aWYgKG1oaV9ldmVudC1cdTAwM2VvZmZsb2FkX2V2KVxuIDk2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDk2OTpcdFxuIDk3MDpcdFx0XHRtaGlfZXZlbnQtXHUwMDNlbWhpX2NudHJsID0gbWhpX2NudHJsO1xuIDk3MTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtaGlfZXZlbnQtXHUwMDNlbG9jayk7XG4gOTcyOlx0XHRcdGlmIChtaGlfZXZlbnQtXHUwMDNlZGF0YV90eXBlID09IE1ISV9FUl9DVFJMKVxuIDk3MzpcdFx0XHRcdHRhc2tsZXRfaW5pdChcdTAwMjZtaGlfZXZlbnQtXHUwMDNldGFzaywgbWhpX2N0cmxfZXZfdGFzayxcbiA5NzQ6XHRcdFx0XHRcdCAgICAgKHVsb25nKW1oaV9ldmVudCk7XG4gOTc1Olx0XHRcdGVsc2VcbiA5NzY6XHRcdFx0XHR0YXNrbGV0X2luaXQoXHUwMDI2bWhpX2V2ZW50LVx1MDAzZXRhc2ssIG1oaV9ldl90YXNrLFxuIDk3NzpcdFx0XHRcdFx0ICAgICAodWxvbmcpbWhpX2V2ZW50KTtcbiA5Nzg6XHRcdH1cbiA5Nzk6XHRcbiA5ODA6XHRcdG1oaV9jaGFuID0gbWhpX2NudHJsLVx1MDAzZW1oaV9jaGFuO1xuIDk4MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWhpX2NudHJsLVx1MDAzZW1heF9jaGFuOyBpJiM0MzsmIzQzOywgbWhpX2NoYW4mIzQzOyYjNDM7KSB7XG4gOTgyOlx0XHRcdG11dGV4X2luaXQoXHUwMDI2bWhpX2NoYW4tXHUwMDNlbXV0ZXgpO1xuIDk4MzpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bWhpX2NoYW4tXHUwMDNlY29tcGxldGlvbik7XG4gOTg0Olx0XHRcdHJ3bG9ja19pbml0KFx1MDAyNm1oaV9jaGFuLVx1MDAzZWxvY2spO1xuIDk4NTpcdFxuIDk4NjpcdFx0XHQvKiB1c2VkIGluIHNldHRpbmcgYmVpIGZpZWxkIG9mIFRSRSAqL1xuIDk4NzpcdFx0XHRtaGlfZXZlbnQgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2V2ZW50W21oaV9jaGFuLVx1MDAzZWVyX2luZGV4XTtcbiA5ODg6XHRcdFx0bWhpX2NoYW4tXHUwMDNlaW50bW9kID0gbWhpX2V2ZW50LVx1MDAzZWludG1vZDtcbiA5ODk6XHRcdH1cbiA5OTA6XHRcbiA5OTE6XHRcdGlmIChtaGlfY250cmwtXHUwMDNlYm91bmNlX2J1Zikge1xuIDk5MjpcdFx0XHRtaGlfY250cmwtXHUwMDNlbWFwX3NpbmdsZSA9IG1oaV9tYXBfc2luZ2xlX3VzZV9iYjtcbiA5OTM6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXVubWFwX3NpbmdsZSA9IG1oaV91bm1hcF9zaW5nbGVfdXNlX2JiO1xuIDk5NDpcdFx0fSBlbHNlIHtcbiA5OTU6XHRcdFx0bWhpX2NudHJsLVx1MDAzZW1hcF9zaW5nbGUgPSBtaGlfbWFwX3NpbmdsZV9ub19iYjtcbiA5OTY6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXVubWFwX3NpbmdsZSA9IG1oaV91bm1hcF9zaW5nbGVfbm9fYmI7XG4gOTk3Olx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRtaGlfY250cmwtXHUwMDNlaW5kZXggPSBpZGFfYWxsb2MoXHUwMDI2bWhpX2NvbnRyb2xsZXJfaWRhLCBHRlBfS0VSTkVMKTtcbjEwMDA6XHRcdGlmIChtaGlfY250cmwtXHUwMDNlaW5kZXggXHUwMDNjIDApIHtcbjEwMDE6XHRcdFx0cmV0ID0gbWhpX2NudHJsLVx1MDAzZWluZGV4O1xuMTAwMjpcdFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0cmV0ID0gbWhpX2luaXRfaXJxX3NldHVwKG1oaV9jbnRybCk7XG4xMDA2Olx0XHRpZiAocmV0KVxuMTAwNzpcdFx0XHRnb3RvIGVycl9pZGFfZnJlZTtcbjEwMDg6XHRcbjEwMDk6XHRcdC8qIFJlZ2lzdGVyIGNvbnRyb2xsZXIgd2l0aCBNSEkgYnVzICovXG4xMDEwOlx0XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuMTAxMTpcdFx0aWYgKElTX0VSUihtaGlfZGV2KSkge1xuMTAxMjpcdFx0XHRkZXZfZXJyKG1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBNSEkgZGV2aWNlXFxuXCYjMzQ7KTtcbjEwMTM6XHRcdFx0cmV0ID0gUFRSX0VSUihtaGlfZGV2KTtcbjEwMTQ6XHRcdFx0Z290byBlcnJvcl9zZXR1cF9pcnE7XG4xMDE1Olx0XHR9XG4xMDE2Olx0XG4xMDE3Olx0XHRtaGlfZGV2LVx1MDAzZWRldl90eXBlID0gTUhJX0RFVklDRV9DT05UUk9MTEVSO1xuMTAxODpcdFx0bWhpX2Rldi1cdTAwM2VtaGlfY250cmwgPSBtaGlfY250cmw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludGVybmFsIFdvcmtmbG93IGZvciBNSEkgRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIE1ISSBkZXZpY2Ugc2V0dXAuIFRoZSBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBvZiBhbiBNSEkgZGV2aWNlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBjb250cm9sbGVyIGl0c2VsZiDigJMgdGhhdCYjMzk7cyB0aGUgYE1ISV9ERVZJQ0VfQ09OVFJPTExFUmAgcGFydC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkga25vdyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFubmVsIGRldmljZSBjcmVhdGlvbiwgdGhlIGBNSElfREVWSUNFX1hGRVJgIGRldmljZXMsIGlzbiYjMzk7dCBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgbWhpX2NyZWF0ZV9kZXZpY2VzYCBpcyB0aGUgcmVzcG9uc2libGUgZnVuY3Rpb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2suIExldCBtZSBnZXQgbXkgYmVhcmluZ3MgYW5kIHNlZSB3aGVyZSBleGFjdGx5IGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgZGlzY292ZXIgd2hlcmUgdGhlc2UgdHJhbnNmZXIgZGV2aWNlcyBhcmUgY29uZmlndXJlZC4gSSB3aWxsIHRyYWNrIHRoZSBpbnZvY2F0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfY3JlYXRlX2RldmljZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMjI6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2MD1FWFBPUlRfU1lNQk9MX0dQTChtaGlfbm90aWZ5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6MzYzOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zOTQ9c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXHQgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ2MS1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVx0XHRcdCAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XHRcdFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzMy1cdFx0XHRpZiAobWhpX2NudHJsLVx1MDAzZWZiY19kb3dubG9hZClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0NC1cdFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ1Olx0XHRcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXHRcdFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUhJIERldmljZSBDcmVhdGlvbiBQcm9ibGVtKioKCk9rYXksIHNvIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgdG8gZXZlcnl0aGluZyBlbHNlIEkgbmVlZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbWhpX3BtX3N0X3dvcmtlcmAgb3IgYG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbmAgZnVuY3Rpb25zLCB3aGljaCwgaW4gdHVybiwgYXJlIGRyaXZlbiBieSBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiB0aGUgTUhJIGNvbnRyb2xsZXIgaXRzZWxmLiBUaG9zZSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3JtYWxseSB0aGUgcmVzdWx0IG9mIGVpdGhlciBoYXJkd2FyZSBpbnRlcnJ1cHRzIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRzLCB0aGluZ3MgbGlrZSBCSEkgb3IgRUUgcmVnaXN0ZXJzLgoKVGhlIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBhIGdlbmVyaWMgUENJIGRldmljZSwgaXQgcHJvYmFibHkgKndvbiYjMzk7dCogY29ycmVjdGx5IHNpbXVsYXRlIHRoZSBzcGVjaWZpYyBpbnRlcnJ1cHRzIG9yIHJlZ2lzdGVyIHZhbHVlcyB0aGF0IHRoZSBNSEkgY29udHJvbGxlciBleHBlY3RzIHRvIHNlZSBmb3IgdGhlc2Ugc3RhdGUgdHJhbnNpdGlvbnMuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWhpX2NyZWF0ZV9kZXZpY2VzYCBpcyBsaWtlbHkgKm5ldmVyKiBnb2luZyB0byBnZXQgY2FsbGVkLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGUgYElQX0NUUkxgIGNoYW5uZWwgZGV2aWNlLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gdGhpcyB3aG9sZSBzZXR1cCwganVzdCB3b24mIzM5O3QgYmUgY3JlYXRlZC4gVGhhdCYjMzk7cyBhIGh1Z2UgYmxvY2tlci4KCkJ1dCB3YWl0LiBUaGlzIGNhbiYjMzk7dCBiZSB0aGUgKm9ubHkqIHdheSwgcmlnaHQ/IElzIHRoZXJlIGFueSB3YXkgdG8gY3JlYXRlIE1ISSBkZXZpY2VzIGluZGVwZW5kZW50IG9mIHRoaXMgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbj8gQ2FuIHN5emthbGxlciBzb21laG93ICpkaXJlY3RseSogaW5qZWN0IGRldmljZXMgb250byB0aGUgTUhJIGJ1cz8gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBpZiBzeXprYWxsZXIgZXZlbiAqaGFzKiBhbiBNSEkgYnVzIGVtdWxhdG9yLiBJdCBoYW5kbGVzIFBDSSwgVVNCLCBWTUJ1cywgYW5kIG90aGVycywgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgc3BlY2lmaWMgZm9yIE1ISS4gSG1tLCBubywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIE1ISSBidXMgaW4gc3l6a2FsbGVyLgoKSG9sZCBvbi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNgIGFuZCBgZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuY2AuIEFoLCBgd3dhbl9jb3JlLmNgIGlzIHRoZSBXV0FOIHN1YnN5c3RlbSYjMzk7cyBjb3JlLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIERvZXMgc3l6a2FsbGVyIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgTUhJIHBhdGggdG8gZ2V0IHRvIGB3d2FuX2NvcmUuY2A/IENhbiBpdCByZWFjaCBgd3dhbl9jb3JlLmNgIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgbWFueSBvdGhlciBXV0FOIGRyaXZlcnMgdGhlcmUgYXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O21oaV93d2FuX2N0cmwuYyYjMzQ7LAogICAgJiMzNDttaGlfd3dhbl9tYmltLmMmIzM0OywKICAgICYjMzQ7cWNvbV9iYW1fZG11eC5jJiMzNDssCiAgICAmIzM0O3JwbXNnX3d3YW5fY3RybC5jJiMzNDssCiAgICAmIzM0O3d3YW5fY29yZS5jJiMzNDssCiAgICAmIzM0O3d3YW5faHdzaW0uYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDtpb3NtJiMzNDssCiAgICAmIzM0O3Q3eHgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldXQU4gSGFyZHdhcmUgU2ltdWxhdGlvbjogUG9ydCBDcmVhdGlvbiBBbmFseXNpcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgd3dhbl9od3NpbS5jYC4gQWgsIHllcywgYSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIFdXQU4gZGV2aWNlcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0b29scywgaXM6ICpkb2VzIGl0IGNvcnJlY3RseSBtb2RlbCB0aGUgZXNzZW50aWFsIGFzcGVjdHMgb2YgV1dBTiBwb3J0IGNyZWF0aW9uPyogV2UgbmVlZCB0byBzY3J1dGluaXplIHRoaXMgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2ltdWxhdGVkIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdHJhbnNsYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgcG9ydCBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3Qgc3lzdGVtIGZyb20gYSBwb3J0IHBlcnNwZWN0aXZlPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgc2ltdWxhdGVkIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHJlZ2lzdGVyZWQgYXMgYSB2YWxpZCBXV0FOIHBvcnQuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgc2ltdWxhdGlvbiBhY2N1cmF0ZWx5IHJlcHJvZHVjZXMgdGhlIGV4cGVjdGVkIGRldmljZSBlbnVtZXJhdGlvbiBhbmQgc2V0dXAgYmVoYXZpb3JzIG9mIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc2ltdWxhdGVkIGRldmljZSYjMzk7cyByZXBvcnRlZCBjYXBhYmlsaXRpZXMgYW5kIGhvdyB0aGV5IGdldCByZXByZXNlbnRlZCBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3d2FuX3BvcnRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MTMyPXN0YXRpYyBpbnQgd3dhbl9od3NpbV9hdF9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMTk0LVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6MTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0xOTYtXHQuc3RhcnQgPSB3d2FuX2h3c2ltX2F0X2VtdWxfc3RhcnQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9Mjg5PXN0YXRpYyBpbnQgd3dhbl9od3NpbV9ubWVhX2VtdWxfdHgoc3RydWN0IHd3YW5fcG9ydCAqd3BvcnQsIHN0cnVjdCBza19idWZmICppbilcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTUtXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYzoyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5faHdzaW1fbm1lYV9lbXVsX3BvcnRfb3BzID0ge1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMjk3LVx0LnN0YXJ0ID0gd3dhbl9od3NpbV9ubWVhX2VtdWxfc3RhcnQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MzAzPXN0YXRpYyBzdHJ1Y3Qgd3dhbl9od3NpbV9wb3J0ICp3d2FuX2h3c2ltX3BvcnRfbmV3KHN0cnVjdCB3d2FuX2h3c2ltX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jLTMwNS17XG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYzozMDY6XHRjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyAqb3BzO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMzA3LVx0c3RydWN0IHd3YW5faHdzaW1fcG9ydCAqcG9ydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFdXQU4gUG9ydCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHd3YW5fY29yZS5jYCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBgd3dhbl9wb3J0X29wX3N0YXJ0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpcyBjb25kaXRpb25hbCBibG9jazogaWYgYHBvcnQtJmd0O3N0YXJ0X2NvdW50YCBpcyAxIGFuZCB0aGUgcG9ydCB0eXBlIGlzIEFULCBhbmQgaWYgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AgaXMgbm90IG51bGwsIHRoZW4gRFRSIGFuZCBSVFMgYXJlIHJhaXNlZC4gVGhpcyBtaW1pY3MgVFRZIHNlbWFudGljcywgd2hpY2ggaXMgZ29vZC4gV2Ugd2FudCBtb2RlbSBwb3J0cyB0byBiZWhhdmUgYXMgZXhwZWN0ZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHNgIGFjdHVhbGx5ICpzZXQqPyBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBpdCBpcyBzZXQuIFRoZSB3aG9sZSBwb2ludCBvZiBgd3dhbl9od3NpbS5jYCBpcyB0byBjcmVhdGUgV1dBTiBwb3J0cywgYW5kIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmVsYXRlIHRvIHRob3NlLiBTbyBJIGhhdmUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHd3YW5faHdzaW1fYXRfZW11bF9wb3J0X29wc2AuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBgZHRyX3J0c2Agb3BlcmF0aW9uIGlzIGRlZmluZWQgZm9yIHRoZXNlIGVtdWxhdGVkIHBvcnRzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGB3d2FuX2h3c2ltLmNgIHByb3ZpZGVzIGEgc3VpdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIGBkdHJfcnRzYC4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS4gSWYgc28sIHRoZW4gaXQgYWxsIG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XG4gMTk2Olx0XHQuc3RhcnQgPSB3d2FuX2h3c2ltX2F0X2VtdWxfc3RhcnQsXG4gMTk3Olx0XHQuc3RvcCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdG9wLFxuIDE5ODpcdFx0LnR4ID0gd3dhbl9od3NpbV9hdF9lbXVsX3R4LFxuIDE5OTpcdH07XG4gMjAwOlx0XG4gMjAxOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0dOU1MpXG4gMjAyOlx0I2RlZmluZSBOTUVBX01BWF9MRU5cdFx0ODJcdC8qIE1heCBzZW50ZW5jZSBsZW5ndGggKi9cbiAyMDM6XHQjZGVmaW5lIE5NRUFfVFJBSUxfTEVOXHRcdDVcdC8qICYjMzk7KiYjMzk7ICYjNDM7IENoZWNrc3VtICYjNDM7IFx1MDAzY0NSXHUwMDNlXHUwMDNjTEZcdTAwM2UgKi9cbiAyMDQ6XHQjZGVmaW5lIE5NRUFfTUFYX0RBVEFfTEVOXHQoTk1FQV9NQVhfTEVOIC0gTk1FQV9UUkFJTF9MRU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgd3dhbl9od3NpbS5jIGFuZCB3d2FuX2NvcmUuYyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGFuZCByZWFsaXppbmcgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBleGVjdXRlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIGBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHNgIGZ1bmN0aW9uIHBvaW50ZXIgYmVpbmcgc2V0LiBUaGUgY29yZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGB3d2FuX2h3c2ltLmNgICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgd29uJiMzOTt0IGJlIHRyaWdnZXJlZCBpbiBhIHNpbXVsYXRlZCBoYXJkd2FyZSBlbnZpcm9ubWVudC4KCk15IG5leHQgdGhvdWdodCBpbW1lZGlhdGVseSBpczogd2hlcmUgKmlzKiBgZHRyX3J0c2AgYmVpbmcgc2V0PyBEaWdnaW5nIHRocm91Z2ggdGhlIHBhdGNoLCBJIHNlZSBpdCYjMzk7cyBiZWluZyBhZGRlZCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGl0IHdpdGhpbiB0aGUgYHd3YW5fcG9wc2Agc3RydWN0LCBzcGVjaWZpY2FsbHkgbGlrZSB0aGlzOgoKYGBgYwpAQCAtMTYzLDYgJiM0MzsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0gewogCS5zdGFydCA9IG1oaV93d2FuX2N0cmxfc3RhcnQsCiAJLnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsCiAJLnR4ID0gbWhpX3d3YW5fY3RybF90eCwKJiM0MzsJLmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsCiB9OwogYGBgCgpPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IEkmIzM5O20gbm90IHN0b3BwaW5nIHRoZXJlLiBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSAqb3RoZXIqIGRyaXZlcnMgc2V0dGluZyB0aGlzIGBkdHJfcnRzYCBwb2ludGVyPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHNlYXJjaCBmb3IgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGNvZGUgYmVoYXZlcyBhcyBleHBlY3RlZCBhY3Jvc3MgdGhlIGJvYXJkIGFuZCB0byBzZWUgd2hhdCBwb3RlbnRpYWwgaW1wYWN0cyBpdCBoYXMgb24gdGhlIG90aGVyIGRyaXZlcnMgYW5kIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmR0cl9ydHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0My1cdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoyNDQ6XHQuZHRyX3J0cyA9IG1oaV93d2FuX2N0cmxfZHRyX3J0cyxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBXV0FOIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZHRyX3J0c2Agc2V0dGluZywgd2hpY2ggc2VlbXMgdG8gb3JpZ2luYXRlIHNvbGVseSBmcm9tIGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0IGltcGxpZXMgdGhlIG5ldyBjb2RlIGluIGB3d2FuX2NvcmUuY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB3aGVuIGEgV1dBTiBwb3J0IGlzIGNyZWF0ZWQgYnkgYG1oaV93d2FuX2N0cmwuY2AuIEFuZCBgbWhpX3d3YW5fY3RybC5jYCBpcywgb2YgY291cnNlLCBhbiBNSEkgZHJpdmVyLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IGNyZWF0ZSBhbiBNSEkgZGV2aWNlPyBNeSBlYXJsaWVyIGFuYWx5c2lzIHN1Z2dlc3RzIE1ISSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIG9ubHkgd2hlbiBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFzIHNlZW4gaW4gdGhlIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIHByb2Nlc3MuIFRoZSBwcm9ibGVtPyBTeXprYWxsZXImIzM5O3MgUENJIGVtdWxhdG9yLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGVtdWxhdGUgdGhlIE1ISSBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGhvc3QgY29udHJvbGxlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZS4gVGhpcyBtZWFucyBpdCAqd29uJiMzOTt0KiBiZSBhYmxlIHRvIGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuCgpUaGVyZWZvcmUsIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aWxsIG5ldmVyIGJlIGNhbGxlZCwgYW5kIG5vIFdXQU4gcG9ydHMgd2l0aCBgZHRyX3J0c2Agd2lsbCBiZSBjcmVhdGVkLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29kZSBpbiBib3RoIGB3d2FuX2NvcmUuY2AgYW5kIGBtaGlfd3dhbl9jdHJsLmNgIGlzIHVucmVhY2hhYmxlIGluIHRoaXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVS4KCkJ1dCwgaGFuZyBvbiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZXhwbG9yZWQgZXZlcnkgcG9zc2liaWxpdHkuIElzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byBpbmplY3QgYW4gTUhJIGRldmljZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IHVzZSBgbWhpX2FsbG9jX2RldmljZWAgZGlyZWN0bHk/IE5vLCB0aGF0JiMzOTtzIG5vdCBhIHN5c2NhbGwuIEhvdyBhYm91dCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgPyBOb3BlLiBPa2F5LCB3aGF0IGFib3V0IHNvbWUgc3lzZnMgb3IgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBtaWdodCBhbGxvdyBkZXZpY2UgaW5qZWN0aW9uPyBJdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGUgTUhJIHN1YnN5c3RlbSBleHBvc2VzIGFueSBpbnRlcmZhY2VzIGxpa2UgdGhhdC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfY3JlYXRlX2RldmljZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMjI6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2MD1FWFBPUlRfU1lNQk9MX0dQTChtaGlfbm90aWZ5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6MzYzOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zOTQ9c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXHQgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ2MS1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVx0XHRcdCAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XHRcdFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzMy1cdFx0XHRpZiAobWhpX2NudHJsLVx1MDAzZWZiY19kb3dubG9hZClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0NC1cdFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ1Olx0XHRcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXHRcdFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ1NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnRlcm5hbCBGdW5jdGlvbiBSZXZpZXcqKgoKSG1tLCBgbWhpX2NyZWF0ZV9kZXZpY2VzYC4uLiByaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBpdCBiZWluZyBjYWxsZWQgb25seSB3aXRoaW4gYG1oaV9wbV9zdF93b3JrZXJgIGFuZCBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYC4gT2theSwgc28gdGhvc2UgYXJlIHRoZSAqb25seSogdHdvIHBsYWNlcy4KCkFscmlnaHQsIGJ1dCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IElzIHRoZXJlICphbm90aGVyKiB3YXkgdG8gdHJpZ2dlciB0aGF0IGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGZ1bmN0aW9uPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGl0c2VsZi4gVGltZSB0byBkaXZlIGJhY2sgaW4gdGhlcmUgYW5kIHJldmlldyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM3Mz1pbnQgbWhpX3BtX20zX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zOTMtLyogSGFuZGxlIGRldmljZSBNaXNzaW9uIE1vZGUgdHJhbnNpdGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozOTQ6c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTM5NS17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzOC1cdFx0Y2FzZSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU6XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjgzOTpcdFx0XHRtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQwLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAwNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipVbnBhY2tpbmcgVGhpcyBTdGF0ZSBUcmFuc2l0aW9uIFByb2Nlc3MqKgoKUmlnaHQsIHNvIHRoaXMgY29kZSBpcyBvbmx5IGNhbGxlZCBmcm9tIGBtaGlfcG1fc3Rfd29ya2VyYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcGFydCBvZiBzb21lIHBvd2VyIG1hbmFnZW1lbnQgb3Igc3RhdGUgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2l0aGluIHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKS4gT2theSwgbWFrZXMgc2Vuc2UuCgpgbWhpX3BtX3N0X3dvcmtlcmAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXTigJlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHRoYXQgaXQmIzM5O3MgcHVsbGluZyB0aGVzZSB0cmFuc2l0aW9ucyBmcm9tIGBtaGlfY250cmwtJmd0O3RyYW5zaXRpb25fbGlzdGAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzICp3aG8qIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGBtaGlfY250cmwtJmd0O3RyYW5zaXRpb25fbGlzdGA/IFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbnRyb2wgZmxvdyBiZWdpbnMuIERldGVybWluaW5nIHRoYXQgd2lsbCBnaXZlIG1lIHZpc2liaWxpdHkgaW50byBob3cgdHJhbnNpdGlvbnMgYXJlIGluaXRpYXRlZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHN5c3RlbSYjMzk7cyBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsc3RhY2sgdGhhdCBmZWVkcyB0aGlzIGxpc3QgdGVsbHMgbWUgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIHZhcmlvdXMgZXZlbnRzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgbGlzdCB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXJzLiBXaG8mIzM5O3MgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IElzIHRoaXMgZXZlbnQtZHJpdmVuLCB0aW1lci1iYXNlZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9zZXRfbWhpX3N0YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2Jvb3QuYz02Mz1zdGF0aWMgaW50IF9fbWhpX2Rvd25sb2FkX3JkZG1faW5fcGFuaWMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jLTEwNS1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXIgZGV2aWNlIGludG8gUkRETSBtb2RlIHVzaW5nIFNZUyBFUlJcXG5cJiMzNDspO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jOjEwNjpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfU1lTX0VSUik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA3LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9MTIwPWVudW0gbWhpX3BtX3N0YXRlIF9fbXVzdF9jaGVjayBtaGlfdHJ5c2V0X3BtX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTM5LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxNDA6dm9pZCBtaGlfc2V0X21oaV9zdGF0ZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgZW51bSBtaGlfc3RhdGUgc3RhdGUpXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTE0MS17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0xNzA9aW50IG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMjUwLVx0LyogU2V0IE1ISSB0byBNMCBzdGF0ZSAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoyNTE6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTI1Mi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTMzNz12b2lkIG1oaV9wbV9tMV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ0LVx0aWYgKHN0YXRlID09IE1ISV9QTV9NMikge1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozNDU6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX00yKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ2LVx0XHRtaGlfY250cmwtXHUwMDNlZGV2X3N0YXRlID0gTUhJX1NUQVRFX00yO1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NDcyPXN0YXRpYyB2b2lkIG1oaV9wbV9kaXNhYmxlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00OTQtXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtUcmlnZ2VyaW5nIE1ISSBSZXNldCBpbiBkZXZpY2VcXG5cJiMzNDspO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo0OTU6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDk2LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTY1Ny1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXJpbmcgTUhJIFJlc2V0IGluIGRldmljZVxcblwmIzM0Oyk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjY1ODpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy02NTktXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz04Njc9aW50IG1oaV9wbV9zdXNwZW5kKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTI1LVx0LyogU2V0IE1ISSB0byBNMyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5MjY6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMyk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTkyNy1cdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9OTU1PXN0YXRpYyBpbnQgX19taGlfcG1fcmVzdW1lKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBib29sIGZvcmNlKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTk4LVx0LyogU2V0IE1ISSB0byBNMCBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5OTk6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEwMDAtXHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExNjUtXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTE2NjpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTY3LVx0XHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlcmVncywgTUhJQ1RSTCxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEzMDE9aW50IG1oaV9mb3JjZV9yZGRtX21vZGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMzEwLVx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXJpbmcgU1lTX0VSUiB0byBmb3JjZSBSRERNIHN0YXRlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTMxMTpcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1NZU19FUlIpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMzEyLVxuLS1cbmluY2x1ZGUvbGludXgvbWhpLmg9NTg2PXZvaWQgbWhpX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtaGlfZHJpdmVyICptaGlfZHJ2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU4OC0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTg5OiAqIG1oaV9zZXRfbWhpX3N0YXRlIC0gU2V0IE1ISSBkZXZpY2Ugc3RhdGVcbmluY2x1ZGUvbGludXgvbWhpLmgtNTkwLSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01OTItICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU5Mzp2b2lkIG1oaV9zZXRfbWhpX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuaW5jbHVkZS9saW51eC9taGkuaC01OTQtXHRcdCAgICAgICBlbnVtIG1oaV9zdGF0ZSBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBTdGF0ZSBUcmFuc2l0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uIHdvcmtzLi4uIExldCBtZSBzZWUuIEkmIzM5O20gZm9jdXNpbmcgb24gYG1oaV9zZXRfbWhpX3N0YXRlYCwgcmlnaHQ/IFRoYXQgZnVuY3Rpb24gaXMgKmRpcmVjdGx5KiB3cml0aW5nIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgYE1ISUNUUkxgLiBUaGF0JiMzOTtzIHRoZSBrZXksIGl0JiMzOTtzIHRoZSBhY3R1YWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBwYXJ0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGUgKnRyaWdnZXIqIGZvciBhIHN0YXRlIGNoYW5nZSB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYCBpcyBiZWluZyBoYW5kbGVkIGJ5IGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHVwIHRoYXQgc3BlY2lmaWMgdHJhbnNpdGlvbi4gVGhpcyBtZWFucyBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHRoZSAmIzM5O2RvZXImIzM5OywgYW5kIGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAgaXMgdGhlIHNjaGVkdWxlciBvciB0aGUgcmVxdWVzdG9yLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzMzPWNvbnN0IGNoYXIgKnRvX21oaV9wbV9zdGF0ZV9zdHIodTMyIHN0YXRlKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg6MzM0OmludCBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzM1LVx0XHRcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9Nzk5PWludCBtaGlfcHJvY2Vzc19jdHJsX2V2X3Jpbmcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkyMi1cdFx0XHRpZiAoc3QgIT0gREVWX1NUX1RSQU5TSVRJT05fTUFYKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjkyMzpcdFx0XHRcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgc3QpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkyNC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTU5Nz1zdGF0aWMgdm9pZCBtaGlfcG1fc3lzX2Vycm9yX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NTItXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MzpcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgbmV4dF9zdGF0ZSk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc1NC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc2My0vKiBRdWV1ZSBhIG5ldyB3b3JrIGl0ZW0gYW5kIHNjaGVkdWxlIHdvcmsgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NzY0OmludCBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzY1LVx0XHRcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzg0PXZvaWQgbWhpX3BtX3N5c19lcnJfaGFuZGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc5My1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6Nzk0Olx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBERVZfU1RfVFJBTlNJVElPTl9TWVNfRVJSKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzk1LX1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTUtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTY6XHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTk3LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9MTIxMj1zdGF0aWMgdm9pZCBfX21oaV9wb3dlcl9kb3duKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBib29sIGdyYWNlZnVsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1MS1cdGlmIChkZXN0cm95X2RldmljZSlcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTI1MjpcdFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjUzLVx0XHRcdFx0XHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFX0RFU1RST1lfREVWSUNFKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1NC1cdGVsc2VcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTI1NTpcdFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjU2LVx0XHRcdFx0XHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNzAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uYCBDYWxsKioKCk9rYXksIHNvIGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAgaXMgZ2V0dGluZyBjYWxsZWQgd2l0aGluIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBJbnRlcmVzdGluZy4gVGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBoZXJlIGlzIHRoYXQgYG5leHRfc3RhdGVgIGlzIHNldCB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYC4gVGhhdCYjMzk7cyB0aGUgc3RhdGUgaXQmIzM5O3MgdHJhbnNpdGlvbmluZyAqdG8qLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGF0IGBtaGlfYXN5bmNfcG93ZXJfdXBgIGRvZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYG1oaV9hc3luY19wb3dlcl91cGAuLi4gYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBpbW1lZGlhdGVseSBpbGx1bWluYXRlIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjE6XHRpbnQgbWhpX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuMTEyMjpcdHtcbjExMjM6XHRcdHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudCA9IG1oaV9jbnRybC1cdTAwM2VtaGlfZXZlbnQ7XG4xMTI0Olx0XHRlbnVtIG1oaV9zdGF0ZSBzdGF0ZTtcbjExMjU6XHRcdGVudW0gbWhpX2VlX3R5cGUgY3VycmVudF9lZTtcbjExMjY6XHRcdGVudW0gZGV2X3N0X3RyYW5zaXRpb24gbmV4dF9zdGF0ZTtcbjExMjc6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1oaV9jbnRybC1cdTAwM2VtaGlfZGV2LVx1MDAzZWRldjtcbjExMjg6XHRcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xuMTEyOTpcdFx0aW50IHJldCwgaTtcbjExMzA6XHRcbjExMzE6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7UmVxdWVzdGVkIHRvIHBvd2VyIE9OXFxuXCYjMzQ7KTtcbjExMzI6XHRcbjExMzM6XHRcdC8qIFN1cHBseSBkZWZhdWx0IHdha2Ugcm91dGluZXMgaWYgbm90IHByb3ZpZGVkIGJ5IGNvbnRyb2xsZXIgZHJpdmVyICovXG4xMTM0Olx0XHRpZiAoIW1oaV9jbnRybC1cdTAwM2V3YWtlX2dldCB8fCAhbWhpX2NudHJsLVx1MDAzZXdha2VfcHV0IHx8XG4xMTM1Olx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSkge1xuMTEzNjpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9nZXQgPSBtaGlfYXNzZXJ0X2Rldl93YWtlO1xuMTEzNzpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9wdXQgPSBtaGlfZGVhc3NlcnRfZGV2X3dha2U7XG4xMTM4Olx0XHRcdG1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSA9IChtaGlfY250cmwtXHUwMDNlZGJfYWNjZXNzIFx1MDAyNiBNSElfUE1fTTIpID9cbjExMzk6XHRcdFx0XHRtaGlfdG9nZ2xlX2Rldl93YWtlX25vcCA6IG1oaV90b2dnbGVfZGV2X3dha2U7XG4xMTQwOlx0XHR9XG4xMTQxOlx0XG4xMTQyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMTQzOlx0XHRtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUgPSBNSElfUE1fRElTQUJMRTtcbjExNDQ6XHRcbjExNDU6XHRcdC8qIFNldHVwIEJISSBJTlRWRUMgKi9cbjExNDY6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbjExNDc6XHRcdG1oaV93cml0ZV9yZWcobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlYmhpLCBCSElfSU5UVkVDLCAwKTtcbjExNDg6XHRcdG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9QT1I7XG4xMTQ5Olx0XHRtaGlfY250cmwtXHUwMDNlZWUgPSBNSElfRUVfTUFYO1xuMTE1MDpcdFx0Y3VycmVudF9lZSA9IG1oaV9nZXRfZXhlY19lbnYobWhpX2NudHJsKTtcbjExNTE6XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuMTE1MjpcdFxuMTE1MzpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSBkZXZpY2UgaXMgaW4gdmFsaWQgZXhlYyBlbnYgKi9cbjExNTQ6XHRcdGlmICghTUhJX1BPV0VSX1VQX0NBUEFCTEUoY3VycmVudF9lZSkpIHtcbjExNTU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzIGlzIG5vdCBhIHZhbGlkIEVFIGZvciBwb3dlciBvblxcblwmIzM0OyxcbjExNTY6XHRcdFx0XHRUT19NSElfRVhFQ19TVFIoY3VycmVudF9lZSkpO1xuMTE1NzpcdFx0XHRyZXQgPSAtRUlPO1xuMTE1ODpcdFx0XHRnb3RvIGVycm9yX2V4aXQ7XG4xMTU5Olx0XHR9XG4xMTYwOlx0XG4xMTYxOlx0XHRzdGF0ZSA9IG1oaV9nZXRfbWhpX3N0YXRlKG1oaV9jbnRybCk7XG4xMTYyOlx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7QXR0ZW1wdGluZyBwb3dlciBvbiB3aXRoIEVFOiAlcywgc3RhdGU6ICVzXFxuXCYjMzQ7LFxuMTE2MzpcdFx0XHRUT19NSElfRVhFQ19TVFIoY3VycmVudF9lZSksIG1oaV9zdGF0ZV9zdHIoc3RhdGUpKTtcbjExNjQ6XHRcbjExNjU6XHRcdGlmIChzdGF0ZSA9PSBNSElfU1RBVEVfU1lTX0VSUikge1xuMTE2NjpcdFx0XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9SRVNFVCk7XG4xMTY3Olx0XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElDVFJMLFxuMTE2ODpcdFx0XHRcdFx0IE1ISUNUUkxfUkVTRVRfTUFTSywgMCwgaW50ZXJ2YWxfdXMsXG4xMTY5Olx0XHRcdFx0XHQgbWhpX2NudHJsLVx1MDAzZXRpbWVvdXRfbXMpO1xuMTE3MDpcdFx0XHRpZiAocmV0KSB7XG4xMTcxOlx0XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVzZXQgTUhJIGR1ZSB0byBzeXNlcnIgc3RhdGVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdGdvdG8gZXJyb3JfZXhpdDtcbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHQvKlxuMTE3NjpcdFx0XHQgKiBkZXZpY2UgY2xlYXJlcyBJTlRWRUMgYXMgcGFydCBvZiBSRVNFVCBwcm9jZXNzaW5nLFxuMTE3NzpcdFx0XHQgKiByZS1wcm9ncmFtIGl0XG4xMTc4Olx0XHRcdCAqL1xuMTE3OTpcdFx0XHRtaGlfd3JpdGVfcmVnKG1oaV9jbnRybCwgbWhpX2NudHJsLVx1MDAzZWJoaSwgQkhJX0lOVFZFQywgMCk7XG4xMTgwOlx0XHR9XG4xMTgxOlx0XG4xMTgyOlx0XHQvKiBJUlFzIGhhdmUgYmVlbiByZXF1ZXN0ZWQgZHVyaW5nIHByb2JlLCBzbyB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIHRoZW0uICovXG4xMTgzOlx0XHRlbmFibGVfaXJxKG1oaV9jbnRybC1cdTAwM2VpcnFbMF0pO1xuMTE4NDpcdFxuMTE4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWhpX2NudHJsLVx1MDAzZXRvdGFsX2V2X3JpbmdzOyBpJiM0MzsmIzQzOywgbWhpX2V2ZW50JiM0MzsmIzQzOykge1xuMTE4NjpcdFx0XHRpZiAobWhpX2V2ZW50LVx1MDAzZW9mZmxvYWRfZXYpXG4xMTg3Olx0XHRcdFx0Y29udGludWU7XG4xMTg4Olx0XG4xMTg5Olx0XHRcdGVuYWJsZV9pcnEobWhpX2NudHJsLVx1MDAzZWlycVttaGlfZXZlbnQtXHUwMDNlaXJxXSk7XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHQvKiBUcmFuc2l0aW9uIHRvIG5leHQgc3RhdGUgKi9cbjExOTM6XHRcdG5leHRfc3RhdGUgPSBNSElfSU5fUEJMKGN1cnJlbnRfZWUpID9cbjExOTQ6XHRcdFx0REVWX1NUX1RSQU5TSVRJT05fUEJMIDogREVWX1NUX1RSQU5TSVRJT05fUkVBRFk7XG4xMTk1Olx0XG4xMTk2Olx0XHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xuMTE5NzpcdFxuMTE5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMTk5Olx0XG4xMjAwOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O1Bvd2VyIG9uIHNldHVwIHN1Y2Nlc3NcXG5cJiMzNDspO1xuMTIwMTpcdFxuMTIwMjpcdFx0cmV0dXJuIDA7XG4xMjAzOlx0XG4xMjA0Olx0ZXJyb3JfZXhpdDpcbjEyMDU6XHRcdG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xuMTIwNjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMjA3Olx0XG4xMjA4Olx0XHRyZXR1cm4gcmV0O1xuMTIwOTpcdH1cbjEyMTA6XHRFWFBPUlRfU1lNQk9MX0dQTChtaGlfYXN5bmNfcG93ZXJfdXApO1xuMTIxMTpcdFxuMTIxMjpcdHN0YXRpYyB2b2lkIF9fbWhpX3Bvd2VyX2Rvd24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsIGJvb2wgZ3JhY2VmdWwsXG4xMjEzOlx0XHRcdFx0ICAgICBib29sIGRlc3Ryb3lfZGV2aWNlKVxuMTIxNDpcdHtcbjEyMTU6XHRcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZSwgdHJhbnNpdGlvbl9zdGF0ZTtcbjEyMTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1oaV9jbnRybC1cdTAwM2VtaGlfZGV2LVx1MDAzZWRldjtcbjEyMTc6XHRcbjEyMTg6XHRcdG11dGV4X2xvY2soXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX211dGV4KTtcbjEyMTk6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbjEyMjA6XHRcdGN1cl9zdGF0ZSA9IG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3dlci1VcCBTZXF1ZW5jZSoqCgpPa2F5LCBzbyB0aGUgYG1oaV9hc3luY19wb3dlcl91cGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2UgdHJhbnNpdGlvbiB0aGluZ3MsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVucXVldWluZyBlaXRoZXIgYERFVl9TVF9UUkFOU0lUSU9OX1BCTGAgb3IgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkaWN0YXRlIHdoaWNoIG9uZS4gSSBrbm93IGl0JiMzOTtzIHJlYWRpbmcgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1c2luZyBgbWhpX2dldF9leGVjX2VudmAgYW5kIGFsc28gY2hlY2tpbmcgdGhlIG92ZXJhbGwgTUhJIHN0YXRlIHdpdGggYG1oaV9nZXRfbWhpX3N0YXRlYCwgd2hpY2ggaXMgbm9ybWFsLiBUaGUgaW50ZXJlc3RpbmcgYml0IGNvbWVzIHdpdGggdGhlIHN5emthbGxlciBlbXVsYXRpb24uIEJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgUENJIGRldmljZSwgYW5kIHRoZXJlZm9yZSBjb250cm9sIG1lbW9yeS1tYXBwZWQgSS9PLCBpdCBjYW4gZWZmZWN0aXZlbHkgbWFuaXB1bGF0ZSB0aGUgdmFsdWVzIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4uIEkgY2FuIGZlZWQgaXQgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWVzIGFuZCBzZWUgaG93IGl0IHJlYWN0cy4KCkkgc2VlIGEgdnVsbmVyYWJpbGl0eS4gU3l6a2FsbGVyIGNvdWxkIGZvcmNlIGBtaGlfZ2V0X2V4ZWNfZW52YCB0byByZXR1cm4gYE1ISV9FRV9BTVNTYCAoTWlzc2lvbiBNb2RlKSBvciBldmVuIGBNSElfRUVfUEJMYCwgdGhlIHByZS1ib290IGxvYWRlciwgaWYgaXQgd2FudHMuIElmIGl0IHJldHVybnMgYE1ISV9FRV9BTVNTYCwgdGhlIGBuZXh0X3N0YXRlYCB2YXJpYWJsZSBnZXRzIHNldCB0byBgREVWX1NUX1RSQU5TSVRJT05fUkVBRFlgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpbiB0aGUgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYCBzdGF0ZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGF0aCBJIG5lZWQgdG8gZXhhbWluZSBub3cuIFdoYXQgaGFwcGVucyB0aGVyZSwgYW5kIHdoYXQgY2FuIGdvIHdyb25nPyBMZXQmIzM5O3MgdHJhY2UgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX1NUX1RSQU5TSVRJT05fUkVBRFkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD04Mj1lbnVtIGRldl9zdF90cmFuc2l0aW9uIHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtODMtXHRERVZfU1RfVFJBTlNJVElPTl9QQkwsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg0Olx0REVWX1NUX1RSQU5TSVRJT05fUkVBRFksXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVx0REVWX1NUX1RSQU5TSVRJT05fU0JMLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc0OS1cdH0gZWxzZSB7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MDpcdFx0bmV4dF9zdGF0ZSA9IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NTEtXHR9XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ny1cdFx0XHRicmVhaztcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ4Olx0XHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX1JFQURZOlxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDktXHRcdFx0bWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTMtXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTQ6XHRcdERFVl9TVF9UUkFOU0lUSU9OX1BCTCA6IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM4OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGRvbWFpbjoKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBtaGlfcG1fc3Rfd29ya2VyYCBUcmFuc2l0aW9uKioKClJpZ2h0LCBzbyBgbWhpX3BtX3N0X3dvcmtlcmAgaXMgbWFraW5nIGEgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhlIHN0YXRlIHdvcmtlciBpcyBpbml0aWF0aW5nIHNvbWV0aGluZy4mIzM0OyBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBpdHNlbGYsIGBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwpYCwgSSBpbnN0YW50bHkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHN0YXRlIGNoYW5nZS4gSXQgbWVhbnMgd2UmIzM5O3JlIG1vdmluZyB0aGUgTWFuYWdlbWVudCBIb3N0IEludGVyZmFjZSAoTUhJKSBpbnRvIGEgJiMzNDtyZWFkeSYjMzQ7IHN0YXRlLCBvciBhdCBsZWFzdCwgdGhlICpwb3RlbnRpYWwqIGZvciByZWFkaW5lc3MgaXMgYmVpbmcgdHJpZ2dlcmVkLiBJIGFscmVhZHkga25vdyB0aGF0IGBtaGlfY250cmxgIGlzIHRoZSBjb250cm9sIHN0cnVjdHVyZSwgc28gdGhpcyB0cmFuc2l0aW9uIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIE1ISSYjMzk7cyBtYWluIGNvbnRyb2wgZWxlbWVudC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlcjoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyB0cmFuc2l0aW9uPyoqIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiBgbWhpX3BtX3N0X3dvcmtlcmAuIElzIHRoaXMgYmVpbmcgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsIGEgdGltZXIsIG9yIGEgY29tbWFuZCBmcm9tIHRoZSBob3N0PyBVbmRlcnN0YW5kaW5nIHRoZSB0cmlnZ2VyIGlzIHBhcmFtb3VudC4KKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/KiogV2hhdCBoYXBwZW5zICphZnRlciogYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCBpcyBjYWxsZWQ/IEFyZSBpbnRlcnJ1cHRzIGVuYWJsZWQsIGNsb2NrcyBhY3RpdmF0ZWQsIHBvd2VyIGRvbWFpbnMgdHVybmVkIG9uPyBJcyB0aGlzIGEgY29tcGxldGVseSBwYXNzaXZlIHRyYW5zaXRpb24gb3IgYW4gYWN0aXZlIG9uZT8KKiAgICoqV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8qKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNpdGlvbiBpcyBtb25pdG9yZWQgdG8gc2VlIHRoYXQgaXQgd29ya3MgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IHRob3NlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQuCgpUaGUgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIGl0IGlzIGp1c3Qgc2V0dGluZyB0aGUgc3RhdGUsIGJ1dCBJIGNhbiYjMzk7dCBhc3N1bWUuIFNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb25gIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCBwcm9jZXNzIGFuZCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mICpob3cqIHRoZSBNSEkgaXMgcmVhZGllZCBpcyBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBNSEkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdGludCBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3QgbWhpX2V2ZW50ICptaGlfZXZlbnQ7XG4gMTczOlx0XHRlbnVtIG1oaV9wbV9zdGF0ZSBjdXJfc3RhdGU7XG4gMTc0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gMTc1Olx0XHR1MzIgaW50ZXJ2YWxfdXMgPSAyNTAwMDsgLyogcG9sbCByZWdpc3RlciBmaWVsZCBldmVyeSAyNSBtaWxsaXNlY29uZHMgKi9cbiAxNzY6XHRcdHUzMiB0aW1lb3V0X21zO1xuIDE3NzpcdFx0aW50IHJldCwgaTtcbiAxNzg6XHRcbiAxNzk6XHRcdC8qIENoZWNrIGlmIGRldmljZSBlbnRlcmVkIGVycm9yIHN0YXRlICovXG4gMTgwOlx0XHRpZiAoTUhJX1BNX0lOX0ZBVEFMX1NUQVRFKG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSkpIHtcbiAxODE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RldmljZSBsaW5rIGlzIG5vdCBhY2Nlc3NpYmxlXFxuXCYjMzQ7KTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FSU87XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHQvKiBXYWl0IGZvciBSRVNFVCB0byBiZSBjbGVhcmVkIGFuZCBSRUFEWSBiaXQgdG8gYmUgc2V0IGJ5IHRoZSBkZXZpY2UgKi9cbiAxODY6XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElDVFJMLFxuIDE4NzpcdFx0XHRcdFx0IE1ISUNUUkxfUkVTRVRfTUFTSywgMCwgaW50ZXJ2YWxfdXMsXG4gMTg4Olx0XHRcdFx0XHQgbWhpX2NudHJsLVx1MDAzZXRpbWVvdXRfbXMpO1xuIDE4OTpcdFx0aWYgKHJldCkge1xuIDE5MDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlIGZhaWxlZCB0byBjbGVhciBNSEkgUmVzZXRcXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0dGltZW91dF9tcyA9IG1oaV9jbnRybC1cdTAwM2VyZWFkeV90aW1lb3V0X21zID9cbiAxOTU6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXJlYWR5X3RpbWVvdXRfbXMgOiBtaGlfY250cmwtXHUwMDNldGltZW91dF9tcztcbiAxOTY6XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElTVEFUVVMsXG4gMTk3Olx0XHRcdFx0XHQgTUhJU1RBVFVTX1JFQURZX01BU0ssIDEsIGludGVydmFsX3VzLFxuIDE5ODpcdFx0XHRcdFx0IHRpbWVvdXRfbXMpO1xuIDE5OTpcdFx0aWYgKHJldCkge1xuIDIwMDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlIGZhaWxlZCB0byBlbnRlciBNSEkgUmVhZHlcXG5cJiMzNDspO1xuIDIwMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIwMjpcdFx0fVxuIDIwMzpcdFxuIDIwNDpcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O0RldmljZSBpbiBSRUFEWSBTdGF0ZVxcblwmIzM0Oyk7XG4gMjA1Olx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjA2Olx0XHRjdXJfc3RhdGUgPSBtaGlfdHJ5c2V0X3BtX3N0YXRlKG1oaV9jbnRybCwgTUhJX1BNX1BPUik7XG4gMjA3Olx0XHRtaGlfY250cmwtXHUwMDNlZGV2X3N0YXRlID0gTUhJX1NUQVRFX1JFQURZO1xuIDIwODpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoY3VyX3N0YXRlICE9IE1ISV9QTV9QT1IpIHtcbiAyMTE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0Vycm9yIG1vdmluZyB0byBzdGF0ZSAlcyBmcm9tICVzXFxuXCYjMzQ7LFxuIDIxMjpcdFx0XHRcdHRvX21oaV9wbV9zdGF0ZV9zdHIoTUhJX1BNX1BPUiksXG4gMjEzOlx0XHRcdFx0dG9fbWhpX3BtX3N0YXRlX3N0cihjdXJfc3RhdGUpKTtcbiAyMTQ6XHRcdFx0cmV0dXJuIC1FSU87XG4gMjE1Olx0XHR9XG4gMjE2Olx0XG4gMjE3Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDIxODpcdFx0aWYgKCFNSElfUkVHX0FDQ0VTU19WQUxJRChtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUpKSB7XG4gMjE5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgcmVnaXN0ZXJzIG5vdCBhY2Nlc3NpYmxlXFxuXCYjMzQ7KTtcbiAyMjA6XHRcdFx0Z290byBlcnJvcl9tbWlvO1xuIDIyMTpcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0LyogQ29uZmlndXJlIE1NSU8gcmVnaXN0ZXJzICovXG4gMjI0Olx0XHRyZXQgPSBtaGlfaW5pdF9tbWlvKG1oaV9jbnRybCk7XG4gMjI1Olx0XHRpZiAocmV0KSB7XG4gMjI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtFcnJvciBjb25maWd1cmluZyBNTUlPIHJlZ2lzdGVyc1xcblwmIzM0Oyk7XG4gMjI3Olx0XHRcdGdvdG8gZXJyb3JfbW1pbztcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiAyMzA6XHRcdC8qIEFkZCBlbGVtZW50cyB0byBhbGwgU1cgZXZlbnQgcmluZ3MgKi9cbiAyMzE6XHRcdG1oaV9ldmVudCA9IG1oaV9jbnRybC1cdTAwM2VtaGlfZXZlbnQ7XG4gMjMyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaGlfY250cmwtXHUwMDNldG90YWxfZXZfcmluZ3M7IGkmIzQzOyYjNDM7LCBtaGlfZXZlbnQmIzQzOyYjNDM7KSB7XG4gMjMzOlx0XHRcdHN0cnVjdCBtaGlfcmluZyAqcmluZyA9IFx1MDAyNm1oaV9ldmVudC1cdTAwM2VyaW5nO1xuIDIzNDpcdFxuIDIzNTpcdFx0XHQvKiBTa2lwIGlmIHRoaXMgaXMgYW4gb2ZmbG9hZCBvciBIVyBldmVudCAqL1xuIDIzNjpcdFx0XHRpZiAobWhpX2V2ZW50LVx1MDAzZW9mZmxvYWRfZXYgfHwgbWhpX2V2ZW50LVx1MDAzZWh3X3JpbmcpXG4gMjM3Olx0XHRcdFx0Y29udGludWU7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdHJpbmctXHUwMDNld3AgPSByaW5nLVx1MDAzZWJhc2UgJiM0MzsgcmluZy1cdTAwM2VsZW4gLSByaW5nLVx1MDAzZWVsX3NpemU7XG4gMjQwOlx0XHRcdCpyaW5nLVx1MDAzZWN0eHRfd3AgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZWlvbW11X2Jhc2UgJiM0MzsgcmluZy1cdTAwM2VsZW4gLSByaW5nLVx1MDAzZWVsX3NpemUpO1xuIDI0MTpcdFx0XHQvKiBVcGRhdGUgYWxsIGNvcmVzICovXG4gMjQyOlx0XHRcdHNtcF93bWIoKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdFx0LyogUmluZyB0aGUgZXZlbnQgcmluZyBkYiAqL1xuIDI0NTpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1oaV9ldmVudC1cdTAwM2Vsb2NrKTtcbiAyNDY6XHRcdFx0bWhpX3JpbmdfZXJfZGIobWhpX2V2ZW50KTtcbiAyNDc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1oaV9ldmVudC1cdTAwM2Vsb2NrKTtcbiAyNDg6XHRcdH1cbiAyNDk6XHRcbiAyNTA6XHRcdC8qIFNldCBNSEkgdG8gTTAgc3RhdGUgKi9cbiAyNTE6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX00wKTtcbiAyNTI6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdFxuIDI1NjpcdGVycm9yX21taW86XG4gMjU3Olx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjU4Olx0XG4gMjU5Olx0XHRyZXR1cm4gLUVJTztcbiAyNjA6XHR9XG4gMjYxOlx0XG4gMjYyOlx0aW50IG1oaV9wbV9tMF90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuIDI2MzpcdHtcbiAyNjQ6XHRcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcbiAyNjU6XHRcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XG4gMjY2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gMjY3Olx0XHRpbnQgaTtcbiAyNjg6XHRcbiAyNjk6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MjAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1ISSBSZWFkeSBTdGF0ZSBUcmFuc2l0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIE1ISSBjb250cm9sbGVyIHJlYWR5LiBJdCYjMzk7cyBwb2xsaW5nIHR3byByZWdpc3RlcnMsIGBNSElDVFJMX1JFU0VUX01BU0tgIGFuZCBgTUhJU1RBVFVTX1JFQURZX01BU0tgLCBtYWtlcyBzZW5zZS4gVGhlIGtleSBpcyBpbiBob3cgc3l6a2FsbGVyJiMzOTtzIFBDSSBlbXVsYXRvciByZXNwb25kcy4gSWYgaXQgcmV0dXJucyAwIGZvciB0aGUgcmVzZXQgbWFzayBhbmQgMSBmb3IgdGhlIHJlYWR5IG1hc2ssIHRoZSBmdW5jdGlvbiBjb250aW51ZXMuIEdyZWF0LiBUaGVuLCB0aGUgc3lzdGVtIHNldHMgdGhlIE1ISSBzdGF0ZSB0byBgTUhJX1NUQVRFX00wYC4KCldhaXQgYSBtaW51dGUsIGBtaGlfc2V0X21oaV9zdGF0ZWAgaXMgd3JpdGluZyB0byBgTUhJQ1RSTGAgd2hpY2ggd291bGQgYmUgd2hhdCYjMzk7cyBjb250cm9sbGVkIGJ5IHRoZSBQQ0kgZW11bGF0b3IuIFRoYXQmIzM5O3MgYSBnb29kIGNvbm5lY3Rpb24gdG8gbWFrZS4gQnV0LCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgdGhlIHN5c3RlbSByZWFjaGVzIGEgcG9pbnQgdGhhdCBpdCBjYW4gY2hlY2sgdGhpcyBmdW5jdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIHdobyBpcyBxdWV1aW5nIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgPyBUaGlzIHRyYW5zaXRpb24gaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBzdGF0ZSB0aGUgc3lzdGVtIGlzIGluLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIHNldCB1cCBhbmQgcXVldWVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY29taW5nIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTgyPWVudW0gZGV2X3N0X3RyYW5zaXRpb24ge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtODUtXHRERVZfU1RfVFJBTlNJVElPTl9TQkwsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg2Olx0REVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC04Ny1cdERFVl9TVF9UUkFOU0lUSU9OX0ZQLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz03OTk9aW50IG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtOTA1LVx0XHRcdGNhc2UgTUhJX0VFX0FNU1M6XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6OTA2Olx0XHRcdFx0c3QgPSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtOTA3LVx0XHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzNy1cdFx0XHRicmVhaztcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODM4Olx0XHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERTpcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODM5LVx0XHRcdG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihtaGlfY250cmwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQyNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIEV2ZW50IFF1ZXVlKioKClJpZ2h0LCBzbyB0aGlzIG5ldyBldmVudCBpcyBxdWV1ZWQgdXAuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGxhbmRpbmcgaW4gdGhlIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSwgdGhvdWdoIHRoZSBjb250ZXh0IHdvdWxkIGNsYXJpZnkgcHJlY2lzZWx5IHdoaWNoIGltcGxlbWVudGF0aW9uKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgY29udHJvbCBwbGFuZSBvciBldmVudCBoYW5kbGluZyBmb3IgdGhhdCBpbnRlcmZhY2UuIFRoZSAmIzM0O3JpbmcmIzM0OyBlbGVtZW50IHN1Z2dlc3RzIGEgY2lyY3VsYXIgYnVmZmVyIG9yIGEgZGVkaWNhdGVkIHF1ZXVlaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGV4ZWN1dGlvbiBtb2RlbCwgb3IgYXQgbGVhc3QgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTXkgaW1tZWRpYXRlIGxpbmUgb2YgdGhpbmtpbmcgd2lsbCBnbyBkb3duIHRoZSBmb2xsb3dpbmc6CgoqICAgKipVbmRlcnN0YW5kaW5nIHRoZSBFdmVudCBUeXBlKio6IEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgY29udGVudCBvZiB0aGlzIGV2ZW50LiBXaGF0IHBhcmFtZXRlcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBpdD8gV2hhdCBkb2VzIGl0IHNpZ25hbD8gRG9lcyBpdCByZXByZXNlbnQgYSBjb21tYW5kLCBhIHN0YXR1cyB1cGRhdGUsIG9yIGFuIGVycm9yIGNvbmRpdGlvbj8gVGhlIHR5cGUgb2YgZXZlbnQgZGljdGF0ZXMgdGhlIG5lY2Vzc2FyeSByZXNwb25zZSwgd2hpY2ggZGljdGF0ZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMuCiogICAqKkNvbnRleHQgd2l0aGluIHRoZSBTeXN0ZW0qKjogVGhlIE1ISSBpcyBhIGJ1cy4gTXkga25vd2xlZGdlIG9mIHRoZSB3aWRlciBzeXN0ZW0mIzM5O3MgdG9wb2xvZ3kgaXMgbmVjZXNzYXJ5IGhlcmUuIFdoZXJlIGRvZXMgdGhpcyBldmVudCBvcmlnaW5hdGUgYW5kIHdoZXJlIGlzIGl0IGdvaW5nPyBUaGlzIGhlbHBzIHVuZGVyc3RhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY3JpdGljYWwgY29udHJvbCBwYXRoLCBvciBsb3dlciBwcmlvcml0eT8KKiAgICoqUG90ZW50aWFsIEJvdHRsZW5lY2tzKio6IFdpdGggYSBxdWV1ZSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVjayBhcmVhcy4gV2hhdCBpcyB0aGUgcHJvY2Vzc2luZyBsYXRlbmN5IGZvciBldmVudHMgaW4gdGhpcyByaW5nPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHF1ZXVlIG92ZXJmbG93IG9yIHN0YXJ2YXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgbGF0ZW5jeSBmb3Igb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UsIHJlYWwtdGltZSBjb25zdHJhaW50cywgYW5kIHN0YWJpbGl0eT8KKiAgICoqRXJyb3IgSGFuZGxpbmcqKjogTGV0JiMzOTtzIHNlZS4gSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcsIHdoZXJlJiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGlzIHRoZSBxdWV1ZSBwcm90ZWN0ZWQ/IENhbiBpdCBiZSBjb3JydXB0ZWQsIG92ZXJmbG93IG9yIGJlY29tZSBjb3JydXB0ZWQuIERvZXMgaXQgaGF2ZSB0aGUgcmVxdWlyZWQgcHJvdGVjdGlvbiBtZWNoYW5pc21zPwoKU28sIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkaXNzZWN0aW5nIHRoZSBldmVudCBpdHNlbGYgYW5kIG1hcHBpbmcgaXQgb250byB0aGUgbGFyZ2VyIE1ISSBjb250cm9sIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgc3BlY2lmaWMgZXZlbnQmIzM5O3MgaW1wYWN0IGFuZCBuZWNlc3NhcnkgcHJvY2Vzc2luZyBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTk6XHRpbnQgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuIDgwMDpcdFx0XHRcdCAgICAgc3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50LFxuIDgwMTpcdFx0XHRcdCAgICAgdTMyIGV2ZW50X3F1b3RhKVxuIDgwMjpcdHtcbiA4MDM6XHRcdHN0cnVjdCBtaGlfcmluZ19lbGVtZW50ICpkZXZfcnAsICpsb2NhbF9ycDtcbiA4MDQ6XHRcdHN0cnVjdCBtaGlfcmluZyAqZXZfcmluZyA9IFx1MDAyNm1oaV9ldmVudC1cdTAwM2VyaW5nO1xuIDgwNTpcdFx0c3RydWN0IG1oaV9ldmVudF9jdHh0ICplcl9jdHh0ID1cbiA4MDY6XHRcdFx0XHUwMDI2bWhpX2NudHJsLVx1MDAzZW1oaV9jdHh0LVx1MDAzZWVyX2N0eHRbbWhpX2V2ZW50LVx1MDAzZWVyX2luZGV4XTtcbiA4MDc6XHRcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XG4gODA4Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gODA5Olx0XHR1MzIgY2hhbjtcbiA4MTA6XHRcdGludCBjb3VudCA9IDA7XG4gODExOlx0XHRkbWFfYWRkcl90IHB0ciA9IGxlNjRfdG9fY3B1KGVyX2N0eHQtXHUwMDNlcnApO1xuIDgxMjpcdFxuIDgxMzpcdFx0LypcbiA4MTQ6XHRcdCAqIFRoaXMgaXMgYSBxdWljayBjaGVjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBldmVudCBwcm9jZXNzaW5nXG4gODE1Olx0XHQgKiBpbiBjYXNlIE1ISSBpcyBhbHJlYWR5IGluIGVycm9yIHN0YXRlLCBidXQgaXQmIzM5O3Mgc3RpbGwgcG9zc2libGVcbiA4MTY6XHRcdCAqIHRvIHRyYW5zaXRpb24gdG8gZXJyb3Igc3RhdGUgd2hpbGUgcHJvY2Vzc2luZyBldmVudHNcbiA4MTc6XHRcdCAqL1xuIDgxODpcdFx0aWYgKHVubGlrZWx5KE1ISV9FVkVOVF9BQ0NFU1NfSU5WQUxJRChtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUpKSlcbiA4MTk6XHRcdFx0cmV0dXJuIC1FSU87XG4gODIwOlx0XG4gODIxOlx0XHRpZiAoIWlzX3ZhbGlkX3JpbmdfcHRyKGV2X3JpbmcsIHB0cikpIHtcbiA4MjI6XHRcdFx0ZGV2X2VycihcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXYsXG4gODIzOlx0XHRcdFx0XCYjMzQ7RXZlbnQgcmluZyBycCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZXZlbnQgcmluZ1xcblwmIzM0Oyk7XG4gODI0Olx0XHRcdHJldHVybiAtRUlPO1xuIDgyNTpcdFx0fVxuIDgyNjpcdFxuIDgyNzpcdFx0ZGV2X3JwID0gbWhpX3RvX3ZpcnR1YWwoZXZfcmluZywgcHRyKTtcbiA4Mjg6XHRcdGxvY2FsX3JwID0gZXZfcmluZy1cdTAwM2VycDtcbiA4Mjk6XHRcbiA4MzA6XHRcdHdoaWxlIChkZXZfcnAgIT0gbG9jYWxfcnApIHtcbiA4MzE6XHRcdFx0ZW51bSBtaGlfcGt0X3R5cGUgdHlwZSA9IE1ISV9UUkVfR0VUX0VWX1RZUEUobG9jYWxfcnApO1xuIDgzMjpcdFxuIDgzMzpcdFx0XHR0cmFjZV9taGlfY3RybF9ldmVudChtaGlfY250cmwsIGxvY2FsX3JwKTtcbiA4MzQ6XHRcbiA4MzU6XHRcdFx0c3dpdGNoICh0eXBlKSB7XG4gODM2Olx0XHRcdGNhc2UgTUhJX1BLVF9UWVBFX0JXX1JFUV9FVkVOVDpcbiA4Mzc6XHRcdFx0e1xuIDgzODpcdFx0XHRcdHN0cnVjdCBtaGlfbGlua19pbmZvICpsaW5rX2luZm87XG4gODM5Olx0XG4gODQwOlx0XHRcdFx0bGlua19pbmZvID0gXHUwMDI2bWhpX2NudHJsLVx1MDAzZW1oaV9saW5rX2luZm87XG4gODQxOlx0XHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDg0MjpcdFx0XHRcdGxpbmtfaW5mby1cdTAwM2V0YXJnZXRfbGlua19zcGVlZCA9XG4gODQzOlx0XHRcdFx0XHRNSElfVFJFX0dFVF9FVl9MSU5LU1BFRUQobG9jYWxfcnApO1xuIDg0NDpcdFx0XHRcdGxpbmtfaW5mby1cdTAwM2V0YXJnZXRfbGlua193aWR0aCA9XG4gODQ1Olx0XHRcdFx0XHRNSElfVFJFX0dFVF9FVl9MSU5LV0lEVEgobG9jYWxfcnApO1xuIDg0NjpcdFx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDg0NzpcdFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtSZWNlaXZlZCBCV19SRVEgZXZlbnRcXG5cJiMzNDspO1xuIDg0ODpcdFx0XHRcdG1oaV9jbnRybC1cdTAwM2VzdGF0dXNfY2IobWhpX2NudHJsLCBNSElfQ0JfQldfUkVRKTtcbiA4NDk6XHRcdFx0XHRicmVhaztcbiA4NTA6XHRcdFx0fVxuIDg1MTpcdFx0XHRjYXNlIE1ISV9QS1RfVFlQRV9TVEFURV9DSEFOR0VfRVZFTlQ6XG4gODUyOlx0XHRcdHtcbiA4NTM6XHRcdFx0XHRlbnVtIG1oaV9zdGF0ZSBuZXdfc3RhdGU7XG4gODU0Olx0XG4gODU1Olx0XHRcdFx0bmV3X3N0YXRlID0gTUhJX1RSRV9HRVRfRVZfU1RBVEUobG9jYWxfcnApO1xuIDg1NjpcdFxuIDg1NzpcdFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtTdGF0ZSBjaGFuZ2UgZXZlbnQgdG8gc3RhdGU6ICVzXFxuXCYjMzQ7LFxuIDg1ODpcdFx0XHRcdFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcbiA4NTk6XHRcbiA4NjA6XHRcdFx0XHRzd2l0Y2ggKG5ld19zdGF0ZSkge1xuIDg2MTpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00wOlxuIDg2MjpcdFx0XHRcdFx0bWhpX3BtX20wX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDg2NDpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00xOlxuIDg2NTpcdFx0XHRcdFx0bWhpX3BtX20xX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4NjY6XHRcdFx0XHRcdGJyZWFrO1xuIDg2NzpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00zOlxuIDg2ODpcdFx0XHRcdFx0bWhpX3BtX20zX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4Njk6XHRcdFx0XHRcdGJyZWFrO1xuIDg3MDpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX1NZU19FUlI6XG4gODcxOlx0XHRcdFx0e1xuIDg3MjpcdFx0XHRcdFx0ZW51bSBtaGlfcG1fc3RhdGUgcG1fc3RhdGU7XG4gODczOlx0XG4gODc0Olx0XHRcdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7U3lzdGVtIGVycm9yIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiA4NzU6XHRcdFx0XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiA4NzY6XHRcdFx0XHRcdHBtX3N0YXRlID0gbWhpX3RyeXNldF9wbV9zdGF0ZShtaGlfY250cmwsXG4gODc3Olx0XHRcdFx0XHRcdFx0XHRNSElfUE1fU1lTX0VSUl9ERVRFQ1QpO1xuIDg3ODpcdFx0XHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gODc5Olx0XHRcdFx0XHRpZiAocG1fc3RhdGUgPT0gTUhJX1BNX1NZU19FUlJfREVURUNUKVxuIDg4MDpcdFx0XHRcdFx0XHRtaGlfcG1fc3lzX2Vycl9oYW5kbGVyKG1oaV9jbnRybCk7XG4gODgxOlx0XHRcdFx0XHRicmVhaztcbiA4ODI6XHRcdFx0XHR9XG4gODgzOlx0XHRcdFx0ZGVmYXVsdDpcbiA4ODQ6XHRcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHN0YXRlOiAlc1xcblwmIzM0OyxcbiA4ODU6XHRcdFx0XHRcdFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcbiA4ODY6XHRcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdFx0YnJlYWs7XG4gODg5Olx0XHRcdH1cbiA4OTA6XHRcdFx0Y2FzZSBNSElfUEtUX1RZUEVfQ01EX0NPTVBMRVRJT05fRVZFTlQ6XG4gODkxOlx0XHRcdFx0bWhpX3Byb2Nlc3NfY21kX2NvbXBsZXRpb24obWhpX2NudHJsLCBsb2NhbF9ycCk7XG4gODkyOlx0XHRcdFx0YnJlYWs7XG4gODkzOlx0XHRcdGNhc2UgTUhJX1BLVF9UWVBFX0VFX0VWRU5UOlxuIDg5NDpcdFx0XHR7XG4gODk1Olx0XHRcdFx0ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiBzdCA9IERFVl9TVF9UUkFOU0lUSU9OX01BWDtcbiA4OTY6XHRcdFx0XHRlbnVtIG1oaV9lZV90eXBlIGV2ZW50ID0gTUhJX1RSRV9HRVRfRVZfRVhFQ0VOVihsb2NhbF9ycCk7XG4gODk3Olx0XG4gODk4Olx0XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1JlY2VpdmVkIEVFIGV2ZW50OiAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgTmV3IFdXQU4gQ29kZSBpbiBNSEkgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoaXMgbmV3IFdXQU4gZnVuY3Rpb25hbGl0eSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGJ5IHN5emthbGxlci4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZ2AgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgdGhlIE1ISSBjb250cm9sIGV2ZW50IHJpbmcuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQsIHJpZ2h0PwoKVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHN5emthbGxlciBlbXVsYXRlcyBhIFBDSSBkZXZpY2UsIHdoaWNoIHRoZW4gaWRlYWxseSB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQsIG1hcHBpbmcgdGhlIGV2ZW50IHJpbmcgd2l0aCBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBjb250YWluaW5nIGBNSElfRUVfQU1TU2AuIFRoaXMgZXZlbnQgdGhlbiBxdWV1ZXMgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoZSBrZXJuZWwgdGhlbiBjYWxscyBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCwgYW5kIHRoZSBjcnV4IG9mIGl0IGFsbCwgYG1oaV9jcmVhdGVfZGV2aWNlc2AsIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjcmVhdGVzIE1ISSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBjaGFubmVscyBkZWZpbmVkIGluIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYElQX0NUUkxgIGNoYW5uZWxzLCBtZWFuaW5nIHRoYXQgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgUENJIGRldmljZSBtYXRjaGluZyB0aGUgU2llcnJhIEVNOTE5eCBJRCAodGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jYCksIHRoZSBzeXN0ZW0gd2lsbCB1c2UgYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gU28sIGBtaGlfY3JlYXRlX2RldmljZXNgIGNyZWF0ZXMgYW4gYElQX0NUUkxgIGRldmljZS4gRnJvbSB0aGVyZSwgYG1oaV93d2FuX2R0cl9wcm9iZWAgaXMgY2FsbGVkIHRvIHJlZ2lzdGVyIHRoaXMgZGV2aWNlLgoKTm93LCBpZiBzeXprYWxsZXIgdGhlbiBvcGVucyBhIFdXQU4gQVQgcG9ydCAocG90ZW50aWFsbHkgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybF9wcm9iZWAgZm9yIGNoYW5uZWxzIGxpa2UgYERVTmAgb3IgYE1CSU1gKSwgd2UgaGl0IGBtaGlfd3dhbl9jdHJsX2R0cl9ydHNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBjcmVhdGVzIFdXQU4gcG9ydHMgZm9yIGBEVU5gLCBgTUJJTWAsIGV0Yy4gSWYgc3l6a2FsbGVyIGNyZWF0ZXMgdGhlIGBEVU5gIGNoYW5uZWwgZGV2aWNlLCB0aGVuIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBpcyBjYWxsZWQuIFRoYXQgbWFrZXMgYSBXV0FOIHBvcnQhIFRoZW4gc3l6a2FsbGVyIGNhbiBvcGVuIHRoaXMgcG9ydCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgd3dhbl9wb3J0X29wX3N0YXJ0YCBhbmQgZmluYWxseSwgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AuIFRoaXMgaW4gdHVybiBjYWxscyBgbWhpX3d3YW5fY3RybF9kdHJfcnRzYCwgd2hpY2ggZW5kcyB1cCBjYWxsaW5nIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYC4gVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBidWZmZXIgdG8gdGhlIGBJUF9DVFJMYCBjaGFubmVsIGRldmljZSB1c2luZyBgbWhpX3F1ZXVlX2J1ZmAuCgpTbywgdGhlIGVudGlyZSBmbG93IGhpbmdlcyBvbiBzeXprYWxsZXIgKnN1Y2Nlc3NmdWxseSogZW11bGF0aW5nIHRoZSBNSEkgUENJIGRldmljZSBhbmQgaXRzIGV2ZW50IHJpbmdzLiBCdXQgZG9lcyBpdD8gVGhlIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHN5emthbGxlciBjYW4gbWFwIEJBUnMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cywgYnV0IGl0IGRvZXNuJiMzOTt0IHVuZGVyc3RhbmQgdGhlIE1ISSBldmVudCByaW5nIG1lbW9yeSBsYXlvdXQuIFRoZSBNSEkgaG9zdCBkcml2ZXIgYWxsb2NhdGVzIHRoZSBldmVudCByaW5nIG1lbW9yeSBhbmQgY29tbXVuaWNhdGVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gdGhlIGRldmljZSB2aWEgTU1JTyByZWdpc3RlcnMuIFRoZSBkZXZpY2UgKG9yIGVtdWxhdG9yKSBpcyBzdXBwb3NlZCB0byB3cml0ZSBNSEkgZXZlbnRzIHRvIHRoZXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFRoZSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24mIzM5O3QgcmVhZCB0aGVzZSBNTUlPIHJlZ2lzdGVycyB0byBmaW5kIHRoZSBldmVudCByaW5nIGFkZHJlc3Nlcy4gTmVpdGhlciBkb2VzIGl0IHdyaXRlIHRoZSBNSEkgZXZlbnRzLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBNSElfUEtUX1RZUEVfRUVfRVZFTlRgIG9yIGFueSBvdGhlciBNSEkgZXZlbnRzLiBTaW5jZSB3ZSBjYW5ub3QgZ2VuZXJhdGUgTUhJIGV2ZW50cywgYG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZ2Agd29uJiMzOTt0IGRldGVjdCBhbnl0aGluZywgYW5kIHRoZSBmbG93IGNvbXBsZXRlbHkgYnJlYWtzIGRvd24uIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgIGlzbiYjMzk7dCBxdWV1ZWQuIE5vIGRldmljZXMgZ2V0IGNyZWF0ZWQsIG5vIFdXQU4gcG9ydHMgYXJlIG1hZGUsIGFuZCB0aGUgbmV3IGNvZGUgaW4gYHd3YW5fY29yZS5jYCBhbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCldhaXQsIGFyZSB0aGVyZSBhbHRlcm5hdGl2ZSByb3V0ZXMgdG8gZ2V0IFdXQU4gcG9ydHM/IEkgcmVtZW1iZXIgYHd3YW5faHdzaW0uY2AgY3JlYXRpbmcgdGhlbS4gQnV0LCBjaGVja2luZyBiYWNrIGluIHRoYXQgcGF0aCwgaXQgZG9lcyAqbm90KiBzZXQgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AuIFNvLCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb25zIHdvdWxkIG5vdCBiZSByZWFjaGVkIHRocm91Z2ggdGhpcyBtZWFucyBlaXRoZXIuIE9rYXksIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGUgb3RoZXIgZHJpdmVycyBpbiBjYXNlIHRoZXkgYXJlIHNldHRpbmcgYGR0cl9ydHNgLCBidXQgbXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGV5IHdpbGwgbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kdHJfcnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYz0yNDA9c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5fcG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDMtXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0Olx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBEVFIvUlRTIGNoZWNraW5nIGxvZ2ljIHdpdGhpbiBgd3dhbl9jb3JlLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcG9ydHMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBjb25zdHJhaW50LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1oaV93d2FuX2N0cmwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIE1ISSBkZXZpY2VzLCBhbmQgdGhlc2UgYXJlbiYjMzk7dCB5b3VyIHJ1bi1vZi10aGUtbWlsbCBQQ0kgZGV2aWNlcy4gVGhleSBkZW1hbmQgc29waGlzdGljYXRlZCBETUEgYW5kIHJpbmcgaW50ZXJhY3Rpb25zLCBzb21ldGhpbmcgc3l6a2FsbGVyJiMzOTtzIGdlbmVyaWMgUENJIGVtdWxhdG9yIGp1c3QgaXNuJiMzOTt0IGJ1aWx0IHRvIGhhbmRsZS4gVGh1cywgdGhlIGNvbmRpdGlvbiBmb3IgdGhpcyBjaGVjayB0byBiZSBldmFsdWF0ZWQgaXMgdGhhdCB0aGUgcG9ydCB3YXMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYCwgYW5kIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQsIHN5emthbGxlci1kcml2ZW4gZW52aXJvbm1lbnQuIFRoaXMgY29kZSBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZS4KCkJ1dCBJJiMzOTttIGEgYml0IG9mIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgc28gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoZXJlJiMzOTtzICpubyogb3RoZXIgcm91dGUgdG8gY2FsbGluZyBgbWhpX3d3YW5fY3RybF9wcm9iZWAuIENhbiBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgZGV2aWNlcyBkaXJlY3RseSBvbnRvIHRoZSBgbWhpYCBidXM/IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIHN5c2ZzIG9yIGFueXRoaW5nIHNpbWlsYXIgY291bGQgb2ZmZXIgYSBiYWNrZG9vci4gR290dGEgcnVsZSBvdXQgZXZlcnkgcG9zc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9hbGxvY19kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTkxOT1pbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXHQvKiBSZWdpc3RlciBjb250cm9sbGVyIHdpdGggTUhJIGJ1cyAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjEwMTA6XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMTEtXHRpZiAoSVNfRVJSKG1oaV9kZXYpKSB7XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTEyMDg9c3RhdGljIHZvaWQgbWhpX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMjI3OnN0cnVjdCBtaGlfZGV2aWNlICptaGlfYWxsb2NfZGV2aWNlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEyMjgte1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBtaGlfZGVidWdmc19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjMxOTpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTMyMC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9MzYzPXZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6Mzc1Olx0XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM3Ni1cdFx0aWYgKElTX0VSUihtaGlfZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBNSEkgRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIGBtaGlfYWxsb2NfZGV2aWNlYCBzZWVtcyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IHNvbWV0aGluZyBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZS4gVGhhdCBlbGltaW5hdGVzIHRoZSBtb3N0IG9idmlvdXMgcG90ZW50aWFsIHNvdXJjZS4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIGRyaXZlcihzKSBhcmUgYWN0dWFsbHkgcmVzcG9uc2libGUgZm9yICpjcmVhdGluZyogTUhJIGRldmljZXMgaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gaG93IHRoZXNlIE1ISSBob3N0IGRldmljZXMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQuCgpMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIE1ISSBlbmRwb2ludCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgZHJpdmVycy9idXMvbWhpL2VwL2A/IFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgdG8gZG8gd2l0aCBNSEkgZW5kcG9pbnQgZGV2aWNlcy4gQnV0LCBubywgd2FpdC4uLiB0aGF0IGZyYW1ld29yayBmb2N1c2VzIG9uICplbmRwb2ludCogZGV2aWNlcy4gSSYjMzk7bSBsb29raW5nIGZvciBob3N0IGRldmljZXMgaGVyZSwgdGhlIG9uZXMgdGhhdCAqaG9zdCogdGhlIE1ISSBjb21tdW5pY2F0aW9uLgoKSGFuZyBvbi4uLiBpcyB0aGVyZSBhIGxvb3BiYWNrIGRyaXZlciBmb3IgTUhJLCBwZXJoYXBzPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkgSSBoYWRuJiMzOTt0IGNvbnNpZGVyZWQuIEEgbG9vcGJhY2sgY291bGQgYmUgY3JlYXRpbmcgYSB2aXJ0dWFsIE1ISSBob3N0LCBmb3IgdGVzdGluZyBvciBvdGhlciBwdXJwb3Nlcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgYW5nbGUuIEl0JiMzOTtzIGEga2V5IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfcmVnaXN0ZXJfY29udHJvbGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxuLS1cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNi0qIEluaXRpYXRlcyBwb3dlciBvbiBhbmQgc2h1dGRvd24gc2VxdWVuY2Vcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyOC1cdFx0XHRcdFx0XHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSlcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXHRtaGlfY29uZmlnLnRpbWVvdXRfbXMgPSBtaGlfdGltZW91dF9tcztcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXHUwMDI2bWhpX2NvbmZpZyk7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXHRpZiAocmV0KSB7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Nzg6XHRcdHBjaV9lcnIocGNpX2RldiwgXCYjMzQ7bWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaDo5OnN0cnVjdCBtaGlfY29udHJvbGxlciAqcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgdm9pZCBfX2lvbWVtICptaGlfYmFyLFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXHRcdFx0XHRcdFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTU3MD1zdGF0aWMgaW50IHFhaWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6NTk3Olx0cWRldi1cdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXHUwMDNlYmFyX21oaSwgbWhpX2lycSxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cdFx0XHRcdFx0XHQgICAgICAgcWRldi1cdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXHUwMDNlZmFtaWx5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MjAtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTA1NzpFWFBPUlRfU1lNQk9MX0dQTChtaGlfcmVnaXN0ZXJfY29udHJvbGxlcik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzNjM9c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNDM4Olx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTE4Nz1pbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoyNjU6XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC0zODEtICogRmllbGRzIG1hcmtlZCBhcyAocmVxdWlyZWQpIG5lZWQgdG8gYmUgcG9wdWxhdGVkIGJ5IHRoZSBjb250cm9sbGVyIGRyaXZlclxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0NS0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU1MS1cdFx0XHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODczNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aXRob3V0IGFuIE1ISSBkZXZpY2UsIGFuZCB0aGF0IG9ubHkgaGFwcGVucyBpZiB0aGUgTUhJIGNvbnRyb2xsZXIgaW5pdGlhbGl6ZXMgYW5kIGVudGVycyBtaXNzaW9uIG1vZGUuIFRoYXQgbWlzc2lvbiBtb2RlIHRyYW5zaXRpb24gcmVsaWVzIG9uIHJlY2VpdmluZyBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCB3aXRoIGBNSElfRUVfQU1TU2AgaW4gaXRzIGV2ZW50IHJpbmcsIHdoaWNoIHRoZSBoYXJkd2FyZSBwb3B1bGF0ZXMgdmlhIERNQS4gQ3J1Y2lhbGx5LCB0aGUgZ2VuZXJpYyBQQ0kgZW11bGF0b3IgaW4gc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGUgTUhJIHByb3RvY29sLCBzbyBpdCAqd29uJiMzOTt0KiBwb3B1bGF0ZSB0aGlzIGV2ZW50IHJpbmcgY29ycmVjdGx5LiAgU28sIG5vIG1pc3Npb24gbW9kZSwgbm8gTUhJIGRldmljZSwgYW5kLCBjb25zZXF1ZW50bHksIG5vdGhpbmcgaW4gYG1oaV93d2FuX2N0cmwuY2Agb3IgaXRzIGludGVyYWN0aW9ucyB3aXRoIGB3d2FuX2NvcmUuY2Agd2lsbCBoYXBwZW4uCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYW55IG9mIHRoZSBgd3dhbl9jb3JlLmNgIGNoYW5nZXMgY2FuIGJlIGhpdCAqYW5vdGhlciogd2F5LiBUaGUgY2hhbmdlIGluIGB3d2FuX3BvcnRfb3Bfc3RhcnRgIGluY2x1ZGVzIGEgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AgY2hlY2suIEFzIEkgcmVjYWxsLCBvbmx5IGBtaGlfd3dhbl9jdHJsLmNgIHNldHMgYGR0cl9ydHNgLiBUaGF0IGNvZGUgYmxvY2sgcmFpc2VzIERUUi9SVFMgb24gdGhlIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydC4gU2luY2UgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBiZWluZyBzZXQsIHdoaWNoIGlzIE1ISS1zcGVjaWZpYywgaXQmIzM5O3MgdW5yZWFjaGFibGUuCgpPa2F5LCB3aGF0IGFib3V0IGB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bGA/IFRoYXQgc2VjdGlvbiBjb250YWlucyB0aGUgRFRSL1JUUyBpb2N0bCBjYWxscywgYW5kIGFsc28gZGVwZW5kcyBvbiBgcG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzYC4gVGhpcyBpcyBhbHNvIGdhdGVkIGJ5IHRoZSBzYW1lIGBkdHJfcnRzYCBwb2ludGVyIHNldCBieSB0aGUgdW5yZWFjaGFibGUgYG1oaV93d2FuX2N0cmwuY2AgY29kZS4KClNvLCB0aGUgZW50aXJlIGZ1bmN0aW9uYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgcG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzYCwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBgbWhpX3d3YW5fY3RybC5jYCwgd2hpY2ggcmVxdWlyZXMgYW4gTUhJIGRldmljZSwgd2hpY2ggaXNuJiMzOTt0IHBvc3NpYmxlIGluIGEgc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgc2ltcGx5IGltcG9zc2libGUgdG8gaGl0LgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc3BlY2lmaWVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIE1ISSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoUXVhbGNvbW0gbW9kZW1zKSBhbmQgdGhlcmUmIzM5O3Mgbm8ga2VybmVsLXNpZGUgc29mdHdhcmUgTUhJIGVtdWxhdG9yLCB1bmxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgd3dhbl9od3NpbWAsIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuIFN0aWxsLCBJIHNob3VsZCBjaGVjayB0aGUgbGF0dGVyIGFnYWluLi4uIGp1c3QgaW4gY2FzZSBJIG1pc3NlZCBhbnkgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHRyX3J0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzNzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqV1dBTiBEcml2ZXIgRGVlcCBEaXZlKioKCkhtbSwgcmlnaHQsIEkgd2FzIGp1c3QgZG91YmxlLWNoZWNraW5nIHRoZSBgd3dhbl9od3NpbS5jYCBjb2RlLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IGl0IGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzZXR0aW5nIG9mIGBkdHJfcnRzYC4gVGhhdCYjMzk7cyBub3QgaXRzIHJlc3BvbnNpYmlsaXR5LiBJdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGFzcGVjdCwgbm90IHRoZSBoaWdoZXItbGV2ZWwgbW9kZW0gY29udHJvbCBzaWduYWxzLgoKU28sIHdoZXJlICppcyogdGhhdCBoYW5kbGVkIHRoZW4/IEkgbmVlZCB0byB0aGluayBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgV1dBTiBkcml2ZXJzIGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGluIGFub3RoZXIgc2VjdGlvbiwgbGlrZWx5IGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBtb2RlbSBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhIG1vcmUgZ2VuZXJhbGl6ZWQgZnJhbWV3b3JrIG9yIGFic3RyYWN0aW9uIGxheWVyIGRlYWxpbmcgd2l0aCB0aG9zZSBjb250cm9sIHNpZ25hbHMuIEkgbmVlZCB0byBzdGFydCB0aGlua2luZyBhYm91dCB3aGljaCBvZiB0aG9zZSBmcmFtZXdvcmtzIG9yIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYGR0cl9ydHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdHJfcnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYz0xMzU9c3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4sIHVuc2lnbmVkIGludCBtZG1iaXRzKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3Ny1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jOjE3ODpzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbilcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jOjI0NDpcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQ1LX07XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03NDI9c3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc2NS1cdFx0aWYgKHBvcnQtXHUwMDNlc3RhcnRfY291bnQgPT0gMSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6NzY2Olx0XHQgICAgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy03NjctXHRcdFx0cG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3Njg6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCB0cnVlKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY5LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03Nzg9c3RhdGljIHZvaWQgd3dhbl9wb3J0X29wX3N0b3Aoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4My1cdFx0LyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IGRyb3AgRFRSL1JUUyBvbiBsYXN0IGNsb3NlIG9mIGFuIEFUIHBvcnQgKi9cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6Nzg0Olx0XHRpZiAocG9ydC1cdTAwM2VvcHMgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpIHtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzg1LVx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3ODY6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4Ny1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9OTkxPXN0YXRpYyBsb25nIHd3YW5fcG9ydF9mb3BzX2F0X2lvY3RsKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUwLVx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzID0gbWRtYml0cztcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTA1MTpcdFx0aWYgKHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTI6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUzLVx0XHRcdFx0XHQgICAhIShwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyBcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1NjUKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtaGlfd3dhbl9jdHJsLmNgIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGFmdGVyIGRpZ2dpbmcgaW50byB0aGlzLCBJJiMzOTt2ZSBjb25maXJtZWQgc29tZXRoaW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhlIGBkdHJfcnRzYCBzZXR0aW5nIGlzICpvbmx5KiB0b3VjaGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0LCBjb3VwbGVkIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgbGVhZHMgbWUgdG8gYSBwcmV0dHkgc29saWQgY29uY2x1c2lvbjogdGhlc2UgY2hhbmdlcyBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhleSYjMzk7cmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbiYjMzk7dCBlbXVsYXRlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgd2FudGVkIHRvIHNlZSBpZiBzeXprYWxsZXIgY291bGQgc29tZWhvdyBzbmVhayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCBwZXJoYXBzIGJ5IGRpcmVjdGx5IGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfcHJvYmVgIG9yIHNvbWUgc2ltaWxhciBmdW5jdGlvbi4gQnV0LCBubywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGludm9rZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zLiBJdCB3b3JrcyBieSBnZW5lcmF0aW5nIGRldmljZXMgKFBDSSwgVVNCLCBldGMuKSBhbmQgYWxsb3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBkcml2ZXIgY29yZSB0byBoYW5kbGUgdGhlIGJpbmRpbmcuIFNpbmNlIHN5emthbGxlciBjYW4mIzM5O3Qgc2ltdWxhdGUgb3IgY3JlYXRlIGFuIE1ISSBkZXZpY2UsIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aWxsIG5ldmVyIGdldCBjYWxsZWQuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gTUhJIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjAyNjEwODI1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDg5NjY1OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjAyNjExNDg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDQwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkzZjYyNmY0YmYyZmVlMjBlMDM2MzkwMWVkMzhmYTYzYmUzOTlmNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXFxuaW5kZXggMGQwZDljN2ZmYTRiZi4uYmE0N2RkMTUzODM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xcbkBAIC03MjgsNiArNzI4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaGlfY2hhbm5lbF9jb25maWcgbWhpX3NpZXJyYV9lbTkxOXhfY2hhbm5lbHNbXSA9IHtcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDEzLCBcXFwiTUJJTVxcXCIsIDEyOCwgMCksXFxuIFxcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxNCwgXFxcIlFNSVxcXCIsIDMyLCAwKSxcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDE1LCBcXFwiUU1JXFxcIiwgMzIsIDApLFxcbitcXHRNSElfQ0hBTk5FTF9DT05GSUdfVUwoMTgsIFxcXCJJUF9DVFJMXFxcIiwgMzIsIDApLFxcbitcXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTksIFxcXCJJUF9DVFJMXFxcIiwgMzIsIDApLFxcbiBcXHRNSElfQ0hBTk5FTF9DT05GSUdfVUwoMzIsIFxcXCJEVU5cXFwiLCAzMiwgMCksXFxuIFxcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgXFxcIkRVTlxcXCIsIDMyLCAwKSxcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0hXX1VMKDEwMCwgXFxcIklQX0hXMFxcXCIsIDUxMiwgMSksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcXG5pbmRleCBhMzFkODU0MGZiYjg1Li4zYWVmOTBlYzIxNzY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcXG5AQCAtMSw4ICsxLDEyIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFxcdTAwM2Nsb2ljLnBvdWxhaW5AbGluYXJvLm9yZ1xcdTAwM2UgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWhpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90ZXJtaW9zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93d2FuLmhcXHUwMDNlXFxuIFxcbiAvKiBNSEkgd3dhbiBmbGFncyAqL1xcbkBAIC0xNCw2ICsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHtcXG4gXFxuICNkZWZpbmUgTUhJX1dXQU5fTUFYX01UVVxcdDB4ODAwMFxcbiBcXG4rLyogSVBfQ1RSTCBjaGFubmVsIG1lc3NhZ2UgdGhhdCBzZXRzIHRoZSBtb2RlbSdzIERUUi9SVFMgY29udHJvbCBsaW5lcyAqL1xcbitzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7XFxuK1xcdF9fbGUzMiBwcmVhbWJsZTtcXG4rXFx0X19sZTMyIG1zZ19pZDtcXG4rXFx0X19sZTMyIGRlc3RfaWQ7XFxuK1xcdF9fbGUzMiBzaXplO1xcbitcXHRfX2xlMzIgbXNnO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUNcXHQweDRDNTI1NDQzXFx0LyogJ0NUUkwnICovXFxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfUlRTXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXFx0MHgxMFxcbitcXG4rLyogUGVyLWNvbnRyb2xsZXIgSVBfQ1RSTCBjaGFubmVsLCB1c2VkIHRvIHNpZ25hbCBEVFIvUlRTIHRvIHRoYXQgbW9kZW0gKi9cXG4rc3RydWN0IG1oaV93d2FuX2R0ciB7XFxuK1xcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7XFxuK1xcdHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuK307XFxuK1xcbitzdGF0aWMgTElTVF9IRUFEKG1oaV93d2FuX2R0cl9saXN0KTtcXG4rc3RhdGljIERFRklORV9NVVRFWChtaGlfd3dhbl9kdHJfbG9jayk7XFxuK1xcbiBzdHJ1Y3QgbWhpX3d3YW5fZGV2IHtcXG4gXFx0LyogTG93ZXIgbGV2ZWwgaXMgYSBtaGkgZGV2LCB1cHBlciBsZXZlbCBpcyBhIHd3YW4gcG9ydCAqL1xcbiBcXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcXG5AQCAtMTAzLDYgKzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0fVxcbiB9XFxuIFxcbisvKiBTaWduYWwgdGhlIG1vZGVtJ3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlcidzIElQX0NUUkwgY2hhbm5lbCAqL1xcbitzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpXFxuK3tcXG4rXFx0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXFx1MDAzZW1oaV9kZXYtXFx1MDAzZW1oaV9jbnRybDtcXG4rXFx0c3RydWN0IG1oaV9kZXZpY2UgKmN0cmxfZGV2ID0gTlVMTDtcXG4rXFx0c3RydWN0IG1oaV9kdHJfY3RybF9tc2cgKmR0cl9tc2c7XFxuK1xcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjtcXG4rXFx0dTMyIG1zZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHRyLCBcXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QsIG5vZGUpIHtcXG4rXFx0XFx0aWYgKGR0ci1cXHUwMDNlY250cmwgPT0gY250cmwpIHtcXG4rXFx0XFx0XFx0Y3RybF9kZXYgPSBkdHItXFx1MDAzZW1oaV9kZXY7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKCFjdHJsX2RldilcXG4rXFx0XFx0cmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi9cXG4rXFxuK1xcdGR0cl9tc2cgPSBremFsbG9jX29iaigqZHRyX21zZyk7XFxuK1xcdGlmICghZHRyX21zZylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAobWRtYml0cyBcXHUwMDI2IFRJT0NNX0RUUilcXG4rXFx0XFx0bXNnIHw9IE1ISV9EVFJfTVNHX0RUUjtcXG4rXFx0aWYgKG1kbWJpdHMgXFx1MDAyNiBUSU9DTV9SVFMpXFxuK1xcdFxcdG1zZyB8PSBNSElfRFRSX01TR19SVFM7XFxuK1xcbitcXHRkdHJfbXNnLVxcdTAwM2VwcmVhbWJsZSA9IGNwdV90b19sZTMyKE1ISV9EVFJfQ1RSTF9NQUdJQyk7XFxuK1xcdGR0cl9tc2ctXFx1MDAzZW1zZ19pZCA9IGNwdV90b19sZTMyKE1ISV9EVFJfSE9TVF9TVEFURSk7XFxuK1xcdGR0cl9tc2ctXFx1MDAzZWRlc3RfaWQgPSBjcHVfdG9fbGUzMihtaGl3d2FuLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2V1bF9jaGFuX2lkKTtcXG4rXFx0ZHRyX21zZy1cXHUwMDNlc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihfX2xlMzIpKTtcXG4rXFx0ZHRyX21zZy1cXHUwMDNlbXNnID0gY3B1X3RvX2xlMzIobXNnKTtcXG4rXFxuK1xcdHJldCA9IG1oaV9xdWV1ZV9idWYoY3RybF9kZXYsIERNQV9UT19ERVZJQ0UsIGR0cl9tc2csIHNpemVvZigqZHRyX21zZyksXFxuK1xcdFxcdFxcdCAgICBNSElfRU9UKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a2ZyZWUoZHRyX21zZyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbilcXG4re1xcbitcXHRtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KSxcXG4rXFx0XFx0XFx0ICAgICAgIG9uID8gVElPQ01fRFRSIHwgVElPQ01fUlRTIDogMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4gPSB3d2FuX3BvcnRfZ2V0X2RydmRhdGEocG9ydCk7XFxuQEAgLTE2Myw2ICsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbiBcXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxcbiBcXHQuc3RvcCA9IG1oaV93d2FuX2N0cmxfc3RvcCxcXG4gXFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcXG4rXFx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBtaGlfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG5AQCAtMjU1LDYgKzMzNCw1OSBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlbW92ZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldilcXG4gXFx0a2ZyZWUobWhpd3dhbik7XFxuIH1cXG4gXFxuKy8qIElQX0NUUkwgY2hhbm5lbCBkcml2ZXIsIGJvdW5kIHNlcGFyYXRlbHkgc28gdGhlIGRhdGEtcG9ydCBwYXRoIGlzIHVudG91Y2hlZCAqL1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KVxcbit7XFxuK1xcdC8qIE1ISSBjb3JlIGhhcyBkb25lIHdpdGggdGhlIGJ1ZmZlciwgcmVsZWFzZSBpdCAqL1xcbitcXHRrZnJlZShtaGlfcmVzdWx0LVxcdTAwM2VidWZfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1oaV9yZXN1bHQgKm1oaV9yZXN1bHQpXFxuK3tcXG4rXFx0LyogTW9kZW0gc2VyaWFsIHN0YXRlIGlzIG5vdCBuZWVkZWQsIGRyb3AgaXQgKi9cXG4rfVxcbitcXG4rc3RhdGljIGludCBtaGlfd3dhbl9kdHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkdHIgPSBremFsbG9jX29iaigqZHRyKTtcXG4rXFx0aWYgKCFkdHIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gbWhpX3ByZXBhcmVfZm9yX3RyYW5zZmVyKG1oaV9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGtmcmVlKGR0cik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGR0ci1cXHUwMDNlY250cmwgPSBtaGlfZGV2LVxcdTAwM2VtaGlfY250cmw7XFxuK1xcdGR0ci1cXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWhpX2Rldi1cXHUwMDNlZGV2LCBkdHIpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2ZHRyLVxcdTAwM2Vub2RlLCBcXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfcmVtb3ZlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0ciA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWhpX2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNmR0ci1cXHUwMDNlbm9kZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xcbitcXG4rXFx0bWhpX3VucHJlcGFyZV9mcm9tX3RyYW5zZmVyKG1oaV9kZXYpO1xcbitcXHRrZnJlZShkdHIpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fY3RybF9tYXRjaF90YWJsZVtdID0ge1xcbiBcXHR7IC5jaGFuID0gXFxcIkRVTlxcXCIsIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LFxcbiBcXHR7IC5jaGFuID0gXFxcIkRVTjJcXFwiLCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcXG5AQCAtMjc4LDcgKzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1tb2R1bGVfbWhpX2RyaXZlcihtaGlfd3dhbl9jdHJsX2RyaXZlcik7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGVbXSA9IHtcXG4rXFx0eyAuY2hhbiA9IFxcXCJJUF9DVFJMXFxcIiB9LFxcbitcXHR7fSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fZHRyX2RyaXZlciA9IHtcXG4rXFx0LmlkX3RhYmxlID0gbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlLFxcbitcXHQucmVtb3ZlID0gbWhpX3d3YW5fZHRyX3JlbW92ZSxcXG4rXFx0LnByb2JlID0gbWhpX3d3YW5fZHRyX3Byb2JlLFxcbitcXHQudWxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl91bF94ZmVyX2NiLFxcbitcXHQuZGxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJtaGlfd3dhbl9kdHJcXFwiLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgbWhpX3d3YW5fY3RybF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbittb2R1bGVfaW5pdChtaGlfd3dhbl9jdHJsX2luaXQpO1xcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IG1oaV93d2FuX2N0cmxfZXhpdCh2b2lkKVxcbit7XFxuK1xcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xcbitcXHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbit9XFxuK21vZHVsZV9leGl0KG1oaV93d2FuX2N0cmxfZXhpdCk7XFxuIFxcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTUhJIFdXQU4gQ1RSTCBEcml2ZXJcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcXG5pbmRleCBmZmJjZjExZTRlNjgxLi5mOGNhOWNkYTNjOWFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXFxuQEAgLTc1OSw4ICs3NTksMTUgQEAgc3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4gXFx0aWYgKCFwb3J0LVxcdTAwM2VzdGFydF9jb3VudClcXG4gXFx0XFx0cmV0ID0gcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydChwb3J0KTtcXG4gXFxuLVxcdGlmICghcmV0KVxcbitcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRwb3J0LVxcdTAwM2VzdGFydF9jb3VudCsrO1xcbitcXHRcXHQvKiBNaXJyb3IgVFRZIHNlbWFudGljczogcmFpc2UgRFRSL1JUUyBvbiBmaXJzdCBvcGVuIG9mIGFuIEFUIHBvcnQgKi9cXG4rXFx0XFx0aWYgKHBvcnQtXFx1MDAzZXN0YXJ0X2NvdW50ID09IDEgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cykge1xcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTO1xcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2VvcHNfbG9jayk7XFxuQEAgLTc3Myw2ICs3ODAsMTEgQEAgc3RhdGljIHZvaWQgd3dhbl9wb3J0X29wX3N0b3Aoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlb3BzX2xvY2spO1xcbiBcXHRwb3J0LVxcdTAwM2VzdGFydF9jb3VudC0tO1xcbiBcXHRpZiAoIXBvcnQtXFx1MDAzZXN0YXJ0X2NvdW50KSB7XFxuK1xcdFxcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovXFxuK1xcdFxcdGlmIChwb3J0LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKSB7XFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyBcXHUwMDI2PSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7XFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKHBvcnQtXFx1MDAzZW9wcylcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VzdG9wKHBvcnQpO1xcbiBcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnBvcnQtXFx1MDAzZXJ4cSk7XFxuQEAgLTEwMzYsNiArMTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gbWRtYml0cztcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgPSBtZG1iaXRzO1xcbitcXHRcXHRpZiAocG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKVxcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgISEocG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKFRJT0NNX0RUUiB8IFRJT0NNX1JUUykpKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmhcXG5pbmRleCAxZTBlMmNiNTM1Nzk5Li5hNzY4NDk1MGQ3M2IwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvd3dhbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC93d2FuLmhcXG5AQCAtNTcsNiArNTcsOCBAQCBzdHJ1Y3Qgd3dhbl9wb3J0O1xcbiAgKiBAdHhfYmxvY2tpbmc6IE9wdGlvbmFsIGJsb2NraW5nIHJvdXRpbmUgdGhhdCBzZW5kcyBXV0FOIHBvcnQgcHJvdG9jb2wgZGF0YVxcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXFxuICAqIEB0eF9wb2xsOiBPcHRpb25hbCByb3V0aW5lIHRoYXQgc2V0cyBhZGRpdGlvbmFsIFRYIHBvbGwgZmxhZ3MuXFxuKyAqIEBkdHJfcnRzOiBPcHRpb25hbCByb3V0aW5lIHRoYXQgYXNzZXJ0cyAob249dHJ1ZSkgb3IgZGUtYXNzZXJ0cyAob249ZmFsc2UpXFxuKyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy5cXG4gICpcXG4gICogVGhlIHd3YW5fcG9ydF9vcHMgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBvZiBsb3ctbGV2ZWwgb3BlcmF0aW9uc1xcbiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC5cXG5AQCAtNzAsNiArNzIsNyBAQCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB7XFxuIFxcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFx0X19wb2xsX3QgKCp0eF9wb2xsKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xcbitcXHR2b2lkICgqZHRyX3J0cykoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbik7XFxuIH07XFxuIFxcbiAvKiogc3RydWN0IHd3YW5fcG9ydF9jYXBzIC0gVGhlIFdXQU4gcG9ydCBjYXBiaWxpdGllc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODoxMS40MzkxMjIwMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzQ0ODM2MzE1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5M2Y2MjZmNGJmMmZlZTIwZTAzNjM5MDFlZDM4ZmE2M2JlMzk5ZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYyBiL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmNcbmluZGV4IDBkMGQ5YzdmZmE0YmYuLmJhNDdkZDE1MzgzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG5AQCAtNzI4LDYgKzcyOCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2NoYW5uZWxfY29uZmlnIG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzW10gPSB7XG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTMsIFwiTUJJTVwiLCAxMjgsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX1VMKDE0LCBcIlFNSVwiLCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTUsIFwiUU1JXCIsIDMyLCAwKSxcbitcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgXCJJUF9DVFJMXCIsIDMyLCAwKSxcbitcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxOSwgXCJJUF9DVFJMXCIsIDMyLCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgzMiwgXCJEVU5cIiwgMzIsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDMzLCBcIkRVTlwiLCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfSFdfVUwoMTAwLCBcIklQX0hXMFwiLCA1MTIsIDEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcbmluZGV4IGEzMWQ4NTQwZmJiODUuLjNhZWY5MGVjMjE3NjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcbkBAIC0xLDggKzEsMTIgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFx1MDAzY2xvaWMucG91bGFpbkBsaW5hcm8ub3JnXHUwMDNlICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3d3YW4uaFx1MDAzZVxuIFxuIC8qIE1ISSB3d2FuIGZsYWdzICovXG5AQCAtMTQsNiArMTgsMzAgQEAgZW51bSBtaGlfd3dhbl9mbGFncyB7XG4gXG4gI2RlZmluZSBNSElfV1dBTl9NQVhfTVRVXHQweDgwMDBcbiBcbisvKiBJUF9DVFJMIGNoYW5uZWwgbWVzc2FnZSB0aGF0IHNldHMgdGhlIG1vZGVtJ3MgRFRSL1JUUyBjb250cm9sIGxpbmVzICovXG4rc3RydWN0IG1oaV9kdHJfY3RybF9tc2cge1xuK1x0X19sZTMyIHByZWFtYmxlO1xuK1x0X19sZTMyIG1zZ19pZDtcbitcdF9fbGUzMiBkZXN0X2lkO1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMzIgbXNnO1xuK30gX19wYWNrZWQ7XG4rXG4rI2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUNcdDB4NEM1MjU0NDNcdC8qICdDVFJMJyAqL1xuKyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSXHRcdEJJVCgwKVxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfUlRTXHRcdEJJVCgxKVxuKyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXHQweDEwXG4rXG4rLyogUGVyLWNvbnRyb2xsZXIgSVBfQ1RSTCBjaGFubmVsLCB1c2VkIHRvIHNpZ25hbCBEVFIvUlRTIHRvIHRoYXQgbW9kZW0gKi9cbitzdHJ1Y3QgbWhpX3d3YW5fZHRyIHtcbitcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7XG4rXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcbit9O1xuK1xuK3N0YXRpYyBMSVNUX0hFQUQobWhpX3d3YW5fZHRyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfTVVURVgobWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuIHN0cnVjdCBtaGlfd3dhbl9kZXYge1xuIFx0LyogTG93ZXIgbGV2ZWwgaXMgYSBtaGkgZGV2LCB1cHBlciBsZXZlbCBpcyBhIHd3YW4gcG9ydCAqL1xuIFx0c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXY7XG5AQCAtMTAzLDYgKzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdH1cbiB9XG4gXG4rLyogU2lnbmFsIHRoZSBtb2RlbSdzIERUUi9SVFMgbGluZXMgb3ZlciBpdHMgb3duIGNvbnRyb2xsZXIncyBJUF9DVFJMIGNoYW5uZWwgKi9cbitzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpXG4re1xuK1x0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXHUwMDNlbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4rXHRzdHJ1Y3QgbWhpX2RldmljZSAqY3RybF9kZXYgPSBOVUxMO1xuK1x0c3RydWN0IG1oaV9kdHJfY3RybF9tc2cgKmR0cl9tc2c7XG4rXHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XG4rXHR1MzIgbXNnID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkdHIsIFx1MDAyNm1oaV93d2FuX2R0cl9saXN0LCBub2RlKSB7XG4rXHRcdGlmIChkdHItXHUwMDNlY250cmwgPT0gY250cmwpIHtcbitcdFx0XHRjdHJsX2RldiA9IGR0ci1cdTAwM2VtaGlfZGV2O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoIWN0cmxfZGV2KVxuK1x0XHRyZXR1cm4gMDsgLyogSVBfQ1RSTCBub3QgZW51bWVyYXRlZDsgYmVzdC1lZmZvcnQsIG5vdCBhbiBlcnJvciAqL1xuK1xuK1x0ZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTtcbitcdGlmICghZHRyX21zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAobWRtYml0cyBcdTAwMjYgVElPQ01fRFRSKVxuK1x0XHRtc2cgfD0gTUhJX0RUUl9NU0dfRFRSO1xuK1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX1JUUylcbitcdFx0bXNnIHw9IE1ISV9EVFJfTVNHX1JUUztcbitcbitcdGR0cl9tc2ctXHUwMDNlcHJlYW1ibGUgPSBjcHVfdG9fbGUzMihNSElfRFRSX0NUUkxfTUFHSUMpO1xuK1x0ZHRyX21zZy1cdTAwM2Vtc2dfaWQgPSBjcHVfdG9fbGUzMihNSElfRFRSX0hPU1RfU1RBVEUpO1xuK1x0ZHRyX21zZy1cdTAwM2VkZXN0X2lkID0gY3B1X3RvX2xlMzIobWhpd3dhbi1cdTAwM2VtaGlfZGV2LVx1MDAzZXVsX2NoYW5faWQpO1xuK1x0ZHRyX21zZy1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpO1xuK1x0ZHRyX21zZy1cdTAwM2Vtc2cgPSBjcHVfdG9fbGUzMihtc2cpO1xuK1xuK1x0cmV0ID0gbWhpX3F1ZXVlX2J1ZihjdHJsX2RldiwgRE1BX1RPX0RFVklDRSwgZHRyX21zZywgc2l6ZW9mKCpkdHJfbXNnKSxcbitcdFx0XHQgICAgTUhJX0VPVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRrZnJlZShkdHJfbXNnKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2N0cmxfZHRyX3J0cyhzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBib29sIG9uKVxuK3tcbitcdG1oaV93d2FuX2N0cmxfc2VuZF9kdHIod3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpLFxuK1x0XHRcdCAgICAgICBvbiA/IFRJT0NNX0RUUiB8IFRJT0NNX1JUUyA6IDApO1xuK31cbitcbiBzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgbWhpX3d3YW5fZGV2ICptaGl3d2FuID0gd3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpO1xuQEAgLTE2Myw2ICsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xuIFx0LnN0YXJ0ID0gbWhpX3d3YW5fY3RybF9zdGFydCxcbiBcdC5zdG9wID0gbWhpX3d3YW5fY3RybF9zdG9wLFxuIFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcbitcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgbWhpX3VsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG5AQCAtMjU1LDYgKzMzNCw1OSBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlbW92ZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldilcbiBcdGtmcmVlKG1oaXd3YW4pO1xuIH1cbiBcbisvKiBJUF9DVFJMIGNoYW5uZWwgZHJpdmVyLCBib3VuZCBzZXBhcmF0ZWx5IHNvIHRoZSBkYXRhLXBvcnQgcGF0aCBpcyB1bnRvdWNoZWQgKi9cbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdClcbit7XG4rXHQvKiBNSEkgY29yZSBoYXMgZG9uZSB3aXRoIHRoZSBidWZmZXIsIHJlbGVhc2UgaXQgKi9cbitcdGtmcmVlKG1oaV9yZXN1bHQtXHUwMDNlYnVmX2FkZHIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfZGxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdClcbit7XG4rXHQvKiBNb2RlbSBzZXJpYWwgc3RhdGUgaXMgbm90IG5lZWRlZCwgZHJvcCBpdCAqL1xuK31cbitcbitzdGF0aWMgaW50IG1oaV93d2FuX2R0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCAqaWQpXG4re1xuK1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyO1xuK1x0aW50IHJldDtcbitcbitcdGR0ciA9IGt6YWxsb2Nfb2JqKCpkdHIpO1xuK1x0aWYgKCFkdHIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbWhpX3ByZXBhcmVfZm9yX3RyYW5zZmVyKG1oaV9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShkdHIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0ZHRyLVx1MDAzZWNudHJsID0gbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4rXHRkdHItXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XG4rXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWhpX2Rldi1cdTAwM2VkZXYsIGR0cik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNmR0ci1cdTAwM2Vub2RlLCBcdTAwMjZtaGlfd3dhbl9kdHJfbGlzdCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpXG4re1xuK1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2ZHRyLVx1MDAzZW5vZGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbitcbitcdG1oaV91bnByZXBhcmVfZnJvbV90cmFuc2ZlcihtaGlfZGV2KTtcbitcdGtmcmVlKGR0cik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7XG4gXHR7IC5jaGFuID0gXCJEVU5cIiwgLmRyaXZlcl9kYXRhID0gV1dBTl9QT1JUX0FUIH0sXG4gXHR7IC5jaGFuID0gXCJEVU4yXCIsIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LFxuQEAgLTI3OCw3ICs0MTAsNDUgQEAgc3RhdGljIHN0cnVjdCBtaGlfZHJpdmVyIG1oaV93d2FuX2N0cmxfZHJpdmVyID0ge1xuIFx0fSxcbiB9O1xuIFxuLW1vZHVsZV9taGlfZHJpdmVyKG1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7XG4rXHR7IC5jaGFuID0gXCJJUF9DVFJMXCIgfSxcbitcdHt9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBtaGlfZHJpdmVyIG1oaV93d2FuX2R0cl9kcml2ZXIgPSB7XG4rXHQuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsXG4rXHQucmVtb3ZlID0gbWhpX3d3YW5fZHRyX3JlbW92ZSxcbitcdC5wcm9iZSA9IG1oaV93d2FuX2R0cl9wcm9iZSxcbitcdC51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsXG4rXHQuZGxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcIm1oaV93d2FuX2R0clwiLFxuK1x0fSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG1oaV93d2FuX2N0cmxfaW5pdCh2b2lkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBtaGlfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rbW9kdWxlX2luaXQobWhpX3d3YW5fY3RybF9pbml0KTtcbitcbitzdGF0aWMgdm9pZCBfX2V4aXQgbWhpX3d3YW5fY3RybF9leGl0KHZvaWQpXG4re1xuK1x0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbitcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbit9XG4rbW9kdWxlX2V4aXQobWhpX3d3YW5fY3RybF9leGl0KTtcbiBcbiBNT0RVTEVfTElDRU5TRShcIkdQTCB2MlwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJNSEkgV1dBTiBDVFJMIERyaXZlclwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jIGIvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuY1xuaW5kZXggZmZiY2YxMWU0ZTY4MS4uZjhjYTljZGEzYzlhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbkBAIC03NTksOCArNzU5LDE1IEBAIHN0YXRpYyBpbnQgd3dhbl9wb3J0X29wX3N0YXJ0KHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4gXHRpZiAoIXBvcnQtXHUwMDNlc3RhcnRfY291bnQpXG4gXHRcdHJldCA9IHBvcnQtXHUwMDNlb3BzLVx1MDAzZXN0YXJ0KHBvcnQpO1xuIFxuLVx0aWYgKCFyZXQpXG4rXHRpZiAoIXJldCkge1xuIFx0XHRwb3J0LVx1MDAzZXN0YXJ0X2NvdW50Kys7XG4rXHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiByYWlzZSBEVFIvUlRTIG9uIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydCAqL1xuK1x0XHRpZiAocG9ydC1cdTAwM2VzdGFydF9jb3VudCA9PSAxIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gV1dBTl9QT1JUX0FUIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuK1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUztcbitcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKHBvcnQsIHRydWUpO1xuK1x0XHR9XG4rXHR9XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbkBAIC03NzMsNiArNzgwLDExIEBAIHN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlb3BzX2xvY2spO1xuIFx0cG9ydC1cdTAwM2VzdGFydF9jb3VudC0tO1xuIFx0aWYgKCFwb3J0LVx1MDAzZXN0YXJ0X2NvdW50KSB7XG4rXHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovXG4rXHRcdGlmIChwb3J0LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuK1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpO1xuK1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCwgZmFsc2UpO1xuK1x0XHR9XG4gXHRcdGlmIChwb3J0LVx1MDAzZW9wcylcbiBcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VzdG9wKHBvcnQpO1xuIFx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2cG9ydC1cdTAwM2VyeHEpO1xuQEAgLTEwMzYsNiArMTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IG1kbWJpdHM7XG4gXHRcdGVsc2VcbiBcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyA9IG1kbWJpdHM7XG4rXHRcdGlmIChwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKVxuK1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCxcbitcdFx0XHRcdFx0ICAgISEocG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgXHUwMDI2XG4rXHRcdFx0XHRcdCAgICAgIChUSU9DTV9EVFIgfCBUSU9DTV9SVFMpKSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmhcbmluZGV4IDFlMGUyY2I1MzU3OTkuLmE3Njg0OTUwZDczYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC93d2FuLmhcbkBAIC01Nyw2ICs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7XG4gICogQHR4X2Jsb2NraW5nOiBPcHRpb25hbCBibG9ja2luZyByb3V0aW5lIHRoYXQgc2VuZHMgV1dBTiBwb3J0IHByb3RvY29sIGRhdGFcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXG4gICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy5cbisgKiBAZHRyX3J0czogT3B0aW9uYWwgcm91dGluZSB0aGF0IGFzc2VydHMgKG9uPXRydWUpIG9yIGRlLWFzc2VydHMgKG9uPWZhbHNlKVxuKyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy5cbiAgKlxuICAqIFRoZSB3d2FuX3BvcnRfb3BzIHN0cnVjdHVyZSBjb250YWlucyBhIGxpc3Qgb2YgbG93LWxldmVsIG9wZXJhdGlvbnNcbiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC5cbkBAIC03MCw2ICs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHtcbiBcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcdF9fcG9sbF90ICgqdHhfcG9sbCkoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xuK1x0dm9pZCAoKmR0cl9ydHMpKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pO1xuIH07XG4gXG4gLyoqIHN0cnVjdCB3d2FuX3BvcnRfY2FwcyAtIFRoZSBXV0FOIHBvcnQgY2FwYmlsaXRpZXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjQzOTEyNDEzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDYyOTAwNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IERUUi9SVFMgU2lnbmFsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBEVFIvUlRTIHNpZ25hbGluZyBzdXBwb3J0IG92ZXIgYW4gYElQX0NUUkxgIE1ISSBjaGFubmVsLiBUaGV5J3JlIHRvdWNoaW5nIGBtaGlfd3dhbl9jdHJsLmNgLCBgd3dhbl9jb3JlLmNgLCBhbmQgYHBjaV9nZW5lcmljLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGZhaXJseSBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlOlxuXG4qICAgQWRkZWQgYElQX0NUUkxgIHRvIGBtaGlfc2llcnJhX2VtOTE5eF9jaGFubmVsc2AuIE1ha2VzIHNlbnNlLCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgY2hhbm5lbC5cbiogICBJbnRyb2R1Y2VkIGEgbmV3IGBtaGlfd3dhbl9kdHJfZHJpdmVyYCBmb3IgaGFuZGxpbmcgdGhlIGBJUF9DVFJMYCBjaGFubmVsIGluIGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLCBlbmNhcHN1bGF0aW5nIHRoZSBjb250cm9sIGxvZ2ljLlxuKiAgIEltcGxlbWVudGVkIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYCBhbmQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBEVFIvUlRTIHNpZ25hbHMuIEdvb2QsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG4qICAgTW9kaWZpZWQgYHd3YW5fY29yZS5jYCB0byBjYWxsIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCB3aGVuIGFuIEFUIHBvcnQgaXMgb3BlbmVkL2Nsb3NlZCBvciB2aWEgaW9jdGwuIFRoaXMgaXMgdGhlIGludGVncmF0aW9uIHBvaW50IHdpdGhpbiB0aGUgV1dBTiBjb3JlLiBNYWtlcyBzZW5zZSBmb3IgaG93IHRoZSBXV0FOIGNvcmUgbWFuYWdlcyB0aGUgbW9kZW0gY29ubmVjdGlvbi5cblxuVGhlIHJlYWwgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBpcyB3aGV0aGVyIHRoaXMgd2lsbCBldmVuIHdvcmsgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIFdXQU4gY29yZSBpcyBvYnZpb3VzbHkgcmVhY2hhYmxlLCB0aGF0J3Mgbm90IHRoZSBwcm9ibGVtLiBCdXQgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGlzIGEgZHJpdmVyIGZvciBNSEkgZGV2aWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGVtdWxhdGUgb3IgY3JlYXRlIE1ISSBkZXZpY2VzIGluIHNvZnR3YXJlLiBDYW4gd2UgZXZlbiBzaW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgYSBNSEkgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNSEkgaXMsIG9mIGNvdXJzZSwgYSBRdWFsY29tbSBtb2RlbSB0aGluZywgc28gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gY3JlYXRlIGEgc29mdHdhcmUgTUhJIGRldmljZSBmb3IgdGVzdGluZy4gTGV0IG1lIGNoZWNrIGZvciB0aGF0Li4uIExldCdzIHNlYXJjaCBmb3IgXCJNSEkgZGV2aWNlIGNyZWF0aW9uXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODoyOS41MDIwMjg0NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMzg5ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfYWxsb2NfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXFx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTAxMDpcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyOC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzIwLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcXHRcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXFx0XFx0aWYgKElTX0VSUihtaGlfZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6MzEuNTA1OTMyNzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNTk0ODI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNSEkgQ29udHJvbGxlciBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTUhJIGRldmljZXMsIGFuZCBpdCdzIGNsZWFyIHRoZXkncmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB0aHJvdWdoIGFuIE1ISSBob3N0IGNvbnRyb2xsZXIuIEJ1dCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBpcyB0aGlzIGFsd2F5cyBhIGhhcmR3YXJlIHRoaW5nPyBJIG1lYW4sIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGVkaWNhdGVkIHNpbGljb24gY29tcG9uZW50LCBvciBjb3VsZCB0aGlzIGhvc3QgY29udHJvbGxlciBhbHNvIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlPyBJdCdzIGEgdmFsaWQgcXVlc3Rpb24sIHdvcnRoIGV4cGxvcmluZy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUbyBmaW5kIG91dCwgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCB3b3VsZCByZWdpc3RlciB0aGUgY29udHJvbGxlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYC4gVGhhdCBzaG91bGQgZWl0aGVyIGxlYWQgbWUgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpdCB3b3JrcyBvciBlbGltaW5hdGUgc29tZSBhdmVudWVzLiBUaGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIGNsdWUgaW4gdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6MzYuMjExODgzMzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTA2ODkwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0PTIwPUJlbG93IGFyZSB0aGUgcm9sZXMgb2YgdGhlIE1ISSBjb250cm9sbGVyIGRyaXZlcjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xcbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdDoyNTogIHdpdGggY2hhbm5lbCBhbmQgZXZlbnQgY29uZmlndXJhdGlvbnMgdXNpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIuXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0LTI2LSogSW5pdGlhdGVzIHBvd2VyIG9uIGFuZCBzaHV0ZG93biBzZXF1ZW5jZVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM9ODAwPXN0YXRpYyBpbnQgbWhpX3Jlc2V0X2FuZF9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Mjc6c3RydWN0IG1oaV9jb250cm9sbGVyICpxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB2b2lkIF9faW9tZW0gKm1oaV9iYXIsXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgbWhpX2lycSwgYm9vbCBzaGFyZWRfbXNpLCBpbnQgZmFtaWx5KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc1LVxcdG1oaV9jb25maWcudGltZW91dF9tcyA9IG1oaV90aW1lb3V0X21zO1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIFxcdTAwMjZtaGlfY29uZmlnKTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3ODpcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJtaGlfcmVnaXN0ZXJfY29udHJvbGxlciBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaC04LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oOjk6c3RydWN0IG1oaV9jb250cm9sbGVyICpxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB2b2lkIF9faW9tZW0gKm1oaV9iYXIsXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM9NTcwPXN0YXRpYyBpbnQgcWFpY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5Ni1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo1OTc6XFx0cWRldi1cXHUwMDNlbWhpX2NudHJsID0gcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihwZGV2LCBxZGV2LVxcdTAwM2ViYXJfbWhpLCBtaGlfaXJxLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcWRldi1cXHUwMDNlc2luZ2xlX21zaSwgY29uZmlnLVxcdTAwM2VmYW1pbHkpO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTg4MT1zdGF0aWMgaW50IHBhcnNlX2NvbmZpZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjkxOTppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTkyMC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwNTYtfVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMDU3OkVYUE9SVF9TWU1CT0xfR1BMKG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM9MTM2Mz1zdGF0aWMgaW50IG1oaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzNy1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE0Mzg6XFx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE0MzktXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM9MzM1PWludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cXHRhYl9wY2ktXFx1MDAzZW1oaV9wcmVfY2IgPSBNSElfQ0JfSU5WQUxJRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYXRoMTFrX21oaV9jb25maWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtNDExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTg3PWludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTI2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjI2NTpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oLTM4MS0gKiBGaWVsZHMgbWFya2VkIGFzIChyZXF1aXJlZCkgbmVlZCB0byBiZSBwb3B1bGF0ZWQgYnkgdGhlIGNvbnRyb2xsZXIgZHJpdmVyXFxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTM4My0gKiB0aGV5IGNhbiBiZSBwb3B1bGF0ZWQgZGVwZW5kaW5nIG9uIHRoZSB1c2VjYXNlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ1LS8qKlxcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0Ny0gKiBAbWhpX2NudHJsOiBNSEkgY29udHJvbGxlciB0byByZWdpc3Rlclxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXFxuaW5jbHVkZS9saW51eC9taGkuaDo1NTA6aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTUxLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjM3LjkyMjU3OTA0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjg5OTExMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ISSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBhbmQgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBNSEkgY29udHJvbGxlcnMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgc2VlIHNldmVyYWwgZHJpdmVycyByZXNwb25zaWJsZTogYHFhaWNfZHJ2LmNgLCBgcGNpX2dlbmVyaWMuY2AsIGFuZCB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIEFsbCBvZiB0aGVzZSBhcmUgUENJIGRyaXZlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyBNSEkgaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgb3ZlciBQQ0kuIEhtbSwgaXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBNSEkgaXRzZWxmPyBObywgbm90IGRpcmVjdGx5LiBUaGF0J3MgY29uZmlybWVkLlxuXG5SaWdodCwgYHBjaV9nZW5lcmljLmNgICppcyogYSBQQ0kgZHJpdmVyLCBzbyB0aGF0J3MgYSBrZXkgcGllY2UuIE5vdywgY2FuIHdlIGxldmVyYWdlIHN5emthbGxlciB0byBmdXp6IE1ISSBkZXZpY2VzPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGBzeXpfcGNpX3NldHVwYCwgSSByZW1lbWJlciB0aGF0IG5vdy4gQnV0IGl0IGRvZXNuJ3QgKmRpcmVjdGx5KiBlbXVsYXRlIE1ISS4gSXQgY2FuIGVtdWxhdGUgKlBDSSogZGV2aWNlcy5cblxuU28sIHRoZSBzdHJhdGVneSBiZWNvbWVzOiBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uIGRlZmluZWQgaW4gYHBjaV9nZW5lcmljLmNgLCB0aGVuIGl0IHNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGFuIE1ISSBjb250cm9sbGVyLiBUaGF0J3MgdGhlIGxpbmsuIE5leHQgc3RlcCBpcyB0byBmaW5kIG91dCB3aGF0IFBDSSBJRHMgYG1oaV9wY2lfcHJvYmVgIGFjdHVhbGx5IGJpbmRzIHRvLiBHb3R0YSBjaGVjayB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODo0OC4yMTI0OTIxNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4Njc3MDAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcGNpX2lkX3RhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM9OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyBtaGlfbmV0cHJpc21hX2ZjdW42OV9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy05NDktLyogS2VlcCB0aGUgbGlzdCBzb3J0ZWQgYmFzZWQgb24gdGhlIFBJRC4gTmV3IFZJRCBzaG91bGQgYmUgYWRkZWQgYXMgdGhlIGxhc3QgZW50cnkgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjk1MDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWhpX3BjaV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtOTUxLVxcdHtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUNPTSwgMHgwMTE2KSxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4NC19O1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTA4NTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWhpX3BjaV9pZF90YWJsZSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMDg2LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xNzY0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtaGlfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE3NjUtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJtaGktcGNpLWdlbmVyaWNcXFwiLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTc2NjpcXHQuaWRfdGFibGVcXHQ9IG1oaV9wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNzY3LVxcdC5wcm9iZVxcdFxcdD0gbWhpX3BjaV9wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NDkuNzk5MjY5MjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTIxOTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNSEkgYW5kIFN5emthbGxlcjogQSBRdWljayBJbnF1aXJ5KipcblxuT2theSwgc28gU3l6a2FsbGVyIGhhcyBQQ0kgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggaXMgZ3JlYXQuIEJ1dCBNSEkuLi4gTUhJIGlzIGEgYmVhc3QuIEl0J3MgYnVpbHQgb24gdG9wIG9mIFBDSSwgYnV0IHdpdGggdGhpcyB3aG9sZSByaW5nIGFuZCBkb29yYmVsbCBzeXN0ZW07IGl0J3MgcXVpdGUgaW50cmljYXRlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIG9mZmVyIGEgZGVkaWNhdGVkIE1ISSBlbXVsYXRvcj8gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHByb3RvY29sLCBpdCdzIG5vdCBhIGdpdmVuLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gTUhJLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgYW5zd2VyIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgcmVhZGlseSBhdmFpbGFibGUgb3IgYSBwb3RlbnRpYWwgcmVzZWFyY2ggcHJvamVjdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NTMuNzYwNDkxODU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxOTY1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9saW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NTMuODA4ODE5MTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NzM1OTEyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNSEkgRGV2aWNlIFNjZW5hcmlvKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSB3YXMgYWJvdXQgdG8gdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBmb3IgYHN5cy9saW51eGAsIGJ1dCB0aGF0J3Mgbm90IHJpZ2h0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIg4oCTIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aG9zZSBzeXprYWxsZXIgc3BlY2lmaWMgc3l6bGFuZyBkZXNjcmlwdGlvbnMuIFRoZSBwcm9ibGVtIGlzLCBuZWl0aGVyIG9mIHRob3NlIHRvb2xzIGFyZSBhY3R1YWxseSBpbiBteSBjdXJyZW50IHRvb2xzZXQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcm9hZGJsb2NrLlxuXG5SaWdodCwgdGhlIHByb21wdCBpdHNlbGYgZmxhZ2dlZCB0aGlzOiBpdCdzIGV4cGxpY2l0bHkgc3RhdGVkIHRoYXQgdGhlIHN0YW5kYXJkIHRvb2wgY2FuJ3QgaGFuZGxlIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIGFueXRoaW5nIHdpdGggXCJzeXpfXCIuIEkgbmVlZCB0byBmaW5kIGFuIGFsdGVybmF0aXZlLlxuXG5MZXQncyBzaGlmdCBnZWFycy4gVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggTUhJIGRldmljZXMuIElmIHN5emthbGxlciBpcyBhYmxlIHRvIGVtdWxhdGUgYSBQQ0kgZGV2aWNlLCB0aGVuLCB0aGVvcmV0aWNhbGx5LCBpdCBjb3VsZCB0cmlnZ2VyIHRoZSBgbWhpX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoYXQgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gdHJ5IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhY3R1YWwgZGV2aWNlLCBhbmQgdGhhdCdzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5TbywgbGV0J3MgZGlnIGludG8gd2hhdCBgbWhpX3BjaV9wcm9iZWAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MDEuNzgyNDE0MTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1OTIxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9wY2lfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xMzI5PXN0YXRpYyBpbnQgbWhpX3BjaV9nZW5lcmljX2VkbF90cmlnZ2VyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzYyLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTM2MzpzdGF0aWMgaW50IG1oaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTEzNjQte1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xNzY0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtaGlfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ni1cXHQuaWRfdGFibGVcXHQ9IG1oaV9wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNzY3OlxcdC5wcm9iZVxcdFxcdD0gbWhpX3BjaV9wcm9iZSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE3NjgtXFx0LnJlbW92ZVxcdFxcdD0gbWhpX3BjaV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjAzLjM5ODM0MTY0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTc5ODMwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZSwgcmVhZHkgZm9yIGEgZmVsbG93IHNwZWNpYWxpc3Q6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIG1oaV9wY2lfcHJvYmUgZm9yIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwcm9iZSByb3V0aW5lIGhhcyBhbnkgZnVua3ksIG5vbi1zdGFuZGFyZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBQQ0kgaGFyZHdhcmUgdGhhdCBtaWdodCB0cmlwIHVwIFN5emthbGxlcidzIGdlbmVyaWMgUENJIGVtdWxhdG9yLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJvYWRibG9ja3MgdG8gZWZmZWN0aXZlIGZ1enppbmcuIFdlIGFsbCBrbm93IGhvdyBzZW5zaXRpdmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgYml0cyBjYW4gYmUuIElzIGl0IGdvaW5nIHRvIHJlbHkgb24gdW5kb2N1bWVudGVkIHJlZ2lzdGVycywgcHJvcHJpZXRhcnkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBvciBkZWVwbHkgc3BlY2lmaWMgdGltaW5nIHJlcXVpcmVtZW50cz8gSWYgc28sIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbW9kZWwgdGhvc2Ugd2l0aGluIHRoZSBlbXVsYXRvciBvciBiZSBmb3JjZWQgdG8gbG9vayBhdCBhbm90aGVyIG1lYW5zIG9mIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzI0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MTEuMzc4MTc0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNjM6XFx0c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMTM2NDpcXHR7XFxuMTM2NTpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyAqKSBpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMTM2NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICptaGlfY250cmxfY29uZmlnO1xcbjEzNjc6XFx0XFx0c3RydWN0IG1oaV9wY2lfZGV2aWNlICptaGlfcGRldjtcXG4xMzY4OlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsO1xcbjEzNjk6XFx0XFx0dW5zaWduZWQgaW50IGRtYV9kYXRhX3dpZHRoO1xcbjEzNzA6XFx0XFx0aW50IGVycjtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1ISSBQQ0kgZGV2aWNlIGZvdW5kOiAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbmFtZSk7XFxuMTM3MzpcXHRcXG4xMzc0OlxcdFxcdC8qIG1oaV9wZGV2Lm1oaV9jbnRybCBtdXN0IGJlIHplcm8taW5pdGlhbGl6ZWQgKi9cXG4xMzc1OlxcdFxcdG1oaV9wZGV2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqbWhpX3BkZXYpLCBHRlBfS0VSTkVMKTtcXG4xMzc2OlxcdFxcdGlmICghbWhpX3BkZXYpXFxuMTM3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlcmVjb3Zlcnlfd29yaywgbWhpX3BjaV9yZWNvdmVyeV93b3JrKTtcXG4xMzgwOlxcdFxcbjEzODE6XFx0XFx0aWYgKHBkZXYtXFx1MDAzZWlzX3ZpcnRmbiBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2V2Zl9jb25maWcpXFxuMTM4MjpcXHRcXHRcXHRtaGlfY250cmxfY29uZmlnID0gaW5mby1cXHUwMDNldmZfY29uZmlnO1xcbjEzODM6XFx0XFx0ZWxzZVxcbjEzODQ6XFx0XFx0XFx0bWhpX2NudHJsX2NvbmZpZyA9IGluZm8tXFx1MDAzZWNvbmZpZztcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0LyogSW5pdGlhbGl6ZSBoZWFsdGggY2hlY2sgbW9uaXRvciBvbmx5IGZvciBQaHlzaWNhbCBmdW5jdGlvbnMgKi9cXG4xMzg3OlxcdFxcdGlmICghcGRldi1cXHUwMDNlaXNfdmlydGZuKVxcbjEzODg6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNm1oaV9wZGV2LVxcdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGhlYWx0aF9jaGVjaywgMCk7XFxuMTM4OTpcXHRcXG4xMzkwOlxcdFxcdG1oaV9jbnRybCA9IFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlbWhpX2NudHJsO1xcbjEzOTE6XFx0XFxuMTM5MjpcXHRcXHRkbWFfZGF0YV93aWR0aCA9IChwZGV2LVxcdTAwM2Vpc192aXJ0Zm4gXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNldmZfZG1hX2RhdGFfd2lkdGgpID9cXG4xMzkzOlxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNldmZfZG1hX2RhdGFfd2lkdGggOiBpbmZvLVxcdTAwM2VkbWFfZGF0YV93aWR0aDtcXG4xMzk0OlxcdFxcbjEzOTU6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VjbnRybF9kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjEzOTY6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4xMzk3OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlaW92YV9zdG9wID0gKGRtYV9hZGRyX3QpRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKTtcXG4xMzk4OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZndfaW1hZ2UgPSBpbmZvLVxcdTAwM2VmdztcXG4xMzk5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWRsX2ltYWdlID0gaW5mby1cXHUwMDNlZWRsO1xcbjE0MDA6XFx0XFxuMTQwMTpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXJlYWRfcmVnID0gbWhpX3BjaV9yZWFkX3JlZztcXG4xNDAyOlxcdFxcdG1oaV9jbnRybC1cXHUwMDNld3JpdGVfcmVnID0gbWhpX3BjaV93cml0ZV9yZWc7XFxuMTQwMzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXN0YXR1c19jYiA9IG1oaV9wY2lfc3RhdHVzX2NiO1xcbjE0MDQ6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VydW50aW1lX2dldCA9IG1oaV9wY2lfcnVudGltZV9nZXQ7XFxuMTQwNTpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXJ1bnRpbWVfcHV0ID0gbWhpX3BjaV9ydW50aW1lX3B1dDtcXG4xNDA2OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlbXJ1ID0gaW5mby1cXHUwMDNlbXJ1X2RlZmF1bHQ7XFxuMTQwNzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZW5hbWUgPSBpbmZvLVxcdTAwM2VuYW1lO1xcbjE0MDg6XFx0XFxuMTQwOTpcXHRcXHRpZiAoIXBkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4xNDEwOlxcdFxcdFxcdG1oaV9wZGV2LVxcdTAwM2VyZXNldF9vbl9yZW1vdmUgPSBpbmZvLVxcdTAwM2VyZXNldF9vbl9yZW1vdmU7XFxuMTQxMTpcXHRcXG4xNDEyOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VlZGxfdHJpZ2dlcilcXG4xNDEzOlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWRsX3RyaWdnZXIgPSBtaGlfcGNpX2dlbmVyaWNfZWRsX3RyaWdnZXI7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VzaWRlYmFuZF93YWtlKSB7XFxuMTQxNjpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfZ2V0ID0gbWhpX3BjaV93YWtlX2dldF9ub3A7XFxuMTQxNzpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfcHV0ID0gbWhpX3BjaV93YWtlX3B1dF9ub3A7XFxuMTQxODpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlID0gbWhpX3BjaV93YWtlX3RvZ2dsZV9ub3A7XFxuMTQxOTpcXHRcXHR9XFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdGVyciA9IG1oaV9wY2lfY2xhaW0obWhpX2NudHJsLCBpbmZvLVxcdTAwM2ViYXJfbnVtLCBETUFfQklUX01BU0soZG1hX2RhdGFfd2lkdGgpKTtcXG4xNDIyOlxcdFxcdGlmIChlcnIpXFxuMTQyMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRlcnIgPSBtaGlfcGNpX2dldF9pcnFzKG1oaV9jbnRybCwgbWhpX2NudHJsX2NvbmZpZyk7XFxuMTQyNjpcXHRcXHRpZiAoZXJyKVxcbjE0Mjc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG1oaV9wZGV2KTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0LyogSGF2ZSBzdG9yZWQgcGNpIGNvbmZzcGFjZSBhdCBoYW5kIGZvciByZXN0b3JlIGluIHN1ZGRlbiBQQ0kgZXJyb3IuXFxuMTQzMjpcXHRcXHQgKiBjYWNoZSB0aGUgc3RhdGUgbG9jYWxseSBhbmQgZGlzY2FyZCB0aGUgUENJIGNvcmUgb25lLlxcbjE0MzM6XFx0XFx0ICovXFxuMTQzNDpcXHRcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4xNDM1OlxcdFxcdG1oaV9wZGV2LVxcdTAwM2VwY2lfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuMTQzNjpcXHRcXHRwY2lfbG9hZF9zYXZlZF9zdGF0ZShwZGV2LCBOVUxMKTtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcXG4xNDM5OlxcdFxcdGlmIChlcnIpXFxuMTQ0MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0NDE6XFx0XFxuMTQ0MjpcXHRcXHQvKiBNSEkgYnVzIGRvZXMgbm90IHBvd2VyIHVwIHRoZSBjb250cm9sbGVyIGJ5IGRlZmF1bHQgKi9cXG4xNDQzOlxcdFxcdGVyciA9IG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cChtaGlfY250cmwpO1xcbjE0NDQ6XFx0XFx0aWYgKGVycikge1xcbjE0NDU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHByZXBhcmUgTUhJIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbjE0NDY6XFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4xNDQ3OlxcdFxcdH1cXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0ZXJyID0gbWhpX2FzeW5jX3Bvd2VyX3VwKG1oaV9jbnRybCk7XFxuMTQ1MDpcXHRcXHRpZiAoZXJyKSB7XFxuMTQ1MTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcG93ZXIgdXAgTUhJIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbjE0NTI6XFx0XFx0XFx0Z290byBlcnJfdW5wcmVwYXJlO1xcbjE0NTM6XFx0XFx0fVxcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHRzZXRfYml0KE1ISV9QQ0lfREVWX1NUQVJURUQsIFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlc3RhdHVzKTtcXG4xNDU2OlxcdFxcbjE0NTc6XFx0XFx0Lyogc3RhcnQgaGVhbHRoIGNoZWNrICovXFxuMTQ1ODpcXHRcXHRpZiAoIXBkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4xNDU5OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2bWhpX3BkZXYtXFx1MDAzZWhlYWx0aF9jaGVja190aW1lciwgamlmZmllcyArIEhFQUxUSF9DSEVDS19QRVJJT0QpO1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHQvKiBBbGxvdyBydW50aW1lIHN1c3BlbmQgb25seSBpZiBib3RoIFBNRSBmcm9tIEQzSG90IGFuZCBNMyBhcmUgc3VwcG9ydGVkICovXFxuMTQ2MjpcXHRcXHRpZiAocGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCkgXFx1MDAyNlxcdTAwMjYgIShpbmZvLVxcdTAwM2Vub19tMykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MTEuMzc4NTE5MDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNzcwNTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIHRoZSBgbWhpX3BjaV9wcm9iZWAgUm91dGluZSoqXG5cbk9rYXksIHNvIGBtaGlfcGNpX3Byb2JlYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGxvb2tzIGxpa2UgaXQga2lja3Mgb2ZmIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9uczogYG1oaV9wY2lfY2xhaW1gLCBgbWhpX3BjaV9nZXRfaXJxc2AsIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAsIGBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXBgLCBhbmQgdGhlbiBjcnVjaWFsbHksIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lOyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGFuZCBpdCBzdGFydHMgYSB3b3JrZXIgdG8gYWN0dWFsbHkgKnRhbGsqIHRvIHRoZSBkZXZpY2UuXG5cbk5vdywgaGVyZSdzIHdoZXJlIG15IGV4cGVydGlzZSBraWNrcyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyIGVtdWxhdGluZyBhIFBDSSBkZXZpY2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHByb2JsZW0uIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSAqcmVhbCogTUhJLWNhcGFibGUgZGV2aWNlLCBidXQgcmF0aGVyIGEgc2ltdWxhdGVkIG9uZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSEkgcHJvdG9jb2wgKHRoYXQgaXMsIHRoZSBCSEksIEVFLCBldGMuIGxheWVycykgd29uJ3QgYmUgZnVsbHkgcmVhbGl6ZWQuIFRoaXMgbWVhbnMgYG1oaV9hc3luY19wb3dlcl91cGAgaXMgYWxtb3N0IGd1YXJhbnRlZWQgdG8gZWl0aGVyIGZhaWwsIG9yIHdvcnNlLCB0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHJlc3BvbnNlcyBpdCdzIG5ldmVyIGdvaW5nIHRvIGdldC4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGRldmljZXMgKHRoZSBjaGFubmVscykgd29uJ3QgYmUgY3JlYXRlZC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIERpZG4ndCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGhhbmRsZSB0aGUgY3JlYXRpb24gb2YgdGhlIE1ISSBkZXZpY2VzIHRoZW1zZWx2ZXM/IElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBhIGZhaWx1cmUgaW4gYG1oaV9hc3luY19wb3dlcl91cGAgYmVjb21lcyBldmVuIG1vcmUgY3JpdGljYWwgYmVjYXVzZSwgaWYgaXQncyByZXNwb25zaWJsZSBmb3IgdGhlIHJlc291cmNlcywgYSBmYWlsdXJlIHRoZXJlIGNvdWxkIHByZXZlbnQgZGV2aWNlIGNyZWF0aW9uIGF0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToxNy45OTYyMjgxNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE5OlxcdGludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4gOTIwOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXFxuIDkyMTpcXHR7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgbWhpX2V2ZW50ICptaGlfZXZlbnQ7XFxuIDkyMzpcXHRcXHRzdHJ1Y3QgbWhpX2NoYW4gKm1oaV9jaGFuO1xcbiA5MjQ6XFx0XFx0c3RydWN0IG1oaV9jbWQgKm1oaV9jbWQ7XFxuIDkyNTpcXHRcXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcXG4gOTI2OlxcdFxcdGludCByZXQsIGk7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdGlmICghbWhpX2NudHJsIHx8ICFtaGlfY250cmwtXFx1MDAzZWNudHJsX2RldiB8fCAhbWhpX2NudHJsLVxcdTAwM2VyZWdzIHx8XFxuIDkyOTpcXHRcXHQgICAgIW1oaV9jbnRybC1cXHUwMDNlcnVudGltZV9nZXQgfHwgIW1oaV9jbnRybC1cXHUwMDNlcnVudGltZV9wdXQgfHxcXG4gOTMwOlxcdFxcdCAgICAhbWhpX2NudHJsLVxcdTAwM2VzdGF0dXNfY2IgfHwgIW1oaV9jbnRybC1cXHUwMDNlcmVhZF9yZWcgfHxcXG4gOTMxOlxcdFxcdCAgICAhbWhpX2NudHJsLVxcdTAwM2V3cml0ZV9yZWcgfHwgIW1oaV9jbnRybC1cXHUwMDNlbnJfaXJxcyB8fFxcbiA5MzI6XFx0XFx0ICAgICFtaGlfY250cmwtXFx1MDAzZWlycSB8fCAhbWhpX2NudHJsLVxcdTAwM2VyZWdfbGVuKVxcbiA5MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdHJldCA9IHBhcnNlX2NvbmZpZyhtaGlfY250cmwsIGNvbmZpZyk7XFxuIDkzNjpcXHRcXHRpZiAocmV0KVxcbiA5Mzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzODpcXHRcXG4gOTM5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlbWhpX2NtZCA9IGt6YWxsb2Nfb2JqcygqbWhpX2NudHJsLVxcdTAwM2VtaGlfY21kLCBOUl9PRl9DTURfUklOR1MpO1xcbiA5NDA6XFx0XFx0aWYgKCFtaGlfY250cmwtXFx1MDAzZW1oaV9jbWQpIHtcXG4gOTQxOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDk0MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2V2ZW50O1xcbiA5NDM6XFx0XFx0fVxcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2V0cmFuc2l0aW9uX2xpc3QpO1xcbiA5NDY6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9tdXRleCk7XFxuIDk0NzpcXHRcXHRyd2xvY2tfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gOTQ4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXRyYW5zaXRpb25fbG9jayk7XFxuIDk0OTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2V3bG9jayk7XFxuIDk1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlc3Rfd29ya2VyLCBtaGlfcG1fc3Rfd29ya2VyKTtcXG4gOTUxOlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlc3RhdGVfZXZlbnQpO1xcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZWhpcHJpb193cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJtaGlfaGlwcmlvX3dxXFxcIiwgV1FfSElHSFBSSSk7XFxuIDk1NDpcXHRcXHRpZiAoIW1oaV9jbnRybC1cXHUwMDNlaGlwcmlvX3dxKSB7XFxuIDk1NTpcXHRcXHRcXHRkZXZfZXJyKG1oaV9jbnRybC1cXHUwMDNlY250cmxfZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuIDk1NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA5NTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jbWQ7XFxuIDk1ODpcXHRcXHR9XFxuIDk1OTpcXHRcXG4gOTYwOlxcdFxcdG1oaV9jbWQgPSBtaGlfY250cmwtXFx1MDAzZW1oaV9jbWQ7XFxuIDk2MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT0ZfQ01EX1JJTkdTOyBpKyssIG1oaV9jbWQrKylcXG4gOTYyOlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtaGlfY21kLVxcdTAwM2Vsb2NrKTtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0bWhpX2V2ZW50ID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnQ7XFxuIDk2NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWhpX2NudHJsLVxcdTAwM2V0b3RhbF9ldl9yaW5nczsgaSsrLCBtaGlfZXZlbnQrKykge1xcbiA5NjY6XFx0XFx0XFx0LyogU2tpcCBmb3Igb2ZmbG9hZCBldmVudHMgKi9cXG4gOTY3OlxcdFxcdFxcdGlmIChtaGlfZXZlbnQtXFx1MDAzZW9mZmxvYWRfZXYpXFxuIDk2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0XFx0bWhpX2V2ZW50LVxcdTAwM2VtaGlfY250cmwgPSBtaGlfY250cmw7XFxuIDk3MTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2Vsb2NrKTtcXG4gOTcyOlxcdFxcdFxcdGlmIChtaGlfZXZlbnQtXFx1MDAzZWRhdGFfdHlwZSA9PSBNSElfRVJfQ1RSTClcXG4gOTczOlxcdFxcdFxcdFxcdHRhc2tsZXRfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2V0YXNrLCBtaGlfY3RybF9ldl90YXNrLFxcbiA5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAodWxvbmcpbWhpX2V2ZW50KTtcXG4gOTc1OlxcdFxcdFxcdGVsc2VcXG4gOTc2OlxcdFxcdFxcdFxcdHRhc2tsZXRfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2V0YXNrLCBtaGlfZXZfdGFzayxcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdCAgICAgKHVsb25nKW1oaV9ldmVudCk7XFxuIDk3ODpcXHRcXHR9XFxuIDk3OTpcXHRcXG4gOTgwOlxcdFxcdG1oaV9jaGFuID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfY2hhbjtcXG4gOTgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaGlfY250cmwtXFx1MDAzZW1heF9jaGFuOyBpKyssIG1oaV9jaGFuKyspIHtcXG4gOTgyOlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1oaV9jaGFuLVxcdTAwM2VtdXRleCk7XFxuIDk4MzpcXHRcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNm1oaV9jaGFuLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4gOTg0OlxcdFxcdFxcdHJ3bG9ja19pbml0KFxcdTAwMjZtaGlfY2hhbi1cXHUwMDNlbG9jayk7XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdFxcdC8qIHVzZWQgaW4gc2V0dGluZyBiZWkgZmllbGQgb2YgVFJFICovXFxuIDk4NzpcXHRcXHRcXHRtaGlfZXZlbnQgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnRbbWhpX2NoYW4tXFx1MDAzZWVyX2luZGV4XTtcXG4gOTg4OlxcdFxcdFxcdG1oaV9jaGFuLVxcdTAwM2VpbnRtb2QgPSBtaGlfZXZlbnQtXFx1MDAzZWludG1vZDtcXG4gOTg5OlxcdFxcdH1cXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0aWYgKG1oaV9jbnRybC1cXHUwMDNlYm91bmNlX2J1Zikge1xcbiA5OTI6XFx0XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VtYXBfc2luZ2xlID0gbWhpX21hcF9zaW5nbGVfdXNlX2JiO1xcbiA5OTM6XFx0XFx0XFx0bWhpX2NudHJsLVxcdTAwM2V1bm1hcF9zaW5nbGUgPSBtaGlfdW5tYXBfc2luZ2xlX3VzZV9iYjtcXG4gOTk0OlxcdFxcdH0gZWxzZSB7XFxuIDk5NTpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZW1hcF9zaW5nbGUgPSBtaGlfbWFwX3NpbmdsZV9ub19iYjtcXG4gOTk2OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNldW5tYXBfc2luZ2xlID0gbWhpX3VubWFwX3NpbmdsZV9ub19iYjtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VpbmRleCA9IGlkYV9hbGxvYyhcXHUwMDI2bWhpX2NvbnRyb2xsZXJfaWRhLCBHRlBfS0VSTkVMKTtcXG4xMDAwOlxcdFxcdGlmIChtaGlfY250cmwtXFx1MDAzZWluZGV4IFxcdTAwM2MgMCkge1xcbjEwMDE6XFx0XFx0XFx0cmV0ID0gbWhpX2NudHJsLVxcdTAwM2VpbmRleDtcXG4xMDAyOlxcdFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdHJldCA9IG1oaV9pbml0X2lycV9zZXR1cChtaGlfY250cmwpO1xcbjEwMDY6XFx0XFx0aWYgKHJldClcXG4xMDA3OlxcdFxcdFxcdGdvdG8gZXJyX2lkYV9mcmVlO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHQvKiBSZWdpc3RlciBjb250cm9sbGVyIHdpdGggTUhJIGJ1cyAqL1xcbjEwMTA6XFx0XFx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcXG4xMDExOlxcdFxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4xMDEyOlxcdFxcdFxcdGRldl9lcnIobWhpX2NudHJsLVxcdTAwM2VjbnRybF9kZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgTUhJIGRldmljZVxcXFxuXFxcIik7XFxuMTAxMzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG1oaV9kZXYpO1xcbjEwMTQ6XFx0XFx0XFx0Z290byBlcnJvcl9zZXR1cF9pcnE7XFxuMTAxNTpcXHRcXHR9XFxuMTAxNjpcXHRcXG4xMDE3OlxcdFxcdG1oaV9kZXYtXFx1MDAzZWRldl90eXBlID0gTUhJX0RFVklDRV9DT05UUk9MTEVSO1xcbjEwMTg6XFx0XFx0bWhpX2Rldi1cXHUwMDNlbWhpX2NudHJsID0gbWhpX2NudHJsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToxNy45OTYzNTIxOTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5Njc2NzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludGVybmFsIFdvcmtmbG93IGZvciBNSEkgRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBNSEkgZGV2aWNlIHNldHVwLiBUaGUgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gb2YgYW4gTUhJIGRldmljZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgY29udHJvbGxlciBpdHNlbGYg4oCTIHRoYXQncyB0aGUgYE1ISV9ERVZJQ0VfQ09OVFJPTExFUmAgcGFydC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkga25vdyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFubmVsIGRldmljZSBjcmVhdGlvbiwgdGhlIGBNSElfREVWSUNFX1hGRVJgIGRldmljZXMsIGlzbid0IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSByZXNwb25zaWJsZSBmdW5jdGlvbi4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gTGV0IG1lIGdldCBteSBiZWFyaW5ncyBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYG1oaV9jcmVhdGVfZGV2aWNlc2AgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlciB3aGVyZSB0aGVzZSB0cmFuc2ZlciBkZXZpY2VzIGFyZSBjb25maWd1cmVkLiBJIHdpbGwgdHJhY2sgdGhlIGludm9jYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToyMi43OTMxMjE1MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3NjQ5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpX2NyZWF0ZV9kZXZpY2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzIxPWludCBtaGlfZGVzdHJveV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjMyMjp2b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9MzYwPUVYUE9SVF9TWU1CT0xfR1BMKG1oaV9ub3RpZnkpO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2Mi0vKiBCaW5kIE1ISSBjaGFubmVscyB0byBNSEkgZGV2aWNlcyAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYzozNjM6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM5ND1zdGF0aWMgaW50IG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDU5LVxcdCAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlxcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDYxLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODMyOlxcdFxcdFxcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMzLVxcdFxcdFxcdGlmIChtaGlfY250cmwtXFx1MDAzZWZiY19kb3dubG9hZClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQ0LVxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4NDU6XFx0XFx0XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXFx0XFx0XFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZWVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MjQuNDE4ODk2MTM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NTIzNzM1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1ISSBEZXZpY2UgQ3JlYXRpb24gUHJvYmxlbSoqXG5cbk9rYXksIHNvIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyB0aGUgZ2F0ZXdheSB0byBldmVyeXRoaW5nIGVsc2UgSSBuZWVkLiBJdCdzIHRyaWdnZXJlZCBieSB0aGUgYG1oaV9wbV9zdF93b3JrZXJgIG9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGZ1bmN0aW9ucywgd2hpY2gsIGluIHR1cm4sIGFyZSBkcml2ZW4gYnkgc3RhdGUgY2hhbmdlcyB3aXRoaW4gdGhlIE1ISSBjb250cm9sbGVyIGl0c2VsZi4gVGhvc2Ugc3RhdGUgY2hhbmdlcyBhcmUgbm9ybWFsbHkgdGhlIHJlc3VsdCBvZiBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBzcGVjaWZpYyByZWdpc3RlciByZWFkcywgdGhpbmdzIGxpa2UgQkhJIG9yIEVFIHJlZ2lzdGVycy5cblxuVGhlIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBhIGdlbmVyaWMgUENJIGRldmljZSwgaXQgcHJvYmFibHkgKndvbid0KiBjb3JyZWN0bHkgc2ltdWxhdGUgdGhlIHNwZWNpZmljIGludGVycnVwdHMgb3IgcmVnaXN0ZXIgdmFsdWVzIHRoYXQgdGhlIE1ISSBjb250cm9sbGVyIGV4cGVjdHMgdG8gc2VlIGZvciB0aGVzZSBzdGF0ZSB0cmFuc2l0aW9ucy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIGxpa2VseSAqbmV2ZXIqIGdvaW5nIHRvIGdldCBjYWxsZWQuIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGBJUF9DVFJMYCBjaGFubmVsIGRldmljZSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHRoaXMgd2hvbGUgc2V0dXAsIGp1c3Qgd29uJ3QgYmUgY3JlYXRlZC4gVGhhdCdzIGEgaHVnZSBibG9ja2VyLlxuXG5CdXQgd2FpdC4gVGhpcyBjYW4ndCBiZSB0aGUgKm9ubHkqIHdheSwgcmlnaHQ/IElzIHRoZXJlIGFueSB3YXkgdG8gY3JlYXRlIE1ISSBkZXZpY2VzIGluZGVwZW5kZW50IG9mIHRoaXMgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbj8gQ2FuIHN5emthbGxlciBzb21laG93ICpkaXJlY3RseSogaW5qZWN0IGRldmljZXMgb250byB0aGUgTUhJIGJ1cz8gTGV0IG1lIHNlZS4uLiBJJ2xsIGNoZWNrIGlmIHN5emthbGxlciBldmVuICpoYXMqIGFuIE1ISSBidXMgZW11bGF0b3IuIEl0IGhhbmRsZXMgUENJLCBVU0IsIFZNQnVzLCBhbmQgb3RoZXJzLCBidXQgSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljIGZvciBNSEkuIEhtbSwgbm8sIGl0IGRvZXNuJ3QgbG9vayBsaWtlIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgTUhJIGJ1cyBpbiBzeXprYWxsZXIuXG5cbkhvbGQgb24uIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jYCBhbmQgYGRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNgLiBBaCwgYHd3YW5fY29yZS5jYCBpcyB0aGUgV1dBTiBzdWJzeXN0ZW0ncyBjb3JlLiBOb3csIHRoYXQncyBpbnRlcmVzdGluZy4gRG9lcyBzeXprYWxsZXIgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBNSEkgcGF0aCB0byBnZXQgdG8gYHd3YW5fY29yZS5jYD8gQ2FuIGl0IHJlYWNoIGB3d2FuX2NvcmUuY2Agc29tZSBvdGhlciB3YXk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBtYW55IG90aGVyIFdXQU4gZHJpdmVycyB0aGVyZSBhcmUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGVudHJ5IHBvaW50cy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOTozNC4wNzEyNzIxNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwibWhpX3d3YW5fY3RybC5jXCIsXG4gICAgXCJtaGlfd3dhbl9tYmltLmNcIixcbiAgICBcInFjb21fYmFtX2RtdXguY1wiLFxuICAgIFwicnBtc2dfd3dhbl9jdHJsLmNcIixcbiAgICBcInd3YW5fY29yZS5jXCIsXG4gICAgXCJ3d2FuX2h3c2ltLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiaW9zbVwiLFxuICAgIFwidDd4eFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjM0LjA3MTMzNTIzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM5ODY4NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXV0FOIEhhcmR3YXJlIFNpbXVsYXRpb246IFBvcnQgQ3JlYXRpb24gQW5hbHlzaXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB3d2FuX2h3c2ltLmNgLiBBaCwgeWVzLCBhIHNvZnR3YXJlIHNpbXVsYXRvciBmb3IgV1dBTiBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIHRvb2xzLCBpczogKmRvZXMgaXQgY29ycmVjdGx5IG1vZGVsIHRoZSBlc3NlbnRpYWwgYXNwZWN0cyBvZiBXV0FOIHBvcnQgY3JlYXRpb24/KiBXZSBuZWVkIHRvIHNjcnV0aW5pemUgdGhpcyBjb2RlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIGhvdyBpdCdzIHRyYW5zbGF0ZWQgaW50byB0aGUga2VybmVsJ3MgcG9ydCBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBzeXN0ZW0gZnJvbSBhIHBvcnQgcGVyc3BlY3RpdmU/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzaW11bGF0ZWQgZGV2aWNlIGlzIGluc3RhbnRpYXRlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIHZhbGlkIFdXQU4gcG9ydC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhpcyBzaW11bGF0aW9uIGFjY3VyYXRlbHkgcmVwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBzZXR1cCBiZWhhdmlvcnMgb2YgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHNpbXVsYXRlZCBkZXZpY2UncyByZXBvcnRlZCBjYXBhYmlsaXRpZXMgYW5kIGhvdyB0aGV5IGdldCByZXByZXNlbnRlZCBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjQwLjcxMTIwNjM2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5NDU5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd3YW5fcG9ydF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MTMyPXN0YXRpYyBpbnQgd3dhbl9od3NpbV9hdF9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0xOTQtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6MTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMTk2LVxcdC5zdGFydCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdGFydCxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jPTI4OT1zdGF0aWMgaW50IHd3YW5faHdzaW1fbm1lYV9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTUtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6Mjk2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX25tZWFfZW11bF9wb3J0X29wcyA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTctXFx0LnN0YXJ0ID0gd3dhbl9od3NpbV9ubWVhX2VtdWxfc3RhcnQsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYz0zMDM9c3RhdGljIHN0cnVjdCB3d2FuX2h3c2ltX3BvcnQgKnd3YW5faHdzaW1fcG9ydF9uZXcoc3RydWN0IHd3YW5faHdzaW1fZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0zMDUte1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jOjMwNjpcXHRjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyAqb3BzO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jLTMwNy1cXHRzdHJ1Y3Qgd3dhbl9od3NpbV9wb3J0ICpwb3J0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOTo0MS4wNTA2NzA3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTc5MzY1NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBXV0FOIFBvcnQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgd3dhbl9jb3JlLmNgIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYHd3YW5fcG9ydF9vcF9zdGFydGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6IGlmIGBwb3J0LVx1MDAzZXN0YXJ0X2NvdW50YCBpcyAxIGFuZCB0aGUgcG9ydCB0eXBlIGlzIEFULCBhbmQgaWYgYHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHNgIGlzIG5vdCBudWxsLCB0aGVuIERUUiBhbmQgUlRTIGFyZSByYWlzZWQuIFRoaXMgbWltaWNzIFRUWSBzZW1hbnRpY3MsIHdoaWNoIGlzIGdvb2QuIFdlIHdhbnQgbW9kZW0gcG9ydHMgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCBhY3R1YWxseSAqc2V0Kj8gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGUgY29kZSBpcyByZWFjaGFibGUgaWYgaXQgaXMgc2V0LiBUaGUgd2hvbGUgcG9pbnQgb2YgYHd3YW5faHdzaW0uY2AgaXMgdG8gY3JlYXRlIFdXQU4gcG9ydHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJlbGF0ZSB0byB0aG9zZS4gU28gSSBoYXZlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHNgLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgYGR0cl9ydHNgIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGZvciB0aGVzZSBlbXVsYXRlZCBwb3J0cy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgd3dhbl9od3NpbS5jYCBwcm92aWRlcyBhIHN1aXRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBgZHRyX3J0c2AuIElmIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIElmIHNvLCB0aGVuIGl0IGFsbCBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjUwLjYzMDAzODk4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5faHdzaW1fYXRfZW11bF9wb3J0X29wcyA9IHtcXG4gMTk2OlxcdFxcdC5zdGFydCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdGFydCxcXG4gMTk3OlxcdFxcdC5zdG9wID0gd3dhbl9od3NpbV9hdF9lbXVsX3N0b3AsXFxuIDE5ODpcXHRcXHQudHggPSB3d2FuX2h3c2ltX2F0X2VtdWxfdHgsXFxuIDE5OTpcXHR9O1xcbiAyMDA6XFx0XFxuIDIwMTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfR05TUylcXG4gMjAyOlxcdCNkZWZpbmUgTk1FQV9NQVhfTEVOXFx0XFx0ODJcXHQvKiBNYXggc2VudGVuY2UgbGVuZ3RoICovXFxuIDIwMzpcXHQjZGVmaW5lIE5NRUFfVFJBSUxfTEVOXFx0XFx0NVxcdC8qICcqJyArIENoZWNrc3VtICsgXFx1MDAzY0NSXFx1MDAzZVxcdTAwM2NMRlxcdTAwM2UgKi9cXG4gMjA0OlxcdCNkZWZpbmUgTk1FQV9NQVhfREFUQV9MRU5cXHQoTk1FQV9NQVhfTEVOIC0gTk1FQV9UUkFJTF9MRU4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjUwLjYzMDEyMTMwM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjMwNzU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgd3dhbl9od3NpbS5jIGFuZCB3d2FuX2NvcmUuYyBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUgaW4gYHd3YW5fY29yZS5jYCBhbmQgcmVhbGl6aW5nIGl0J3MgY29uZGl0aW9uYWxseSBleGVjdXRlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCBmdW5jdGlvbiBwb2ludGVyIGJlaW5nIHNldC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgd3dhbl9od3NpbS5jYCAqZG9lc24ndCogYWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgd29uJ3QgYmUgdHJpZ2dlcmVkIGluIGEgc2ltdWxhdGVkIGhhcmR3YXJlIGVudmlyb25tZW50LlxuXG5NeSBuZXh0IHRob3VnaHQgaW1tZWRpYXRlbHkgaXM6IHdoZXJlICppcyogYGR0cl9ydHNgIGJlaW5nIHNldD8gRGlnZ2luZyB0aHJvdWdoIHRoZSBwYXRjaCwgSSBzZWUgaXQncyBiZWluZyBhZGRlZCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGl0IHdpdGhpbiB0aGUgYHd3YW5fcG9wc2Agc3RydWN0LCBzcGVjaWZpY2FsbHkgbGlrZSB0aGlzOlxuXG5gYGBjXG5AQCAtMTYzLDYgKzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4gXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxuIFx0LnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsXG4gXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuK1x0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXG4gfTtcbiBgYGBcblxuT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IEknbSBub3Qgc3RvcHBpbmcgdGhlcmUuIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlICpvdGhlciogZHJpdmVycyBzZXR0aW5nIHRoaXMgYGR0cl9ydHNgIHBvaW50ZXI/IEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgYWNyb3NzIHRoZSBib2FyZCBhbmQgdG8gc2VlIHdoYXQgcG90ZW50aWFsIGltcGFjdHMgaXQgaGFzIG9uIHRoZSBvdGhlciBkcml2ZXJzIGFuZCBkZXZpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjU4LjI2MDg4MDYyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTY1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDMtXFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoyNDQ6XFx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQ1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjU4LjMwOTIwNDkzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTY4Nzg2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFdXQU4gQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcuIEknbSBmb2N1c2luZyBvbiB0aGUgYGR0cl9ydHNgIHNldHRpbmcsIHdoaWNoIHNlZW1zIHRvIG9yaWdpbmF0ZSBzb2xlbHkgZnJvbSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCBpbXBsaWVzIHRoZSBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGlzIG9ubHkgZXZlciB0cmlnZ2VyZWQgd2hlbiBhIFdXQU4gcG9ydCBpcyBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBBbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMsIG9mIGNvdXJzZSwgYW4gTUhJIGRyaXZlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IGNyZWF0ZSBhbiBNSEkgZGV2aWNlPyBNeSBlYXJsaWVyIGFuYWx5c2lzIHN1Z2dlc3RzIE1ISSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIG9ubHkgd2hlbiBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFzIHNlZW4gaW4gdGhlIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIHByb2Nlc3MuIFRoZSBwcm9ibGVtPyBTeXprYWxsZXIncyBQQ0kgZW11bGF0b3IsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lc24ndCBhY3R1YWxseSBlbXVsYXRlIHRoZSBNSEkgaGFyZHdhcmUuIENvbnNlcXVlbnRseSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUuIFRoaXMgbWVhbnMgaXQgKndvbid0KiBiZSBhYmxlIHRvIGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuXG5cblRoZXJlZm9yZSwgYG1oaV93d2FuX2N0cmxfcHJvYmVgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLCBhbmQgbm8gV1dBTiBwb3J0cyB3aXRoIGBkdHJfcnRzYCB3aWxsIGJlIGNyZWF0ZWQuIFRoYXQgbWVhbnMgdGhlIG5ldyBjb2RlIGluIGJvdGggYHd3YW5fY29yZS5jYCBhbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMgdW5yZWFjaGFibGUgaW4gdGhpcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VLlxuXG5CdXQsIGhhbmcgb24sIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBleHBsb3JlZCBldmVyeSBwb3NzaWJpbGl0eS4gSXMgdGhlcmUgKmFueSogb3RoZXIgd2F5IHRvIGluamVjdCBhbiBNSEkgZGV2aWNlPyBDb3VsZCBzeXprYWxsZXIgcG90ZW50aWFsbHkgdXNlIGBtaGlfYWxsb2NfZGV2aWNlYCBkaXJlY3RseT8gTm8sIHRoYXQncyBub3QgYSBzeXNjYWxsLiBIb3cgYWJvdXQgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYD8gTm9wZS4gT2theSwgd2hhdCBhYm91dCBzb21lIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgbWlnaHQgYWxsb3cgZGV2aWNlIGluamVjdGlvbj8gSXQncyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGUgTUhJIHN1YnN5c3RlbSBleHBvc2VzIGFueSBpbnRlcmZhY2VzIGxpa2UgdGhhdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjA2LjI3Nzk5NDY1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDYyMzc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfY3JlYXRlX2RldmljZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg6MzIyOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTMyMy1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz0zNjA9RVhQT1JUX1NZTUJPTF9HUEwobWhpX25vdGlmeSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM2Mzp2b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzY0LXtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Mzk0PXN0YXRpYyBpbnQgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXFx0ICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo0NjA6XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NjEtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04MzEtXFx0XFx0XFx0ICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XFx0XFx0XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04MzMtXFx0XFx0XFx0aWYgKG1oaV9jbnRybC1cXHUwMDNlZmJjX2Rvd25sb2FkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDQtXFx0XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjg0NTpcXHRcXHRcXHRtaGlfY3JlYXRlX2RldmljZXMobWhpX2NudHJsKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ni1cXHRcXHRcXHRtaGlfdWV2ZW50X25vdGlmeShtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlZWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDowNy44ODg2MjM3ODdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODE1OTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludGVybmFsIEZ1bmN0aW9uIFJldmlldyoqXG5cbkhtbSwgYG1oaV9jcmVhdGVfZGV2aWNlc2AuLi4gcmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IG5vdCBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGl0IGJlaW5nIGNhbGxlZCBvbmx5IHdpdGhpbiBgbWhpX3BtX3N0X3dvcmtlcmAgYW5kIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gLiBPa2F5LCBzbyB0aG9zZSBhcmUgdGhlICpvbmx5KiB0d28gcGxhY2VzLlxuXG5BbHJpZ2h0LCBidXQgdGhhdCBnZXRzIG1lIHRoaW5raW5nOiBJcyB0aGVyZSAqYW5vdGhlciogd2F5IHRvIHRyaWdnZXIgdGhhdCBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCBmdW5jdGlvbj8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGl0c2VsZi4gVGltZSB0byBkaXZlIGJhY2sgaW4gdGhlcmUgYW5kIHJldmlldyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDU2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MTIuNjY2Nzg1NDM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDMzMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM3Mz1pbnQgbWhpX3BtX20zX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTM5My0vKiBIYW5kbGUgZGV2aWNlIE1pc3Npb24gTW9kZSB0cmFuc2l0aW9uICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozOTQ6c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zOTUte1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODM4LVxcdFxcdGNhc2UgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODM5OlxcdFxcdFxcdG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQwLVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDoxNC4yNzc4MjM4NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwNDQxMTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKlVucGFja2luZyBUaGlzIFN0YXRlIFRyYW5zaXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyB0aGlzIGNvZGUgaXMgb25seSBjYWxsZWQgZnJvbSBgbWhpX3BtX3N0X3dvcmtlcmAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHBhcnQgb2Ygc29tZSBwb3dlciBtYW5hZ2VtZW50IG9yIHN0YXRlIG1hbmFnZW1lbnQgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSkuIE9rYXksIG1ha2VzIHNlbnNlLlxuXG5gbWhpX3BtX3N0X3dvcmtlcmAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXTigJlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHRoYXQgaXQncyBwdWxsaW5nIHRoZXNlIHRyYW5zaXRpb25zIGZyb20gYG1oaV9jbnRybC1cdTAwM2V0cmFuc2l0aW9uX2xpc3RgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyAqd2hvKiBpcyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyBgbWhpX2NudHJsLVx1MDAzZXRyYW5zaXRpb25fbGlzdGA/IFRoYXQncyB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJlZ2lucy4gRGV0ZXJtaW5pbmcgdGhhdCB3aWxsIGdpdmUgbWUgdmlzaWJpbGl0eSBpbnRvIGhvdyB0cmFuc2l0aW9ucyBhcmUgaW5pdGlhdGVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgc3lzdGVtJ3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbHN0YWNrIHRoYXQgZmVlZHMgdGhpcyBsaXN0IHRlbGxzIG1lIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byB2YXJpb3VzIGV2ZW50cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGxpc3QgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVycy4gV2hvJ3MgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IElzIHRoaXMgZXZlbnQtZHJpdmVuLCB0aW1lci1iYXNlZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MjEuODgyMjM4ODI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MzY2NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9zZXRfbWhpX3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2Jvb3QuYz02Mz1zdGF0aWMgaW50IF9fbWhpX2Rvd25sb2FkX3JkZG1faW5fcGFuaWMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA1LVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiVHJpZ2dlciBkZXZpY2UgaW50byBSRERNIG1vZGUgdXNpbmcgU1lTIEVSUlxcXFxuXFxcIik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jOjEwNjpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9TWVNfRVJSKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA3LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0xMjA9ZW51bSBtaGlfcG1fc3RhdGUgX19tdXN0X2NoZWNrIG1oaV90cnlzZXRfcG1fc3RhdGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEzOS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjE0MDp2b2lkIG1oaV9zZXRfbWhpX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBlbnVtIG1oaV9zdGF0ZSBzdGF0ZSlcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTE0MS17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTE3MD1pbnQgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTI1MC1cXHQvKiBTZXQgTUhJIHRvIE0wIHN0YXRlICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoyNTE6XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfTTApO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMjUyLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX2xvY2spO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zMzc9dm9pZCBtaGlfcG1fbTFfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ0LVxcdGlmIChzdGF0ZSA9PSBNSElfUE1fTTIpIHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjM0NTpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zNDYtXFx0XFx0bWhpX2NudHJsLVxcdTAwM2VkZXZfc3RhdGUgPSBNSElfU1RBVEVfTTI7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTQ3Mj1zdGF0aWMgdm9pZCBtaGlfcG1fZGlzYWJsZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00OTQtXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJUcmlnZ2VyaW5nIE1ISSBSZXNldCBpbiBkZXZpY2VcXFxcblxcXCIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDk1OlxcdFxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ5Ni1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNjU3LVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiVHJpZ2dlcmluZyBNSEkgUmVzZXQgaW4gZGV2aWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjY1ODpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9SRVNFVCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy02NTktXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTg2Nz1pbnQgbWhpX3BtX3N1c3BlbmQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTkyNS1cXHQvKiBTZXQgTUhJIHRvIE0zIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5MjY6XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfTTMpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTI3LVxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTk1NT1zdGF0aWMgaW50IF9fbWhpX3BtX3Jlc3VtZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTk4LVxcdC8qIFNldCBNSEkgdG8gTTAgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjk5OTpcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMDAwLVxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE2NS1cXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExNjY6XFx0XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE2Ny1cXHRcXHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZXJlZ3MsIE1ISUNUUkwsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEzMDE9aW50IG1oaV9mb3JjZV9yZGRtX21vZGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEzMTAtXFx0ZGV2X2RiZyhkZXYsIFxcXCJUcmlnZ2VyaW5nIFNZU19FUlIgdG8gZm9yY2UgUkRETSBzdGF0ZVxcXFxuXFxcIik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMzExOlxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1NZU19FUlIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTMxMi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmg9NTg2PXZvaWQgbWhpX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtaGlfZHJpdmVyICptaGlfZHJ2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTg4LS8qKlxcbmluY2x1ZGUvbGludXgvbWhpLmg6NTg5OiAqIG1oaV9zZXRfbWhpX3N0YXRlIC0gU2V0IE1ISSBkZXZpY2Ugc3RhdGVcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU5MC0gKiBAbWhpX2NudHJsOiBNSEkgY29udHJvbGxlclxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01OTItICovXFxuaW5jbHVkZS9saW51eC9taGkuaDo1OTM6dm9pZCBtaGlfc2V0X21oaV9zdGF0ZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU5NC1cXHRcXHQgICAgICAgZW51bSBtaGlfc3RhdGUgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDoyMy41MDk2MjQyNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4OTg2MDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBTdGF0ZSBUcmFuc2l0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc3RhdGUgdHJhbnNpdGlvbiB3b3Jrcy4uLiBMZXQgbWUgc2VlLiBJJ20gZm9jdXNpbmcgb24gYG1oaV9zZXRfbWhpX3N0YXRlYCwgcmlnaHQ/IFRoYXQgZnVuY3Rpb24gaXMgKmRpcmVjdGx5KiB3cml0aW5nIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgYE1ISUNUUkxgLiBUaGF0J3MgdGhlIGtleSwgaXQncyB0aGUgYWN0dWFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcGFydC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5BbmQgaXQgbG9va3MgbGlrZSB0aGUgKnRyaWdnZXIqIGZvciBhIHN0YXRlIGNoYW5nZSB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYCBpcyBiZWluZyBoYW5kbGVkIGJ5IGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHVwIHRoYXQgc3BlY2lmaWMgdHJhbnNpdGlvbi4gVGhpcyBtZWFucyBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHRoZSAnZG9lcicsIGFuZCBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIGlzIHRoZSBzY2hlZHVsZXIgb3IgdGhlIHJlcXVlc3Rvci4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjI4LjI5OTQ4NzcwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NDk4NDQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMzMz1jb25zdCBjaGFyICp0b19taGlfcG1fc3RhdGVfc3RyKHUzMiBzdGF0ZSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMzQ6aW50IG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzM1LVxcdFxcdFxcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz03OTk9aW50IG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy05MjItXFx0XFx0XFx0aWYgKHN0ICE9IERFVl9TVF9UUkFOU0lUSU9OX01BWClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6OTIzOlxcdFxcdFxcdFxcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgc3QpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy05MjQtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTU5Nz1zdGF0aWMgdm9pZCBtaGlfcG1fc3lzX2Vycm9yX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc1Mi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MzpcXHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzU0LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NjMtLyogUXVldWUgYSBuZXcgd29yayBpdGVtIGFuZCBzY2hlZHVsZSB3b3JrICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3NjQ6aW50IG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzY1LVxcdFxcdFxcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03ODQ9dm9pZCBtaGlfcG1fc3lzX2Vycl9oYW5kbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03OTMtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3OTQ6XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBERVZfU1RfVFJBTlNJVElPTl9TWVNfRVJSKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc5NS19XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5NS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTY6XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBuZXh0X3N0YXRlKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTctXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEyMTI9c3RhdGljIHZvaWQgX19taGlfcG93ZXJfZG93bihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgYm9vbCBncmFjZWZ1bCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1MS1cXHRpZiAoZGVzdHJveV9kZXZpY2UpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMjUyOlxcdFxcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEyNTMtXFx0XFx0XFx0XFx0XFx0ICAgREVWX1NUX1RSQU5TSVRJT05fRElTQUJMRV9ERVNUUk9ZX0RFVklDRSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjU0LVxcdGVsc2VcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjEyNTU6XFx0XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1Ni1cXHRcXHRcXHRcXHRcXHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MjkuOTc0NDgwNzc0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDczNjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIENhbGwqKlxuXG5Pa2F5LCBzbyBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4gSW50ZXJlc3RpbmcuIFRoZSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gaGVyZSBpcyB0aGF0IGBuZXh0X3N0YXRlYCBpcyBzZXQgdG8gYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoYXQncyB0aGUgc3RhdGUgaXQncyB0cmFuc2l0aW9uaW5nICp0byouICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHdoYXQgYG1oaV9hc3luY19wb3dlcl91cGAgZG9lcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4uLiBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNzAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDozNC40ODE4NDQxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMTpcXHRpbnQgbWhpX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0c3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50ID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnQ7XFxuMTEyNDpcXHRcXHRlbnVtIG1oaV9zdGF0ZSBzdGF0ZTtcXG4xMTI1OlxcdFxcdGVudW0gbWhpX2VlX3R5cGUgY3VycmVudF9lZTtcXG4xMTI2OlxcdFxcdGVudW0gZGV2X3N0X3RyYW5zaXRpb24gbmV4dF9zdGF0ZTtcXG4xMTI3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9kZXYtXFx1MDAzZWRldjtcXG4xMTI4OlxcdFxcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xcbjExMjk6XFx0XFx0aW50IHJldCwgaTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiUmVxdWVzdGVkIHRvIHBvd2VyIE9OXFxcXG5cXFwiKTtcXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0LyogU3VwcGx5IGRlZmF1bHQgd2FrZSByb3V0aW5lcyBpZiBub3QgcHJvdmlkZWQgYnkgY29udHJvbGxlciBkcml2ZXIgKi9cXG4xMTM0OlxcdFxcdGlmICghbWhpX2NudHJsLVxcdTAwM2V3YWtlX2dldCB8fCAhbWhpX2NudHJsLVxcdTAwM2V3YWtlX3B1dCB8fFxcbjExMzU6XFx0XFx0ICAgICFtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlKSB7XFxuMTEzNjpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfZ2V0ID0gbWhpX2Fzc2VydF9kZXZfd2FrZTtcXG4xMTM3OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNld2FrZV9wdXQgPSBtaGlfZGVhc3NlcnRfZGV2X3dha2U7XFxuMTEzODpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlID0gKG1oaV9jbnRybC1cXHUwMDNlZGJfYWNjZXNzIFxcdTAwMjYgTUhJX1BNX00yKSA/XFxuMTEzOTpcXHRcXHRcXHRcXHRtaGlfdG9nZ2xlX2Rldl93YWtlX25vcCA6IG1oaV90b2dnbGVfZGV2X3dha2U7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbXV0ZXgpO1xcbjExNDM6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHQvKiBTZXR1cCBCSEkgSU5UVkVDICovXFxuMTE0NjpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4xMTQ3OlxcdFxcdG1oaV93cml0ZV9yZWcobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZWJoaSwgQkhJX0lOVFZFQywgMCk7XFxuMTE0ODpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlID0gTUhJX1BNX1BPUjtcXG4xMTQ5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWUgPSBNSElfRUVfTUFYO1xcbjExNTA6XFx0XFx0Y3VycmVudF9lZSA9IG1oaV9nZXRfZXhlY19lbnYobWhpX2NudHJsKTtcXG4xMTUxOlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuMTE1MjpcXHRcXG4xMTUzOlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgZGV2aWNlIGlzIGluIHZhbGlkIGV4ZWMgZW52ICovXFxuMTE1NDpcXHRcXHRpZiAoIU1ISV9QT1dFUl9VUF9DQVBBQkxFKGN1cnJlbnRfZWUpKSB7XFxuMTE1NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzIGlzIG5vdCBhIHZhbGlkIEVFIGZvciBwb3dlciBvblxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFRPX01ISV9FWEVDX1NUUihjdXJyZW50X2VlKSk7XFxuMTE1NzpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjExNTg6XFx0XFx0XFx0Z290byBlcnJvcl9leGl0O1xcbjExNTk6XFx0XFx0fVxcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRzdGF0ZSA9IG1oaV9nZXRfbWhpX3N0YXRlKG1oaV9jbnRybCk7XFxuMTE2MjpcXHRcXHRkZXZfZGJnKGRldiwgXFxcIkF0dGVtcHRpbmcgcG93ZXIgb24gd2l0aCBFRTogJXMsIHN0YXRlOiAlc1xcXFxuXFxcIixcXG4xMTYzOlxcdFxcdFxcdFRPX01ISV9FWEVDX1NUUihjdXJyZW50X2VlKSwgbWhpX3N0YXRlX3N0cihzdGF0ZSkpO1xcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcXG4xMTY2OlxcdFxcdFxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcXG4xMTY3OlxcdFxcdFxcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlcmVncywgTUhJQ1RSTCxcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdCBNSElDVFJMX1JFU0VUX01BU0ssIDAsIGludGVydmFsX3VzLFxcbjExNjk6XFx0XFx0XFx0XFx0XFx0IG1oaV9jbnRybC1cXHUwMDNldGltZW91dF9tcyk7XFxuMTE3MDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE3MTpcXHRcXHRcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJGYWlsZWQgdG8gcmVzZXQgTUhJIGR1ZSB0byBzeXNlcnIgc3RhdGVcXFxcblxcXCIpO1xcbjExNzI6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9leGl0O1xcbjExNzM6XFx0XFx0XFx0fVxcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRcXHQvKlxcbjExNzY6XFx0XFx0XFx0ICogZGV2aWNlIGNsZWFyZXMgSU5UVkVDIGFzIHBhcnQgb2YgUkVTRVQgcHJvY2Vzc2luZyxcXG4xMTc3OlxcdFxcdFxcdCAqIHJlLXByb2dyYW0gaXRcXG4xMTc4OlxcdFxcdFxcdCAqL1xcbjExNzk6XFx0XFx0XFx0bWhpX3dyaXRlX3JlZyhtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlYmhpLCBCSElfSU5UVkVDLCAwKTtcXG4xMTgwOlxcdFxcdH1cXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0LyogSVJRcyBoYXZlIGJlZW4gcmVxdWVzdGVkIGR1cmluZyBwcm9iZSwgc28gd2UganVzdCBuZWVkIHRvIGVuYWJsZSB0aGVtLiAqL1xcbjExODM6XFx0XFx0ZW5hYmxlX2lycShtaGlfY250cmwtXFx1MDAzZWlycVswXSk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaGlfY250cmwtXFx1MDAzZXRvdGFsX2V2X3JpbmdzOyBpKyssIG1oaV9ldmVudCsrKSB7XFxuMTE4NjpcXHRcXHRcXHRpZiAobWhpX2V2ZW50LVxcdTAwM2VvZmZsb2FkX2V2KVxcbjExODc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE4ODpcXHRcXG4xMTg5OlxcdFxcdFxcdGVuYWJsZV9pcnEobWhpX2NudHJsLVxcdTAwM2VpcnFbbWhpX2V2ZW50LVxcdTAwM2VpcnFdKTtcXG4xMTkwOlxcdFxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0LyogVHJhbnNpdGlvbiB0byBuZXh0IHN0YXRlICovXFxuMTE5MzpcXHRcXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XFxuMTE5NDpcXHRcXHRcXHRERVZfU1RfVFJBTlNJVElPTl9QQkwgOiBERVZfU1RfVFJBTlNJVElPTl9SRUFEWTtcXG4xMTk1OlxcdFxcbjExOTY6XFx0XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBuZXh0X3N0YXRlKTtcXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX211dGV4KTtcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiUG93ZXIgb24gc2V0dXAgc3VjY2Vzc1xcXFxuXFxcIik7XFxuMTIwMTpcXHRcXG4xMjAyOlxcdFxcdHJldHVybiAwO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRlcnJvcl9leGl0OlxcbjEyMDU6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xcbjEyMDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX211dGV4KTtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjA5OlxcdH1cXG4xMjEwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1oaV9hc3luY19wb3dlcl91cCk7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdHN0YXRpYyB2b2lkIF9fbWhpX3Bvd2VyX2Rvd24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsIGJvb2wgZ3JhY2VmdWwsXFxuMTIxMzpcXHRcXHRcXHRcXHQgICAgIGJvb2wgZGVzdHJveV9kZXZpY2UpXFxuMTIxNDpcXHR7XFxuMTIxNTpcXHRcXHRlbnVtIG1oaV9wbV9zdGF0ZSBjdXJfc3RhdGUsIHRyYW5zaXRpb25fc3RhdGU7XFxuMTIxNjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuMTIxNzpcXHRcXG4xMjE4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbXV0ZXgpO1xcbjEyMTk6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuMTIyMDpcXHRcXHRjdXJfc3RhdGUgPSBtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDozNC40ODE5Nzc5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MTQ5MTEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3dlci1VcCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIHRoZSBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHRyYW5zaXRpb24gdGhpbmdzLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGVucXVldWluZyBlaXRoZXIgYERFVl9TVF9UUkFOU0lUSU9OX1BCTGAgb3IgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkaWN0YXRlIHdoaWNoIG9uZS4gSSBrbm93IGl0J3MgcmVhZGluZyB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IHVzaW5nIGBtaGlfZ2V0X2V4ZWNfZW52YCBhbmQgYWxzbyBjaGVja2luZyB0aGUgb3ZlcmFsbCBNSEkgc3RhdGUgd2l0aCBgbWhpX2dldF9taGlfc3RhdGVgLCB3aGljaCBpcyBub3JtYWwuIFRoZSBpbnRlcmVzdGluZyBiaXQgY29tZXMgd2l0aCB0aGUgc3l6a2FsbGVyIGVtdWxhdGlvbi4gQmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlLCBhbmQgdGhlcmVmb3JlIGNvbnRyb2wgbWVtb3J5LW1hcHBlZCBJL08sIGl0IGNhbiBlZmZlY3RpdmVseSBtYW5pcHVsYXRlIHRoZSB2YWx1ZXMgdGhlc2UgZnVuY3Rpb25zIHJldHVybi4gSSBjYW4gZmVlZCBpdCBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZXMgYW5kIHNlZSBob3cgaXQgcmVhY3RzLlxuXG5JIHNlZSBhIHZ1bG5lcmFiaWxpdHkuIFN5emthbGxlciBjb3VsZCBmb3JjZSBgbWhpX2dldF9leGVjX2VudmAgdG8gcmV0dXJuIGBNSElfRUVfQU1TU2AgKE1pc3Npb24gTW9kZSkgb3IgZXZlbiBgTUhJX0VFX1BCTGAsIHRoZSBwcmUtYm9vdCBsb2FkZXIsIGlmIGl0IHdhbnRzLiBJZiBpdCByZXR1cm5zIGBNSElfRUVfQU1TU2AsIHRoZSBgbmV4dF9zdGF0ZWAgdmFyaWFibGUgZ2V0cyBzZXQgdG8gYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpbiB0aGUgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYCBzdGF0ZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwYXRoIEkgbmVlZCB0byBleGFtaW5lIG5vdy4gV2hhdCBoYXBwZW5zIHRoZXJlLCBhbmQgd2hhdCBjYW4gZ28gd3Jvbmc/IExldCdzIHRyYWNlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzQ4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NDAuMzk2ODkxOTAzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMzEyODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVl9TVF9UUkFOU0lUSU9OX1JFQURZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9ODI9ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiB7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC04My1cXHRERVZfU1RfVFJBTlNJVElPTl9QQkwsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDo4NDpcXHRERVZfU1RfVFJBTlNJVElPTl9SRUFEWSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVxcdERFVl9TVF9UUkFOU0lUSU9OX1NCTCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzQ5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3NTA6XFx0XFx0bmV4dF9zdGF0ZSA9IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzUxLVxcdH1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzk4PXZvaWQgbWhpX3BtX3N0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ny1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjg0ODpcXHRcXHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX1JFQURZOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQ5LVxcdFxcdFxcdG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5My1cXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMTk0OlxcdFxcdERFVl9TVF9UUkFOU0lUSU9OX1BCTCA6IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NDEuOTc4MjEzMzA1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjQ5NDA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGRvbWFpbjpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYG1oaV9wbV9zdF93b3JrZXJgIFRyYW5zaXRpb24qKlxuXG5SaWdodCwgc28gYG1oaV9wbV9zdF93b3JrZXJgIGlzIG1ha2luZyBhIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoZSBzdGF0ZSB3b3JrZXIgaXMgaW5pdGlhdGluZyBzb21ldGhpbmcuXCIgQW5kIGxvb2tpbmcgYXQgdGhlIGNhbGwgaXRzZWxmLCBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsKWAsIEkgaW5zdGFudGx5IHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzdGF0ZSBjaGFuZ2UuIEl0IG1lYW5zIHdlJ3JlIG1vdmluZyB0aGUgTWFuYWdlbWVudCBIb3N0IEludGVyZmFjZSAoTUhJKSBpbnRvIGEgXCJyZWFkeVwiIHN0YXRlLCBvciBhdCBsZWFzdCwgdGhlICpwb3RlbnRpYWwqIGZvciByZWFkaW5lc3MgaXMgYmVpbmcgdHJpZ2dlcmVkLiBJIGFscmVhZHkga25vdyB0aGF0IGBtaGlfY250cmxgIGlzIHRoZSBjb250cm9sIHN0cnVjdHVyZSwgc28gdGhpcyB0cmFuc2l0aW9uIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIE1ISSdzIG1haW4gY29udHJvbCBlbGVtZW50LiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyOlxuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgdHJhbnNpdGlvbj8qKiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQgb2YgYG1oaV9wbV9zdF93b3JrZXJgLiBJcyB0aGlzIGJlaW5nIGNhbGxlZCBpbiByZXNwb25zZSB0byBhIGhhcmR3YXJlIGV2ZW50LCBhIHRpbWVyLCBvciBhIGNvbW1hbmQgZnJvbSB0aGUgaG9zdD8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlciBpcyBwYXJhbW91bnQuXG4qICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBXaGF0IGhhcHBlbnMgKmFmdGVyKiBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb25gIGlzIGNhbGxlZD8gQXJlIGludGVycnVwdHMgZW5hYmxlZCwgY2xvY2tzIGFjdGl2YXRlZCwgcG93ZXIgZG9tYWlucyB0dXJuZWQgb24/IElzIHRoaXMgYSBjb21wbGV0ZWx5IHBhc3NpdmUgdHJhbnNpdGlvbiBvciBhbiBhY3RpdmUgb25lP1xuKiAgICoqV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8qKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNpdGlvbiBpcyBtb25pdG9yZWQgdG8gc2VlIHRoYXQgaXQgd29ya3MgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IHRob3NlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQuXG5cblRoZSBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBleHBsaWNpdCwgc28gaXQgaXMganVzdCBzZXR0aW5nIHRoZSBzdGF0ZSwgYnV0IEkgY2FuJ3QgYXNzdW1lLiBTbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgcHJvY2VzcyBhbmQgdGhlIGNoZWNrcyBpdCBwZXJmb3Jtcy4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiAqaG93KiB0aGUgTUhJIGlzIHJlYWRpZWQgaXMga2V5LiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGUgTUhJIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM4OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjQ3LjUwMzE1NzUyOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdGludCBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudDtcXG4gMTczOlxcdFxcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcXG4gMTc0OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9kZXYtXFx1MDAzZWRldjtcXG4gMTc1OlxcdFxcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xcbiAxNzY6XFx0XFx0dTMyIHRpbWVvdXRfbXM7XFxuIDE3NzpcXHRcXHRpbnQgcmV0LCBpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQvKiBDaGVjayBpZiBkZXZpY2UgZW50ZXJlZCBlcnJvciBzdGF0ZSAqL1xcbiAxODA6XFx0XFx0aWYgKE1ISV9QTV9JTl9GQVRBTF9TVEFURShtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlKSkge1xcbiAxODE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgbGluayBpcyBub3QgYWNjZXNzaWJsZVxcXFxuXFxcIik7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0LyogV2FpdCBmb3IgUkVTRVQgdG8gYmUgY2xlYXJlZCBhbmQgUkVBRFkgYml0IHRvIGJlIHNldCBieSB0aGUgZGV2aWNlICovXFxuIDE4NjpcXHRcXHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZXJlZ3MsIE1ISUNUUkwsXFxuIDE4NzpcXHRcXHRcXHRcXHRcXHQgTUhJQ1RSTF9SRVNFVF9NQVNLLCAwLCBpbnRlcnZhbF91cyxcXG4gMTg4OlxcdFxcdFxcdFxcdFxcdCBtaGlfY250cmwtXFx1MDAzZXRpbWVvdXRfbXMpO1xcbiAxODk6XFx0XFx0aWYgKHJldCkge1xcbiAxOTA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgZmFpbGVkIHRvIGNsZWFyIE1ISSBSZXNldFxcXFxuXFxcIik7XFxuIDE5MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHR0aW1lb3V0X21zID0gbWhpX2NudHJsLVxcdTAwM2VyZWFkeV90aW1lb3V0X21zID9cXG4gMTk1OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNlcmVhZHlfdGltZW91dF9tcyA6IG1oaV9jbnRybC1cXHUwMDNldGltZW91dF9tcztcXG4gMTk2OlxcdFxcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlcmVncywgTUhJU1RBVFVTLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0IE1ISVNUQVRVU19SRUFEWV9NQVNLLCAxLCBpbnRlcnZhbF91cyxcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdCB0aW1lb3V0X21zKTtcXG4gMTk5OlxcdFxcdGlmIChyZXQpIHtcXG4gMjAwOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBNSEkgUmVhZHlcXFxcblxcXCIpO1xcbiAyMDE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjAyOlxcdFxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJEZXZpY2UgaW4gUkVBRFkgU3RhdGVcXFxcblxcXCIpO1xcbiAyMDU6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDIwNjpcXHRcXHRjdXJfc3RhdGUgPSBtaGlfdHJ5c2V0X3BtX3N0YXRlKG1oaV9jbnRybCwgTUhJX1BNX1BPUik7XFxuIDIwNzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZWRldl9zdGF0ZSA9IE1ISV9TVEFURV9SRUFEWTtcXG4gMjA4OlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGlmIChjdXJfc3RhdGUgIT0gTUhJX1BNX1BPUikge1xcbiAyMTE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJFcnJvciBtb3ZpbmcgdG8gc3RhdGUgJXMgZnJvbSAlc1xcXFxuXFxcIixcXG4gMjEyOlxcdFxcdFxcdFxcdHRvX21oaV9wbV9zdGF0ZV9zdHIoTUhJX1BNX1BPUiksXFxuIDIxMzpcXHRcXHRcXHRcXHR0b19taGlfcG1fc3RhdGVfc3RyKGN1cl9zdGF0ZSkpO1xcbiAyMTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDIxNTpcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdHJlYWRfbG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjE4OlxcdFxcdGlmICghTUhJX1JFR19BQ0NFU1NfVkFMSUQobWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSkpIHtcXG4gMjE5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlIHJlZ2lzdGVycyBub3QgYWNjZXNzaWJsZVxcXFxuXFxcIik7XFxuIDIyMDpcXHRcXHRcXHRnb3RvIGVycm9yX21taW87XFxuIDIyMTpcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdC8qIENvbmZpZ3VyZSBNTUlPIHJlZ2lzdGVycyAqL1xcbiAyMjQ6XFx0XFx0cmV0ID0gbWhpX2luaXRfbW1pbyhtaGlfY250cmwpO1xcbiAyMjU6XFx0XFx0aWYgKHJldCkge1xcbiAyMjY6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJFcnJvciBjb25maWd1cmluZyBNTUlPIHJlZ2lzdGVyc1xcXFxuXFxcIik7XFxuIDIyNzpcXHRcXHRcXHRnb3RvIGVycm9yX21taW87XFxuIDIyODpcXHRcXHR9XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdC8qIEFkZCBlbGVtZW50cyB0byBhbGwgU1cgZXZlbnQgcmluZ3MgKi9cXG4gMjMxOlxcdFxcdG1oaV9ldmVudCA9IG1oaV9jbnRybC1cXHUwMDNlbWhpX2V2ZW50O1xcbiAyMzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1oaV9jbnRybC1cXHUwMDNldG90YWxfZXZfcmluZ3M7IGkrKywgbWhpX2V2ZW50KyspIHtcXG4gMjMzOlxcdFxcdFxcdHN0cnVjdCBtaGlfcmluZyAqcmluZyA9IFxcdTAwMjZtaGlfZXZlbnQtXFx1MDAzZXJpbmc7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdC8qIFNraXAgaWYgdGhpcyBpcyBhbiBvZmZsb2FkIG9yIEhXIGV2ZW50ICovXFxuIDIzNjpcXHRcXHRcXHRpZiAobWhpX2V2ZW50LVxcdTAwM2VvZmZsb2FkX2V2IHx8IG1oaV9ldmVudC1cXHUwMDNlaHdfcmluZylcXG4gMjM3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRyaW5nLVxcdTAwM2V3cCA9IHJpbmctXFx1MDAzZWJhc2UgKyByaW5nLVxcdTAwM2VsZW4gLSByaW5nLVxcdTAwM2VlbF9zaXplO1xcbiAyNDA6XFx0XFx0XFx0KnJpbmctXFx1MDAzZWN0eHRfd3AgPSBjcHVfdG9fbGU2NChyaW5nLVxcdTAwM2Vpb21tdV9iYXNlICsgcmluZy1cXHUwMDNlbGVuIC0gcmluZy1cXHUwMDNlZWxfc2l6ZSk7XFxuIDI0MTpcXHRcXHRcXHQvKiBVcGRhdGUgYWxsIGNvcmVzICovXFxuIDI0MjpcXHRcXHRcXHRzbXBfd21iKCk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdFxcdC8qIFJpbmcgdGhlIGV2ZW50IHJpbmcgZGIgKi9cXG4gMjQ1OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1oaV9ldmVudC1cXHUwMDNlbG9jayk7XFxuIDI0NjpcXHRcXHRcXHRtaGlfcmluZ19lcl9kYihtaGlfZXZlbnQpO1xcbiAyNDc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtaGlfZXZlbnQtXFx1MDAzZWxvY2spO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHQvKiBTZXQgTUhJIHRvIE0wIHN0YXRlICovXFxuIDI1MTpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XFxuIDI1MjpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdGVycm9yX21taW86XFxuIDI1NzpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0cmV0dXJuIC1FSU87XFxuIDI2MDpcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdGludCBtaGlfcG1fbTBfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4gMjYzOlxcdHtcXG4gMjY0OlxcdFxcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcXG4gMjY1OlxcdFxcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuIDI2NzpcXHRcXHRpbnQgaTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjQ3LjUwMzI5ODc5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE2NTM0OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNSEkgUmVhZHkgU3RhdGUgVHJhbnNpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBjcnVjaWFsIGZvciBnZXR0aW5nIHRoZSBNSEkgY29udHJvbGxlciByZWFkeS4gSXQncyBwb2xsaW5nIHR3byByZWdpc3RlcnMsIGBNSElDVFJMX1JFU0VUX01BU0tgIGFuZCBgTUhJU1RBVFVTX1JFQURZX01BU0tgLCBtYWtlcyBzZW5zZS4gVGhlIGtleSBpcyBpbiBob3cgc3l6a2FsbGVyJ3MgUENJIGVtdWxhdG9yIHJlc3BvbmRzLiBJZiBpdCByZXR1cm5zIDAgZm9yIHRoZSByZXNldCBtYXNrIGFuZCAxIGZvciB0aGUgcmVhZHkgbWFzaywgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlcy4gR3JlYXQuIFRoZW4sIHRoZSBzeXN0ZW0gc2V0cyB0aGUgTUhJIHN0YXRlIHRvIGBNSElfU1RBVEVfTTBgLlxuXG5XYWl0IGEgbWludXRlLCBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHdyaXRpbmcgdG8gYE1ISUNUUkxgIHdoaWNoIHdvdWxkIGJlIHdoYXQncyBjb250cm9sbGVkIGJ5IHRoZSBQQ0kgZW11bGF0b3IuIFRoYXQncyBhIGdvb2QgY29ubmVjdGlvbiB0byBtYWtlLiBCdXQsIHdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGUgc3lzdGVtIHJlYWNoZXMgYSBwb2ludCB0aGF0IGl0IGNhbiBjaGVjayB0aGlzIGZ1bmN0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgd2hvIGlzIHF1ZXVpbmcgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWA/IFRoaXMgdHJhbnNpdGlvbiBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB3aGF0IHN0YXRlIHRoZSBzeXN0ZW0gaXMgaW4uIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoYXQncyBiZWluZyBzZXQgdXAgYW5kIHF1ZXVlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoYXQncyBjb21pbmcgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDo1Mi4yMTk4MzcxNjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njg4ODM0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9ODI9ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiB7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVxcdERFVl9TVF9UUkFOU0lUSU9OX1NCTCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg2OlxcdERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg3LVxcdERFVl9TVF9UUkFOU0lUSU9OX0ZQLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTc5OT1pbnQgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkwNS1cXHRcXHRcXHRjYXNlIE1ISV9FRV9BTVNTOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYzo5MDY6XFx0XFx0XFx0XFx0c3QgPSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkwNy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzk4PXZvaWQgbWhpX3BtX3N0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzNy1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjgzODpcXHRcXHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERTpcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzOS1cXHRcXHRcXHRtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NTQuMDg4NzI2MzkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDkyOTcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIEV2ZW50IFF1ZXVlKipcblxuUmlnaHQsIHNvIHRoaXMgbmV3IGV2ZW50IGlzIHF1ZXVlZCB1cC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBsYW5kaW5nIGluIHRoZSBgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSwgdGhvdWdoIHRoZSBjb250ZXh0IHdvdWxkIGNsYXJpZnkgcHJlY2lzZWx5IHdoaWNoIGltcGxlbWVudGF0aW9uKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgY29udHJvbCBwbGFuZSBvciBldmVudCBoYW5kbGluZyBmb3IgdGhhdCBpbnRlcmZhY2UuIFRoZSBcInJpbmdcIiBlbGVtZW50IHN1Z2dlc3RzIGEgY2lyY3VsYXIgYnVmZmVyIG9yIGEgZGVkaWNhdGVkIHF1ZXVlaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGV4ZWN1dGlvbiBtb2RlbCwgb3IgYXQgbGVhc3QgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTXkgaW1tZWRpYXRlIGxpbmUgb2YgdGhpbmtpbmcgd2lsbCBnbyBkb3duIHRoZSBmb2xsb3dpbmc6XG5cbiogICAqKlVuZGVyc3RhbmRpbmcgdGhlIEV2ZW50IFR5cGUqKjogSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbnRlbnQgb2YgdGhpcyBldmVudC4gV2hhdCBwYXJhbWV0ZXJzIGFyZSBhc3NvY2lhdGVkIHdpdGggaXQ/IFdoYXQgZG9lcyBpdCBzaWduYWw/IERvZXMgaXQgcmVwcmVzZW50IGEgY29tbWFuZCwgYSBzdGF0dXMgdXBkYXRlLCBvciBhbiBlcnJvciBjb25kaXRpb24/IFRoZSB0eXBlIG9mIGV2ZW50IGRpY3RhdGVzIHRoZSBuZWNlc3NhcnkgcmVzcG9uc2UsIHdoaWNoIGRpY3RhdGVzIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLlxuKiAgICoqQ29udGV4dCB3aXRoaW4gdGhlIFN5c3RlbSoqOiBUaGUgTUhJIGlzIGEgYnVzLiBNeSBrbm93bGVkZ2Ugb2YgdGhlIHdpZGVyIHN5c3RlbSdzIHRvcG9sb2d5IGlzIG5lY2Vzc2FyeSBoZXJlLiBXaGVyZSBkb2VzIHRoaXMgZXZlbnQgb3JpZ2luYXRlIGFuZCB3aGVyZSBpcyBpdCBnb2luZz8gVGhpcyBoZWxwcyB1bmRlcnN0YW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGNyaXRpY2FsIGNvbnRyb2wgcGF0aCwgb3IgbG93ZXIgcHJpb3JpdHk/XG4qICAgKipQb3RlbnRpYWwgQm90dGxlbmVja3MqKjogV2l0aCBhIHF1ZXVlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2sgYXJlYXMuIFdoYXQgaXMgdGhlIHByb2Nlc3NpbmcgbGF0ZW5jeSBmb3IgZXZlbnRzIGluIHRoaXMgcmluZz8gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBxdWV1ZSBvdmVyZmxvdyBvciBzdGFydmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGxhdGVuY3kgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLCByZWFsLXRpbWUgY29uc3RyYWludHMsIGFuZCBzdGFiaWxpdHk/XG4qICAgKipFcnJvciBIYW5kbGluZyoqOiBMZXQncyBzZWUuIElmIHNvbWV0aGluZyB3ZW50IHdyb25nLCB3aGVyZSdzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGlzIHRoZSBxdWV1ZSBwcm90ZWN0ZWQ/IENhbiBpdCBiZSBjb3JydXB0ZWQsIG92ZXJmbG93IG9yIGJlY29tZSBjb3JydXB0ZWQuIERvZXMgaXQgaGF2ZSB0aGUgcmVxdWlyZWQgcHJvdGVjdGlvbiBtZWNoYW5pc21zP1xuXG5TbywgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGRpc3NlY3RpbmcgdGhlIGV2ZW50IGl0c2VsZiBhbmQgbWFwcGluZyBpdCBvbnRvIHRoZSBsYXJnZXIgTUhJIGNvbnRyb2wgYXJjaGl0ZWN0dXJlLiBJdCdzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHNwZWNpZmljIGV2ZW50J3MgaW1wYWN0IGFuZCBuZWNlc3NhcnkgcHJvY2Vzc2luZyBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTowMC4xOTgwMjYwMDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk5OlxcdGludCBtaGlfcHJvY2Vzc19jdHJsX2V2X3Jpbmcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuIDgwMDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudCxcXG4gODAxOlxcdFxcdFxcdFxcdCAgICAgdTMyIGV2ZW50X3F1b3RhKVxcbiA4MDI6XFx0e1xcbiA4MDM6XFx0XFx0c3RydWN0IG1oaV9yaW5nX2VsZW1lbnQgKmRldl9ycCwgKmxvY2FsX3JwO1xcbiA4MDQ6XFx0XFx0c3RydWN0IG1oaV9yaW5nICpldl9yaW5nID0gXFx1MDAyNm1oaV9ldmVudC1cXHUwMDNlcmluZztcXG4gODA1OlxcdFxcdHN0cnVjdCBtaGlfZXZlbnRfY3R4dCAqZXJfY3R4dCA9XFxuIDgwNjpcXHRcXHRcXHRcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfY3R4dC1cXHUwMDNlZXJfY3R4dFttaGlfZXZlbnQtXFx1MDAzZWVyX2luZGV4XTtcXG4gODA3OlxcdFxcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XFxuIDgwODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuIDgwOTpcXHRcXHR1MzIgY2hhbjtcXG4gODEwOlxcdFxcdGludCBjb3VudCA9IDA7XFxuIDgxMTpcXHRcXHRkbWFfYWRkcl90IHB0ciA9IGxlNjRfdG9fY3B1KGVyX2N0eHQtXFx1MDAzZXJwKTtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0LypcXG4gODE0OlxcdFxcdCAqIFRoaXMgaXMgYSBxdWljayBjaGVjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBldmVudCBwcm9jZXNzaW5nXFxuIDgxNTpcXHRcXHQgKiBpbiBjYXNlIE1ISSBpcyBhbHJlYWR5IGluIGVycm9yIHN0YXRlLCBidXQgaXQncyBzdGlsbCBwb3NzaWJsZVxcbiA4MTY6XFx0XFx0ICogdG8gdHJhbnNpdGlvbiB0byBlcnJvciBzdGF0ZSB3aGlsZSBwcm9jZXNzaW5nIGV2ZW50c1xcbiA4MTc6XFx0XFx0ICovXFxuIDgxODpcXHRcXHRpZiAodW5saWtlbHkoTUhJX0VWRU5UX0FDQ0VTU19JTlZBTElEKG1oaV9jbnRybC1cXHUwMDNlcG1fc3RhdGUpKSlcXG4gODE5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHRpZiAoIWlzX3ZhbGlkX3JpbmdfcHRyKGV2X3JpbmcsIHB0cikpIHtcXG4gODIyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlbWhpX2Rldi1cXHUwMDNlZGV2LFxcbiA4MjM6XFx0XFx0XFx0XFx0XFxcIkV2ZW50IHJpbmcgcnAgcG9pbnRzIG91dHNpZGUgb2YgdGhlIGV2ZW50IHJpbmdcXFxcblxcXCIpO1xcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDgyNTpcXHRcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdGRldl9ycCA9IG1oaV90b192aXJ0dWFsKGV2X3JpbmcsIHB0cik7XFxuIDgyODpcXHRcXHRsb2NhbF9ycCA9IGV2X3JpbmctXFx1MDAzZXJwO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHR3aGlsZSAoZGV2X3JwICE9IGxvY2FsX3JwKSB7XFxuIDgzMTpcXHRcXHRcXHRlbnVtIG1oaV9wa3RfdHlwZSB0eXBlID0gTUhJX1RSRV9HRVRfRVZfVFlQRShsb2NhbF9ycCk7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdFxcdHRyYWNlX21oaV9jdHJsX2V2ZW50KG1oaV9jbnRybCwgbG9jYWxfcnApO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gODM2OlxcdFxcdFxcdGNhc2UgTUhJX1BLVF9UWVBFX0JXX1JFUV9FVkVOVDpcXG4gODM3OlxcdFxcdFxcdHtcXG4gODM4OlxcdFxcdFxcdFxcdHN0cnVjdCBtaGlfbGlua19pbmZvICpsaW5rX2luZm87XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdFxcdFxcdGxpbmtfaW5mbyA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9saW5rX2luZm87XFxuIDg0MTpcXHRcXHRcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gODQyOlxcdFxcdFxcdFxcdGxpbmtfaW5mby1cXHUwMDNldGFyZ2V0X2xpbmtfc3BlZWQgPVxcbiA4NDM6XFx0XFx0XFx0XFx0XFx0TUhJX1RSRV9HRVRfRVZfTElOS1NQRUVEKGxvY2FsX3JwKTtcXG4gODQ0OlxcdFxcdFxcdFxcdGxpbmtfaW5mby1cXHUwMDNldGFyZ2V0X2xpbmtfd2lkdGggPVxcbiA4NDU6XFx0XFx0XFx0XFx0XFx0TUhJX1RSRV9HRVRfRVZfTElOS1dJRFRIKGxvY2FsX3JwKTtcXG4gODQ2OlxcdFxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg0NzpcXHRcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlJlY2VpdmVkIEJXX1JFUSBldmVudFxcXFxuXFxcIik7XFxuIDg0ODpcXHRcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXN0YXR1c19jYihtaGlfY250cmwsIE1ISV9DQl9CV19SRVEpO1xcbiA4NDk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg1MDpcXHRcXHRcXHR9XFxuIDg1MTpcXHRcXHRcXHRjYXNlIE1ISV9QS1RfVFlQRV9TVEFURV9DSEFOR0VfRVZFTlQ6XFxuIDg1MjpcXHRcXHRcXHR7XFxuIDg1MzpcXHRcXHRcXHRcXHRlbnVtIG1oaV9zdGF0ZSBuZXdfc3RhdGU7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdFxcdFxcdG5ld19zdGF0ZSA9IE1ISV9UUkVfR0VUX0VWX1NUQVRFKGxvY2FsX3JwKTtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJTdGF0ZSBjaGFuZ2UgZXZlbnQgdG8gc3RhdGU6ICVzXFxcXG5cXFwiLFxcbiA4NTg6XFx0XFx0XFx0XFx0XFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0XFx0XFx0c3dpdGNoIChuZXdfc3RhdGUpIHtcXG4gODYxOlxcdFxcdFxcdFxcdGNhc2UgTUhJX1NUQVRFX00wOlxcbiA4NjI6XFx0XFx0XFx0XFx0XFx0bWhpX3BtX20wX3RyYW5zaXRpb24obWhpX2NudHJsKTtcXG4gODYzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NjQ6XFx0XFx0XFx0XFx0Y2FzZSBNSElfU1RBVEVfTTE6XFxuIDg2NTpcXHRcXHRcXHRcXHRcXHRtaGlfcG1fbTFfdHJhbnNpdGlvbihtaGlfY250cmwpO1xcbiA4NjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg2NzpcXHRcXHRcXHRcXHRjYXNlIE1ISV9TVEFURV9NMzpcXG4gODY4OlxcdFxcdFxcdFxcdFxcdG1oaV9wbV9tM190cmFuc2l0aW9uKG1oaV9jbnRybCk7XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODcwOlxcdFxcdFxcdFxcdGNhc2UgTUhJX1NUQVRFX1NZU19FUlI6XFxuIDg3MTpcXHRcXHRcXHRcXHR7XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRlbnVtIG1oaV9wbV9zdGF0ZSBwbV9zdGF0ZTtcXG4gODczOlxcdFxcbiA4NzQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJTeXN0ZW0gZXJyb3IgZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbiA4NzU6XFx0XFx0XFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg3NjpcXHRcXHRcXHRcXHRcXHRwbV9zdGF0ZSA9IG1oaV90cnlzZXRfcG1fc3RhdGUobWhpX2NudHJsLFxcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TUhJX1BNX1NZU19FUlJfREVURUNUKTtcXG4gODc4OlxcdFxcdFxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRpZiAocG1fc3RhdGUgPT0gTUhJX1BNX1NZU19FUlJfREVURUNUKVxcbiA4ODA6XFx0XFx0XFx0XFx0XFx0XFx0bWhpX3BtX3N5c19lcnJfaGFuZGxlcihtaGlfY250cmwpO1xcbiA4ODE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4MjpcXHRcXHRcXHRcXHR9XFxuIDg4MzpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIHN0YXRlOiAlc1xcXFxuXFxcIixcXG4gODg1OlxcdFxcdFxcdFxcdFxcdFxcdG1oaV9zdGF0ZV9zdHIobmV3X3N0YXRlKSk7XFxuIDg4NjpcXHRcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4ODk6XFx0XFx0XFx0fVxcbiA4OTA6XFx0XFx0XFx0Y2FzZSBNSElfUEtUX1RZUEVfQ01EX0NPTVBMRVRJT05fRVZFTlQ6XFxuIDg5MTpcXHRcXHRcXHRcXHRtaGlfcHJvY2Vzc19jbWRfY29tcGxldGlvbihtaGlfY250cmwsIGxvY2FsX3JwKTtcXG4gODkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4OTM6XFx0XFx0XFx0Y2FzZSBNSElfUEtUX1RZUEVfRUVfRVZFTlQ6XFxuIDg5NDpcXHRcXHRcXHR7XFxuIDg5NTpcXHRcXHRcXHRcXHRlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0ID0gREVWX1NUX1RSQU5TSVRJT05fTUFYO1xcbiA4OTY6XFx0XFx0XFx0XFx0ZW51bSBtaGlfZWVfdHlwZSBldmVudCA9IE1ISV9UUkVfR0VUX0VWX0VYRUNFTlYobG9jYWxfcnApO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlJlY2VpdmVkIEVFIGV2ZW50OiAlc1xcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MDAuMTk4MTUyNDU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjgyNzM0MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIE5ldyBXV0FOIENvZGUgaW4gTUhJIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhpcyBuZXcgV1dBTiBmdW5jdGlvbmFsaXR5LCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHRoZSBNSEkgY29udHJvbCBldmVudCByaW5nLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQgb3IgYSB0YXNrbGV0LCByaWdodD9cblxuVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHN5emthbGxlciBlbXVsYXRlcyBhIFBDSSBkZXZpY2UsIHdoaWNoIHRoZW4gaWRlYWxseSB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQsIG1hcHBpbmcgdGhlIGV2ZW50IHJpbmcgd2l0aCBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBjb250YWluaW5nIGBNSElfRUVfQU1TU2AuIFRoaXMgZXZlbnQgdGhlbiBxdWV1ZXMgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoZSBrZXJuZWwgdGhlbiBjYWxscyBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCwgYW5kIHRoZSBjcnV4IG9mIGl0IGFsbCwgYG1oaV9jcmVhdGVfZGV2aWNlc2AsIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjcmVhdGVzIE1ISSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBjaGFubmVscyBkZWZpbmVkIGluIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYElQX0NUUkxgIGNoYW5uZWxzLCBtZWFuaW5nIHRoYXQgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgUENJIGRldmljZSBtYXRjaGluZyB0aGUgU2llcnJhIEVNOTE5eCBJRCAodGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jYCksIHRoZSBzeXN0ZW0gd2lsbCB1c2UgYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gU28sIGBtaGlfY3JlYXRlX2RldmljZXNgIGNyZWF0ZXMgYW4gYElQX0NUUkxgIGRldmljZS4gRnJvbSB0aGVyZSwgYG1oaV93d2FuX2R0cl9wcm9iZWAgaXMgY2FsbGVkIHRvIHJlZ2lzdGVyIHRoaXMgZGV2aWNlLlxuXG5Ob3csIGlmIHN5emthbGxlciB0aGVuIG9wZW5zIGEgV1dBTiBBVCBwb3J0IChwb3RlbnRpYWxseSBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBmb3IgY2hhbm5lbHMgbGlrZSBgRFVOYCBvciBgTUJJTWApLCB3ZSBoaXQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWhpX3d3YW5fY3RybF9wcm9iZWAgY3JlYXRlcyBXV0FOIHBvcnRzIGZvciBgRFVOYCwgYE1CSU1gLCBldGMuIElmIHN5emthbGxlciBjcmVhdGVzIHRoZSBgRFVOYCBjaGFubmVsIGRldmljZSwgdGhlbiBgbWhpX3d3YW5fY3RybF9wcm9iZWAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIGEgV1dBTiBwb3J0ISBUaGVuIHN5emthbGxlciBjYW4gb3BlbiB0aGlzIHBvcnQsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYHd3YW5fcG9ydF9vcF9zdGFydGAgYW5kIGZpbmFsbHksIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYC4gVGhpcyBpbiB0dXJuIGNhbGxzIGBtaGlfd3dhbl9jdHJsX2R0cl9ydHNgLCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfc2VuZF9kdHJgLiBUaGlzIGZ1bmN0aW9uIHF1ZXVlcyBhIGJ1ZmZlciB0byB0aGUgYElQX0NUUkxgIGNoYW5uZWwgZGV2aWNlIHVzaW5nIGBtaGlfcXVldWVfYnVmYC5cblxuU28sIHRoZSBlbnRpcmUgZmxvdyBoaW5nZXMgb24gc3l6a2FsbGVyICpzdWNjZXNzZnVsbHkqIGVtdWxhdGluZyB0aGUgTUhJIFBDSSBkZXZpY2UgYW5kIGl0cyBldmVudCByaW5ncy4gQnV0IGRvZXMgaXQ/IFRoZSBnZW5lcmljIFBDSSBlbXVsYXRvciBpbiBzeXprYWxsZXIgY2FuIG1hcCBCQVJzIGFuZCB0cmlnZ2VyIGludGVycnVwdHMsIGJ1dCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIE1ISSBldmVudCByaW5nIG1lbW9yeSBsYXlvdXQuIFRoZSBNSEkgaG9zdCBkcml2ZXIgYWxsb2NhdGVzIHRoZSBldmVudCByaW5nIG1lbW9yeSBhbmQgY29tbXVuaWNhdGVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gdGhlIGRldmljZSB2aWEgTU1JTyByZWdpc3RlcnMuIFRoZSBkZXZpY2UgKG9yIGVtdWxhdG9yKSBpcyBzdXBwb3NlZCB0byB3cml0ZSBNSEkgZXZlbnRzIHRvIHRoZXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFRoZSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24ndCByZWFkIHRoZXNlIE1NSU8gcmVnaXN0ZXJzIHRvIGZpbmQgdGhlIGV2ZW50IHJpbmcgYWRkcmVzc2VzLiBOZWl0aGVyIGRvZXMgaXQgd3JpdGUgdGhlIE1ISSBldmVudHMuIFRoZXJlZm9yZSwgdGhlcmUncyBubyB3YXkgdG8gdHJpZ2dlciBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBvciBhbnkgb3RoZXIgTUhJIGV2ZW50cy4gU2luY2Ugd2UgY2Fubm90IGdlbmVyYXRlIE1ISSBldmVudHMsIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgIHdvbid0IGRldGVjdCBhbnl0aGluZywgYW5kIHRoZSBmbG93IGNvbXBsZXRlbHkgYnJlYWtzIGRvd24uIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgIGlzbid0IHF1ZXVlZC4gTm8gZGV2aWNlcyBnZXQgY3JlYXRlZCwgbm8gV1dBTiBwb3J0cyBhcmUgbWFkZSwgYW5kIHRoZSBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGFuZCBgbWhpX3d3YW5fY3RybC5jYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5XYWl0LCBhcmUgdGhlcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGdldCBXV0FOIHBvcnRzPyBJIHJlbWVtYmVyIGB3d2FuX2h3c2ltLmNgIGNyZWF0aW5nIHRoZW0uIEJ1dCwgY2hlY2tpbmcgYmFjayBpbiB0aGF0IHBhdGgsIGl0IGRvZXMgKm5vdCogc2V0IGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYC4gU28sIHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgd291bGQgbm90IGJlIHJlYWNoZWQgdGhyb3VnaCB0aGlzIG1lYW5zIGVpdGhlci4gT2theSwgSSdsbCBkb3VibGUgY2hlY2sgdGhlIG90aGVyIGRyaXZlcnMgaW4gY2FzZSB0aGV5IGFyZSBzZXR0aW5nIGBkdHJfcnRzYCwgYnV0IG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhleSB3aWxsIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMToxNi40ODA4ODg3OTRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjM4ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuZHRyX3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVxcdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0OlxcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMToxNi41MzQ1MzM2OTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1MDM3NzcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBEVFIvUlRTIGNoZWNraW5nIGxvZ2ljIHdpdGhpbiBgd3dhbl9jb3JlLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcG9ydHMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNvbnN0cmFpbnQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWhpX3d3YW5fY3RybC5jYCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgTUhJIGRldmljZXMsIGFuZCB0aGVzZSBhcmVuJ3QgeW91ciBydW4tb2YtdGhlLW1pbGwgUENJIGRldmljZXMuIFRoZXkgZGVtYW5kIHNvcGhpc3RpY2F0ZWQgRE1BIGFuZCByaW5nIGludGVyYWN0aW9ucywgc29tZXRoaW5nIHN5emthbGxlcidzIGdlbmVyaWMgUENJIGVtdWxhdG9yIGp1c3QgaXNuJ3QgYnVpbHQgdG8gaGFuZGxlLiBUaHVzLCB0aGUgY29uZGl0aW9uIGZvciB0aGlzIGNoZWNrIHRvIGJlIGV2YWx1YXRlZCBpcyB0aGF0IHRoZSBwb3J0IHdhcyBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLCBhbmQgdGhhdCdzIG5vdCBwb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkLCBzeXprYWxsZXItZHJpdmVuIGVudmlyb25tZW50LiBUaGlzIGNvZGUgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUuXG5cbkJ1dCBJJ20gYSBiaXQgb2YgYSBzdGlja2xlciBmb3IgdGhvcm91Z2huZXNzLCBzbyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlcmUncyAqbm8qIG90aGVyIHJvdXRlIHRvIGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfcHJvYmVgLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IGRldmljZXMgZGlyZWN0bHkgb250byB0aGUgYG1oaWAgYnVzPyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIHN5c2ZzIG9yIGFueXRoaW5nIHNpbWlsYXIgY291bGQgb2ZmZXIgYSBiYWNrZG9vci4gR290dGEgcnVsZSBvdXQgZXZlcnkgcG9zc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Njk1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjI0Ljk4NDkxNDkwOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjY5NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfYWxsb2NfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXFx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTAxMDpcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyOC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzIwLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcXHRcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXFx0XFx0aWYgKElTX0VSUihtaGlfZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MjYuNTc3NjE1ODcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDU3ODMwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBNSEkgRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gYG1oaV9hbGxvY19kZXZpY2VgIHNlZW1zIHRvIGJlIGFuIGludGVybmFsIGZ1bmN0aW9uLCBub3Qgc29tZXRoaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBvdXRzaWRlLiBUaGF0IGVsaW1pbmF0ZXMgdGhlIG1vc3Qgb2J2aW91cyBwb3RlbnRpYWwgc291cmNlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgZHJpdmVyKHMpIGFyZSBhY3R1YWxseSByZXNwb25zaWJsZSBmb3IgKmNyZWF0aW5nKiBNSEkgZGV2aWNlcyBpbiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2UgTUhJIGhvc3QgZGV2aWNlcyBhcmUgYmVpbmcgcmVnaXN0ZXJlZC5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIE1ISSBlbmRwb2ludCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgZHJpdmVycy9idXMvbWhpL2VwL2A/IFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBhbnl0aGluZyB0byBkbyB3aXRoIE1ISSBlbmRwb2ludCBkZXZpY2VzLiBCdXQsIG5vLCB3YWl0Li4uIHRoYXQgZnJhbWV3b3JrIGZvY3VzZXMgb24gKmVuZHBvaW50KiBkZXZpY2VzLiBJJ20gbG9va2luZyBmb3IgaG9zdCBkZXZpY2VzIGhlcmUsIHRoZSBvbmVzIHRoYXQgKmhvc3QqIHRoZSBNSEkgY29tbXVuaWNhdGlvbi5cblxuSGFuZyBvbi4uLiBpcyB0aGVyZSBhIGxvb3BiYWNrIGRyaXZlciBmb3IgTUhJLCBwZXJoYXBzPyBUaGF0J3MgYSBwb3NzaWJpbGl0eSBJIGhhZG4ndCBjb25zaWRlcmVkLiBBIGxvb3BiYWNrIGNvdWxkIGJlIGNyZWF0aW5nIGEgdmlydHVhbCBNSEkgaG9zdCwgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcHVycG9zZXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGFuZ2xlLiBJdCdzIGEga2V5IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjM1Ljc4MzQwMTY4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjUzMzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcmVnaXN0ZXJfY29udHJvbGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0LTI0LSogQWxsb2NhdGVzIHN0cnVjdCBtaGlfY29udHJvbGxlciBhbmQgcmVnaXN0ZXJzIHdpdGggdGhlIE1ISSBidXMgZnJhbWV3b3JrXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cXG5Eb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3QtMjYtKiBJbml0aWF0ZXMgcG93ZXIgb24gYW5kIHNodXRkb3duIHNlcXVlbmNlXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODI2LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04MjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXFx0bWhpX2NvbmZpZy50aW1lb3V0X21zID0gbWhpX3RpbWVvdXRfbXM7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM6ODc2OlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXFx1MDAyNm1oaV9jb25maWcpO1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTg3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM6ODc4OlxcdFxcdHBjaV9lcnIocGNpX2RldiwgXFxcIm1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIGZhaWxlZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzktXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmg6OTpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaC0xMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYz01NzA9c3RhdGljIGludCBxYWljX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jOjU5NzpcXHRxZGV2LVxcdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXFx1MDAzZWJhcl9taGksIG1oaV9pcnEsXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBxZGV2LVxcdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTkxOC1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtOTIwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjEwNTc6RVhQT1JUX1NZTUJPTF9HUEwobWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDU4LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xMzYzPXN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTQzODpcXHRlcnIgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtNDA5LVxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6NDEwOlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYy00MTEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODc9aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6MjY1OlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VtaGlfY29uZmlnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTI2Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oPTI5Mz1zdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgxLSAqIEZpZWxkcyBtYXJrZWQgYXMgKHJlcXVpcmVkKSBuZWVkIHRvIGJlIHBvcHVsYXRlZCBieSB0aGUgY29udHJvbGxlciBkcml2ZXJcXG5pbmNsdWRlL2xpbnV4L21oaS5oOjM4MjogKiBiZWZvcmUgY2FsbGluZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcigpLiBGb3IgdGhlIGZpZWxkcyBtYXJrZWQgYXMgKG9wdGlvbmFsKVxcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oPTU0Mz12b2lkIG1oaV9mcmVlX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01NDUtLyoqXFxuaW5jbHVkZS9saW51eC9taGkuaDo1NDY6ICogbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgLSBSZWdpc3RlciBNSEkgY29udHJvbGxlclxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0OS0gKi9cXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuaW5jbHVkZS9saW51eC9taGkuaC01NTEtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqY29uZmlnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MzcuNDI5OTQxMDQ3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzY5NTU1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgYG1oaV93d2FuX2N0cmxfcHJvYmVgIHdpdGhvdXQgYW4gTUhJIGRldmljZSwgYW5kIHRoYXQgb25seSBoYXBwZW5zIGlmIHRoZSBNSEkgY29udHJvbGxlciBpbml0aWFsaXplcyBhbmQgZW50ZXJzIG1pc3Npb24gbW9kZS4gVGhhdCBtaXNzaW9uIG1vZGUgdHJhbnNpdGlvbiByZWxpZXMgb24gcmVjZWl2aW5nIGFuIGBNSElfUEtUX1RZUEVfRUVfRVZFTlRgIHdpdGggYE1ISV9FRV9BTVNTYCBpbiBpdHMgZXZlbnQgcmluZywgd2hpY2ggdGhlIGhhcmR3YXJlIHBvcHVsYXRlcyB2aWEgRE1BLiBDcnVjaWFsbHksIHRoZSBnZW5lcmljIFBDSSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24ndCBpbXBsZW1lbnQgdGhlIE1ISSBwcm90b2NvbCwgc28gaXQgKndvbid0KiBwb3B1bGF0ZSB0aGlzIGV2ZW50IHJpbmcgY29ycmVjdGx5LiAgU28sIG5vIG1pc3Npb24gbW9kZSwgbm8gTUhJIGRldmljZSwgYW5kLCBjb25zZXF1ZW50bHksIG5vdGhpbmcgaW4gYG1oaV93d2FuX2N0cmwuY2Agb3IgaXRzIGludGVyYWN0aW9ucyB3aXRoIGB3d2FuX2NvcmUuY2Agd2lsbCBoYXBwZW4uXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBhbnkgb2YgdGhlIGB3d2FuX2NvcmUuY2AgY2hhbmdlcyBjYW4gYmUgaGl0ICphbm90aGVyKiB3YXkuIFRoZSBjaGFuZ2UgaW4gYHd3YW5fcG9ydF9vcF9zdGFydGAgaW5jbHVkZXMgYSBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AgY2hlY2suIEFzIEkgcmVjYWxsLCBvbmx5IGBtaGlfd3dhbl9jdHJsLmNgIHNldHMgYGR0cl9ydHNgLiBUaGF0IGNvZGUgYmxvY2sgcmFpc2VzIERUUi9SVFMgb24gdGhlIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydC4gU2luY2UgaXQncyBkZXBlbmRlbnQgb24gdGhhdCBmdW5jdGlvbiBwb2ludGVyIGJlaW5nIHNldCwgd2hpY2ggaXMgTUhJLXNwZWNpZmljLCBpdCdzIHVucmVhY2hhYmxlLlxuXG5Pa2F5LCB3aGF0IGFib3V0IGB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bGA/IFRoYXQgc2VjdGlvbiBjb250YWlucyB0aGUgRFRSL1JUUyBpb2N0bCBjYWxscywgYW5kIGFsc28gZGVwZW5kcyBvbiBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AuIFRoaXMgaXMgYWxzbyBnYXRlZCBieSB0aGUgc2FtZSBgZHRyX3J0c2AgcG9pbnRlciBzZXQgYnkgdGhlIHVucmVhY2hhYmxlIGBtaGlfd3dhbl9jdHJsLmNgIGNvZGUuXG5cblNvLCB0aGUgZW50aXJlIGZ1bmN0aW9uYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AsIHdoaWNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBleGNsdXNpdmVseSBzZXQgYnkgYG1oaV93d2FuX2N0cmwuY2AsIHdoaWNoIHJlcXVpcmVzIGFuIE1ISSBkZXZpY2UsIHdoaWNoIGlzbid0IHBvc3NpYmxlIGluIGEgc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgc2ltcGx5IGltcG9zc2libGUgdG8gaGl0LlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHNwZWNpZmllczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSBNSEkgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKFF1YWxjb21tIG1vZGVtcykgYW5kIHRoZXJlJ3Mgbm8ga2VybmVsLXNpZGUgc29mdHdhcmUgTUhJIGVtdWxhdG9yLCB1bmxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgd3dhbl9od3NpbWAsIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuIFN0aWxsLCBJIHNob3VsZCBjaGVjayB0aGUgbGF0dGVyIGFnYWluLi4uIGp1c3QgaW4gY2FzZSBJIG1pc3NlZCBhbnkgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1MC43OTk1MDAxMThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjg1MTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1MC44NDU4MTA3NjdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MDUyODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqV1dBTiBEcml2ZXIgRGVlcCBEaXZlKipcblxuSG1tLCByaWdodCwgSSB3YXMganVzdCBkb3VibGUtY2hlY2tpbmcgdGhlIGB3d2FuX2h3c2ltLmNgIGNvZGUsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzZXR0aW5nIG9mIGBkdHJfcnRzYC4gVGhhdCdzIG5vdCBpdHMgcmVzcG9uc2liaWxpdHkuIEl0J3MgZm9jdXNlZCBvbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhc3BlY3QsIG5vdCB0aGUgaGlnaGVyLWxldmVsIG1vZGVtIGNvbnRyb2wgc2lnbmFscy5cblxuU28sIHdoZXJlICppcyogdGhhdCBoYW5kbGVkIHRoZW4/IEkgbmVlZCB0byB0aGluayBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgV1dBTiBkcml2ZXJzIGluIHRoZSBzeXN0ZW0/IEknbSBiZXR0aW5nIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW4gYW5vdGhlciBzZWN0aW9uLCBsaWtlbHkgYmFzZWQgb24gdGhlIHNwZWNpZmljIGhhcmR3YXJlIG9yIG1vZGVtIGJlaW5nIHVzZWQuIFRoZXJlJ3MgcHJvYmFibHkgYSBtb3JlIGdlbmVyYWxpemVkIGZyYW1ld29yayBvciBhYnN0cmFjdGlvbiBsYXllciBkZWFsaW5nIHdpdGggdGhvc2UgY29udHJvbCBzaWduYWxzLiBJIG5lZWQgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hpY2ggb2YgdGhvc2UgZnJhbWV3b3JrcyBvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBkdHJfcnRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1NC43MTYzNDE0NzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTQxNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MTM1PXN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zZW5kX2R0cihzdHJ1Y3QgbWhpX3d3YW5fZGV2ICptaGl3d2FuLCB1bnNpZ25lZCBpbnQgbWRtYml0cylcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3Ny1cXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoxNzg6c3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9kdHJfcnRzKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVxcdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0OlxcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03NDI9c3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY1LVxcdFxcdGlmIChwb3J0LVxcdTAwM2VzdGFydF9jb3VudCA9PSAxIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gV1dBTl9QT1JUX0FUIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3NjY6XFx0XFx0ICAgIHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cykge1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY3LVxcdFxcdFxcdHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3Njg6XFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKHBvcnQsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9Nzc4PXN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4My1cXHRcXHQvKiBNaXJyb3IgVFRZIHNlbWFudGljczogZHJvcCBEVFIvUlRTIG9uIGxhc3QgY2xvc2Ugb2YgYW4gQVQgcG9ydCAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6Nzg0OlxcdFxcdGlmIChwb3J0LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy03ODUtXFx0XFx0XFx0cG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFxcdTAwMjY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjc4NjpcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9OTkxPXN0YXRpYyBsb25nIHd3YW5fcG9ydF9mb3BzX2F0X2lvY3RsKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEwNTAtXFx0XFx0XFx0cG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzID0gbWRtYml0cztcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTE6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cylcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTI6XFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKHBvcnQsXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUzLVxcdFxcdFxcdFxcdFxcdCAgICEhKHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyBcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjU1LjA1Nzc2MjEwMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2NDk1OTgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWhpX3d3YW5fY3RybC5jYCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGFmdGVyIGRpZ2dpbmcgaW50byB0aGlzLCBJJ3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGUgYGR0cl9ydHNgIHNldHRpbmcgaXMgKm9ubHkqIHRvdWNoZWQgYnkgYG1oaV93d2FuX2N0cmwuY2AuIFRoYXQsIGNvdXBsZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGgsIGxlYWRzIG1lIHRvIGEgcHJldHR5IHNvbGlkIGNvbmNsdXNpb246IHRoZXNlIGNoYW5nZXMgYXJlIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZXkncmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHdhbnRlZCB0byBzZWUgaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgc25lYWsgYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgcGVyaGFwcyBieSBkaXJlY3RseSBjYWxsaW5nIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBvciBzb21lIHNpbWlsYXIgZnVuY3Rpb24uIEJ1dCwgbm8sIHN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGludm9rZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zLiBJdCB3b3JrcyBieSBnZW5lcmF0aW5nIGRldmljZXMgKFBDSSwgVVNCLCBldGMuKSBhbmQgYWxsb3dpbmcgdGhlIGtlcm5lbCdzIGRyaXZlciBjb3JlIHRvIGhhbmRsZSB0aGUgYmluZGluZy4gU2luY2Ugc3l6a2FsbGVyIGNhbid0IHNpbXVsYXRlIG9yIGNyZWF0ZSBhbiBNSEkgZGV2aWNlLCBgbWhpX3d3YW5fY3RybF9wcm9iZWAgd2lsbCBuZXZlciBnZXQgY2FsbGVkLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgY29kZSBwYXRoIGhhcyBhIGhhcmQgZGVwZW5kZW5jeSBvbiBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU2NSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzI6MDUuOTIyNzI0OTg5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzI6MDUuOTIyNzU1NDU5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowptm88[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 22:10:11 +0000 UTC FinishedAt: 2026-08-07 22:32:08 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5M2Y2MjZmNGJmMmZlZTIwZTAzNjM5MDFlZDM4ZmE2M2JlMzk5ZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG5pbmRleCAwZDBkOWM3ZmZhNGJmLi5iYTQ3ZGQxNTM4MzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xuQEAgLTcyOCw2ICYjNDM7NzI4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaGlfY2hhbm5lbF9jb25maWcgbWhpX3NpZXJyYV9lbTkxOXhfY2hhbm5lbHNbXSA9IHtcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxMywgXCYjMzQ7TUJJTVwmIzM0OywgMTI4LCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxNCwgXCYjMzQ7UU1JXCYjMzQ7LCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTUsIFwmIzM0O1FNSVwmIzM0OywgMzIsIDApLFxuJiM0MztcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgXCYjMzQ7SVBfQ1RSTFwmIzM0OywgMzIsIDApLFxuJiM0MztcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxOSwgXCYjMzQ7SVBfQ1RSTFwmIzM0OywgMzIsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX1VMKDMyLCBcJiMzNDtEVU5cJiMzNDssIDMyLCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgXCYjMzQ7RFVOXCYjMzQ7LCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfSFdfVUwoMTAwLCBcJiMzNDtJUF9IVzBcJiMzNDssIDUxMiwgMSksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMgYi9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuaW5kZXggYTMxZDg1NDBmYmI4NS4uM2FlZjkwZWMyMTc2NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuQEAgLTEsOCAmIzQzOzEsMTIgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFx1MDAzY2xvaWMucG91bGFpbkBsaW5hcm8ub3JnXHUwMDNlICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWhpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90ZXJtaW9zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93d2FuLmhcdTAwM2VcbiBcbiAvKiBNSEkgd3dhbiBmbGFncyAqL1xuQEAgLTE0LDYgJiM0MzsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHtcbiBcbiAjZGVmaW5lIE1ISV9XV0FOX01BWF9NVFVcdDB4ODAwMFxuIFxuJiM0MzsvKiBJUF9DVFJMIGNoYW5uZWwgbWVzc2FnZSB0aGF0IHNldHMgdGhlIG1vZGVtJiMzOTtzIERUUi9SVFMgY29udHJvbCBsaW5lcyAqL1xuJiM0MztzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7XG4mIzQzO1x0X19sZTMyIHByZWFtYmxlO1xuJiM0MztcdF9fbGUzMiBtc2dfaWQ7XG4mIzQzO1x0X19sZTMyIGRlc3RfaWQ7XG4mIzQzO1x0X19sZTMyIHNpemU7XG4mIzQzO1x0X19sZTMyIG1zZztcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUhJX0RUUl9DVFJMX01BR0lDXHQweDRDNTI1NDQzXHQvKiAmIzM5O0NUUkwmIzM5OyAqL1xuJiM0MzsjZGVmaW5lIE1ISV9EVFJfTVNHX0RUUlx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBNSElfRFRSX01TR19SVFNcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXHQweDEwXG4mIzQzO1xuJiM0MzsvKiBQZXItY29udHJvbGxlciBJUF9DVFJMIGNoYW5uZWwsIHVzZWQgdG8gc2lnbmFsIERUUi9SVFMgdG8gdGhhdCBtb2RlbSAqL1xuJiM0MztzdHJ1Y3QgbWhpX3d3YW5fZHRyIHtcbiYjNDM7XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKmNudHJsO1xuJiM0MztcdHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQobWhpX3d3YW5fZHRyX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XG4gc3RydWN0IG1oaV93d2FuX2RldiB7XG4gXHQvKiBMb3dlciBsZXZlbCBpcyBhIG1oaSBkZXYsIHVwcGVyIGxldmVsIGlzIGEgd3dhbiBwb3J0ICovXG4gXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcbkBAIC0xMDMsNiAmIzQzOzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdH1cbiB9XG4gXG4mIzQzOy8qIFNpZ25hbCB0aGUgbW9kZW0mIzM5O3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlciYjMzk7cyBJUF9DVFJMIGNoYW5uZWwgKi9cbiYjNDM7c3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4sIHVuc2lnbmVkIGludCBtZG1iaXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXHUwMDNlbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4mIzQzO1x0c3RydWN0IG1oaV9kZXZpY2UgKmN0cmxfZGV2ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyAqZHRyX21zZztcbiYjNDM7XHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XG4mIzQzO1x0dTMyIG1zZyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkdHIsIFx1MDAyNm1oaV93d2FuX2R0cl9saXN0LCBub2RlKSB7XG4mIzQzO1x0XHRpZiAoZHRyLVx1MDAzZWNudHJsID09IGNudHJsKSB7XG4mIzQzO1x0XHRcdGN0cmxfZGV2ID0gZHRyLVx1MDAzZW1oaV9kZXY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoIWN0cmxfZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi9cbiYjNDM7XG4mIzQzO1x0ZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTtcbiYjNDM7XHRpZiAoIWR0cl9tc2cpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX0RUUilcbiYjNDM7XHRcdG1zZyB8PSBNSElfRFRSX01TR19EVFI7XG4mIzQzO1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX1JUUylcbiYjNDM7XHRcdG1zZyB8PSBNSElfRFRSX01TR19SVFM7XG4mIzQzO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlcHJlYW1ibGUgPSBjcHVfdG9fbGUzMihNSElfRFRSX0NUUkxfTUFHSUMpO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlbXNnX2lkID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9IT1NUX1NUQVRFKTtcbiYjNDM7XHRkdHJfbXNnLVx1MDAzZWRlc3RfaWQgPSBjcHVfdG9fbGUzMihtaGl3d2FuLVx1MDAzZW1oaV9kZXYtXHUwMDNldWxfY2hhbl9pZCk7XG4mIzQzO1x0ZHRyX21zZy1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpO1xuJiM0MztcdGR0cl9tc2ctXHUwMDNlbXNnID0gY3B1X3RvX2xlMzIobXNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX3F1ZXVlX2J1ZihjdHJsX2RldiwgRE1BX1RPX0RFVklDRSwgZHRyX21zZywgc2l6ZW9mKCpkdHJfbXNnKSxcbiYjNDM7XHRcdFx0ICAgIE1ISV9FT1QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRrZnJlZShkdHJfbXNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9kdHJfcnRzKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pXG4mIzQzO3tcbiYjNDM7XHRtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KSxcbiYjNDM7XHRcdFx0ICAgICAgIG9uID8gVElPQ01fRFRSIHwgVElPQ01fUlRTIDogMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3N0YXJ0KHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiA9IHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KTtcbkBAIC0xNjMsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4gXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxuIFx0LnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsXG4gXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuJiM0MztcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgbWhpX3VsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG5AQCAtMjU1LDYgJiM0MzszMzQsNTkgQEAgc3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpXG4gXHRrZnJlZShtaGl3d2FuKTtcbiB9XG4gXG4mIzQzOy8qIElQX0NUUkwgY2hhbm5lbCBkcml2ZXIsIGJvdW5kIHNlcGFyYXRlbHkgc28gdGhlIGRhdGEtcG9ydCBwYXRoIGlzIHVudG91Y2hlZCAqL1xuJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG1oaV9yZXN1bHQgKm1oaV9yZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHQvKiBNSEkgY29yZSBoYXMgZG9uZSB3aXRoIHRoZSBidWZmZXIsIHJlbGVhc2UgaXQgKi9cbiYjNDM7XHRrZnJlZShtaGlfcmVzdWx0LVx1MDAzZWJ1Zl9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KVxuJiM0Mzt7XG4mIzQzO1x0LyogTW9kZW0gc2VyaWFsIHN0YXRlIGlzIG5vdCBuZWVkZWQsIGRyb3AgaXQgKi9cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBtaGlfd3dhbl9kdHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkdHIgPSBremFsbG9jX29iaigqZHRyKTtcbiYjNDM7XHRpZiAoIWR0cilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBtaGlfcHJlcGFyZV9mb3JfdHJhbnNmZXIobWhpX2Rldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0a2ZyZWUoZHRyKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkdHItXHUwMDNlY250cmwgPSBtaGlfZGV2LVx1MDAzZW1oaV9jbnRybDtcbiYjNDM7XHRkdHItXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XG4mIzQzO1x0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2LCBkdHIpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbiYjNDM7XHRsaXN0X2FkZChcdTAwMjZkdHItXHUwMDNlbm9kZSwgXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfcmVtb3ZlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1x0bGlzdF9kZWwoXHUwMDI2ZHRyLVx1MDAzZW5vZGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtaGlfd3dhbl9kdHJfbG9jayk7XG4mIzQzO1xuJiM0MztcdG1oaV91bnByZXBhcmVfZnJvbV90cmFuc2ZlcihtaGlfZGV2KTtcbiYjNDM7XHRrZnJlZShkdHIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7XG4gXHR7IC5jaGFuID0gXCYjMzQ7RFVOXCYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcbiBcdHsgLmNoYW4gPSBcJiMzNDtEVU4yXCYjMzQ7LCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcbkBAIC0yNzgsNyAmIzQzOzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7XG4gXHR9LFxuIH07XG4gXG4tbW9kdWxlX21oaV9kcml2ZXIobWhpX3d3YW5fY3RybF9kcml2ZXIpO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7XG4mIzQzO1x0eyAuY2hhbiA9IFwmIzM0O0lQX0NUUkxcJiMzNDsgfSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fZHRyX2RyaXZlciA9IHtcbiYjNDM7XHQuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsXG4mIzQzO1x0LnJlbW92ZSA9IG1oaV93d2FuX2R0cl9yZW1vdmUsXG4mIzQzO1x0LnByb2JlID0gbWhpX3d3YW5fZHRyX3Byb2JlLFxuJiM0MztcdC51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsXG4mIzQzO1x0LmRsX3hmZXJfY2IgPSBtaGlfd3dhbl9kdHJfZGxfeGZlcl9jYixcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDttaGlfd3dhbl9kdHJcJiMzNDssXG4mIzQzO1x0fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG1oaV93d2FuX2N0cmxfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9jdHJsX2RyaXZlcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0Mzttb2R1bGVfaW5pdChtaGlfd3dhbl9jdHJsX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IG1oaV93d2FuX2N0cmxfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbiYjNDM7XHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2bWhpX3d3YW5fZHRyX2RyaXZlcik7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2V4aXQobWhpX3d3YW5fY3RybF9leGl0KTtcbiBcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNSEkgV1dBTiBDVFJMIERyaXZlclwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbmluZGV4IGZmYmNmMTFlNGU2ODEuLmY4Y2E5Y2RhM2M5YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXG5AQCAtNzU5LDggJiM0Mzs3NTksMTUgQEAgc3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbiBcdGlmICghcG9ydC1cdTAwM2VzdGFydF9jb3VudClcbiBcdFx0cmV0ID0gcG9ydC1cdTAwM2VvcHMtXHUwMDNlc3RhcnQocG9ydCk7XG4gXG4tXHRpZiAoIXJldClcbiYjNDM7XHRpZiAoIXJldCkge1xuIFx0XHRwb3J0LVx1MDAzZXN0YXJ0X2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiByYWlzZSBEVFIvUlRTIG9uIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydCAqL1xuJiM0MztcdFx0aWYgKHBvcnQtXHUwMDNlc3RhcnRfY291bnQgPT0gMSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKSB7XG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUztcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbkBAIC03NzMsNiAmIzQzOzc4MCwxMSBAQCBzdGF0aWMgdm9pZCB3d2FuX3BvcnRfb3Bfc3RvcChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbiBcdHBvcnQtXHUwMDNlc3RhcnRfY291bnQtLTtcbiBcdGlmICghcG9ydC1cdTAwM2VzdGFydF9jb3VudCkge1xuJiM0MztcdFx0LyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IGRyb3AgRFRSL1JUUyBvbiBsYXN0IGNsb3NlIG9mIGFuIEFUIHBvcnQgKi9cbiYjNDM7XHRcdGlmIChwb3J0LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuJiM0MztcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyBcdTAwMjY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTtcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChwb3J0LVx1MDAzZW9wcylcbiBcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VzdG9wKHBvcnQpO1xuIFx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2cG9ydC1cdTAwM2VyeHEpO1xuQEAgLTEwMzYsNiAmIzQzOzEwNDgsMTAgQEAgc3RhdGljIGxvbmcgd3dhbl9wb3J0X2ZvcHNfYXRfaW9jdGwoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyB8PSBtZG1iaXRzO1xuIFx0XHRlbHNlXG4gXHRcdFx0cG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgPSBtZG1iaXRzO1xuJiM0MztcdFx0aWYgKHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpXG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICEhKHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0ICAgICAgKFRJT0NNX0RUUiB8IFRJT0NNX1JUUykpKTtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93d2FuLmggYi9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuaW5kZXggMWUwZTJjYjUzNTc5OS4uYTc2ODQ5NTBkNzNiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvd3dhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuQEAgLTU3LDYgJiM0Mzs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7XG4gICogQHR4X2Jsb2NraW5nOiBPcHRpb25hbCBibG9ja2luZyByb3V0aW5lIHRoYXQgc2VuZHMgV1dBTiBwb3J0IHByb3RvY29sIGRhdGFcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXG4gICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy5cbiYjNDM7ICogQGR0cl9ydHM6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBhc3NlcnRzIChvbj10cnVlKSBvciBkZS1hc3NlcnRzIChvbj1mYWxzZSlcbiYjNDM7ICogICAgICAgICAgIHRoZSBEVFIgYW5kIFJUUyBtb2RlbSBjb250cm9sIGxpbmVzLlxuICAqXG4gICogVGhlIHd3YW5fcG9ydF9vcHMgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBvZiBsb3ctbGV2ZWwgb3BlcmF0aW9uc1xuICAqIHRoYXQgY29udHJvbCBhIFdXQU4gcG9ydCBkZXZpY2UuIEFsbCBmdW5jdGlvbnMgYXJlIG1hbmRhdG9yeSB1bmxlc3Mgc3BlY2lmaWVkLlxuQEAgLTcwLDYgJiM0Mzs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHtcbiBcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcdF9fcG9sbF90ICgqdHhfcG9sbCkoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xuJiM0MztcdHZvaWQgKCpkdHJfcnRzKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBib29sIG9uKTtcbiB9O1xuIFxuIC8qKiBzdHJ1Y3Qgd3dhbl9wb3J0X2NhcHMgLSBUaGUgV1dBTiBwb3J0IGNhcGJpbGl0aWVzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTNmNjI2ZjRiZjJmZWUyMGUwMzYzOTAxZWQzOGZhNjNiZTM5OWY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAyMjoyODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jCmluZGV4IDBkMGQ5YzdmZmE0YmYuLmJhNDdkZDE1MzgzN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYwpAQCAtNzI4LDYgJiM0Mzs3MjgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9jaGFubmVsX2NvbmZpZyBtaGlfc2llcnJhX2VtOTE5eF9jaGFubmVsc1tdID0gewogCU1ISV9DSEFOTkVMX0NPTkZJR19ETCgxMywgJiMzNDtNQklNJiMzNDssIDEyOCwgMCksCiAJTUhJX0NIQU5ORUxfQ09ORklHX1VMKDE0LCAmIzM0O1FNSSYjMzQ7LCAzMiwgMCksCiAJTUhJX0NIQU5ORUxfQ09ORklHX0RMKDE1LCAmIzM0O1FNSSYjMzQ7LCAzMiwgMCksCiYjNDM7CU1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgJiMzNDtJUF9DVFJMJiMzNDssIDMyLCAwKSwKJiM0MzsJTUhJX0NIQU5ORUxfQ09ORklHX0RMKDE5LCAmIzM0O0lQX0NUUkwmIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19VTCgzMiwgJiMzNDtEVU4mIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgJiMzNDtEVU4mIzM0OywgMzIsIDApLAogCU1ISV9DSEFOTkVMX0NPTkZJR19IV19VTCgxMDAsICYjMzQ7SVBfSFcwJiMzNDssIDUxMiwgMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYyBiL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCmluZGV4IGEzMWQ4NTQwZmJiODUuLjNhZWY5MGVjMjE3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jCkBAIC0xLDggJiM0MzsxLDEyIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiAvKiBDb3B5cmlnaHQgKGMpIDIwMjEsIExpbmFybyBMdGQgJmx0O2xvaWMucG91bGFpbkBsaW5hcm8ub3JnJmd0OyAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWhpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGVybWlvcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3d3YW4uaCZndDsKIAogLyogTUhJIHd3YW4gZmxhZ3MgKi8KQEAgLTE0LDYgJiM0MzsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHsKIAogI2RlZmluZSBNSElfV1dBTl9NQVhfTVRVCTB4ODAwMAogCiYjNDM7LyogSVBfQ1RSTCBjaGFubmVsIG1lc3NhZ2UgdGhhdCBzZXRzIHRoZSBtb2RlbSYjMzk7cyBEVFIvUlRTIGNvbnRyb2wgbGluZXMgKi8KJiM0MztzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7CiYjNDM7CV9fbGUzMiBwcmVhbWJsZTsKJiM0MzsJX19sZTMyIG1zZ19pZDsKJiM0MzsJX19sZTMyIGRlc3RfaWQ7CiYjNDM7CV9fbGUzMiBzaXplOwomIzQzOwlfX2xlMzIgbXNnOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUMJMHg0QzUyNTQ0MwkvKiAmIzM5O0NUUkwmIzM5OyAqLwomIzQzOyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSCQlCSVQoMCkKJiM0MzsjZGVmaW5lIE1ISV9EVFJfTVNHX1JUUwkJQklUKDEpCiYjNDM7I2RlZmluZSBNSElfRFRSX0hPU1RfU1RBVEUJMHgxMAomIzQzOwomIzQzOy8qIFBlci1jb250cm9sbGVyIElQX0NUUkwgY2hhbm5lbCwgdXNlZCB0byBzaWduYWwgRFRSL1JUUyB0byB0aGF0IG1vZGVtICovCiYjNDM7c3RydWN0IG1oaV93d2FuX2R0ciB7CiYjNDM7CXN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7CiYjNDM7CXN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgTElTVF9IRUFEKG1oaV93d2FuX2R0cl9saXN0KTsKJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG1oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKIHN0cnVjdCBtaGlfd3dhbl9kZXYgewogCS8qIExvd2VyIGxldmVsIGlzIGEgbWhpIGRldiwgdXBwZXIgbGV2ZWwgaXMgYSB3d2FuIHBvcnQgKi8KIAlzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjsKQEAgLTEwMyw2ICYjNDM7MTMxLDU2IEBAIHN0YXRpYyB2b2lkIG1oaV93d2FuX2N0cmxfcmVmaWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0KIH0KIAomIzQzOy8qIFNpZ25hbCB0aGUgbW9kZW0mIzM5O3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlciYjMzk7cyBJUF9DVFJMIGNoYW5uZWwgKi8KJiM0MztzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKmNudHJsID0gbWhpd3dhbi0mZ3Q7bWhpX2Rldi0mZ3Q7bWhpX2NudHJsOwomIzQzOwlzdHJ1Y3QgbWhpX2RldmljZSAqY3RybF9kZXYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyAqZHRyX21zZzsKJiM0MzsJc3RydWN0IG1oaV93d2FuX2R0ciAqZHRyOwomIzQzOwl1MzIgbXNnID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0ciwgJmFtcDttaGlfd3dhbl9kdHJfbGlzdCwgbm9kZSkgewomIzQzOwkJaWYgKGR0ci0mZ3Q7Y250cmwgPT0gY250cmwpIHsKJiM0MzsJCQljdHJsX2RldiA9IGR0ci0mZ3Q7bWhpX2RldjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoIWN0cmxfZGV2KQomIzQzOwkJcmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi8KJiM0MzsKJiM0MzsJZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTsKJiM0MzsJaWYgKCFkdHJfbXNnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChtZG1iaXRzICZhbXA7IFRJT0NNX0RUUikKJiM0MzsJCW1zZyB8PSBNSElfRFRSX01TR19EVFI7CiYjNDM7CWlmIChtZG1iaXRzICZhbXA7IFRJT0NNX1JUUykKJiM0MzsJCW1zZyB8PSBNSElfRFRSX01TR19SVFM7CiYjNDM7CiYjNDM7CWR0cl9tc2ctJmd0O3ByZWFtYmxlID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9DVFJMX01BR0lDKTsKJiM0MzsJZHRyX21zZy0mZ3Q7bXNnX2lkID0gY3B1X3RvX2xlMzIoTUhJX0RUUl9IT1NUX1NUQVRFKTsKJiM0MzsJZHRyX21zZy0mZ3Q7ZGVzdF9pZCA9IGNwdV90b19sZTMyKG1oaXd3YW4tJmd0O21oaV9kZXYtJmd0O3VsX2NoYW5faWQpOwomIzQzOwlkdHJfbXNnLSZndDtzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpOwomIzQzOwlkdHJfbXNnLSZndDttc2cgPSBjcHVfdG9fbGUzMihtc2cpOwomIzQzOwomIzQzOwlyZXQgPSBtaGlfcXVldWVfYnVmKGN0cmxfZGV2LCBETUFfVE9fREVWSUNFLCBkdHJfbXNnLCBzaXplb2YoKmR0cl9tc2cpLAomIzQzOwkJCSAgICBNSElfRU9UKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWtmcmVlKGR0cl9tc2cpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CW1oaV93d2FuX2N0cmxfc2VuZF9kdHIod3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpLAomIzQzOwkJCSAgICAgICBvbiA/IFRJT0NNX0RUUiB8IFRJT0NNX1JUUyA6IDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4gPSB3d2FuX3BvcnRfZ2V0X2RydmRhdGEocG9ydCk7CkBAIC0xNjMsNiAmIzQzOzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7CiAJLnN0YXJ0ID0gbWhpX3d3YW5fY3RybF9zdGFydCwKIAkuc3RvcCA9IG1oaV93d2FuX2N0cmxfc3RvcCwKIAkudHggPSBtaGlfd3dhbl9jdHJsX3R4LAomIzQzOwkuZHRyX3J0cyA9IG1oaV93d2FuX2N0cmxfZHRyX3J0cywKIH07CiAKIHN0YXRpYyB2b2lkIG1oaV91bF94ZmVyX2NiKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LApAQCAtMjU1LDYgJiM0MzszMzQsNTkgQEAgc3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpCiAJa2ZyZWUobWhpd3dhbik7CiB9CiAKJiM0MzsvKiBJUF9DVFJMIGNoYW5uZWwgZHJpdmVyLCBib3VuZCBzZXBhcmF0ZWx5IHNvIHRoZSBkYXRhLXBvcnQgcGF0aCBpcyB1bnRvdWNoZWQgKi8KJiM0MztzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KQomIzQzO3sKJiM0MzsJLyogTUhJIGNvcmUgaGFzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLCByZWxlYXNlIGl0ICovCiYjNDM7CWtmcmVlKG1oaV9yZXN1bHQtJmd0O2J1Zl9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdCkKJiM0Mzt7CiYjNDM7CS8qIE1vZGVtIHNlcmlhbCBzdGF0ZSBpcyBub3QgbmVlZGVkLCBkcm9wIGl0ICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWhpX3d3YW5fZHRyX3Byb2JlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZHRyID0ga3phbGxvY19vYmooKmR0cik7CiYjNDM7CWlmICghZHRyKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9wcmVwYXJlX2Zvcl90cmFuc2ZlcihtaGlfZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJa2ZyZWUoZHRyKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZHRyLSZndDtjbnRybCA9IG1oaV9kZXYtJmd0O21oaV9jbnRybDsKJiM0MzsJZHRyLSZndDttaGlfZGV2ID0gbWhpX2RldjsKJiM0MzsJZGV2X3NldF9kcnZkYXRhKCZhbXA7bWhpX2Rldi0mZ3Q7ZGV2LCBkdHIpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO2R0ci0mZ3Q7bm9kZSwgJmFtcDttaGlfd3dhbl9kdHJfbGlzdCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHIgPSBkZXZfZ2V0X2RydmRhdGEoJmFtcDttaGlfZGV2LSZndDtkZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWhpX3d3YW5fZHRyX2xvY2spOwomIzQzOwlsaXN0X2RlbCgmYW1wO2R0ci0mZ3Q7bm9kZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21oaV93d2FuX2R0cl9sb2NrKTsKJiM0MzsKJiM0MzsJbWhpX3VucHJlcGFyZV9mcm9tX3RyYW5zZmVyKG1oaV9kZXYpOwomIzQzOwlrZnJlZShkdHIpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7CiAJeyAuY2hhbiA9ICYjMzQ7RFVOJiMzNDssIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LAogCXsgLmNoYW4gPSAmIzM0O0RVTjImIzM0OywgLmRyaXZlcl9kYXRhID0gV1dBTl9QT1JUX0FUIH0sCkBAIC0yNzgsNyAmIzQzOzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7CiAJfSwKIH07CiAKLW1vZHVsZV9taGlfZHJpdmVyKG1oaV93d2FuX2N0cmxfZHJpdmVyKTsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7CiYjNDM7CXsgLmNoYW4gPSAmIzM0O0lQX0NUUkwmIzM0OyB9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWhpLCBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWhpX2RyaXZlciBtaGlfd3dhbl9kdHJfZHJpdmVyID0gewomIzQzOwkuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsCiYjNDM7CS5yZW1vdmUgPSBtaGlfd3dhbl9kdHJfcmVtb3ZlLAomIzQzOwkucHJvYmUgPSBtaGlfd3dhbl9kdHJfcHJvYmUsCiYjNDM7CS51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsCiYjNDM7CS5kbF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX2RsX3hmZXJfY2IsCiYjNDM7CS5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7bWhpX3d3YW5fZHRyJiMzNDssCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBtaGlfd3dhbl9jdHJsX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9kdHJfZHJpdmVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9jdHJsX2RyaXZlcik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQltaGlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9kdHJfZHJpdmVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7bW9kdWxlX2luaXQobWhpX3d3YW5fY3RybF9pbml0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgbWhpX3d3YW5fY3RybF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwltaGlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDttaGlfd3dhbl9jdHJsX2RyaXZlcik7CiYjNDM7CW1oaV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO21oaV93d2FuX2R0cl9kcml2ZXIpOwomIzQzO30KJiM0Mzttb2R1bGVfZXhpdChtaGlfd3dhbl9jdHJsX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCB2MiYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O01ISSBXV0FOIENUUkwgRHJpdmVyJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMKaW5kZXggZmZiY2YxMWU0ZTY4MS4uZjhjYTljZGEzYzlhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jCkBAIC03NTksOCAmIzQzOzc1OSwxNSBAQCBzdGF0aWMgaW50IHd3YW5fcG9ydF9vcF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KQogCWlmICghcG9ydC0mZ3Q7c3RhcnRfY291bnQpCiAJCXJldCA9IHBvcnQtJmd0O29wcy0mZ3Q7c3RhcnQocG9ydCk7CiAKLQlpZiAoIXJldCkKJiM0MzsJaWYgKCFyZXQpIHsKIAkJcG9ydC0mZ3Q7c3RhcnRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IHJhaXNlIERUUi9SVFMgb24gZmlyc3Qgb3BlbiBvZiBhbiBBVCBwb3J0ICovCiYjNDM7CQlpZiAocG9ydC0mZ3Q7c3RhcnRfY291bnQgPT0gMSAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgPT0gV1dBTl9QT1JUX0FUICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMpIHsKJiM0MzsJCQlwb3J0LSZndDthdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTOwomIzQzOwkJCXBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0cyhwb3J0LCB0cnVlKTsKJiM0MzsJCX0KJiM0MzsJfQogCiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BvcnQtJmd0O29wc19sb2NrKTsKQEAgLTc3Myw2ICYjNDM7NzgwLDExIEBAIHN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpCiAJbXV0ZXhfbG9jaygmYW1wO3BvcnQtJmd0O29wc19sb2NrKTsKIAlwb3J0LSZndDtzdGFydF9jb3VudC0tOwogCWlmICghcG9ydC0mZ3Q7c3RhcnRfY291bnQpIHsKJiM0MzsJCS8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovCiYjNDM7CQlpZiAocG9ydC0mZ3Q7b3BzICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSA9PSBXV0FOX1BPUlRfQVQgJmFtcDsmYW1wOyBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMpIHsKJiM0MzsJCQlwb3J0LSZndDthdF9kYXRhLm1kbWJpdHMgJmFtcDs9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKJiM0MzsJCQlwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHMocG9ydCwgZmFsc2UpOwomIzQzOwkJfQogCQlpZiAocG9ydC0mZ3Q7b3BzKQogCQkJcG9ydC0mZ3Q7b3BzLSZndDtzdG9wKHBvcnQpOwogCQlza2JfcXVldWVfcHVyZ2UoJmFtcDtwb3J0LSZndDtyeHEpOwpAQCAtMTAzNiw2ICYjNDM7MTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJcG9ydC0mZ3Q7YXRfZGF0YS5tZG1iaXRzIHw9IG1kbWJpdHM7CiAJCWVsc2UKIAkJCXBvcnQtJmd0O2F0X2RhdGEubWRtYml0cyA9IG1kbWJpdHM7CiYjNDM7CQlpZiAocG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzKQomIzQzOwkJCXBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0cyhwb3J0LAomIzQzOwkJCQkJICAgISEocG9ydC0mZ3Q7YXRfZGF0YS5tZG1iaXRzICZhbXA7CiYjNDM7CQkJCQkgICAgICAoVElPQ01fRFRSIHwgVElPQ01fUlRTKSkpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmgKaW5kZXggMWUwZTJjYjUzNTc5OS4uYTc2ODQ5NTBkNzNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93d2FuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC93d2FuLmgKQEAgLTU3LDYgJiM0Mzs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7CiAgKiBAdHhfYmxvY2tpbmc6IE9wdGlvbmFsIGJsb2NraW5nIHJvdXRpbmUgdGhhdCBzZW5kcyBXV0FOIHBvcnQgcHJvdG9jb2wgZGF0YQogICogICAgICAgICAgICAgICB0byB0aGUgZGV2aWNlLgogICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy4KJiM0MzsgKiBAZHRyX3J0czogT3B0aW9uYWwgcm91dGluZSB0aGF0IGFzc2VydHMgKG9uPXRydWUpIG9yIGRlLWFzc2VydHMgKG9uPWZhbHNlKQomIzQzOyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy4KICAqCiAgKiBUaGUgd3dhbl9wb3J0X29wcyBzdHJ1Y3R1cmUgY29udGFpbnMgYSBsaXN0IG9mIGxvdy1sZXZlbCBvcGVyYXRpb25zCiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC4KQEAgLTcwLDYgJiM0Mzs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHsKIAlpbnQgKCp0eF9ibG9ja2luZykoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJX19wb2xsX3QgKCp0eF9wb2xsKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICBwb2xsX3RhYmxlICp3YWl0KTsKJiM0MzsJdm9pZCAoKmR0cl9ydHMpKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pOwogfTsKIAogLyoqIHN0cnVjdCB3d2FuX3BvcnRfY2FwcyAtIFRoZSBXV0FOIHBvcnQgY2FwYmlsaXRpZXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldyBEVFIvUlRTIFNpZ25hbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIERUUi9SVFMgc2lnbmFsaW5nIHN1cHBvcnQgb3ZlciBhbiBgSVBfQ1RSTGAgTUhJIGNoYW5uZWwuIFRoZXkmIzM5O3JlIHRvdWNoaW5nIGBtaGlfd3dhbl9jdHJsLmNgLCBgd3dhbl9jb3JlLmNgLCBhbmQgYHBjaV9nZW5lcmljLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGZhaXJseSBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZToKCiogICBBZGRlZCBgSVBfQ1RSTGAgdG8gYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gTWFrZXMgc2Vuc2UsIHdlIG5lZWQgdG8gZGVmaW5lIHRoZSBjaGFubmVsLgoqICAgSW50cm9kdWNlZCBhIG5ldyBgbWhpX3d3YW5fZHRyX2RyaXZlcmAgZm9yIGhhbmRsaW5nIHRoZSBgSVBfQ1RSTGAgY2hhbm5lbCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSByaWdodCBhcHByb2FjaCwgZW5jYXBzdWxhdGluZyB0aGUgY29udHJvbCBsb2dpYy4KKiAgIEltcGxlbWVudGVkIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYCBhbmQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBEVFIvUlRTIHNpZ25hbHMuIEdvb2QsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMuCiogICBNb2RpZmllZCBgd3dhbl9jb3JlLmNgIHRvIGNhbGwgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2Agd2hlbiBhbiBBVCBwb3J0IGlzIG9wZW5lZC9jbG9zZWQgb3IgdmlhIGlvY3RsLiBUaGlzIGlzIHRoZSBpbnRlZ3JhdGlvbiBwb2ludCB3aXRoaW4gdGhlIFdXQU4gY29yZS4gTWFrZXMgc2Vuc2UgZm9yIGhvdyB0aGUgV1dBTiBjb3JlIG1hbmFnZXMgdGhlIG1vZGVtIGNvbm5lY3Rpb24uCgpUaGUgcmVhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzIHdoZXRoZXIgdGhpcyB3aWxsIGV2ZW4gd29yayBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgV1dBTiBjb3JlIGlzIG9idmlvdXNseSByZWFjaGFibGUsIHRoYXQmIzM5O3Mgbm90IHRoZSBwcm9ibGVtLiBCdXQgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGlzIGEgZHJpdmVyIGZvciBNSEkgZGV2aWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGVtdWxhdGUgb3IgY3JlYXRlIE1ISSBkZXZpY2VzIGluIHNvZnR3YXJlLiBDYW4gd2UgZXZlbiBzaW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgYSBNSEkgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNSEkgaXMsIG9mIGNvdXJzZSwgYSBRdWFsY29tbSBtb2RlbSB0aGluZywgc28gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIGNyZWF0ZSBhIHNvZnR3YXJlIE1ISSBkZXZpY2UgZm9yIHRlc3RpbmcuIExldCBtZSBjaGVjayBmb3IgdGhhdC4uLiBMZXQmIzM5O3Mgc2VhcmNoIGZvciAmIzM0O01ISSBkZXZpY2UgY3JlYXRpb24mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfYWxsb2NfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDA5LVx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMDEwOlx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVx0aWYgKElTX0VSUihtaGlfZGV2KSkge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEyMjYtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMjI4LXtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzE4LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjAtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzc0LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcdFx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXHRcdGlmIChJU19FUlIobWhpX2RldikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ISSBDb250cm9sbGVyIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IE1ISSBkZXZpY2VzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhleSYjMzk7cmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB0aHJvdWdoIGFuIE1ISSBob3N0IGNvbnRyb2xsZXIuIEJ1dCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBpcyB0aGlzIGFsd2F5cyBhIGhhcmR3YXJlIHRoaW5nPyBJIG1lYW4sIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGVkaWNhdGVkIHNpbGljb24gY29tcG9uZW50LCBvciBjb3VsZCB0aGlzIGhvc3QgY29udHJvbGxlciBhbHNvIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlPyBJdCYjMzk7cyBhIHZhbGlkIHF1ZXN0aW9uLCB3b3J0aCBleHBsb3JpbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRvIGZpbmQgb3V0LCB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBpcyB0aGUgY29kZWJhc2UuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCB3b3VsZCByZWdpc3RlciB0aGUgY29udHJvbGxlci4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2ggZm9yIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAuIFRoYXQgc2hvdWxkIGVpdGhlciBsZWFkIG1lIHRvIHRoZSBoZWFydCBvZiBob3cgaXQgd29ya3Mgb3IgZWxpbWluYXRlIHNvbWUgYXZlbnVlcy4gVGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgY3J1Y2lhbCBjbHVlIGluIHVuZGVyc3RhbmRpbmcgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfcmVnaXN0ZXJfY29udHJvbGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxuLS1cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNi0qIEluaXRpYXRlcyBwb3dlciBvbiBhbmQgc2h1dGRvd24gc2VxdWVuY2Vcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyOC1cdFx0XHRcdFx0XHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSlcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXHRtaGlfY29uZmlnLnRpbWVvdXRfbXMgPSBtaGlfdGltZW91dF9tcztcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXHUwMDI2bWhpX2NvbmZpZyk7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXHRpZiAocmV0KSB7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Nzg6XHRcdHBjaV9lcnIocGNpX2RldiwgXCYjMzQ7bWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaDo5OnN0cnVjdCBtaGlfY29udHJvbGxlciAqcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgdm9pZCBfX2lvbWVtICptaGlfYmFyLFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXHRcdFx0XHRcdFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTU3MD1zdGF0aWMgaW50IHFhaWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6NTk3Olx0cWRldi1cdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXHUwMDNlYmFyX21oaSwgbWhpX2lycSxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cdFx0XHRcdFx0XHQgICAgICAgcWRldi1cdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXHUwMDNlZmFtaWx5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MjAtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTA1NzpFWFBPUlRfU1lNQk9MX0dQTChtaGlfcmVnaXN0ZXJfY29udHJvbGxlcik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzNjM9c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNDM4Olx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTE4Nz1pbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoyNjU6XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC0zODEtICogRmllbGRzIG1hcmtlZCBhcyAocmVxdWlyZWQpIG5lZWQgdG8gYmUgcG9wdWxhdGVkIGJ5IHRoZSBjb250cm9sbGVyIGRyaXZlclxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0NS0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU1MS1cdFx0XHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTUhJIENvbnRyb2xsZXIgUmVnaXN0cmF0aW9uIGFuZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTUhJIGNvbnRyb2xsZXJzIGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBJIHNlZSBzZXZlcmFsIGRyaXZlcnMgcmVzcG9uc2libGU6IGBxYWljX2Rydi5jYCwgYHBjaV9nZW5lcmljLmNgLCBhbmQgdGhlIGBhdGgxMWtgIGFuZCBgYXRoMTJrYCBkcml2ZXJzLiBBbGwgb2YgdGhlc2UgYXJlIFBDSSBkcml2ZXJzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgTUhJIGlzIG9mdGVuIGltcGxlbWVudGVkIG92ZXIgUENJLiBIbW0sIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgTUhJIGl0c2VsZj8gTm8sIG5vdCBkaXJlY3RseS4gVGhhdCYjMzk7cyBjb25maXJtZWQuCgpSaWdodCwgYHBjaV9nZW5lcmljLmNgICppcyogYSBQQ0kgZHJpdmVyLCBzbyB0aGF0JiMzOTtzIGEga2V5IHBpZWNlLiBOb3csIGNhbiB3ZSBsZXZlcmFnZSBzeXprYWxsZXIgdG8gZnV6eiBNSEkgZGV2aWNlcz8gU3l6a2FsbGVyICpjYW4qIGluamVjdCBQQ0kgZGV2aWNlcyB1c2luZyBgc3l6X3BjaV9zZXR1cGAsIEkgcmVtZW1iZXIgdGhhdCBub3cuIEJ1dCBpdCBkb2VzbiYjMzk7dCAqZGlyZWN0bHkqIGVtdWxhdGUgTUhJLiBJdCBjYW4gZW11bGF0ZSAqUENJKiBkZXZpY2VzLgoKU28sIHRoZSBzdHJhdGVneSBiZWNvbWVzOiBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uIGRlZmluZWQgaW4gYHBjaV9nZW5lcmljLmNgLCB0aGVuIGl0IHNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGFuIE1ISSBjb250cm9sbGVyLiBUaGF0JiMzOTtzIHRoZSBsaW5rLiBOZXh0IHN0ZXAgaXMgdG8gZmluZCBvdXQgd2hhdCBQQ0kgSURzIGBtaGlfcGNpX3Byb2JlYCBhY3R1YWxseSBiaW5kcyB0by4gR290dGEgY2hlY2sgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpX3BjaV9pZF90YWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9wY2lfZGV2X2luZm8gbWhpX25ldHByaXNtYV9mY3VuNjlfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTk0OS0vKiBLZWVwIHRoZSBsaXN0IHNvcnRlZCBiYXNlZCBvbiB0aGUgUElELiBOZXcgVklEIHNob3VsZCBiZSBhZGRlZCBhcyB0aGUgbGFzdCBlbnRyeSAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzo5NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1oaV9wY2lfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtOTUxLVx0e1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RQ09NLCAweDAxMTYpLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4NC19O1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxMDg1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtaGlfcGNpX2lkX3RhYmxlKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4Ni1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE3NjQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1oaV9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNzY1LVx0Lm5hbWVcdFx0PSBcJiMzNDttaGktcGNpLWdlbmVyaWNcJiMzNDssXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE3NjY6XHQuaWRfdGFibGVcdD0gbWhpX3BjaV9pZF90YWJsZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ny1cdC5wcm9iZVx0XHQ9IG1oaV9wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNSEkgYW5kIFN5emthbGxlcjogQSBRdWljayBJbnF1aXJ5KioKCk9rYXksIHNvIFN5emthbGxlciBoYXMgUENJIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIHdoaWNoIGlzIGdyZWF0LiBCdXQgTUhJLi4uIE1ISSBpcyBhIGJlYXN0LiBJdCYjMzk7cyBidWlsdCBvbiB0b3Agb2YgUENJLCBidXQgd2l0aCB0aGlzIHdob2xlIHJpbmcgYW5kIGRvb3JiZWxsIHN5c3RlbTsgaXQmIzM5O3MgcXVpdGUgaW50cmljYXRlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIG9mZmVyIGEgZGVkaWNhdGVkIE1ISSBlbXVsYXRvcj8gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHByb3RvY29sLCBpdCYjMzk7cyBub3QgYSBnaXZlbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBNSEkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBhbnN3ZXIgYWJvdXQgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyByZWFkaWx5IGF2YWlsYWJsZSBvciBhIHBvdGVudGlhbCByZXNlYXJjaCBwcm9qZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNSEkgRGV2aWNlIFNjZW5hcmlvKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEkgd2FzIGFib3V0IHRvIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgZm9yIGBzeXMvbGludXhgLCBidXQgdGhhdCYjMzk7cyBub3QgcmlnaHQuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciDigJMgSSBzaG91bGQgYmUgdXNpbmcgYHJlYWQtc3l6LXNwZWNgIG9yIGBzeXotZ3JlcHBlcmAgZm9yIHRob3NlIHN5emthbGxlciBzcGVjaWZpYyBzeXpsYW5nIGRlc2NyaXB0aW9ucy4gVGhlIHByb2JsZW0gaXMsIG5laXRoZXIgb2YgdGhvc2UgdG9vbHMgYXJlIGFjdHVhbGx5IGluIG15IGN1cnJlbnQgdG9vbHNldCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByb2FkYmxvY2suCgpSaWdodCwgdGhlIHByb21wdCBpdHNlbGYgZmxhZ2dlZCB0aGlzOiBpdCYjMzk7cyBleHBsaWNpdGx5IHN0YXRlZCB0aGF0IHRoZSBzdGFuZGFyZCB0b29sIGNhbiYjMzk7dCBoYW5kbGUgc3l6a2FsbGVyJiMzOTtzIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIGFueXRoaW5nIHdpdGggJiMzNDtzeXpfJiMzNDsuIEkgbmVlZCB0byBmaW5kIGFuIGFsdGVybmF0aXZlLgoKTGV0JiMzOTtzIHNoaWZ0IGdlYXJzLiBUaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCBNSEkgZGV2aWNlcy4gSWYgc3l6a2FsbGVyIGlzIGFibGUgdG8gZW11bGF0ZSBhIFBDSSBkZXZpY2UsIHRoZW4sIHRoZW9yZXRpY2FsbHksIGl0IGNvdWxkIHRyaWdnZXIgdGhlIGBtaGlfcGNpX3Byb2JlYCBmdW5jdGlvbi4gSG93ZXZlciwgdGhhdCBwcm9iZSBmdW5jdGlvbiBpcyBnb2luZyB0byB0cnkgYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIGFjdHVhbCBkZXZpY2UsIGFuZCB0aGF0JiMzOTtzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKU28sIGxldCYjMzk7cyBkaWcgaW50byB3aGF0IGBtaGlfcGNpX3Byb2JlYCBhY3R1YWxseSAqZG9lcyouIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWhpX3BjaV9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzMjk9c3RhdGljIGludCBtaGlfcGNpX2dlbmVyaWNfZWRsX3RyaWdnZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzYyLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxMzYzOnN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzY0LXtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTE3NjQ9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1oaV9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ni1cdC5pZF90YWJsZVx0PSBtaGlfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNzY3Olx0LnByb2JlXHRcdD0gbWhpX3BjaV9wcm9iZSxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2OC1cdC5yZW1vdmVcdFx0PSBtaGlfcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZSwgcmVhZHkgZm9yIGEgZmVsbG93IHNwZWNpYWxpc3Q6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBtaGlfcGNpX3Byb2JlIGZvciBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwcm9iZSByb3V0aW5lIGhhcyBhbnkgZnVua3ksIG5vbi1zdGFuZGFyZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBQQ0kgaGFyZHdhcmUgdGhhdCBtaWdodCB0cmlwIHVwIFN5emthbGxlciYjMzk7cyBnZW5lcmljIFBDSSBlbXVsYXRvci4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGVmZmVjdGl2ZSBmdXp6aW5nLiBXZSBhbGwga25vdyBob3cgc2Vuc2l0aXZlIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGJpdHMgY2FuIGJlLiBJcyBpdCBnb2luZyB0byByZWx5IG9uIHVuZG9jdW1lbnRlZCByZWdpc3RlcnMsIHByb3ByaWV0YXJ5IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgb3IgZGVlcGx5IHNwZWNpZmljIHRpbWluZyByZXF1aXJlbWVudHM/IElmIHNvLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBtb2RlbCB0aG9zZSB3aXRoaW4gdGhlIGVtdWxhdG9yIG9yIGJlIGZvcmNlZCB0byBsb29rIGF0IGFub3RoZXIgbWVhbnMgb2YgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM2MzpcdHN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuMTM2NDpcdHtcbjEzNjU6XHRcdGNvbnN0IHN0cnVjdCBtaGlfcGNpX2Rldl9pbmZvICppbmZvID0gKHN0cnVjdCBtaGlfcGNpX2Rldl9pbmZvICopIGlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuMTM2NjpcdFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqbWhpX2NudHJsX2NvbmZpZztcbjEzNjc6XHRcdHN0cnVjdCBtaGlfcGNpX2RldmljZSAqbWhpX3BkZXY7XG4xMzY4Olx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybDtcbjEzNjk6XHRcdHVuc2lnbmVkIGludCBkbWFfZGF0YV93aWR0aDtcbjEzNzA6XHRcdGludCBlcnI7XG4xMzcxOlx0XG4xMzcyOlx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUhJIFBDSSBkZXZpY2UgZm91bmQ6ICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZW5hbWUpO1xuMTM3MzpcdFxuMTM3NDpcdFx0LyogbWhpX3BkZXYubWhpX2NudHJsIG11c3QgYmUgemVyby1pbml0aWFsaXplZCAqL1xuMTM3NTpcdFx0bWhpX3BkZXYgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqbWhpX3BkZXYpLCBHRlBfS0VSTkVMKTtcbjEzNzY6XHRcdGlmICghbWhpX3BkZXYpXG4xMzc3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTM3ODpcdFxuMTM3OTpcdFx0SU5JVF9XT1JLKFx1MDAyNm1oaV9wZGV2LVx1MDAzZXJlY292ZXJ5X3dvcmssIG1oaV9wY2lfcmVjb3Zlcnlfd29yayk7XG4xMzgwOlx0XG4xMzgxOlx0XHRpZiAocGRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2IGluZm8tXHUwMDNldmZfY29uZmlnKVxuMTM4MjpcdFx0XHRtaGlfY250cmxfY29uZmlnID0gaW5mby1cdTAwM2V2Zl9jb25maWc7XG4xMzgzOlx0XHRlbHNlXG4xMzg0Olx0XHRcdG1oaV9jbnRybF9jb25maWcgPSBpbmZvLVx1MDAzZWNvbmZpZztcbjEzODU6XHRcbjEzODY6XHRcdC8qIEluaXRpYWxpemUgaGVhbHRoIGNoZWNrIG1vbml0b3Igb25seSBmb3IgUGh5c2ljYWwgZnVuY3Rpb25zICovXG4xMzg3Olx0XHRpZiAoIXBkZXYtXHUwMDNlaXNfdmlydGZuKVxuMTM4ODpcdFx0XHR0aW1lcl9zZXR1cChcdTAwMjZtaGlfcGRldi1cdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGhlYWx0aF9jaGVjaywgMCk7XG4xMzg5Olx0XG4xMzkwOlx0XHRtaGlfY250cmwgPSBcdTAwMjZtaGlfcGRldi1cdTAwM2VtaGlfY250cmw7XG4xMzkxOlx0XG4xMzkyOlx0XHRkbWFfZGF0YV93aWR0aCA9IChwZGV2LVx1MDAzZWlzX3ZpcnRmbiBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2V2Zl9kbWFfZGF0YV93aWR0aCkgP1xuMTM5MzpcdFx0XHRcdCAgaW5mby1cdTAwM2V2Zl9kbWFfZGF0YV93aWR0aCA6IGluZm8tXHUwMDNlZG1hX2RhdGFfd2lkdGg7XG4xMzk0Olx0XG4xMzk1Olx0XHRtaGlfY250cmwtXHUwMDNlY250cmxfZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4xMzk2Olx0XHRtaGlfY250cmwtXHUwMDNlaW92YV9zdGFydCA9IDA7XG4xMzk3Olx0XHRtaGlfY250cmwtXHUwMDNlaW92YV9zdG9wID0gKGRtYV9hZGRyX3QpRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKTtcbjEzOTg6XHRcdG1oaV9jbnRybC1cdTAwM2Vmd19pbWFnZSA9IGluZm8tXHUwMDNlZnc7XG4xMzk5Olx0XHRtaGlfY250cmwtXHUwMDNlZWRsX2ltYWdlID0gaW5mby1cdTAwM2VlZGw7XG4xNDAwOlx0XG4xNDAxOlx0XHRtaGlfY250cmwtXHUwMDNlcmVhZF9yZWcgPSBtaGlfcGNpX3JlYWRfcmVnO1xuMTQwMjpcdFx0bWhpX2NudHJsLVx1MDAzZXdyaXRlX3JlZyA9IG1oaV9wY2lfd3JpdGVfcmVnO1xuMTQwMzpcdFx0bWhpX2NudHJsLVx1MDAzZXN0YXR1c19jYiA9IG1oaV9wY2lfc3RhdHVzX2NiO1xuMTQwNDpcdFx0bWhpX2NudHJsLVx1MDAzZXJ1bnRpbWVfZ2V0ID0gbWhpX3BjaV9ydW50aW1lX2dldDtcbjE0MDU6XHRcdG1oaV9jbnRybC1cdTAwM2VydW50aW1lX3B1dCA9IG1oaV9wY2lfcnVudGltZV9wdXQ7XG4xNDA2Olx0XHRtaGlfY250cmwtXHUwMDNlbXJ1ID0gaW5mby1cdTAwM2VtcnVfZGVmYXVsdDtcbjE0MDc6XHRcdG1oaV9jbnRybC1cdTAwM2VuYW1lID0gaW5mby1cdTAwM2VuYW1lO1xuMTQwODpcdFxuMTQwOTpcdFx0aWYgKCFwZGV2LVx1MDAzZWlzX3ZpcnRmbilcbjE0MTA6XHRcdFx0bWhpX3BkZXYtXHUwMDNlcmVzZXRfb25fcmVtb3ZlID0gaW5mby1cdTAwM2VyZXNldF9vbl9yZW1vdmU7XG4xNDExOlx0XG4xNDEyOlx0XHRpZiAoaW5mby1cdTAwM2VlZGxfdHJpZ2dlcilcbjE0MTM6XHRcdFx0bWhpX2NudHJsLVx1MDAzZWVkbF90cmlnZ2VyID0gbWhpX3BjaV9nZW5lcmljX2VkbF90cmlnZ2VyO1xuMTQxNDpcdFxuMTQxNTpcdFx0aWYgKGluZm8tXHUwMDNlc2lkZWJhbmRfd2FrZSkge1xuMTQxNjpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9nZXQgPSBtaGlfcGNpX3dha2VfZ2V0X25vcDtcbjE0MTc6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXdha2VfcHV0ID0gbWhpX3BjaV93YWtlX3B1dF9ub3A7XG4xNDE4Olx0XHRcdG1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSA9IG1oaV9wY2lfd2FrZV90b2dnbGVfbm9wO1xuMTQxOTpcdFx0fVxuMTQyMDpcdFxuMTQyMTpcdFx0ZXJyID0gbWhpX3BjaV9jbGFpbShtaGlfY250cmwsIGluZm8tXHUwMDNlYmFyX251bSwgRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKSk7XG4xNDIyOlx0XHRpZiAoZXJyKVxuMTQyMzpcdFx0XHRyZXR1cm4gZXJyO1xuMTQyNDpcdFxuMTQyNTpcdFx0ZXJyID0gbWhpX3BjaV9nZXRfaXJxcyhtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xuMTQyNjpcdFx0aWYgKGVycilcbjE0Mjc6XHRcdFx0cmV0dXJuIGVycjtcbjE0Mjg6XHRcbjE0Mjk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtaGlfcGRldik7XG4xNDMwOlx0XG4xNDMxOlx0XHQvKiBIYXZlIHN0b3JlZCBwY2kgY29uZnNwYWNlIGF0IGhhbmQgZm9yIHJlc3RvcmUgaW4gc3VkZGVuIFBDSSBlcnJvci5cbjE0MzI6XHRcdCAqIGNhY2hlIHRoZSBzdGF0ZSBsb2NhbGx5IGFuZCBkaXNjYXJkIHRoZSBQQ0kgY29yZSBvbmUuXG4xNDMzOlx0XHQgKi9cbjE0MzQ6XHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuMTQzNTpcdFx0bWhpX3BkZXYtXHUwMDNlcGNpX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuMTQzNjpcdFx0cGNpX2xvYWRfc2F2ZWRfc3RhdGUocGRldiwgTlVMTCk7XG4xNDM3Olx0XG4xNDM4Olx0XHRlcnIgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0cmV0dXJuIGVycjtcbjE0NDE6XHRcbjE0NDI6XHRcdC8qIE1ISSBidXMgZG9lcyBub3QgcG93ZXIgdXAgdGhlIGNvbnRyb2xsZXIgYnkgZGVmYXVsdCAqL1xuMTQ0MzpcdFx0ZXJyID0gbWhpX3ByZXBhcmVfZm9yX3Bvd2VyX3VwKG1oaV9jbnRybCk7XG4xNDQ0Olx0XHRpZiAoZXJyKSB7XG4xNDQ1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBwcmVwYXJlIE1ISSBjb250cm9sbGVyXFxuXCYjMzQ7KTtcbjE0NDY6XHRcdFx0Z290byBlcnJfdW5yZWdpc3RlcjtcbjE0NDc6XHRcdH1cbjE0NDg6XHRcbjE0NDk6XHRcdGVyciA9IG1oaV9hc3luY19wb3dlcl91cChtaGlfY250cmwpO1xuMTQ1MDpcdFx0aWYgKGVycikge1xuMTQ1MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgdXAgTUhJIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTQ1MjpcdFx0XHRnb3RvIGVycl91bnByZXBhcmU7XG4xNDUzOlx0XHR9XG4xNDU0Olx0XG4xNDU1Olx0XHRzZXRfYml0KE1ISV9QQ0lfREVWX1NUQVJURUQsIFx1MDAyNm1oaV9wZGV2LVx1MDAzZXN0YXR1cyk7XG4xNDU2Olx0XG4xNDU3Olx0XHQvKiBzdGFydCBoZWFsdGggY2hlY2sgKi9cbjE0NTg6XHRcdGlmICghcGRldi1cdTAwM2Vpc192aXJ0Zm4pXG4xNDU5Olx0XHRcdG1vZF90aW1lcihcdTAwMjZtaGlfcGRldi1cdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGppZmZpZXMgJiM0MzsgSEVBTFRIX0NIRUNLX1BFUklPRCk7XG4xNDYwOlx0XG4xNDYxOlx0XHQvKiBBbGxvdyBydW50aW1lIHN1c3BlbmQgb25seSBpZiBib3RoIFBNRSBmcm9tIEQzSG90IGFuZCBNMyBhcmUgc3VwcG9ydGVkICovXG4xNDYyOlx0XHRpZiAocGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCkgXHUwMDI2XHUwMDI2ICEoaW5mby1cdTAwM2Vub19tMykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiB0aGUgYG1oaV9wY2lfcHJvYmVgIFJvdXRpbmUqKgoKT2theSwgc28gYG1oaV9wY2lfcHJvYmVgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgbG9va3MgbGlrZSBpdCBraWNrcyBvZmYgYSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zOiBgbWhpX3BjaV9jbGFpbWAsIGBtaGlfcGNpX2dldF9pcnFzYCwgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCwgYG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cGAsIGFuZCB0aGVuIGNydWNpYWxseSwgYG1oaV9hc3luY19wb3dlcl91cGAuIGBtaGlfYXN5bmNfcG93ZXJfdXBgIGlzIHRoZSBpbnRlcmVzdGluZyBvbmU7IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGFuZCBpdCBzdGFydHMgYSB3b3JrZXIgdG8gYWN0dWFsbHkgKnRhbGsqIHRvIHRoZSBkZXZpY2UuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgbXkgZXhwZXJ0aXNlIGtpY2tzIGluLiBHaXZlbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIgZW11bGF0aW5nIGEgUENJIGRldmljZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHByb2JsZW0uIElmIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIGEgKnJlYWwqIE1ISS1jYXBhYmxlIGRldmljZSwgYnV0IHJhdGhlciBhIHNpbXVsYXRlZCBvbmUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUhJIHByb3RvY29sICh0aGF0IGlzLCB0aGUgQkhJLCBFRSwgZXRjLiBsYXllcnMpIHdvbiYjMzk7dCBiZSBmdWxseSByZWFsaXplZC4gVGhpcyBtZWFucyBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyBhbG1vc3QgZ3VhcmFudGVlZCB0byBlaXRoZXIgZmFpbCwgb3Igd29yc2UsIHRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgcmVzcG9uc2VzIGl0JiMzOTtzIG5ldmVyIGdvaW5nIHRvIGdldC4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGRldmljZXMgKHRoZSBjaGFubmVscykgd29uJiMzOTt0IGJlIGNyZWF0ZWQuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIERpZG4mIzM5O3QgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBNSEkgZGV2aWNlcyB0aGVtc2VsdmVzPyBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGVuIGEgZmFpbHVyZSBpbiBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBiZWNvbWVzIGV2ZW4gbW9yZSBjcml0aWNhbCBiZWNhdXNlLCBpZiBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIHJlc291cmNlcywgYSBmYWlsdXJlIHRoZXJlIGNvdWxkIHByZXZlbnQgZGV2aWNlIGNyZWF0aW9uIGF0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTE5Olx0aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuIDkyMDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXG4gOTIxOlx0e1xuIDkyMjpcdFx0c3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50O1xuIDkyMzpcdFx0c3RydWN0IG1oaV9jaGFuICptaGlfY2hhbjtcbiA5MjQ6XHRcdHN0cnVjdCBtaGlfY21kICptaGlfY21kO1xuIDkyNTpcdFx0c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXY7XG4gOTI2Olx0XHRpbnQgcmV0LCBpO1xuIDkyNzpcdFxuIDkyODpcdFx0aWYgKCFtaGlfY250cmwgfHwgIW1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYgfHwgIW1oaV9jbnRybC1cdTAwM2VyZWdzIHx8XG4gOTI5Olx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2VydW50aW1lX2dldCB8fCAhbWhpX2NudHJsLVx1MDAzZXJ1bnRpbWVfcHV0IHx8XG4gOTMwOlx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2VzdGF0dXNfY2IgfHwgIW1oaV9jbnRybC1cdTAwM2VyZWFkX3JlZyB8fFxuIDkzMTpcdFx0ICAgICFtaGlfY250cmwtXHUwMDNld3JpdGVfcmVnIHx8ICFtaGlfY250cmwtXHUwMDNlbnJfaXJxcyB8fFxuIDkzMjpcdFx0ICAgICFtaGlfY250cmwtXHUwMDNlaXJxIHx8ICFtaGlfY250cmwtXHUwMDNlcmVnX2xlbilcbiA5MzM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTM0Olx0XG4gOTM1Olx0XHRyZXQgPSBwYXJzZV9jb25maWcobWhpX2NudHJsLCBjb25maWcpO1xuIDkzNjpcdFx0aWYgKHJldClcbiA5Mzc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gOTM4Olx0XG4gOTM5Olx0XHRtaGlfY250cmwtXHUwMDNlbWhpX2NtZCA9IGt6YWxsb2Nfb2JqcygqbWhpX2NudHJsLVx1MDAzZW1oaV9jbWQsIE5SX09GX0NNRF9SSU5HUyk7XG4gOTQwOlx0XHRpZiAoIW1oaV9jbnRybC1cdTAwM2VtaGlfY21kKSB7XG4gOTQxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gOTQyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfZXZlbnQ7XG4gOTQzOlx0XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtaGlfY250cmwtXHUwMDNldHJhbnNpdGlvbl9saXN0KTtcbiA5NDY6XHRcdG11dGV4X2luaXQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX211dGV4KTtcbiA5NDc6XHRcdHJ3bG9ja19pbml0KFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiA5NDg6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1oaV9jbnRybC1cdTAwM2V0cmFuc2l0aW9uX2xvY2spO1xuIDk0OTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXdsb2NrKTtcbiA5NTA6XHRcdElOSVRfV09SSyhcdTAwMjZtaGlfY250cmwtXHUwMDNlc3Rfd29ya2VyLCBtaGlfcG1fc3Rfd29ya2VyKTtcbiA5NTE6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXN0YXRlX2V2ZW50KTtcbiA5NTI6XHRcbiA5NTM6XHRcdG1oaV9jbnRybC1cdTAwM2VoaXByaW9fd3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDttaGlfaGlwcmlvX3dxXCYjMzQ7LCBXUV9ISUdIUFJJKTtcbiA5NTQ6XHRcdGlmICghbWhpX2NudHJsLVx1MDAzZWhpcHJpb193cSkge1xuIDk1NTpcdFx0XHRkZXZfZXJyKG1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuIDk1NjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDk1NzpcdFx0XHRnb3RvIGVycl9mcmVlX2NtZDtcbiA5NTg6XHRcdH1cbiA5NTk6XHRcbiA5NjA6XHRcdG1oaV9jbWQgPSBtaGlfY250cmwtXHUwMDNlbWhpX2NtZDtcbiA5NjE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX09GX0NNRF9SSU5HUzsgaSYjNDM7JiM0MzssIG1oaV9jbWQmIzQzOyYjNDM7KVxuIDk2MjpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtaGlfY21kLVx1MDAzZWxvY2spO1xuIDk2MzpcdFxuIDk2NDpcdFx0bWhpX2V2ZW50ID0gbWhpX2NudHJsLVx1MDAzZW1oaV9ldmVudDtcbiA5NjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1oaV9jbnRybC1cdTAwM2V0b3RhbF9ldl9yaW5nczsgaSYjNDM7JiM0MzssIG1oaV9ldmVudCYjNDM7JiM0MzspIHtcbiA5NjY6XHRcdFx0LyogU2tpcCBmb3Igb2ZmbG9hZCBldmVudHMgKi9cbiA5Njc6XHRcdFx0aWYgKG1oaV9ldmVudC1cdTAwM2VvZmZsb2FkX2V2KVxuIDk2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDk2OTpcdFxuIDk3MDpcdFx0XHRtaGlfZXZlbnQtXHUwMDNlbWhpX2NudHJsID0gbWhpX2NudHJsO1xuIDk3MTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZtaGlfZXZlbnQtXHUwMDNlbG9jayk7XG4gOTcyOlx0XHRcdGlmIChtaGlfZXZlbnQtXHUwMDNlZGF0YV90eXBlID09IE1ISV9FUl9DVFJMKVxuIDk3MzpcdFx0XHRcdHRhc2tsZXRfaW5pdChcdTAwMjZtaGlfZXZlbnQtXHUwMDNldGFzaywgbWhpX2N0cmxfZXZfdGFzayxcbiA5NzQ6XHRcdFx0XHRcdCAgICAgKHVsb25nKW1oaV9ldmVudCk7XG4gOTc1Olx0XHRcdGVsc2VcbiA5NzY6XHRcdFx0XHR0YXNrbGV0X2luaXQoXHUwMDI2bWhpX2V2ZW50LVx1MDAzZXRhc2ssIG1oaV9ldl90YXNrLFxuIDk3NzpcdFx0XHRcdFx0ICAgICAodWxvbmcpbWhpX2V2ZW50KTtcbiA5Nzg6XHRcdH1cbiA5Nzk6XHRcbiA5ODA6XHRcdG1oaV9jaGFuID0gbWhpX2NudHJsLVx1MDAzZW1oaV9jaGFuO1xuIDk4MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWhpX2NudHJsLVx1MDAzZW1heF9jaGFuOyBpJiM0MzsmIzQzOywgbWhpX2NoYW4mIzQzOyYjNDM7KSB7XG4gOTgyOlx0XHRcdG11dGV4X2luaXQoXHUwMDI2bWhpX2NoYW4tXHUwMDNlbXV0ZXgpO1xuIDk4MzpcdFx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bWhpX2NoYW4tXHUwMDNlY29tcGxldGlvbik7XG4gOTg0Olx0XHRcdHJ3bG9ja19pbml0KFx1MDAyNm1oaV9jaGFuLVx1MDAzZWxvY2spO1xuIDk4NTpcdFxuIDk4NjpcdFx0XHQvKiB1c2VkIGluIHNldHRpbmcgYmVpIGZpZWxkIG9mIFRSRSAqL1xuIDk4NzpcdFx0XHRtaGlfZXZlbnQgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2V2ZW50W21oaV9jaGFuLVx1MDAzZWVyX2luZGV4XTtcbiA5ODg6XHRcdFx0bWhpX2NoYW4tXHUwMDNlaW50bW9kID0gbWhpX2V2ZW50LVx1MDAzZWludG1vZDtcbiA5ODk6XHRcdH1cbiA5OTA6XHRcbiA5OTE6XHRcdGlmIChtaGlfY250cmwtXHUwMDNlYm91bmNlX2J1Zikge1xuIDk5MjpcdFx0XHRtaGlfY250cmwtXHUwMDNlbWFwX3NpbmdsZSA9IG1oaV9tYXBfc2luZ2xlX3VzZV9iYjtcbiA5OTM6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXVubWFwX3NpbmdsZSA9IG1oaV91bm1hcF9zaW5nbGVfdXNlX2JiO1xuIDk5NDpcdFx0fSBlbHNlIHtcbiA5OTU6XHRcdFx0bWhpX2NudHJsLVx1MDAzZW1hcF9zaW5nbGUgPSBtaGlfbWFwX3NpbmdsZV9ub19iYjtcbiA5OTY6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXVubWFwX3NpbmdsZSA9IG1oaV91bm1hcF9zaW5nbGVfbm9fYmI7XG4gOTk3Olx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRtaGlfY250cmwtXHUwMDNlaW5kZXggPSBpZGFfYWxsb2MoXHUwMDI2bWhpX2NvbnRyb2xsZXJfaWRhLCBHRlBfS0VSTkVMKTtcbjEwMDA6XHRcdGlmIChtaGlfY250cmwtXHUwMDNlaW5kZXggXHUwMDNjIDApIHtcbjEwMDE6XHRcdFx0cmV0ID0gbWhpX2NudHJsLVx1MDAzZWluZGV4O1xuMTAwMjpcdFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0cmV0ID0gbWhpX2luaXRfaXJxX3NldHVwKG1oaV9jbnRybCk7XG4xMDA2Olx0XHRpZiAocmV0KVxuMTAwNzpcdFx0XHRnb3RvIGVycl9pZGFfZnJlZTtcbjEwMDg6XHRcbjEwMDk6XHRcdC8qIFJlZ2lzdGVyIGNvbnRyb2xsZXIgd2l0aCBNSEkgYnVzICovXG4xMDEwOlx0XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuMTAxMTpcdFx0aWYgKElTX0VSUihtaGlfZGV2KSkge1xuMTAxMjpcdFx0XHRkZXZfZXJyKG1oaV9jbnRybC1cdTAwM2VjbnRybF9kZXYsIFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBNSEkgZGV2aWNlXFxuXCYjMzQ7KTtcbjEwMTM6XHRcdFx0cmV0ID0gUFRSX0VSUihtaGlfZGV2KTtcbjEwMTQ6XHRcdFx0Z290byBlcnJvcl9zZXR1cF9pcnE7XG4xMDE1Olx0XHR9XG4xMDE2Olx0XG4xMDE3Olx0XHRtaGlfZGV2LVx1MDAzZWRldl90eXBlID0gTUhJX0RFVklDRV9DT05UUk9MTEVSO1xuMTAxODpcdFx0bWhpX2Rldi1cdTAwM2VtaGlfY250cmwgPSBtaGlfY250cmw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTM5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludGVybmFsIFdvcmtmbG93IGZvciBNSEkgRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIE1ISSBkZXZpY2Ugc2V0dXAuIFRoZSBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBvZiBhbiBNSEkgZGV2aWNlLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBjb250cm9sbGVyIGl0c2VsZiDigJMgdGhhdCYjMzk7cyB0aGUgYE1ISV9ERVZJQ0VfQ09OVFJPTExFUmAgcGFydC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkga25vdyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFubmVsIGRldmljZSBjcmVhdGlvbiwgdGhlIGBNSElfREVWSUNFX1hGRVJgIGRldmljZXMsIGlzbiYjMzk7dCBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgbWhpX2NyZWF0ZV9kZXZpY2VzYCBpcyB0aGUgcmVzcG9uc2libGUgZnVuY3Rpb24uIE5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgc3RhY2suIExldCBtZSBnZXQgbXkgYmVhcmluZ3MgYW5kIHNlZSB3aGVyZSBleGFjdGx5IGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIGJlaW5nIGludm9rZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgZGlzY292ZXIgd2hlcmUgdGhlc2UgdHJhbnNmZXIgZGV2aWNlcyBhcmUgY29uZmlndXJlZC4gSSB3aWxsIHRyYWNrIHRoZSBpbnZvY2F0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfY3JlYXRlX2RldmljZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMjI6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2MD1FWFBPUlRfU1lNQk9MX0dQTChtaGlfbm90aWZ5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6MzYzOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zOTQ9c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXHQgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ2MS1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVx0XHRcdCAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XHRcdFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzMy1cdFx0XHRpZiAobWhpX2NudHJsLVx1MDAzZWZiY19kb3dubG9hZClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0NC1cdFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ1Olx0XHRcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXHRcdFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTUhJIERldmljZSBDcmVhdGlvbiBQcm9ibGVtKioKCk9rYXksIHNvIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgdG8gZXZlcnl0aGluZyBlbHNlIEkgbmVlZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBgbWhpX3BtX3N0X3dvcmtlcmAgb3IgYG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbmAgZnVuY3Rpb25zLCB3aGljaCwgaW4gdHVybiwgYXJlIGRyaXZlbiBieSBzdGF0ZSBjaGFuZ2VzIHdpdGhpbiB0aGUgTUhJIGNvbnRyb2xsZXIgaXRzZWxmLiBUaG9zZSBzdGF0ZSBjaGFuZ2VzIGFyZSBub3JtYWxseSB0aGUgcmVzdWx0IG9mIGVpdGhlciBoYXJkd2FyZSBpbnRlcnJ1cHRzIG9yIHNwZWNpZmljIHJlZ2lzdGVyIHJlYWRzLCB0aGluZ3MgbGlrZSBCSEkgb3IgRUUgcmVnaXN0ZXJzLgoKVGhlIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBhIGdlbmVyaWMgUENJIGRldmljZSwgaXQgcHJvYmFibHkgKndvbiYjMzk7dCogY29ycmVjdGx5IHNpbXVsYXRlIHRoZSBzcGVjaWZpYyBpbnRlcnJ1cHRzIG9yIHJlZ2lzdGVyIHZhbHVlcyB0aGF0IHRoZSBNSEkgY29udHJvbGxlciBleHBlY3RzIHRvIHNlZSBmb3IgdGhlc2Ugc3RhdGUgdHJhbnNpdGlvbnMuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWhpX2NyZWF0ZV9kZXZpY2VzYCBpcyBsaWtlbHkgKm5ldmVyKiBnb2luZyB0byBnZXQgY2FsbGVkLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB0aGUgYElQX0NUUkxgIGNoYW5uZWwgZGV2aWNlLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gdGhpcyB3aG9sZSBzZXR1cCwganVzdCB3b24mIzM5O3QgYmUgY3JlYXRlZC4gVGhhdCYjMzk7cyBhIGh1Z2UgYmxvY2tlci4KCkJ1dCB3YWl0LiBUaGlzIGNhbiYjMzk7dCBiZSB0aGUgKm9ubHkqIHdheSwgcmlnaHQ/IElzIHRoZXJlIGFueSB3YXkgdG8gY3JlYXRlIE1ISSBkZXZpY2VzIGluZGVwZW5kZW50IG9mIHRoaXMgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbj8gQ2FuIHN5emthbGxlciBzb21laG93ICpkaXJlY3RseSogaW5qZWN0IGRldmljZXMgb250byB0aGUgTUhJIGJ1cz8gTGV0IG1lIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBpZiBzeXprYWxsZXIgZXZlbiAqaGFzKiBhbiBNSEkgYnVzIGVtdWxhdG9yLiBJdCBoYW5kbGVzIFBDSSwgVVNCLCBWTUJ1cywgYW5kIG90aGVycywgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgYW55dGhpbmcgc3BlY2lmaWMgZm9yIE1ISS4gSG1tLCBubywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIE1ISSBidXMgaW4gc3l6a2FsbGVyLgoKSG9sZCBvbi4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNgIGFuZCBgZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuY2AuIEFoLCBgd3dhbl9jb3JlLmNgIGlzIHRoZSBXV0FOIHN1YnN5c3RlbSYjMzk7cyBjb3JlLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIERvZXMgc3l6a2FsbGVyIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgTUhJIHBhdGggdG8gZ2V0IHRvIGB3d2FuX2NvcmUuY2A/IENhbiBpdCByZWFjaCBgd3dhbl9jb3JlLmNgIHNvbWUgb3RoZXIgd2F5PyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgbWFueSBvdGhlciBXV0FOIGRyaXZlcnMgdGhlcmUgYXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O21oaV93d2FuX2N0cmwuYyYjMzQ7LAogICAgJiMzNDttaGlfd3dhbl9tYmltLmMmIzM0OywKICAgICYjMzQ7cWNvbV9iYW1fZG11eC5jJiMzNDssCiAgICAmIzM0O3JwbXNnX3d3YW5fY3RybC5jJiMzNDssCiAgICAmIzM0O3d3YW5fY29yZS5jJiMzNDssCiAgICAmIzM0O3d3YW5faHdzaW0uYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDtpb3NtJiMzNDssCiAgICAmIzM0O3Q3eHgmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldXQU4gSGFyZHdhcmUgU2ltdWxhdGlvbjogUG9ydCBDcmVhdGlvbiBBbmFseXNpcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgd3dhbl9od3NpbS5jYC4gQWgsIHllcywgYSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIFdXQU4gZGV2aWNlcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0b29scywgaXM6ICpkb2VzIGl0IGNvcnJlY3RseSBtb2RlbCB0aGUgZXNzZW50aWFsIGFzcGVjdHMgb2YgV1dBTiBwb3J0IGNyZWF0aW9uPyogV2UgbmVlZCB0byBzY3J1dGluaXplIHRoaXMgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2ltdWxhdGVkIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdHJhbnNsYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgcG9ydCBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3Qgc3lzdGVtIGZyb20gYSBwb3J0IHBlcnNwZWN0aXZlPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgc2ltdWxhdGVkIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgYW5kIHJlZ2lzdGVyZWQgYXMgYSB2YWxpZCBXV0FOIHBvcnQuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoaXMgc2ltdWxhdGlvbiBhY2N1cmF0ZWx5IHJlcHJvZHVjZXMgdGhlIGV4cGVjdGVkIGRldmljZSBlbnVtZXJhdGlvbiBhbmQgc2V0dXAgYmVoYXZpb3JzIG9mIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc2ltdWxhdGVkIGRldmljZSYjMzk7cyByZXBvcnRlZCBjYXBhYmlsaXRpZXMgYW5kIGhvdyB0aGV5IGdldCByZXByZXNlbnRlZCBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3d2FuX3BvcnRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MTMyPXN0YXRpYyBpbnQgd3dhbl9od3NpbV9hdF9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMTk0LVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6MTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0xOTYtXHQuc3RhcnQgPSB3d2FuX2h3c2ltX2F0X2VtdWxfc3RhcnQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9Mjg5PXN0YXRpYyBpbnQgd3dhbl9od3NpbV9ubWVhX2VtdWxfdHgoc3RydWN0IHd3YW5fcG9ydCAqd3BvcnQsIHN0cnVjdCBza19idWZmICppbilcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTUtXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYzoyOTY6c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5faHdzaW1fbm1lYV9lbXVsX3BvcnRfb3BzID0ge1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMjk3LVx0LnN0YXJ0ID0gd3dhbl9od3NpbV9ubWVhX2VtdWxfc3RhcnQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MzAzPXN0YXRpYyBzdHJ1Y3Qgd3dhbl9od3NpbV9wb3J0ICp3d2FuX2h3c2ltX3BvcnRfbmV3KHN0cnVjdCB3d2FuX2h3c2ltX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jLTMwNS17XG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYzozMDY6XHRjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyAqb3BzO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMzA3LVx0c3RydWN0IHd3YW5faHdzaW1fcG9ydCAqcG9ydDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0NjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFdXQU4gUG9ydCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHd3YW5fY29yZS5jYCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBgd3dhbl9wb3J0X29wX3N0YXJ0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpcyBjb25kaXRpb25hbCBibG9jazogaWYgYHBvcnQtJmd0O3N0YXJ0X2NvdW50YCBpcyAxIGFuZCB0aGUgcG9ydCB0eXBlIGlzIEFULCBhbmQgaWYgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AgaXMgbm90IG51bGwsIHRoZW4gRFRSIGFuZCBSVFMgYXJlIHJhaXNlZC4gVGhpcyBtaW1pY3MgVFRZIHNlbWFudGljcywgd2hpY2ggaXMgZ29vZC4gV2Ugd2FudCBtb2RlbSBwb3J0cyB0byBiZWhhdmUgYXMgZXhwZWN0ZWQuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHNgIGFjdHVhbGx5ICpzZXQqPyBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBpdCBpcyBzZXQuIFRoZSB3aG9sZSBwb2ludCBvZiBgd3dhbl9od3NpbS5jYCBpcyB0byBjcmVhdGUgV1dBTiBwb3J0cywgYW5kIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmVsYXRlIHRvIHRob3NlLiBTbyBJIGhhdmUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHd3YW5faHdzaW1fYXRfZW11bF9wb3J0X29wc2AuIEkgc3VzcGVjdCB0aGlzIGlzIHdoZXJlIHRoZSBgZHRyX3J0c2Agb3BlcmF0aW9uIGlzIGRlZmluZWQgZm9yIHRoZXNlIGVtdWxhdGVkIHBvcnRzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGB3d2FuX2h3c2ltLmNgIHByb3ZpZGVzIGEgc3VpdGFibGUgaW1wbGVtZW50YXRpb24gZm9yIGBkdHJfcnRzYC4gSWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbS4gSWYgc28sIHRoZW4gaXQgYWxsIG1ha2VzIHNlbnNlLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XG4gMTk2Olx0XHQuc3RhcnQgPSB3d2FuX2h3c2ltX2F0X2VtdWxfc3RhcnQsXG4gMTk3Olx0XHQuc3RvcCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdG9wLFxuIDE5ODpcdFx0LnR4ID0gd3dhbl9od3NpbV9hdF9lbXVsX3R4LFxuIDE5OTpcdH07XG4gMjAwOlx0XG4gMjAxOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0dOU1MpXG4gMjAyOlx0I2RlZmluZSBOTUVBX01BWF9MRU5cdFx0ODJcdC8qIE1heCBzZW50ZW5jZSBsZW5ndGggKi9cbiAyMDM6XHQjZGVmaW5lIE5NRUFfVFJBSUxfTEVOXHRcdDVcdC8qICYjMzk7KiYjMzk7ICYjNDM7IENoZWNrc3VtICYjNDM7IFx1MDAzY0NSXHUwMDNlXHUwMDNjTEZcdTAwM2UgKi9cbiAyMDQ6XHQjZGVmaW5lIE5NRUFfTUFYX0RBVEFfTEVOXHQoTk1FQV9NQVhfTEVOIC0gTk1FQV9UUkFJTF9MRU4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgd3dhbl9od3NpbS5jIGFuZCB3d2FuX2NvcmUuYyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGFuZCByZWFsaXppbmcgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBleGVjdXRlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIGBwb3J0LSZndDtvcHMtJmd0O2R0cl9ydHNgIGZ1bmN0aW9uIHBvaW50ZXIgYmVpbmcgc2V0LiBUaGUgY29yZSBpc3N1ZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGB3d2FuX2h3c2ltLmNgICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgd29uJiMzOTt0IGJlIHRyaWdnZXJlZCBpbiBhIHNpbXVsYXRlZCBoYXJkd2FyZSBlbnZpcm9ubWVudC4KCk15IG5leHQgdGhvdWdodCBpbW1lZGlhdGVseSBpczogd2hlcmUgKmlzKiBgZHRyX3J0c2AgYmVpbmcgc2V0PyBEaWdnaW5nIHRocm91Z2ggdGhlIHBhdGNoLCBJIHNlZSBpdCYjMzk7cyBiZWluZyBhZGRlZCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGl0IHdpdGhpbiB0aGUgYHd3YW5fcG9wc2Agc3RydWN0LCBzcGVjaWZpY2FsbHkgbGlrZSB0aGlzOgoKYGBgYwpAQCAtMTYzLDYgJiM0MzsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0gewogCS5zdGFydCA9IG1oaV93d2FuX2N0cmxfc3RhcnQsCiAJLnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsCiAJLnR4ID0gbWhpX3d3YW5fY3RybF90eCwKJiM0MzsJLmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsCiB9OwogYGBgCgpPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IEkmIzM5O20gbm90IHN0b3BwaW5nIHRoZXJlLiBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB0aGVyZSAqb3RoZXIqIGRyaXZlcnMgc2V0dGluZyB0aGlzIGBkdHJfcnRzYCBwb2ludGVyPyBJIG5lZWQgdG8gcGVyZm9ybSBhIHNlYXJjaCBmb3IgdGhpcyBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgbmV3IGNvZGUgYmVoYXZlcyBhcyBleHBlY3RlZCBhY3Jvc3MgdGhlIGJvYXJkIGFuZCB0byBzZWUgd2hhdCBwb3RlbnRpYWwgaW1wYWN0cyBpdCBoYXMgb24gdGhlIG90aGVyIGRyaXZlcnMgYW5kIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmR0cl9ydHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0My1cdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoyNDQ6XHQuZHRyX3J0cyA9IG1oaV93d2FuX2N0cmxfZHRyX3J0cyxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA5NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBXV0FOIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZHRyX3J0c2Agc2V0dGluZywgd2hpY2ggc2VlbXMgdG8gb3JpZ2luYXRlIHNvbGVseSBmcm9tIGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0IGltcGxpZXMgdGhlIG5ldyBjb2RlIGluIGB3d2FuX2NvcmUuY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB3aGVuIGEgV1dBTiBwb3J0IGlzIGNyZWF0ZWQgYnkgYG1oaV93d2FuX2N0cmwuY2AuIEFuZCBgbWhpX3d3YW5fY3RybC5jYCBpcywgb2YgY291cnNlLCBhbiBNSEkgZHJpdmVyLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IGNyZWF0ZSBhbiBNSEkgZGV2aWNlPyBNeSBlYXJsaWVyIGFuYWx5c2lzIHN1Z2dlc3RzIE1ISSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIG9ubHkgd2hlbiBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFzIHNlZW4gaW4gdGhlIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIHByb2Nlc3MuIFRoZSBwcm9ibGVtPyBTeXprYWxsZXImIzM5O3MgUENJIGVtdWxhdG9yLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGVtdWxhdGUgdGhlIE1ISSBoYXJkd2FyZS4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGhvc3QgY29udHJvbGxlciB3aWxsIGZhaWwgdG8gaW5pdGlhbGl6ZS4gVGhpcyBtZWFucyBpdCAqd29uJiMzOTt0KiBiZSBhYmxlIHRvIGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuCgpUaGVyZWZvcmUsIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aWxsIG5ldmVyIGJlIGNhbGxlZCwgYW5kIG5vIFdXQU4gcG9ydHMgd2l0aCBgZHRyX3J0c2Agd2lsbCBiZSBjcmVhdGVkLiBUaGF0IG1lYW5zIHRoZSBuZXcgY29kZSBpbiBib3RoIGB3d2FuX2NvcmUuY2AgYW5kIGBtaGlfd3dhbl9jdHJsLmNgIGlzIHVucmVhY2hhYmxlIGluIHRoaXMgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVS4KCkJ1dCwgaGFuZyBvbiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZXhwbG9yZWQgZXZlcnkgcG9zc2liaWxpdHkuIElzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byBpbmplY3QgYW4gTUhJIGRldmljZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IHVzZSBgbWhpX2FsbG9jX2RldmljZWAgZGlyZWN0bHk/IE5vLCB0aGF0JiMzOTtzIG5vdCBhIHN5c2NhbGwuIEhvdyBhYm91dCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgPyBOb3BlLiBPa2F5LCB3aGF0IGFib3V0IHNvbWUgc3lzZnMgb3IgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBtaWdodCBhbGxvdyBkZXZpY2UgaW5qZWN0aW9uPyBJdCYjMzk7cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGUgTUhJIHN1YnN5c3RlbSBleHBvc2VzIGFueSBpbnRlcmZhY2VzIGxpa2UgdGhhdC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfY3JlYXRlX2RldmljZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMjI6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2MD1FWFBPUlRfU1lNQk9MX0dQTChtaGlfbm90aWZ5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6MzYzOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zOTQ9c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXHQgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ2MS1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVx0XHRcdCAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XHRcdFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzMy1cdFx0XHRpZiAobWhpX2NudHJsLVx1MDAzZWZiY19kb3dubG9hZClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0NC1cdFx0XHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ1Olx0XHRcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXHRcdFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlZWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQ1NgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnRlcm5hbCBGdW5jdGlvbiBSZXZpZXcqKgoKSG1tLCBgbWhpX2NyZWF0ZV9kZXZpY2VzYC4uLiByaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIEkmIzM5O20gcHJldHR5IHN1cmUgSSByZW1lbWJlciBpdCBiZWluZyBjYWxsZWQgb25seSB3aXRoaW4gYG1oaV9wbV9zdF93b3JrZXJgIGFuZCBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYC4gT2theSwgc28gdGhvc2UgYXJlIHRoZSAqb25seSogdHdvIHBsYWNlcy4KCkFscmlnaHQsIGJ1dCB0aGF0IGdldHMgbWUgdGhpbmtpbmc6IElzIHRoZXJlICphbm90aGVyKiB3YXkgdG8gdHJpZ2dlciB0aGF0IGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGZ1bmN0aW9uPyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGl0c2VsZi4gVGltZSB0byBkaXZlIGJhY2sgaW4gdGhlcmUgYW5kIHJldmlldyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM3Mz1pbnQgbWhpX3BtX20zX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zOTMtLyogSGFuZGxlIGRldmljZSBNaXNzaW9uIE1vZGUgdHJhbnNpdGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozOTQ6c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTM5NS17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzOC1cdFx0Y2FzZSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU6XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjgzOTpcdFx0XHRtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQwLVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjAwNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipVbnBhY2tpbmcgVGhpcyBTdGF0ZSBUcmFuc2l0aW9uIFByb2Nlc3MqKgoKUmlnaHQsIHNvIHRoaXMgY29kZSBpcyBvbmx5IGNhbGxlZCBmcm9tIGBtaGlfcG1fc3Rfd29ya2VyYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgcGFydCBvZiBzb21lIHBvd2VyIG1hbmFnZW1lbnQgb3Igc3RhdGUgbWFuYWdlbWVudCBzdWJzeXN0ZW0gd2l0aGluIHRoZSBNSEkgKHByZXN1bWFibHkgTW9iaWxlIEhvc3QgSW50ZXJmYWNlKS4gT2theSwgbWFrZXMgc2Vuc2UuCgpgbWhpX3BtX3N0X3dvcmtlcmAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXTigJlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHRoYXQgaXQmIzM5O3MgcHVsbGluZyB0aGVzZSB0cmFuc2l0aW9ucyBmcm9tIGBtaGlfY250cmwtJmd0O3RyYW5zaXRpb25fbGlzdGAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzICp3aG8qIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGBtaGlfY250cmwtJmd0O3RyYW5zaXRpb25fbGlzdGA/IFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbnRyb2wgZmxvdyBiZWdpbnMuIERldGVybWluaW5nIHRoYXQgd2lsbCBnaXZlIG1lIHZpc2liaWxpdHkgaW50byBob3cgdHJhbnNpdGlvbnMgYXJlIGluaXRpYXRlZCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIHN5c3RlbSYjMzk7cyBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsc3RhY2sgdGhhdCBmZWVkcyB0aGlzIGxpc3QgdGVsbHMgbWUgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIHZhcmlvdXMgZXZlbnRzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgbGlzdCB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXJzLiBXaG8mIzM5O3MgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IElzIHRoaXMgZXZlbnQtZHJpdmVuLCB0aW1lci1iYXNlZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9zZXRfbWhpX3N0YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2Jvb3QuYz02Mz1zdGF0aWMgaW50IF9fbWhpX2Rvd25sb2FkX3JkZG1faW5fcGFuaWMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jLTEwNS1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXIgZGV2aWNlIGludG8gUkRETSBtb2RlIHVzaW5nIFNZUyBFUlJcXG5cJiMzNDspO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jOjEwNjpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfU1lTX0VSUik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA3LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9MTIwPWVudW0gbWhpX3BtX3N0YXRlIF9fbXVzdF9jaGVjayBtaGlfdHJ5c2V0X3BtX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTM5LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxNDA6dm9pZCBtaGlfc2V0X21oaV9zdGF0ZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgZW51bSBtaGlfc3RhdGUgc3RhdGUpXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTE0MS17XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0xNzA9aW50IG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMjUwLVx0LyogU2V0IE1ISSB0byBNMCBzdGF0ZSAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoyNTE6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTI1Mi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTMzNz12b2lkIG1oaV9wbV9tMV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ0LVx0aWYgKHN0YXRlID09IE1ISV9QTV9NMikge1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozNDU6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX00yKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ2LVx0XHRtaGlfY250cmwtXHUwMDNlZGV2X3N0YXRlID0gTUhJX1NUQVRFX00yO1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NDcyPXN0YXRpYyB2b2lkIG1oaV9wbV9kaXNhYmxlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00OTQtXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtUcmlnZ2VyaW5nIE1ISSBSZXNldCBpbiBkZXZpY2VcXG5cJiMzNDspO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo0OTU6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDk2LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTY1Ny1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXJpbmcgTUhJIFJlc2V0IGluIGRldmljZVxcblwmIzM0Oyk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjY1ODpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy02NTktXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz04Njc9aW50IG1oaV9wbV9zdXNwZW5kKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTI1LVx0LyogU2V0IE1ISSB0byBNMyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5MjY6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMyk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTkyNy1cdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9OTU1PXN0YXRpYyBpbnQgX19taGlfcG1fcmVzdW1lKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBib29sIGZvcmNlKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTk4LVx0LyogU2V0IE1ISSB0byBNMCBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5OTk6XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEwMDAtXHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExNjUtXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTE2NjpcdFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTY3LVx0XHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlcmVncywgTUhJQ1RSTCxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEzMDE9aW50IG1oaV9mb3JjZV9yZGRtX21vZGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMzEwLVx0ZGV2X2RiZyhkZXYsIFwmIzM0O1RyaWdnZXJpbmcgU1lTX0VSUiB0byBmb3JjZSBSRERNIHN0YXRlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTMxMTpcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1NZU19FUlIpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMzEyLVxuLS1cbmluY2x1ZGUvbGludXgvbWhpLmg9NTg2PXZvaWQgbWhpX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtaGlfZHJpdmVyICptaGlfZHJ2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU4OC0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTg5OiAqIG1oaV9zZXRfbWhpX3N0YXRlIC0gU2V0IE1ISSBkZXZpY2Ugc3RhdGVcbmluY2x1ZGUvbGludXgvbWhpLmgtNTkwLSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01OTItICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU5Mzp2b2lkIG1oaV9zZXRfbWhpX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuaW5jbHVkZS9saW51eC9taGkuaC01OTQtXHRcdCAgICAgICBlbnVtIG1oaV9zdGF0ZSBzdGF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBTdGF0ZSBUcmFuc2l0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uIHdvcmtzLi4uIExldCBtZSBzZWUuIEkmIzM5O20gZm9jdXNpbmcgb24gYG1oaV9zZXRfbWhpX3N0YXRlYCwgcmlnaHQ/IFRoYXQgZnVuY3Rpb24gaXMgKmRpcmVjdGx5KiB3cml0aW5nIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgYE1ISUNUUkxgLiBUaGF0JiMzOTtzIHRoZSBrZXksIGl0JiMzOTtzIHRoZSBhY3R1YWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBwYXJ0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpBbmQgaXQgbG9va3MgbGlrZSB0aGUgKnRyaWdnZXIqIGZvciBhIHN0YXRlIGNoYW5nZSB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYCBpcyBiZWluZyBoYW5kbGVkIGJ5IGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHVwIHRoYXQgc3BlY2lmaWMgdHJhbnNpdGlvbi4gVGhpcyBtZWFucyBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHRoZSAmIzM5O2RvZXImIzM5OywgYW5kIGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAgaXMgdGhlIHNjaGVkdWxlciBvciB0aGUgcmVxdWVzdG9yLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzMzPWNvbnN0IGNoYXIgKnRvX21oaV9wbV9zdGF0ZV9zdHIodTMyIHN0YXRlKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg6MzM0OmludCBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzM1LVx0XHRcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9Nzk5PWludCBtaGlfcHJvY2Vzc19jdHJsX2V2X3Jpbmcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkyMi1cdFx0XHRpZiAoc3QgIT0gREVWX1NUX1RSQU5TSVRJT05fTUFYKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjkyMzpcdFx0XHRcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgc3QpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkyNC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTU5Nz1zdGF0aWMgdm9pZCBtaGlfcG1fc3lzX2Vycm9yX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NTItXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MzpcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgbmV4dF9zdGF0ZSk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc1NC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc2My0vKiBRdWV1ZSBhIG5ldyB3b3JrIGl0ZW0gYW5kIHNjaGVkdWxlIHdvcmsgKi9cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NzY0OmludCBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzY1LVx0XHRcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzg0PXZvaWQgbWhpX3BtX3N5c19lcnJfaGFuZGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc5My1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6Nzk0Olx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBERVZfU1RfVFJBTlNJVElPTl9TWVNfRVJSKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzk1LX1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTUtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTY6XHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTk3LVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9MTIxMj1zdGF0aWMgdm9pZCBfX21oaV9wb3dlcl9kb3duKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBib29sIGdyYWNlZnVsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1MS1cdGlmIChkZXN0cm95X2RldmljZSlcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTI1MjpcdFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjUzLVx0XHRcdFx0XHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFX0RFU1RST1lfREVWSUNFKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1NC1cdGVsc2VcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6MTI1NTpcdFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjU2LVx0XHRcdFx0XHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyNzAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byB0aGUgYG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uYCBDYWxsKioKCk9rYXksIHNvIGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAgaXMgZ2V0dGluZyBjYWxsZWQgd2l0aGluIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBJbnRlcmVzdGluZy4gVGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBoZXJlIGlzIHRoYXQgYG5leHRfc3RhdGVgIGlzIHNldCB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYC4gVGhhdCYjMzk7cyB0aGUgc3RhdGUgaXQmIzM5O3MgdHJhbnNpdGlvbmluZyAqdG8qLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjYWxsLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvZiB3aGF0IGBtaGlfYXN5bmNfcG93ZXJfdXBgIGRvZXMuIExldCBtZSBnbyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYG1oaV9hc3luY19wb3dlcl91cGAuLi4gYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoYXQgd2lsbCBpbW1lZGlhdGVseSBpbGx1bWluYXRlIHRoZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjE6XHRpbnQgbWhpX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuMTEyMjpcdHtcbjExMjM6XHRcdHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudCA9IG1oaV9jbnRybC1cdTAwM2VtaGlfZXZlbnQ7XG4xMTI0Olx0XHRlbnVtIG1oaV9zdGF0ZSBzdGF0ZTtcbjExMjU6XHRcdGVudW0gbWhpX2VlX3R5cGUgY3VycmVudF9lZTtcbjExMjY6XHRcdGVudW0gZGV2X3N0X3RyYW5zaXRpb24gbmV4dF9zdGF0ZTtcbjExMjc6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1oaV9jbnRybC1cdTAwM2VtaGlfZGV2LVx1MDAzZWRldjtcbjExMjg6XHRcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xuMTEyOTpcdFx0aW50IHJldCwgaTtcbjExMzA6XHRcbjExMzE6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7UmVxdWVzdGVkIHRvIHBvd2VyIE9OXFxuXCYjMzQ7KTtcbjExMzI6XHRcbjExMzM6XHRcdC8qIFN1cHBseSBkZWZhdWx0IHdha2Ugcm91dGluZXMgaWYgbm90IHByb3ZpZGVkIGJ5IGNvbnRyb2xsZXIgZHJpdmVyICovXG4xMTM0Olx0XHRpZiAoIW1oaV9jbnRybC1cdTAwM2V3YWtlX2dldCB8fCAhbWhpX2NudHJsLVx1MDAzZXdha2VfcHV0IHx8XG4xMTM1Olx0XHQgICAgIW1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSkge1xuMTEzNjpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9nZXQgPSBtaGlfYXNzZXJ0X2Rldl93YWtlO1xuMTEzNzpcdFx0XHRtaGlfY250cmwtXHUwMDNld2FrZV9wdXQgPSBtaGlfZGVhc3NlcnRfZGV2X3dha2U7XG4xMTM4Olx0XHRcdG1oaV9jbnRybC1cdTAwM2V3YWtlX3RvZ2dsZSA9IChtaGlfY250cmwtXHUwMDNlZGJfYWNjZXNzIFx1MDAyNiBNSElfUE1fTTIpID9cbjExMzk6XHRcdFx0XHRtaGlfdG9nZ2xlX2Rldl93YWtlX25vcCA6IG1oaV90b2dnbGVfZGV2X3dha2U7XG4xMTQwOlx0XHR9XG4xMTQxOlx0XG4xMTQyOlx0XHRtdXRleF9sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMTQzOlx0XHRtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUgPSBNSElfUE1fRElTQUJMRTtcbjExNDQ6XHRcbjExNDU6XHRcdC8qIFNldHVwIEJISSBJTlRWRUMgKi9cbjExNDY6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbjExNDc6XHRcdG1oaV93cml0ZV9yZWcobWhpX2NudHJsLCBtaGlfY250cmwtXHUwMDNlYmhpLCBCSElfSU5UVkVDLCAwKTtcbjExNDg6XHRcdG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9QT1I7XG4xMTQ5Olx0XHRtaGlfY250cmwtXHUwMDNlZWUgPSBNSElfRUVfTUFYO1xuMTE1MDpcdFx0Y3VycmVudF9lZSA9IG1oaV9nZXRfZXhlY19lbnYobWhpX2NudHJsKTtcbjExNTE6XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuMTE1MjpcdFxuMTE1MzpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSBkZXZpY2UgaXMgaW4gdmFsaWQgZXhlYyBlbnYgKi9cbjExNTQ6XHRcdGlmICghTUhJX1BPV0VSX1VQX0NBUEFCTEUoY3VycmVudF9lZSkpIHtcbjExNTU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzIGlzIG5vdCBhIHZhbGlkIEVFIGZvciBwb3dlciBvblxcblwmIzM0OyxcbjExNTY6XHRcdFx0XHRUT19NSElfRVhFQ19TVFIoY3VycmVudF9lZSkpO1xuMTE1NzpcdFx0XHRyZXQgPSAtRUlPO1xuMTE1ODpcdFx0XHRnb3RvIGVycm9yX2V4aXQ7XG4xMTU5Olx0XHR9XG4xMTYwOlx0XG4xMTYxOlx0XHRzdGF0ZSA9IG1oaV9nZXRfbWhpX3N0YXRlKG1oaV9jbnRybCk7XG4xMTYyOlx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7QXR0ZW1wdGluZyBwb3dlciBvbiB3aXRoIEVFOiAlcywgc3RhdGU6ICVzXFxuXCYjMzQ7LFxuMTE2MzpcdFx0XHRUT19NSElfRVhFQ19TVFIoY3VycmVudF9lZSksIG1oaV9zdGF0ZV9zdHIoc3RhdGUpKTtcbjExNjQ6XHRcbjExNjU6XHRcdGlmIChzdGF0ZSA9PSBNSElfU1RBVEVfU1lTX0VSUikge1xuMTE2NjpcdFx0XHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9SRVNFVCk7XG4xMTY3Olx0XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElDVFJMLFxuMTE2ODpcdFx0XHRcdFx0IE1ISUNUUkxfUkVTRVRfTUFTSywgMCwgaW50ZXJ2YWxfdXMsXG4xMTY5Olx0XHRcdFx0XHQgbWhpX2NudHJsLVx1MDAzZXRpbWVvdXRfbXMpO1xuMTE3MDpcdFx0XHRpZiAocmV0KSB7XG4xMTcxOlx0XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVzZXQgTUhJIGR1ZSB0byBzeXNlcnIgc3RhdGVcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdGdvdG8gZXJyb3JfZXhpdDtcbjExNzM6XHRcdFx0fVxuMTE3NDpcdFxuMTE3NTpcdFx0XHQvKlxuMTE3NjpcdFx0XHQgKiBkZXZpY2UgY2xlYXJlcyBJTlRWRUMgYXMgcGFydCBvZiBSRVNFVCBwcm9jZXNzaW5nLFxuMTE3NzpcdFx0XHQgKiByZS1wcm9ncmFtIGl0XG4xMTc4Olx0XHRcdCAqL1xuMTE3OTpcdFx0XHRtaGlfd3JpdGVfcmVnKG1oaV9jbnRybCwgbWhpX2NudHJsLVx1MDAzZWJoaSwgQkhJX0lOVFZFQywgMCk7XG4xMTgwOlx0XHR9XG4xMTgxOlx0XG4xMTgyOlx0XHQvKiBJUlFzIGhhdmUgYmVlbiByZXF1ZXN0ZWQgZHVyaW5nIHByb2JlLCBzbyB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIHRoZW0uICovXG4xMTgzOlx0XHRlbmFibGVfaXJxKG1oaV9jbnRybC1cdTAwM2VpcnFbMF0pO1xuMTE4NDpcdFxuMTE4NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWhpX2NudHJsLVx1MDAzZXRvdGFsX2V2X3JpbmdzOyBpJiM0MzsmIzQzOywgbWhpX2V2ZW50JiM0MzsmIzQzOykge1xuMTE4NjpcdFx0XHRpZiAobWhpX2V2ZW50LVx1MDAzZW9mZmxvYWRfZXYpXG4xMTg3Olx0XHRcdFx0Y29udGludWU7XG4xMTg4Olx0XG4xMTg5Olx0XHRcdGVuYWJsZV9pcnEobWhpX2NudHJsLVx1MDAzZWlycVttaGlfZXZlbnQtXHUwMDNlaXJxXSk7XG4xMTkwOlx0XHR9XG4xMTkxOlx0XG4xMTkyOlx0XHQvKiBUcmFuc2l0aW9uIHRvIG5leHQgc3RhdGUgKi9cbjExOTM6XHRcdG5leHRfc3RhdGUgPSBNSElfSU5fUEJMKGN1cnJlbnRfZWUpID9cbjExOTQ6XHRcdFx0REVWX1NUX1RSQU5TSVRJT05fUEJMIDogREVWX1NUX1RSQU5TSVRJT05fUkVBRFk7XG4xMTk1Olx0XG4xMTk2Olx0XHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xuMTE5NzpcdFxuMTE5ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMTk5Olx0XG4xMjAwOlx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O1Bvd2VyIG9uIHNldHVwIHN1Y2Nlc3NcXG5cJiMzNDspO1xuMTIwMTpcdFxuMTIwMjpcdFx0cmV0dXJuIDA7XG4xMjAzOlx0XG4xMjA0Olx0ZXJyb3JfZXhpdDpcbjEyMDU6XHRcdG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xuMTIwNjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9tdXRleCk7XG4xMjA3Olx0XG4xMjA4Olx0XHRyZXR1cm4gcmV0O1xuMTIwOTpcdH1cbjEyMTA6XHRFWFBPUlRfU1lNQk9MX0dQTChtaGlfYXN5bmNfcG93ZXJfdXApO1xuMTIxMTpcdFxuMTIxMjpcdHN0YXRpYyB2b2lkIF9fbWhpX3Bvd2VyX2Rvd24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsIGJvb2wgZ3JhY2VmdWwsXG4xMjEzOlx0XHRcdFx0ICAgICBib29sIGRlc3Ryb3lfZGV2aWNlKVxuMTIxNDpcdHtcbjEyMTU6XHRcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZSwgdHJhbnNpdGlvbl9zdGF0ZTtcbjEyMTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1oaV9jbnRybC1cdTAwM2VtaGlfZGV2LVx1MDAzZWRldjtcbjEyMTc6XHRcbjEyMTg6XHRcdG11dGV4X2xvY2soXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX211dGV4KTtcbjEyMTk6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbjEyMjA6XHRcdGN1cl9zdGF0ZSA9IG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3dlci1VcCBTZXF1ZW5jZSoqCgpPa2F5LCBzbyB0aGUgYG1oaV9hc3luY19wb3dlcl91cGAgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgd2UgdHJhbnNpdGlvbiB0aGluZ3MsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVucXVldWluZyBlaXRoZXIgYERFVl9TVF9UUkFOU0lUSU9OX1BCTGAgb3IgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkaWN0YXRlIHdoaWNoIG9uZS4gSSBrbm93IGl0JiMzOTtzIHJlYWRpbmcgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1c2luZyBgbWhpX2dldF9leGVjX2VudmAgYW5kIGFsc28gY2hlY2tpbmcgdGhlIG92ZXJhbGwgTUhJIHN0YXRlIHdpdGggYG1oaV9nZXRfbWhpX3N0YXRlYCwgd2hpY2ggaXMgbm9ybWFsLiBUaGUgaW50ZXJlc3RpbmcgYml0IGNvbWVzIHdpdGggdGhlIHN5emthbGxlciBlbXVsYXRpb24uIEJlY2F1c2Ugc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgUENJIGRldmljZSwgYW5kIHRoZXJlZm9yZSBjb250cm9sIG1lbW9yeS1tYXBwZWQgSS9PLCBpdCBjYW4gZWZmZWN0aXZlbHkgbWFuaXB1bGF0ZSB0aGUgdmFsdWVzIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4uIEkgY2FuIGZlZWQgaXQgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWVzIGFuZCBzZWUgaG93IGl0IHJlYWN0cy4KCkkgc2VlIGEgdnVsbmVyYWJpbGl0eS4gU3l6a2FsbGVyIGNvdWxkIGZvcmNlIGBtaGlfZ2V0X2V4ZWNfZW52YCB0byByZXR1cm4gYE1ISV9FRV9BTVNTYCAoTWlzc2lvbiBNb2RlKSBvciBldmVuIGBNSElfRUVfUEJMYCwgdGhlIHByZS1ib290IGxvYWRlciwgaWYgaXQgd2FudHMuIElmIGl0IHJldHVybnMgYE1ISV9FRV9BTVNTYCwgdGhlIGBuZXh0X3N0YXRlYCB2YXJpYWJsZSBnZXRzIHNldCB0byBgREVWX1NUX1RSQU5TSVRJT05fUkVBRFlgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpbiB0aGUgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYCBzdGF0ZS4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcGF0aCBJIG5lZWQgdG8gZXhhbWluZSBub3cuIFdoYXQgaGFwcGVucyB0aGVyZSwgYW5kIHdoYXQgY2FuIGdvIHdyb25nPyBMZXQmIzM5O3MgdHJhY2UgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWX1NUX1RSQU5TSVRJT05fUkVBRFkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD04Mj1lbnVtIGRldl9zdF90cmFuc2l0aW9uIHtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtODMtXHRERVZfU1RfVFJBTlNJVElPTl9QQkwsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg0Olx0REVWX1NUX1RSQU5TSVRJT05fUkVBRFksXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVx0REVWX1NUX1RSQU5TSVRJT05fU0JMLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc0OS1cdH0gZWxzZSB7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MDpcdFx0bmV4dF9zdGF0ZSA9IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NTEtXHR9XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ny1cdFx0XHRicmVhaztcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODQ4Olx0XHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX1JFQURZOlxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDktXHRcdFx0bWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTMtXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTQ6XHRcdERFVl9TVF9UUkFOU0lUSU9OX1BCTCA6IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMTk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM4OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGRvbWFpbjoKCioqTXkgUGVyc3BlY3RpdmUgb24gdGhlIGBtaGlfcG1fc3Rfd29ya2VyYCBUcmFuc2l0aW9uKioKClJpZ2h0LCBzbyBgbWhpX3BtX3N0X3dvcmtlcmAgaXMgbWFraW5nIGEgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhlIHN0YXRlIHdvcmtlciBpcyBpbml0aWF0aW5nIHNvbWV0aGluZy4mIzM0OyBBbmQgbG9va2luZyBhdCB0aGUgY2FsbCBpdHNlbGYsIGBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwpYCwgSSBpbnN0YW50bHkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHN0YXRlIGNoYW5nZS4gSXQgbWVhbnMgd2UmIzM5O3JlIG1vdmluZyB0aGUgTWFuYWdlbWVudCBIb3N0IEludGVyZmFjZSAoTUhJKSBpbnRvIGEgJiMzNDtyZWFkeSYjMzQ7IHN0YXRlLCBvciBhdCBsZWFzdCwgdGhlICpwb3RlbnRpYWwqIGZvciByZWFkaW5lc3MgaXMgYmVpbmcgdHJpZ2dlcmVkLiBJIGFscmVhZHkga25vdyB0aGF0IGBtaGlfY250cmxgIGlzIHRoZSBjb250cm9sIHN0cnVjdHVyZSwgc28gdGhpcyB0cmFuc2l0aW9uIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIE1ISSYjMzk7cyBtYWluIGNvbnRyb2wgZWxlbWVudC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlcjoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyB0cmFuc2l0aW9uPyoqIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiBgbWhpX3BtX3N0X3dvcmtlcmAuIElzIHRoaXMgYmVpbmcgY2FsbGVkIGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsIGEgdGltZXIsIG9yIGEgY29tbWFuZCBmcm9tIHRoZSBob3N0PyBVbmRlcnN0YW5kaW5nIHRoZSB0cmlnZ2VyIGlzIHBhcmFtb3VudC4KKiAgICoqV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHM/KiogV2hhdCBoYXBwZW5zICphZnRlciogYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCBpcyBjYWxsZWQ/IEFyZSBpbnRlcnJ1cHRzIGVuYWJsZWQsIGNsb2NrcyBhY3RpdmF0ZWQsIHBvd2VyIGRvbWFpbnMgdHVybmVkIG9uPyBJcyB0aGlzIGEgY29tcGxldGVseSBwYXNzaXZlIHRyYW5zaXRpb24gb3IgYW4gYWN0aXZlIG9uZT8KKiAgICoqV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8qKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNpdGlvbiBpcyBtb25pdG9yZWQgdG8gc2VlIHRoYXQgaXQgd29ya3MgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IHRob3NlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQuCgpUaGUgZnVuY3Rpb24gbmFtZSBpcyBwcmV0dHkgZXhwbGljaXQsIHNvIGl0IGlzIGp1c3Qgc2V0dGluZyB0aGUgc3RhdGUsIGJ1dCBJIGNhbiYjMzk7dCBhc3N1bWUuIFNvIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb25gIHRvIHVuZGVyc3RhbmQgdGhlIGFjdHVhbCBwcm9jZXNzIGFuZCB0aGUgY2hlY2tzIGl0IHBlcmZvcm1zLiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mICpob3cqIHRoZSBNSEkgaXMgcmVhZGllZCBpcyBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoZSBNSEkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFuZCBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgZXZlcnl0aGluZyB0aGF0IGZvbGxvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdGludCBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3QgbWhpX2V2ZW50ICptaGlfZXZlbnQ7XG4gMTczOlx0XHRlbnVtIG1oaV9wbV9zdGF0ZSBjdXJfc3RhdGU7XG4gMTc0Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gMTc1Olx0XHR1MzIgaW50ZXJ2YWxfdXMgPSAyNTAwMDsgLyogcG9sbCByZWdpc3RlciBmaWVsZCBldmVyeSAyNSBtaWxsaXNlY29uZHMgKi9cbiAxNzY6XHRcdHUzMiB0aW1lb3V0X21zO1xuIDE3NzpcdFx0aW50IHJldCwgaTtcbiAxNzg6XHRcbiAxNzk6XHRcdC8qIENoZWNrIGlmIGRldmljZSBlbnRlcmVkIGVycm9yIHN0YXRlICovXG4gMTgwOlx0XHRpZiAoTUhJX1BNX0lOX0ZBVEFMX1NUQVRFKG1oaV9jbnRybC1cdTAwM2VwbV9zdGF0ZSkpIHtcbiAxODE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RldmljZSBsaW5rIGlzIG5vdCBhY2Nlc3NpYmxlXFxuXCYjMzQ7KTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FSU87XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHQvKiBXYWl0IGZvciBSRVNFVCB0byBiZSBjbGVhcmVkIGFuZCBSRUFEWSBiaXQgdG8gYmUgc2V0IGJ5IHRoZSBkZXZpY2UgKi9cbiAxODY6XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElDVFJMLFxuIDE4NzpcdFx0XHRcdFx0IE1ISUNUUkxfUkVTRVRfTUFTSywgMCwgaW50ZXJ2YWxfdXMsXG4gMTg4Olx0XHRcdFx0XHQgbWhpX2NudHJsLVx1MDAzZXRpbWVvdXRfbXMpO1xuIDE4OTpcdFx0aWYgKHJldCkge1xuIDE5MDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlIGZhaWxlZCB0byBjbGVhciBNSEkgUmVzZXRcXG5cJiMzNDspO1xuIDE5MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0dGltZW91dF9tcyA9IG1oaV9jbnRybC1cdTAwM2VyZWFkeV90aW1lb3V0X21zID9cbiAxOTU6XHRcdFx0bWhpX2NudHJsLVx1MDAzZXJlYWR5X3RpbWVvdXRfbXMgOiBtaGlfY250cmwtXHUwMDNldGltZW91dF9tcztcbiAxOTY6XHRcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cdTAwM2VyZWdzLCBNSElTVEFUVVMsXG4gMTk3Olx0XHRcdFx0XHQgTUhJU1RBVFVTX1JFQURZX01BU0ssIDEsIGludGVydmFsX3VzLFxuIDE5ODpcdFx0XHRcdFx0IHRpbWVvdXRfbXMpO1xuIDE5OTpcdFx0aWYgKHJldCkge1xuIDIwMDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RGV2aWNlIGZhaWxlZCB0byBlbnRlciBNSEkgUmVhZHlcXG5cJiMzNDspO1xuIDIwMTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIwMjpcdFx0fVxuIDIwMzpcdFxuIDIwNDpcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O0RldmljZSBpbiBSRUFEWSBTdGF0ZVxcblwmIzM0Oyk7XG4gMjA1Olx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjA2Olx0XHRjdXJfc3RhdGUgPSBtaGlfdHJ5c2V0X3BtX3N0YXRlKG1oaV9jbnRybCwgTUhJX1BNX1BPUik7XG4gMjA3Olx0XHRtaGlfY250cmwtXHUwMDNlZGV2X3N0YXRlID0gTUhJX1NUQVRFX1JFQURZO1xuIDIwODpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoY3VyX3N0YXRlICE9IE1ISV9QTV9QT1IpIHtcbiAyMTE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0Vycm9yIG1vdmluZyB0byBzdGF0ZSAlcyBmcm9tICVzXFxuXCYjMzQ7LFxuIDIxMjpcdFx0XHRcdHRvX21oaV9wbV9zdGF0ZV9zdHIoTUhJX1BNX1BPUiksXG4gMjEzOlx0XHRcdFx0dG9fbWhpX3BtX3N0YXRlX3N0cihjdXJfc3RhdGUpKTtcbiAyMTQ6XHRcdFx0cmV0dXJuIC1FSU87XG4gMjE1Olx0XHR9XG4gMjE2Olx0XG4gMjE3Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDIxODpcdFx0aWYgKCFNSElfUkVHX0FDQ0VTU19WQUxJRChtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUpKSB7XG4gMjE5Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtEZXZpY2UgcmVnaXN0ZXJzIG5vdCBhY2Nlc3NpYmxlXFxuXCYjMzQ7KTtcbiAyMjA6XHRcdFx0Z290byBlcnJvcl9tbWlvO1xuIDIyMTpcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0LyogQ29uZmlndXJlIE1NSU8gcmVnaXN0ZXJzICovXG4gMjI0Olx0XHRyZXQgPSBtaGlfaW5pdF9tbWlvKG1oaV9jbnRybCk7XG4gMjI1Olx0XHRpZiAocmV0KSB7XG4gMjI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtFcnJvciBjb25maWd1cmluZyBNTUlPIHJlZ2lzdGVyc1xcblwmIzM0Oyk7XG4gMjI3Olx0XHRcdGdvdG8gZXJyb3JfbW1pbztcbiAyMjg6XHRcdH1cbiAyMjk6XHRcbiAyMzA6XHRcdC8qIEFkZCBlbGVtZW50cyB0byBhbGwgU1cgZXZlbnQgcmluZ3MgKi9cbiAyMzE6XHRcdG1oaV9ldmVudCA9IG1oaV9jbnRybC1cdTAwM2VtaGlfZXZlbnQ7XG4gMjMyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaGlfY250cmwtXHUwMDNldG90YWxfZXZfcmluZ3M7IGkmIzQzOyYjNDM7LCBtaGlfZXZlbnQmIzQzOyYjNDM7KSB7XG4gMjMzOlx0XHRcdHN0cnVjdCBtaGlfcmluZyAqcmluZyA9IFx1MDAyNm1oaV9ldmVudC1cdTAwM2VyaW5nO1xuIDIzNDpcdFxuIDIzNTpcdFx0XHQvKiBTa2lwIGlmIHRoaXMgaXMgYW4gb2ZmbG9hZCBvciBIVyBldmVudCAqL1xuIDIzNjpcdFx0XHRpZiAobWhpX2V2ZW50LVx1MDAzZW9mZmxvYWRfZXYgfHwgbWhpX2V2ZW50LVx1MDAzZWh3X3JpbmcpXG4gMjM3Olx0XHRcdFx0Y29udGludWU7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdHJpbmctXHUwMDNld3AgPSByaW5nLVx1MDAzZWJhc2UgJiM0MzsgcmluZy1cdTAwM2VsZW4gLSByaW5nLVx1MDAzZWVsX3NpemU7XG4gMjQwOlx0XHRcdCpyaW5nLVx1MDAzZWN0eHRfd3AgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZWlvbW11X2Jhc2UgJiM0MzsgcmluZy1cdTAwM2VsZW4gLSByaW5nLVx1MDAzZWVsX3NpemUpO1xuIDI0MTpcdFx0XHQvKiBVcGRhdGUgYWxsIGNvcmVzICovXG4gMjQyOlx0XHRcdHNtcF93bWIoKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdFx0LyogUmluZyB0aGUgZXZlbnQgcmluZyBkYiAqL1xuIDI0NTpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1oaV9ldmVudC1cdTAwM2Vsb2NrKTtcbiAyNDY6XHRcdFx0bWhpX3JpbmdfZXJfZGIobWhpX2V2ZW50KTtcbiAyNDc6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1oaV9ldmVudC1cdTAwM2Vsb2NrKTtcbiAyNDg6XHRcdH1cbiAyNDk6XHRcbiAyNTA6XHRcdC8qIFNldCBNSEkgdG8gTTAgc3RhdGUgKi9cbiAyNTE6XHRcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX00wKTtcbiAyNTI6XHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdFxuIDI1NjpcdGVycm9yX21taW86XG4gMjU3Olx0XHRyZWFkX3VubG9ja19iaChcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gMjU4Olx0XG4gMjU5Olx0XHRyZXR1cm4gLUVJTztcbiAyNjA6XHR9XG4gMjYxOlx0XG4gMjYyOlx0aW50IG1oaV9wbV9tMF90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuIDI2MzpcdHtcbiAyNjQ6XHRcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcbiAyNjU6XHRcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XG4gMjY2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gMjY3Olx0XHRpbnQgaTtcbiAyNjg6XHRcbiAyNjk6XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2MjAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1ISSBSZWFkeSBTdGF0ZSBUcmFuc2l0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbmAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGdldHRpbmcgdGhlIE1ISSBjb250cm9sbGVyIHJlYWR5LiBJdCYjMzk7cyBwb2xsaW5nIHR3byByZWdpc3RlcnMsIGBNSElDVFJMX1JFU0VUX01BU0tgIGFuZCBgTUhJU1RBVFVTX1JFQURZX01BU0tgLCBtYWtlcyBzZW5zZS4gVGhlIGtleSBpcyBpbiBob3cgc3l6a2FsbGVyJiMzOTtzIFBDSSBlbXVsYXRvciByZXNwb25kcy4gSWYgaXQgcmV0dXJucyAwIGZvciB0aGUgcmVzZXQgbWFzayBhbmQgMSBmb3IgdGhlIHJlYWR5IG1hc2ssIHRoZSBmdW5jdGlvbiBjb250aW51ZXMuIEdyZWF0LiBUaGVuLCB0aGUgc3lzdGVtIHNldHMgdGhlIE1ISSBzdGF0ZSB0byBgTUhJX1NUQVRFX00wYC4KCldhaXQgYSBtaW51dGUsIGBtaGlfc2V0X21oaV9zdGF0ZWAgaXMgd3JpdGluZyB0byBgTUhJQ1RSTGAgd2hpY2ggd291bGQgYmUgd2hhdCYjMzk7cyBjb250cm9sbGVkIGJ5IHRoZSBQQ0kgZW11bGF0b3IuIFRoYXQmIzM5O3MgYSBnb29kIGNvbm5lY3Rpb24gdG8gbWFrZS4gQnV0LCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgdGhlIHN5c3RlbSByZWFjaGVzIGEgcG9pbnQgdGhhdCBpdCBjYW4gY2hlY2sgdGhpcyBmdW5jdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIHdobyBpcyBxdWV1aW5nIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgPyBUaGlzIHRyYW5zaXRpb24gaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBzdGF0ZSB0aGUgc3lzdGVtIGlzIGluLiBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGF0JiMzOTtzIGJlaW5nIHNldCB1cCBhbmQgcXVldWVkLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY29taW5nIGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTgyPWVudW0gZGV2X3N0X3RyYW5zaXRpb24ge1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtODUtXHRERVZfU1RfVFJBTlNJVElPTl9TQkwsXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg2Olx0REVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFLFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC04Ny1cdERFVl9TVF9UUkFOU0lUSU9OX0ZQLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz03OTk9aW50IG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtOTA1LVx0XHRcdGNhc2UgTUhJX0VFX0FNU1M6XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6OTA2Olx0XHRcdFx0c3QgPSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtOTA3LVx0XHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzNy1cdFx0XHRicmVhaztcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODM4Olx0XHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERTpcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODM5LVx0XHRcdG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihtaGlfY250cmwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQyNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIEV2ZW50IFF1ZXVlKioKClJpZ2h0LCBzbyB0aGlzIG5ldyBldmVudCBpcyBxdWV1ZWQgdXAuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGxhbmRpbmcgaW4gdGhlIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSwgdGhvdWdoIHRoZSBjb250ZXh0IHdvdWxkIGNsYXJpZnkgcHJlY2lzZWx5IHdoaWNoIGltcGxlbWVudGF0aW9uKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgY29udHJvbCBwbGFuZSBvciBldmVudCBoYW5kbGluZyBmb3IgdGhhdCBpbnRlcmZhY2UuIFRoZSAmIzM0O3JpbmcmIzM0OyBlbGVtZW50IHN1Z2dlc3RzIGEgY2lyY3VsYXIgYnVmZmVyIG9yIGEgZGVkaWNhdGVkIHF1ZXVlaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGV4ZWN1dGlvbiBtb2RlbCwgb3IgYXQgbGVhc3QgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTXkgaW1tZWRpYXRlIGxpbmUgb2YgdGhpbmtpbmcgd2lsbCBnbyBkb3duIHRoZSBmb2xsb3dpbmc6CgoqICAgKipVbmRlcnN0YW5kaW5nIHRoZSBFdmVudCBUeXBlKio6IEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgY29udGVudCBvZiB0aGlzIGV2ZW50LiBXaGF0IHBhcmFtZXRlcnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBpdD8gV2hhdCBkb2VzIGl0IHNpZ25hbD8gRG9lcyBpdCByZXByZXNlbnQgYSBjb21tYW5kLCBhIHN0YXR1cyB1cGRhdGUsIG9yIGFuIGVycm9yIGNvbmRpdGlvbj8gVGhlIHR5cGUgb2YgZXZlbnQgZGljdGF0ZXMgdGhlIG5lY2Vzc2FyeSByZXNwb25zZSwgd2hpY2ggZGljdGF0ZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMuCiogICAqKkNvbnRleHQgd2l0aGluIHRoZSBTeXN0ZW0qKjogVGhlIE1ISSBpcyBhIGJ1cy4gTXkga25vd2xlZGdlIG9mIHRoZSB3aWRlciBzeXN0ZW0mIzM5O3MgdG9wb2xvZ3kgaXMgbmVjZXNzYXJ5IGhlcmUuIFdoZXJlIGRvZXMgdGhpcyBldmVudCBvcmlnaW5hdGUgYW5kIHdoZXJlIGlzIGl0IGdvaW5nPyBUaGlzIGhlbHBzIHVuZGVyc3RhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY3JpdGljYWwgY29udHJvbCBwYXRoLCBvciBsb3dlciBwcmlvcml0eT8KKiAgICoqUG90ZW50aWFsIEJvdHRsZW5lY2tzKio6IFdpdGggYSBxdWV1ZSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVjayBhcmVhcy4gV2hhdCBpcyB0aGUgcHJvY2Vzc2luZyBsYXRlbmN5IGZvciBldmVudHMgaW4gdGhpcyByaW5nPyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyB3aXRoIHF1ZXVlIG92ZXJmbG93IG9yIHN0YXJ2YXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgbGF0ZW5jeSBmb3Igb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UsIHJlYWwtdGltZSBjb25zdHJhaW50cywgYW5kIHN0YWJpbGl0eT8KKiAgICoqRXJyb3IgSGFuZGxpbmcqKjogTGV0JiMzOTtzIHNlZS4gSWYgc29tZXRoaW5nIHdlbnQgd3JvbmcsIHdoZXJlJiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGlzIHRoZSBxdWV1ZSBwcm90ZWN0ZWQ/IENhbiBpdCBiZSBjb3JydXB0ZWQsIG92ZXJmbG93IG9yIGJlY29tZSBjb3JydXB0ZWQuIERvZXMgaXQgaGF2ZSB0aGUgcmVxdWlyZWQgcHJvdGVjdGlvbiBtZWNoYW5pc21zPwoKU28sIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBkaXNzZWN0aW5nIHRoZSBldmVudCBpdHNlbGYgYW5kIG1hcHBpbmcgaXQgb250byB0aGUgbGFyZ2VyIE1ISSBjb250cm9sIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byB0aGUgc3BlY2lmaWMgZXZlbnQmIzM5O3MgaW1wYWN0IGFuZCBuZWNlc3NhcnkgcHJvY2Vzc2luZyBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3OTk6XHRpbnQgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuIDgwMDpcdFx0XHRcdCAgICAgc3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50LFxuIDgwMTpcdFx0XHRcdCAgICAgdTMyIGV2ZW50X3F1b3RhKVxuIDgwMjpcdHtcbiA4MDM6XHRcdHN0cnVjdCBtaGlfcmluZ19lbGVtZW50ICpkZXZfcnAsICpsb2NhbF9ycDtcbiA4MDQ6XHRcdHN0cnVjdCBtaGlfcmluZyAqZXZfcmluZyA9IFx1MDAyNm1oaV9ldmVudC1cdTAwM2VyaW5nO1xuIDgwNTpcdFx0c3RydWN0IG1oaV9ldmVudF9jdHh0ICplcl9jdHh0ID1cbiA4MDY6XHRcdFx0XHUwMDI2bWhpX2NudHJsLVx1MDAzZW1oaV9jdHh0LVx1MDAzZWVyX2N0eHRbbWhpX2V2ZW50LVx1MDAzZWVyX2luZGV4XTtcbiA4MDc6XHRcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XG4gODA4Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXY7XG4gODA5Olx0XHR1MzIgY2hhbjtcbiA4MTA6XHRcdGludCBjb3VudCA9IDA7XG4gODExOlx0XHRkbWFfYWRkcl90IHB0ciA9IGxlNjRfdG9fY3B1KGVyX2N0eHQtXHUwMDNlcnApO1xuIDgxMjpcdFxuIDgxMzpcdFx0LypcbiA4MTQ6XHRcdCAqIFRoaXMgaXMgYSBxdWljayBjaGVjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBldmVudCBwcm9jZXNzaW5nXG4gODE1Olx0XHQgKiBpbiBjYXNlIE1ISSBpcyBhbHJlYWR5IGluIGVycm9yIHN0YXRlLCBidXQgaXQmIzM5O3Mgc3RpbGwgcG9zc2libGVcbiA4MTY6XHRcdCAqIHRvIHRyYW5zaXRpb24gdG8gZXJyb3Igc3RhdGUgd2hpbGUgcHJvY2Vzc2luZyBldmVudHNcbiA4MTc6XHRcdCAqL1xuIDgxODpcdFx0aWYgKHVubGlrZWx5KE1ISV9FVkVOVF9BQ0NFU1NfSU5WQUxJRChtaGlfY250cmwtXHUwMDNlcG1fc3RhdGUpKSlcbiA4MTk6XHRcdFx0cmV0dXJuIC1FSU87XG4gODIwOlx0XG4gODIxOlx0XHRpZiAoIWlzX3ZhbGlkX3JpbmdfcHRyKGV2X3JpbmcsIHB0cikpIHtcbiA4MjI6XHRcdFx0ZGV2X2VycihcdTAwMjZtaGlfY250cmwtXHUwMDNlbWhpX2Rldi1cdTAwM2VkZXYsXG4gODIzOlx0XHRcdFx0XCYjMzQ7RXZlbnQgcmluZyBycCBwb2ludHMgb3V0c2lkZSBvZiB0aGUgZXZlbnQgcmluZ1xcblwmIzM0Oyk7XG4gODI0Olx0XHRcdHJldHVybiAtRUlPO1xuIDgyNTpcdFx0fVxuIDgyNjpcdFxuIDgyNzpcdFx0ZGV2X3JwID0gbWhpX3RvX3ZpcnR1YWwoZXZfcmluZywgcHRyKTtcbiA4Mjg6XHRcdGxvY2FsX3JwID0gZXZfcmluZy1cdTAwM2VycDtcbiA4Mjk6XHRcbiA4MzA6XHRcdHdoaWxlIChkZXZfcnAgIT0gbG9jYWxfcnApIHtcbiA4MzE6XHRcdFx0ZW51bSBtaGlfcGt0X3R5cGUgdHlwZSA9IE1ISV9UUkVfR0VUX0VWX1RZUEUobG9jYWxfcnApO1xuIDgzMjpcdFxuIDgzMzpcdFx0XHR0cmFjZV9taGlfY3RybF9ldmVudChtaGlfY250cmwsIGxvY2FsX3JwKTtcbiA4MzQ6XHRcbiA4MzU6XHRcdFx0c3dpdGNoICh0eXBlKSB7XG4gODM2Olx0XHRcdGNhc2UgTUhJX1BLVF9UWVBFX0JXX1JFUV9FVkVOVDpcbiA4Mzc6XHRcdFx0e1xuIDgzODpcdFx0XHRcdHN0cnVjdCBtaGlfbGlua19pbmZvICpsaW5rX2luZm87XG4gODM5Olx0XG4gODQwOlx0XHRcdFx0bGlua19pbmZvID0gXHUwMDI2bWhpX2NudHJsLVx1MDAzZW1oaV9saW5rX2luZm87XG4gODQxOlx0XHRcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDg0MjpcdFx0XHRcdGxpbmtfaW5mby1cdTAwM2V0YXJnZXRfbGlua19zcGVlZCA9XG4gODQzOlx0XHRcdFx0XHRNSElfVFJFX0dFVF9FVl9MSU5LU1BFRUQobG9jYWxfcnApO1xuIDg0NDpcdFx0XHRcdGxpbmtfaW5mby1cdTAwM2V0YXJnZXRfbGlua193aWR0aCA9XG4gODQ1Olx0XHRcdFx0XHRNSElfVFJFX0dFVF9FVl9MSU5LV0lEVEgobG9jYWxfcnApO1xuIDg0NjpcdFx0XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2bWhpX2NudHJsLVx1MDAzZXBtX2xvY2spO1xuIDg0NzpcdFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtSZWNlaXZlZCBCV19SRVEgZXZlbnRcXG5cJiMzNDspO1xuIDg0ODpcdFx0XHRcdG1oaV9jbnRybC1cdTAwM2VzdGF0dXNfY2IobWhpX2NudHJsLCBNSElfQ0JfQldfUkVRKTtcbiA4NDk6XHRcdFx0XHRicmVhaztcbiA4NTA6XHRcdFx0fVxuIDg1MTpcdFx0XHRjYXNlIE1ISV9QS1RfVFlQRV9TVEFURV9DSEFOR0VfRVZFTlQ6XG4gODUyOlx0XHRcdHtcbiA4NTM6XHRcdFx0XHRlbnVtIG1oaV9zdGF0ZSBuZXdfc3RhdGU7XG4gODU0Olx0XG4gODU1Olx0XHRcdFx0bmV3X3N0YXRlID0gTUhJX1RSRV9HRVRfRVZfU1RBVEUobG9jYWxfcnApO1xuIDg1NjpcdFxuIDg1NzpcdFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtTdGF0ZSBjaGFuZ2UgZXZlbnQgdG8gc3RhdGU6ICVzXFxuXCYjMzQ7LFxuIDg1ODpcdFx0XHRcdFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcbiA4NTk6XHRcbiA4NjA6XHRcdFx0XHRzd2l0Y2ggKG5ld19zdGF0ZSkge1xuIDg2MTpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00wOlxuIDg2MjpcdFx0XHRcdFx0bWhpX3BtX20wX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4NjM6XHRcdFx0XHRcdGJyZWFrO1xuIDg2NDpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00xOlxuIDg2NTpcdFx0XHRcdFx0bWhpX3BtX20xX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4NjY6XHRcdFx0XHRcdGJyZWFrO1xuIDg2NzpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX00zOlxuIDg2ODpcdFx0XHRcdFx0bWhpX3BtX20zX3RyYW5zaXRpb24obWhpX2NudHJsKTtcbiA4Njk6XHRcdFx0XHRcdGJyZWFrO1xuIDg3MDpcdFx0XHRcdGNhc2UgTUhJX1NUQVRFX1NZU19FUlI6XG4gODcxOlx0XHRcdFx0e1xuIDg3MjpcdFx0XHRcdFx0ZW51bSBtaGlfcG1fc3RhdGUgcG1fc3RhdGU7XG4gODczOlx0XG4gODc0Olx0XHRcdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7U3lzdGVtIGVycm9yIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiA4NzU6XHRcdFx0XHRcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNm1oaV9jbnRybC1cdTAwM2VwbV9sb2NrKTtcbiA4NzY6XHRcdFx0XHRcdHBtX3N0YXRlID0gbWhpX3RyeXNldF9wbV9zdGF0ZShtaGlfY250cmwsXG4gODc3Olx0XHRcdFx0XHRcdFx0XHRNSElfUE1fU1lTX0VSUl9ERVRFQ1QpO1xuIDg3ODpcdFx0XHRcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZtaGlfY250cmwtXHUwMDNlcG1fbG9jayk7XG4gODc5Olx0XHRcdFx0XHRpZiAocG1fc3RhdGUgPT0gTUhJX1BNX1NZU19FUlJfREVURUNUKVxuIDg4MDpcdFx0XHRcdFx0XHRtaGlfcG1fc3lzX2Vycl9oYW5kbGVyKG1oaV9jbnRybCk7XG4gODgxOlx0XHRcdFx0XHRicmVhaztcbiA4ODI6XHRcdFx0XHR9XG4gODgzOlx0XHRcdFx0ZGVmYXVsdDpcbiA4ODQ6XHRcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtJbnZhbGlkIHN0YXRlOiAlc1xcblwmIzM0OyxcbiA4ODU6XHRcdFx0XHRcdFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcbiA4ODY6XHRcdFx0XHR9XG4gODg3Olx0XG4gODg4Olx0XHRcdFx0YnJlYWs7XG4gODg5Olx0XHRcdH1cbiA4OTA6XHRcdFx0Y2FzZSBNSElfUEtUX1RZUEVfQ01EX0NPTVBMRVRJT05fRVZFTlQ6XG4gODkxOlx0XHRcdFx0bWhpX3Byb2Nlc3NfY21kX2NvbXBsZXRpb24obWhpX2NudHJsLCBsb2NhbF9ycCk7XG4gODkyOlx0XHRcdFx0YnJlYWs7XG4gODkzOlx0XHRcdGNhc2UgTUhJX1BLVF9UWVBFX0VFX0VWRU5UOlxuIDg5NDpcdFx0XHR7XG4gODk1Olx0XHRcdFx0ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiBzdCA9IERFVl9TVF9UUkFOU0lUSU9OX01BWDtcbiA4OTY6XHRcdFx0XHRlbnVtIG1oaV9lZV90eXBlIGV2ZW50ID0gTUhJX1RSRV9HRVRfRVZfRVhFQ0VOVihsb2NhbF9ycCk7XG4gODk3Olx0XG4gODk4Olx0XHRcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1JlY2VpdmVkIEVFIGV2ZW50OiAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgTmV3IFdXQU4gQ29kZSBpbiBNSEkgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoaXMgbmV3IFdXQU4gZnVuY3Rpb25hbGl0eSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGJ5IHN5emthbGxlci4gVGhlIGNvcmUgaWRlYSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZ2AgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgdGhlIE1ISSBjb250cm9sIGV2ZW50IHJpbmcuIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQsIHJpZ2h0PwoKVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHN5emthbGxlciBlbXVsYXRlcyBhIFBDSSBkZXZpY2UsIHdoaWNoIHRoZW4gaWRlYWxseSB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQsIG1hcHBpbmcgdGhlIGV2ZW50IHJpbmcgd2l0aCBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBjb250YWluaW5nIGBNSElfRUVfQU1TU2AuIFRoaXMgZXZlbnQgdGhlbiBxdWV1ZXMgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoZSBrZXJuZWwgdGhlbiBjYWxscyBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCwgYW5kIHRoZSBjcnV4IG9mIGl0IGFsbCwgYG1oaV9jcmVhdGVfZGV2aWNlc2AsIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjcmVhdGVzIE1ISSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBjaGFubmVscyBkZWZpbmVkIGluIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYElQX0NUUkxgIGNoYW5uZWxzLCBtZWFuaW5nIHRoYXQgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgUENJIGRldmljZSBtYXRjaGluZyB0aGUgU2llcnJhIEVNOTE5eCBJRCAodGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jYCksIHRoZSBzeXN0ZW0gd2lsbCB1c2UgYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gU28sIGBtaGlfY3JlYXRlX2RldmljZXNgIGNyZWF0ZXMgYW4gYElQX0NUUkxgIGRldmljZS4gRnJvbSB0aGVyZSwgYG1oaV93d2FuX2R0cl9wcm9iZWAgaXMgY2FsbGVkIHRvIHJlZ2lzdGVyIHRoaXMgZGV2aWNlLgoKTm93LCBpZiBzeXprYWxsZXIgdGhlbiBvcGVucyBhIFdXQU4gQVQgcG9ydCAocG90ZW50aWFsbHkgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybF9wcm9iZWAgZm9yIGNoYW5uZWxzIGxpa2UgYERVTmAgb3IgYE1CSU1gKSwgd2UgaGl0IGBtaGlfd3dhbl9jdHJsX2R0cl9ydHNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBjcmVhdGVzIFdXQU4gcG9ydHMgZm9yIGBEVU5gLCBgTUJJTWAsIGV0Yy4gSWYgc3l6a2FsbGVyIGNyZWF0ZXMgdGhlIGBEVU5gIGNoYW5uZWwgZGV2aWNlLCB0aGVuIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBpcyBjYWxsZWQuIFRoYXQgbWFrZXMgYSBXV0FOIHBvcnQhIFRoZW4gc3l6a2FsbGVyIGNhbiBvcGVuIHRoaXMgcG9ydCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgd3dhbl9wb3J0X29wX3N0YXJ0YCBhbmQgZmluYWxseSwgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AuIFRoaXMgaW4gdHVybiBjYWxscyBgbWhpX3d3YW5fY3RybF9kdHJfcnRzYCwgd2hpY2ggZW5kcyB1cCBjYWxsaW5nIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYC4gVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBidWZmZXIgdG8gdGhlIGBJUF9DVFJMYCBjaGFubmVsIGRldmljZSB1c2luZyBgbWhpX3F1ZXVlX2J1ZmAuCgpTbywgdGhlIGVudGlyZSBmbG93IGhpbmdlcyBvbiBzeXprYWxsZXIgKnN1Y2Nlc3NmdWxseSogZW11bGF0aW5nIHRoZSBNSEkgUENJIGRldmljZSBhbmQgaXRzIGV2ZW50IHJpbmdzLiBCdXQgZG9lcyBpdD8gVGhlIGdlbmVyaWMgUENJIGVtdWxhdG9yIGluIHN5emthbGxlciBjYW4gbWFwIEJBUnMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cywgYnV0IGl0IGRvZXNuJiMzOTt0IHVuZGVyc3RhbmQgdGhlIE1ISSBldmVudCByaW5nIG1lbW9yeSBsYXlvdXQuIFRoZSBNSEkgaG9zdCBkcml2ZXIgYWxsb2NhdGVzIHRoZSBldmVudCByaW5nIG1lbW9yeSBhbmQgY29tbXVuaWNhdGVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gdGhlIGRldmljZSB2aWEgTU1JTyByZWdpc3RlcnMuIFRoZSBkZXZpY2UgKG9yIGVtdWxhdG9yKSBpcyBzdXBwb3NlZCB0byB3cml0ZSBNSEkgZXZlbnRzIHRvIHRoZXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFRoZSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24mIzM5O3QgcmVhZCB0aGVzZSBNTUlPIHJlZ2lzdGVycyB0byBmaW5kIHRoZSBldmVudCByaW5nIGFkZHJlc3Nlcy4gTmVpdGhlciBkb2VzIGl0IHdyaXRlIHRoZSBNSEkgZXZlbnRzLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBNSElfUEtUX1RZUEVfRUVfRVZFTlRgIG9yIGFueSBvdGhlciBNSEkgZXZlbnRzLiBTaW5jZSB3ZSBjYW5ub3QgZ2VuZXJhdGUgTUhJIGV2ZW50cywgYG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZ2Agd29uJiMzOTt0IGRldGVjdCBhbnl0aGluZywgYW5kIHRoZSBmbG93IGNvbXBsZXRlbHkgYnJlYWtzIGRvd24uIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgIGlzbiYjMzk7dCBxdWV1ZWQuIE5vIGRldmljZXMgZ2V0IGNyZWF0ZWQsIG5vIFdXQU4gcG9ydHMgYXJlIG1hZGUsIGFuZCB0aGUgbmV3IGNvZGUgaW4gYHd3YW5fY29yZS5jYCBhbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCldhaXQsIGFyZSB0aGVyZSBhbHRlcm5hdGl2ZSByb3V0ZXMgdG8gZ2V0IFdXQU4gcG9ydHM/IEkgcmVtZW1iZXIgYHd3YW5faHdzaW0uY2AgY3JlYXRpbmcgdGhlbS4gQnV0LCBjaGVja2luZyBiYWNrIGluIHRoYXQgcGF0aCwgaXQgZG9lcyAqbm90KiBzZXQgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AuIFNvLCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb25zIHdvdWxkIG5vdCBiZSByZWFjaGVkIHRocm91Z2ggdGhpcyBtZWFucyBlaXRoZXIuIE9rYXksIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGUgb3RoZXIgZHJpdmVycyBpbiBjYXNlIHRoZXkgYXJlIHNldHRpbmcgYGR0cl9ydHNgLCBidXQgbXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGV5IHdpbGwgbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5kdHJfcnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYz0yNDA9c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5fcG9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDMtXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0Olx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2OTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBEVFIvUlRTIGNoZWNraW5nIGxvZ2ljIHdpdGhpbiBgd3dhbl9jb3JlLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcG9ydHMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzaWduaWZpY2FudCBjb25zdHJhaW50LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1oaV93d2FuX2N0cmwuY2Agc3BlY2lmaWNhbGx5IHJlcXVpcmVzIE1ISSBkZXZpY2VzLCBhbmQgdGhlc2UgYXJlbiYjMzk7dCB5b3VyIHJ1bi1vZi10aGUtbWlsbCBQQ0kgZGV2aWNlcy4gVGhleSBkZW1hbmQgc29waGlzdGljYXRlZCBETUEgYW5kIHJpbmcgaW50ZXJhY3Rpb25zLCBzb21ldGhpbmcgc3l6a2FsbGVyJiMzOTtzIGdlbmVyaWMgUENJIGVtdWxhdG9yIGp1c3QgaXNuJiMzOTt0IGJ1aWx0IHRvIGhhbmRsZS4gVGh1cywgdGhlIGNvbmRpdGlvbiBmb3IgdGhpcyBjaGVjayB0byBiZSBldmFsdWF0ZWQgaXMgdGhhdCB0aGUgcG9ydCB3YXMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYCwgYW5kIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQsIHN5emthbGxlci1kcml2ZW4gZW52aXJvbm1lbnQuIFRoaXMgY29kZSBpcyBlc3NlbnRpYWxseSB1bnJlYWNoYWJsZS4KCkJ1dCBJJiMzOTttIGEgYml0IG9mIGEgc3RpY2tsZXIgZm9yIHRob3JvdWdobmVzcywgc28gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoZXJlJiMzOTtzICpubyogb3RoZXIgcm91dGUgdG8gY2FsbGluZyBgbWhpX3d3YW5fY3RybF9wcm9iZWAuIENhbiBzeXprYWxsZXIgc29tZWhvdyBpbmplY3QgZGV2aWNlcyBkaXJlY3RseSBvbnRvIHRoZSBgbWhpYCBidXM/IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIHN5c2ZzIG9yIGFueXRoaW5nIHNpbWlsYXIgY291bGQgb2ZmZXIgYSBiYWNrZG9vci4gR290dGEgcnVsZSBvdXQgZXZlcnkgcG9zc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21oaV9hbGxvY19kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTkxOT1pbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXHQvKiBSZWdpc3RlciBjb250cm9sbGVyIHdpdGggTUhJIGJ1cyAqL1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjEwMTA6XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMTEtXHRpZiAoSVNfRVJSKG1oaV9kZXYpKSB7XG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTEyMDg9c3RhdGljIHZvaWQgbWhpX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMjI3OnN0cnVjdCBtaGlfZGV2aWNlICptaGlfYWxsb2NfZGV2aWNlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEyMjgte1xuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBtaGlfZGVidWdmc19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjMxOTpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCk7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTMyMC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9MzYzPXZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXHRcdFx0Y29udGludWU7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6Mzc1Olx0XHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM3Ni1cdFx0aWYgKElTX0VSUihtaGlfZGV2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2ODkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqSW52ZXN0aWdhdGluZyBNSEkgRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIHNvIGBtaGlfYWxsb2NfZGV2aWNlYCBzZWVtcyB0byBiZSBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgbm90IHNvbWV0aGluZyBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgb3V0c2lkZS4gVGhhdCBlbGltaW5hdGVzIHRoZSBtb3N0IG9idmlvdXMgcG90ZW50aWFsIHNvdXJjZS4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IG90aGVyIGRyaXZlcihzKSBhcmUgYWN0dWFsbHkgcmVzcG9uc2libGUgZm9yICpjcmVhdGluZyogTUhJIGRldmljZXMgaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gaG93IHRoZXNlIE1ISSBob3N0IGRldmljZXMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQuCgpMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIE1ISSBlbmRwb2ludCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgZHJpdmVycy9idXMvbWhpL2VwL2A/IFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgdG8gZG8gd2l0aCBNSEkgZW5kcG9pbnQgZGV2aWNlcy4gQnV0LCBubywgd2FpdC4uLiB0aGF0IGZyYW1ld29yayBmb2N1c2VzIG9uICplbmRwb2ludCogZGV2aWNlcy4gSSYjMzk7bSBsb29raW5nIGZvciBob3N0IGRldmljZXMgaGVyZSwgdGhlIG9uZXMgdGhhdCAqaG9zdCogdGhlIE1ISSBjb21tdW5pY2F0aW9uLgoKSGFuZyBvbi4uLiBpcyB0aGVyZSBhIGxvb3BiYWNrIGRyaXZlciBmb3IgTUhJLCBwZXJoYXBzPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkgSSBoYWRuJiMzOTt0IGNvbnNpZGVyZWQuIEEgbG9vcGJhY2sgY291bGQgYmUgY3JlYXRpbmcgYSB2aXJ0dWFsIE1ISSBob3N0LCBmb3IgdGVzdGluZyBvciBvdGhlciBwdXJwb3Nlcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgYW5nbGUuIEl0JiMzOTtzIGEga2V5IGF2ZW51ZSB0byBleHBsb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfcmVnaXN0ZXJfY29udHJvbGxlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxuLS1cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNi0qIEluaXRpYXRlcyBwb3dlciBvbiBhbmQgc2h1dGRvd24gc2VxdWVuY2Vcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyOC1cdFx0XHRcdFx0XHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSlcbi0tXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXHRtaGlfY29uZmlnLnRpbWVvdXRfbXMgPSBtaGlfdGltZW91dF9tcztcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXHUwMDI2bWhpX2NvbmZpZyk7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXHRpZiAocmV0KSB7XG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Nzg6XHRcdHBjaV9lcnIocGNpX2RldiwgXCYjMzQ7bWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaDo5OnN0cnVjdCBtaGlfY29udHJvbGxlciAqcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgdm9pZCBfX2lvbWVtICptaGlfYmFyLFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXHRcdFx0XHRcdFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xuLS1cbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jPTU3MD1zdGF0aWMgaW50IHFhaWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM6NTk3Olx0cWRldi1cdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXHUwMDNlYmFyX21oaSwgbWhpX2lycSxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cdFx0XHRcdFx0XHQgICAgICAgcWRldi1cdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXHUwMDNlZmFtaWx5KTtcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MjAtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTA1NzpFWFBPUlRfU1lNQk9MX0dQTChtaGlfcmVnaXN0ZXJfY29udHJvbGxlcik7XG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cbi0tXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jPTEzNjM9c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNDM4Olx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQxMS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTE4Nz1pbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoyNjU6XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC0zODEtICogRmllbGRzIG1hcmtlZCBhcyAocmVxdWlyZWQpIG5lZWQgdG8gYmUgcG9wdWxhdGVkIGJ5IHRoZSBjb250cm9sbGVyIGRyaXZlclxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0NS0vKipcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXG4tLVxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU1MS1cdFx0XHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODczNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJiMzOTtzIG5vIHdheSB0byB0cmlnZ2VyIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aXRob3V0IGFuIE1ISSBkZXZpY2UsIGFuZCB0aGF0IG9ubHkgaGFwcGVucyBpZiB0aGUgTUhJIGNvbnRyb2xsZXIgaW5pdGlhbGl6ZXMgYW5kIGVudGVycyBtaXNzaW9uIG1vZGUuIFRoYXQgbWlzc2lvbiBtb2RlIHRyYW5zaXRpb24gcmVsaWVzIG9uIHJlY2VpdmluZyBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCB3aXRoIGBNSElfRUVfQU1TU2AgaW4gaXRzIGV2ZW50IHJpbmcsIHdoaWNoIHRoZSBoYXJkd2FyZSBwb3B1bGF0ZXMgdmlhIERNQS4gQ3J1Y2lhbGx5LCB0aGUgZ2VuZXJpYyBQQ0kgZW11bGF0b3IgaW4gc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGltcGxlbWVudCB0aGUgTUhJIHByb3RvY29sLCBzbyBpdCAqd29uJiMzOTt0KiBwb3B1bGF0ZSB0aGlzIGV2ZW50IHJpbmcgY29ycmVjdGx5LiAgU28sIG5vIG1pc3Npb24gbW9kZSwgbm8gTUhJIGRldmljZSwgYW5kLCBjb25zZXF1ZW50bHksIG5vdGhpbmcgaW4gYG1oaV93d2FuX2N0cmwuY2Agb3IgaXRzIGludGVyYWN0aW9ucyB3aXRoIGB3d2FuX2NvcmUuY2Agd2lsbCBoYXBwZW4uCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYW55IG9mIHRoZSBgd3dhbl9jb3JlLmNgIGNoYW5nZXMgY2FuIGJlIGhpdCAqYW5vdGhlciogd2F5LiBUaGUgY2hhbmdlIGluIGB3d2FuX3BvcnRfb3Bfc3RhcnRgIGluY2x1ZGVzIGEgYHBvcnQtJmd0O29wcy0mZ3Q7ZHRyX3J0c2AgY2hlY2suIEFzIEkgcmVjYWxsLCBvbmx5IGBtaGlfd3dhbl9jdHJsLmNgIHNldHMgYGR0cl9ydHNgLiBUaGF0IGNvZGUgYmxvY2sgcmFpc2VzIERUUi9SVFMgb24gdGhlIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydC4gU2luY2UgaXQmIzM5O3MgZGVwZW5kZW50IG9uIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBiZWluZyBzZXQsIHdoaWNoIGlzIE1ISS1zcGVjaWZpYywgaXQmIzM5O3MgdW5yZWFjaGFibGUuCgpPa2F5LCB3aGF0IGFib3V0IGB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bGA/IFRoYXQgc2VjdGlvbiBjb250YWlucyB0aGUgRFRSL1JUUyBpb2N0bCBjYWxscywgYW5kIGFsc28gZGVwZW5kcyBvbiBgcG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzYC4gVGhpcyBpcyBhbHNvIGdhdGVkIGJ5IHRoZSBzYW1lIGBkdHJfcnRzYCBwb2ludGVyIHNldCBieSB0aGUgdW5yZWFjaGFibGUgYG1oaV93d2FuX2N0cmwuY2AgY29kZS4KClNvLCB0aGUgZW50aXJlIGZ1bmN0aW9uYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgcG9ydC0mZ3Q7b3BzLSZndDtkdHJfcnRzYCwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBgbWhpX3d3YW5fY3RybC5jYCwgd2hpY2ggcmVxdWlyZXMgYW4gTUhJIGRldmljZSwgd2hpY2ggaXNuJiMzOTt0IHBvc3NpYmxlIGluIGEgc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgc2ltcGx5IGltcG9zc2libGUgdG8gaGl0LgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc3BlY2lmaWVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIE1ISSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSAoUXVhbGNvbW0gbW9kZW1zKSBhbmQgdGhlcmUmIzM5O3Mgbm8ga2VybmVsLXNpZGUgc29mdHdhcmUgTUhJIGVtdWxhdG9yLCB1bmxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgd3dhbl9od3NpbWAsIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuIFN0aWxsLCBJIHNob3VsZCBjaGVjayB0aGUgbGF0dGVyIGFnYWluLi4uIGp1c3QgaW4gY2FzZSBJIG1pc3NlZCBhbnkgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHRyX3J0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzNzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqV1dBTiBEcml2ZXIgRGVlcCBEaXZlKioKCkhtbSwgcmlnaHQsIEkgd2FzIGp1c3QgZG91YmxlLWNoZWNraW5nIHRoZSBgd3dhbl9od3NpbS5jYCBjb2RlLCBhbmQgaXQmIzM5O3MgY3J5c3RhbCBjbGVhciB0aGF0IGl0IGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzZXR0aW5nIG9mIGBkdHJfcnRzYC4gVGhhdCYjMzk7cyBub3QgaXRzIHJlc3BvbnNpYmlsaXR5LiBJdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGFzcGVjdCwgbm90IHRoZSBoaWdoZXItbGV2ZWwgbW9kZW0gY29udHJvbCBzaWduYWxzLgoKU28sIHdoZXJlICppcyogdGhhdCBoYW5kbGVkIHRoZW4/IEkgbmVlZCB0byB0aGluayBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgV1dBTiBkcml2ZXJzIGluIHRoZSBzeXN0ZW0/IEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGlzIGluIGFub3RoZXIgc2VjdGlvbiwgbGlrZWx5IGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBtb2RlbSBiZWluZyB1c2VkLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhIG1vcmUgZ2VuZXJhbGl6ZWQgZnJhbWV3b3JrIG9yIGFic3RyYWN0aW9uIGxheWVyIGRlYWxpbmcgd2l0aCB0aG9zZSBjb250cm9sIHNpZ25hbHMuIEkgbmVlZCB0byBzdGFydCB0aGlua2luZyBhYm91dCB3aGljaCBvZiB0aG9zZSBmcmFtZXdvcmtzIG9yIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgbWlnaHQgYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYGR0cl9ydHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdHJfcnRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYz0xMzU9c3RhdGljIGludCBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4sIHVuc2lnbmVkIGludCBtZG1iaXRzKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3Ny1cbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jOjE3ODpzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbilcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jOjI0NDpcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQ1LX07XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03NDI9c3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc2NS1cdFx0aWYgKHBvcnQtXHUwMDNlc3RhcnRfY291bnQgPT0gMSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6NzY2Olx0XHQgICAgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy03NjctXHRcdFx0cG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3Njg6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCB0cnVlKTtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY5LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03Nzg9c3RhdGljIHZvaWQgd3dhbl9wb3J0X29wX3N0b3Aoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4My1cdFx0LyogTWlycm9yIFRUWSBzZW1hbnRpY3M6IGRyb3AgRFRSL1JUUyBvbiBsYXN0IGNsb3NlIG9mIGFuIEFUIHBvcnQgKi9cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6Nzg0Olx0XHRpZiAocG9ydC1cdTAwM2VvcHMgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpIHtcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzg1LVx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpO1xuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3ODY6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4Ny1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9OTkxPXN0YXRpYyBsb25nIHd3YW5fcG9ydF9mb3BzX2F0X2lvY3RsKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUwLVx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzID0gbWRtYml0cztcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6MTA1MTpcdFx0aWYgKHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMpXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTI6XHRcdFx0cG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cyhwb3J0LFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUzLVx0XHRcdFx0XHQgICAhIShwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyBcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1NjUKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBtaGlfd3dhbl9jdHJsLmNgIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGFmdGVyIGRpZ2dpbmcgaW50byB0aGlzLCBJJiMzOTt2ZSBjb25maXJtZWQgc29tZXRoaW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhlIGBkdHJfcnRzYCBzZXR0aW5nIGlzICpvbmx5KiB0b3VjaGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0LCBjb3VwbGVkIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW52aXJvbm1lbnQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgbGVhZHMgbWUgdG8gYSBwcmV0dHkgc29saWQgY29uY2x1c2lvbjogdGhlc2UgY2hhbmdlcyBhcmUgc2ltcGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhleSYjMzk7cmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbiYjMzk7dCBlbXVsYXRlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgd2FudGVkIHRvIHNlZSBpZiBzeXprYWxsZXIgY291bGQgc29tZWhvdyBzbmVhayBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCBwZXJoYXBzIGJ5IGRpcmVjdGx5IGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfcHJvYmVgIG9yIHNvbWUgc2ltaWxhciBmdW5jdGlvbi4gQnV0LCBubywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGludm9rZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zLiBJdCB3b3JrcyBieSBnZW5lcmF0aW5nIGRldmljZXMgKFBDSSwgVVNCLCBldGMuKSBhbmQgYWxsb3dpbmcgdGhlIGtlcm5lbCYjMzk7cyBkcml2ZXIgY29yZSB0byBoYW5kbGUgdGhlIGJpbmRpbmcuIFNpbmNlIHN5emthbGxlciBjYW4mIzM5O3Qgc2ltdWxhdGUgb3IgY3JlYXRlIGFuIE1ISSBkZXZpY2UsIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCB3aWxsIG5ldmVyIGdldCBjYWxsZWQuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gTUhJIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgYXZhaWxhYmxlIG9yIGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjAyNjEwODI1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDg5NjY1OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjAyNjExNDg1N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExNDQwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkzZjYyNmY0YmYyZmVlMjBlMDM2MzkwMWVkMzhmYTYzYmUzOTlmNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXFxuaW5kZXggMGQwZDljN2ZmYTRiZi4uYmE0N2RkMTUzODM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuY1xcbkBAIC03MjgsNiArNzI4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaGlfY2hhbm5lbF9jb25maWcgbWhpX3NpZXJyYV9lbTkxOXhfY2hhbm5lbHNbXSA9IHtcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDEzLCBcXFwiTUJJTVxcXCIsIDEyOCwgMCksXFxuIFxcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxNCwgXFxcIlFNSVxcXCIsIDMyLCAwKSxcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDE1LCBcXFwiUU1JXFxcIiwgMzIsIDApLFxcbitcXHRNSElfQ0hBTk5FTF9DT05GSUdfVUwoMTgsIFxcXCJJUF9DVFJMXFxcIiwgMzIsIDApLFxcbitcXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTksIFxcXCJJUF9DVFJMXFxcIiwgMzIsIDApLFxcbiBcXHRNSElfQ0hBTk5FTF9DT05GSUdfVUwoMzIsIFxcXCJEVU5cXFwiLCAzMiwgMCksXFxuIFxcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgzMywgXFxcIkRVTlxcXCIsIDMyLCAwKSxcXG4gXFx0TUhJX0NIQU5ORUxfQ09ORklHX0hXX1VMKDEwMCwgXFxcIklQX0hXMFxcXCIsIDUxMiwgMSksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcXG5pbmRleCBhMzFkODU0MGZiYjg1Li4zYWVmOTBlYzIxNzY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcXG5AQCAtMSw4ICsxLDEyIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFxcdTAwM2Nsb2ljLnBvdWxhaW5AbGluYXJvLm9yZ1xcdTAwM2UgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWhpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90ZXJtaW9zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93d2FuLmhcXHUwMDNlXFxuIFxcbiAvKiBNSEkgd3dhbiBmbGFncyAqL1xcbkBAIC0xNCw2ICsxOCwzMCBAQCBlbnVtIG1oaV93d2FuX2ZsYWdzIHtcXG4gXFxuICNkZWZpbmUgTUhJX1dXQU5fTUFYX01UVVxcdDB4ODAwMFxcbiBcXG4rLyogSVBfQ1RSTCBjaGFubmVsIG1lc3NhZ2UgdGhhdCBzZXRzIHRoZSBtb2RlbSdzIERUUi9SVFMgY29udHJvbCBsaW5lcyAqL1xcbitzdHJ1Y3QgbWhpX2R0cl9jdHJsX21zZyB7XFxuK1xcdF9fbGUzMiBwcmVhbWJsZTtcXG4rXFx0X19sZTMyIG1zZ19pZDtcXG4rXFx0X19sZTMyIGRlc3RfaWQ7XFxuK1xcdF9fbGUzMiBzaXplO1xcbitcXHRfX2xlMzIgbXNnO1xcbit9IF9fcGFja2VkO1xcbitcXG4rI2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUNcXHQweDRDNTI1NDQzXFx0LyogJ0NUUkwnICovXFxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfUlRTXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXFx0MHgxMFxcbitcXG4rLyogUGVyLWNvbnRyb2xsZXIgSVBfQ1RSTCBjaGFubmVsLCB1c2VkIHRvIHNpZ25hbCBEVFIvUlRTIHRvIHRoYXQgbW9kZW0gKi9cXG4rc3RydWN0IG1oaV93d2FuX2R0ciB7XFxuK1xcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7XFxuK1xcdHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XFxuK307XFxuK1xcbitzdGF0aWMgTElTVF9IRUFEKG1oaV93d2FuX2R0cl9saXN0KTtcXG4rc3RhdGljIERFRklORV9NVVRFWChtaGlfd3dhbl9kdHJfbG9jayk7XFxuK1xcbiBzdHJ1Y3QgbWhpX3d3YW5fZGV2IHtcXG4gXFx0LyogTG93ZXIgbGV2ZWwgaXMgYSBtaGkgZGV2LCB1cHBlciBsZXZlbCBpcyBhIHd3YW4gcG9ydCAqL1xcbiBcXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcXG5AQCAtMTAzLDYgKzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0fVxcbiB9XFxuIFxcbisvKiBTaWduYWwgdGhlIG1vZGVtJ3MgRFRSL1JUUyBsaW5lcyBvdmVyIGl0cyBvd24gY29udHJvbGxlcidzIElQX0NUUkwgY2hhbm5lbCAqL1xcbitzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpXFxuK3tcXG4rXFx0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXFx1MDAzZW1oaV9kZXYtXFx1MDAzZW1oaV9jbnRybDtcXG4rXFx0c3RydWN0IG1oaV9kZXZpY2UgKmN0cmxfZGV2ID0gTlVMTDtcXG4rXFx0c3RydWN0IG1oaV9kdHJfY3RybF9tc2cgKmR0cl9tc2c7XFxuK1xcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0cjtcXG4rXFx0dTMyIG1zZyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZHRyLCBcXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QsIG5vZGUpIHtcXG4rXFx0XFx0aWYgKGR0ci1cXHUwMDNlY250cmwgPT0gY250cmwpIHtcXG4rXFx0XFx0XFx0Y3RybF9kZXYgPSBkdHItXFx1MDAzZW1oaV9kZXY7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKCFjdHJsX2RldilcXG4rXFx0XFx0cmV0dXJuIDA7IC8qIElQX0NUUkwgbm90IGVudW1lcmF0ZWQ7IGJlc3QtZWZmb3J0LCBub3QgYW4gZXJyb3IgKi9cXG4rXFxuK1xcdGR0cl9tc2cgPSBremFsbG9jX29iaigqZHRyX21zZyk7XFxuK1xcdGlmICghZHRyX21zZylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAobWRtYml0cyBcXHUwMDI2IFRJT0NNX0RUUilcXG4rXFx0XFx0bXNnIHw9IE1ISV9EVFJfTVNHX0RUUjtcXG4rXFx0aWYgKG1kbWJpdHMgXFx1MDAyNiBUSU9DTV9SVFMpXFxuK1xcdFxcdG1zZyB8PSBNSElfRFRSX01TR19SVFM7XFxuK1xcbitcXHRkdHJfbXNnLVxcdTAwM2VwcmVhbWJsZSA9IGNwdV90b19sZTMyKE1ISV9EVFJfQ1RSTF9NQUdJQyk7XFxuK1xcdGR0cl9tc2ctXFx1MDAzZW1zZ19pZCA9IGNwdV90b19sZTMyKE1ISV9EVFJfSE9TVF9TVEFURSk7XFxuK1xcdGR0cl9tc2ctXFx1MDAzZWRlc3RfaWQgPSBjcHVfdG9fbGUzMihtaGl3d2FuLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2V1bF9jaGFuX2lkKTtcXG4rXFx0ZHRyX21zZy1cXHUwMDNlc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihfX2xlMzIpKTtcXG4rXFx0ZHRyX21zZy1cXHUwMDNlbXNnID0gY3B1X3RvX2xlMzIobXNnKTtcXG4rXFxuK1xcdHJldCA9IG1oaV9xdWV1ZV9idWYoY3RybF9kZXYsIERNQV9UT19ERVZJQ0UsIGR0cl9tc2csIHNpemVvZigqZHRyX21zZyksXFxuK1xcdFxcdFxcdCAgICBNSElfRU9UKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0a2ZyZWUoZHRyX21zZyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX2R0cl9ydHMoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbilcXG4re1xcbitcXHRtaGlfd3dhbl9jdHJsX3NlbmRfZHRyKHd3YW5fcG9ydF9nZXRfZHJ2ZGF0YShwb3J0KSxcXG4rXFx0XFx0XFx0ICAgICAgIG9uID8gVElPQ01fRFRSIHwgVElPQ01fUlRTIDogMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zdGFydChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBtaGlfd3dhbl9kZXYgKm1oaXd3YW4gPSB3d2FuX3BvcnRfZ2V0X2RydmRhdGEocG9ydCk7XFxuQEAgLTE2Myw2ICsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbiBcXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxcbiBcXHQuc3RvcCA9IG1oaV93d2FuX2N0cmxfc3RvcCxcXG4gXFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcXG4rXFx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBtaGlfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG5AQCAtMjU1LDYgKzMzNCw1OSBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlbW92ZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldilcXG4gXFx0a2ZyZWUobWhpd3dhbik7XFxuIH1cXG4gXFxuKy8qIElQX0NUUkwgY2hhbm5lbCBkcml2ZXIsIGJvdW5kIHNlcGFyYXRlbHkgc28gdGhlIGRhdGEtcG9ydCBwYXRoIGlzIHVudG91Y2hlZCAqL1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtaGlfcmVzdWx0ICptaGlfcmVzdWx0KVxcbit7XFxuK1xcdC8qIE1ISSBjb3JlIGhhcyBkb25lIHdpdGggdGhlIGJ1ZmZlciwgcmVsZWFzZSBpdCAqL1xcbitcXHRrZnJlZShtaGlfcmVzdWx0LVxcdTAwM2VidWZfYWRkcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1oaV9yZXN1bHQgKm1oaV9yZXN1bHQpXFxuK3tcXG4rXFx0LyogTW9kZW0gc2VyaWFsIHN0YXRlIGlzIG5vdCBuZWVkZWQsIGRyb3AgaXQgKi9cXG4rfVxcbitcXG4rc3RhdGljIGludCBtaGlfd3dhbl9kdHJfcHJvYmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBtaGlfZGV2aWNlX2lkICppZClcXG4re1xcbitcXHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkdHIgPSBremFsbG9jX29iaigqZHRyKTtcXG4rXFx0aWYgKCFkdHIpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gbWhpX3ByZXBhcmVfZm9yX3RyYW5zZmVyKG1oaV9kZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGtmcmVlKGR0cik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGR0ci1cXHUwMDNlY250cmwgPSBtaGlfZGV2LVxcdTAwM2VtaGlfY250cmw7XFxuK1xcdGR0ci1cXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWhpX2Rldi1cXHUwMDNlZGV2LCBkdHIpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2ZHRyLVxcdTAwM2Vub2RlLCBcXHUwMDI2bWhpX3d3YW5fZHRyX2xpc3QpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfcmVtb3ZlKHN0cnVjdCBtaGlfZGV2aWNlICptaGlfZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaGlfd3dhbl9kdHIgKmR0ciA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWhpX2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNmR0ci1cXHUwMDNlbm9kZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xcbitcXG4rXFx0bWhpX3VucHJlcGFyZV9mcm9tX3RyYW5zZmVyKG1oaV9kZXYpO1xcbitcXHRrZnJlZShkdHIpO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fY3RybF9tYXRjaF90YWJsZVtdID0ge1xcbiBcXHR7IC5jaGFuID0gXFxcIkRVTlxcXCIsIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LFxcbiBcXHR7IC5jaGFuID0gXFxcIkRVTjJcXFwiLCAuZHJpdmVyX2RhdGEgPSBXV0FOX1BPUlRfQVQgfSxcXG5AQCAtMjc4LDcgKzQxMCw0NSBAQCBzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fY3RybF9kcml2ZXIgPSB7XFxuIFxcdH0sXFxuIH07XFxuIFxcbi1tb2R1bGVfbWhpX2RyaXZlcihtaGlfd3dhbl9jdHJsX2RyaXZlcik7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGVbXSA9IHtcXG4rXFx0eyAuY2hhbiA9IFxcXCJJUF9DVFJMXFxcIiB9LFxcbitcXHR7fSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IG1oaV9kcml2ZXIgbWhpX3d3YW5fZHRyX2RyaXZlciA9IHtcXG4rXFx0LmlkX3RhYmxlID0gbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlLFxcbitcXHQucmVtb3ZlID0gbWhpX3d3YW5fZHRyX3JlbW92ZSxcXG4rXFx0LnByb2JlID0gbWhpX3d3YW5fZHRyX3Byb2JlLFxcbitcXHQudWxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl91bF94ZmVyX2NiLFxcbitcXHQuZGxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJtaGlfd3dhbl9kdHJcXFwiLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgbWhpX3d3YW5fY3RybF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gbWhpX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbittb2R1bGVfaW5pdChtaGlfd3dhbl9jdHJsX2luaXQpO1xcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IG1oaV93d2FuX2N0cmxfZXhpdCh2b2lkKVxcbit7XFxuK1xcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xcbitcXHRtaGlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xcbit9XFxuK21vZHVsZV9leGl0KG1oaV93d2FuX2N0cmxfZXhpdCk7XFxuIFxcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwiTUhJIFdXQU4gQ1RSTCBEcml2ZXJcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcXG5pbmRleCBmZmJjZjExZTRlNjgxLi5mOGNhOWNkYTNjOWFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jXFxuQEAgLTc1OSw4ICs3NTksMTUgQEAgc3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4gXFx0aWYgKCFwb3J0LVxcdTAwM2VzdGFydF9jb3VudClcXG4gXFx0XFx0cmV0ID0gcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VzdGFydChwb3J0KTtcXG4gXFxuLVxcdGlmICghcmV0KVxcbitcXHRpZiAoIXJldCkge1xcbiBcXHRcXHRwb3J0LVxcdTAwM2VzdGFydF9jb3VudCsrO1xcbitcXHRcXHQvKiBNaXJyb3IgVFRZIHNlbWFudGljczogcmFpc2UgRFRSL1JUUyBvbiBmaXJzdCBvcGVuIG9mIGFuIEFUIHBvcnQgKi9cXG4rXFx0XFx0aWYgKHBvcnQtXFx1MDAzZXN0YXJ0X2NvdW50ID09IDEgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cykge1xcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gVElPQ01fRFRSIHwgVElPQ01fUlRTO1xcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2VvcHNfbG9jayk7XFxuQEAgLTc3Myw2ICs3ODAsMTEgQEAgc3RhdGljIHZvaWQgd3dhbl9wb3J0X29wX3N0b3Aoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlb3BzX2xvY2spO1xcbiBcXHRwb3J0LVxcdTAwM2VzdGFydF9jb3VudC0tO1xcbiBcXHRpZiAoIXBvcnQtXFx1MDAzZXN0YXJ0X2NvdW50KSB7XFxuK1xcdFxcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovXFxuK1xcdFxcdGlmIChwb3J0LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKSB7XFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyBcXHUwMDI2PSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7XFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cyhwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKHBvcnQtXFx1MDAzZW9wcylcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VzdG9wKHBvcnQpO1xcbiBcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNnBvcnQtXFx1MDAzZXJ4cSk7XFxuQEAgLTEwMzYsNiArMTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLFxcbiBcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgfD0gbWRtYml0cztcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRwb3J0LVxcdTAwM2VhdF9kYXRhLm1kbWJpdHMgPSBtZG1iaXRzO1xcbitcXHRcXHRpZiAocG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKVxcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgISEocG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKFRJT0NNX0RUUiB8IFRJT0NNX1JUUykpKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmhcXG5pbmRleCAxZTBlMmNiNTM1Nzk5Li5hNzY4NDk1MGQ3M2IwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvd3dhbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC93d2FuLmhcXG5AQCAtNTcsNiArNTcsOCBAQCBzdHJ1Y3Qgd3dhbl9wb3J0O1xcbiAgKiBAdHhfYmxvY2tpbmc6IE9wdGlvbmFsIGJsb2NraW5nIHJvdXRpbmUgdGhhdCBzZW5kcyBXV0FOIHBvcnQgcHJvdG9jb2wgZGF0YVxcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXFxuICAqIEB0eF9wb2xsOiBPcHRpb25hbCByb3V0aW5lIHRoYXQgc2V0cyBhZGRpdGlvbmFsIFRYIHBvbGwgZmxhZ3MuXFxuKyAqIEBkdHJfcnRzOiBPcHRpb25hbCByb3V0aW5lIHRoYXQgYXNzZXJ0cyAob249dHJ1ZSkgb3IgZGUtYXNzZXJ0cyAob249ZmFsc2UpXFxuKyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy5cXG4gICpcXG4gICogVGhlIHd3YW5fcG9ydF9vcHMgc3RydWN0dXJlIGNvbnRhaW5zIGEgbGlzdCBvZiBsb3ctbGV2ZWwgb3BlcmF0aW9uc1xcbiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC5cXG5AQCAtNzAsNiArNzIsNyBAQCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB7XFxuIFxcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFx0X19wb2xsX3QgKCp0eF9wb2xsKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCxcXG4gXFx0XFx0XFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xcbitcXHR2b2lkICgqZHRyX3J0cykoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgYm9vbCBvbik7XFxuIH07XFxuIFxcbiAvKiogc3RydWN0IHd3YW5fcG9ydF9jYXBzIC0gVGhlIFdXQU4gcG9ydCBjYXBiaWxpdGllc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODoxMS40MzkxMjIwMTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzQ0ODM2MzE1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNSEkgV1dBTiBjb250cm9sIGRyaXZlciBhbmQgV1dBTiBjb3JlIHRvIHN1cHBvcnQgRFRSL1JUUyBzaWduYWxpbmcgb3ZlciBhbiBNSEkgSVBfQ1RSTCBjaGFubmVsLiBUaGUgbmV3IGNvZGUgaW4gd3dhbl9jb3JlLmMgaXMgb25seSByZWFjaGFibGUgaWYgYSBXV0FOIHBvcnQgcHJvdmlkZXMgdGhlIGBkdHJfcnRzYCBjYWxsYmFjaywgd2hpY2ggaXMgb25seSBpbXBsZW1lbnRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gU2luY2UgTUhJIGRldmljZXMgcmVxdWlyZSBzcGVjaWZpYyBRdWFsY29tbSBtb2RlbSBoYXJkd2FyZSBhbmQgY29tcGxleCBETUEvcmluZyBpbnRlcmFjdGlvbnMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIHdpbGwgZmFpbCB0byBpbml0aWFsaXplIGFuZCB3aWxsIG5vdCBjcmVhdGUgYW55IE1ISSBkZXZpY2VzLiBDb25zZXF1ZW50bHksIHRoZSBXV0FOIHBvcnRzIHdpbGwgbm90IGJlIGNyZWF0ZWQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5M2Y2MjZmNGJmMmZlZTIwZTAzNjM5MDFlZDM4ZmE2M2JlMzk5ZjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDIyOjI4OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYyBiL2RyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmNcbmluZGV4IDBkMGQ5YzdmZmE0YmYuLmJhNDdkZDE1MzgzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jXG5AQCAtNzI4LDYgKzcyOCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2NoYW5uZWxfY29uZmlnIG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzW10gPSB7XG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTMsIFwiTUJJTVwiLCAxMjgsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX1VMKDE0LCBcIlFNSVwiLCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfREwoMTUsIFwiUU1JXCIsIDMyLCAwKSxcbitcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgxOCwgXCJJUF9DVFJMXCIsIDMyLCAwKSxcbitcdE1ISV9DSEFOTkVMX0NPTkZJR19ETCgxOSwgXCJJUF9DVFJMXCIsIDMyLCAwKSxcbiBcdE1ISV9DSEFOTkVMX0NPTkZJR19VTCgzMiwgXCJEVU5cIiwgMzIsIDApLFxuIFx0TUhJX0NIQU5ORUxfQ09ORklHX0RMKDMzLCBcIkRVTlwiLCAzMiwgMCksXG4gXHRNSElfQ0hBTk5FTF9DT05GSUdfSFdfVUwoMTAwLCBcIklQX0hXMFwiLCA1MTIsIDEpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcbmluZGV4IGEzMWQ4NTQwZmJiODUuLjNhZWY5MGVjMjE3NjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuY1xuKysrIGIvZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmNcbkBAIC0xLDggKzEsMTIgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLyogQ29weXJpZ2h0IChjKSAyMDIxLCBMaW5hcm8gTHRkIFx1MDAzY2xvaWMucG91bGFpbkBsaW5hcm8ub3JnXHUwMDNlICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Rlcm1pb3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3d3YW4uaFx1MDAzZVxuIFxuIC8qIE1ISSB3d2FuIGZsYWdzICovXG5AQCAtMTQsNiArMTgsMzAgQEAgZW51bSBtaGlfd3dhbl9mbGFncyB7XG4gXG4gI2RlZmluZSBNSElfV1dBTl9NQVhfTVRVXHQweDgwMDBcbiBcbisvKiBJUF9DVFJMIGNoYW5uZWwgbWVzc2FnZSB0aGF0IHNldHMgdGhlIG1vZGVtJ3MgRFRSL1JUUyBjb250cm9sIGxpbmVzICovXG4rc3RydWN0IG1oaV9kdHJfY3RybF9tc2cge1xuK1x0X19sZTMyIHByZWFtYmxlO1xuK1x0X19sZTMyIG1zZ19pZDtcbitcdF9fbGUzMiBkZXN0X2lkO1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMzIgbXNnO1xuK30gX19wYWNrZWQ7XG4rXG4rI2RlZmluZSBNSElfRFRSX0NUUkxfTUFHSUNcdDB4NEM1MjU0NDNcdC8qICdDVFJMJyAqL1xuKyNkZWZpbmUgTUhJX0RUUl9NU0dfRFRSXHRcdEJJVCgwKVxuKyNkZWZpbmUgTUhJX0RUUl9NU0dfUlRTXHRcdEJJVCgxKVxuKyNkZWZpbmUgTUhJX0RUUl9IT1NUX1NUQVRFXHQweDEwXG4rXG4rLyogUGVyLWNvbnRyb2xsZXIgSVBfQ1RSTCBjaGFubmVsLCB1c2VkIHRvIHNpZ25hbCBEVFIvUlRTIHRvIHRoYXQgbW9kZW0gKi9cbitzdHJ1Y3QgbWhpX3d3YW5fZHRyIHtcbitcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqY250cmw7XG4rXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcbit9O1xuK1xuK3N0YXRpYyBMSVNUX0hFQUQobWhpX3d3YW5fZHRyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfTVVURVgobWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuIHN0cnVjdCBtaGlfd3dhbl9kZXYge1xuIFx0LyogTG93ZXIgbGV2ZWwgaXMgYSBtaGkgZGV2LCB1cHBlciBsZXZlbCBpcyBhIHd3YW4gcG9ydCAqL1xuIFx0c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXY7XG5AQCAtMTAzLDYgKzEzMSw1NiBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlZmlsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdH1cbiB9XG4gXG4rLyogU2lnbmFsIHRoZSBtb2RlbSdzIERUUi9SVFMgbGluZXMgb3ZlciBpdHMgb3duIGNvbnRyb2xsZXIncyBJUF9DVFJMIGNoYW5uZWwgKi9cbitzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc2VuZF9kdHIoc3RydWN0IG1oaV93d2FuX2RldiAqbWhpd3dhbiwgdW5zaWduZWQgaW50IG1kbWJpdHMpXG4re1xuK1x0c3RydWN0IG1oaV9jb250cm9sbGVyICpjbnRybCA9IG1oaXd3YW4tXHUwMDNlbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4rXHRzdHJ1Y3QgbWhpX2RldmljZSAqY3RybF9kZXYgPSBOVUxMO1xuK1x0c3RydWN0IG1oaV9kdHJfY3RybF9tc2cgKmR0cl9tc2c7XG4rXHRzdHJ1Y3QgbWhpX3d3YW5fZHRyICpkdHI7XG4rXHR1MzIgbXNnID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkdHIsIFx1MDAyNm1oaV93d2FuX2R0cl9saXN0LCBub2RlKSB7XG4rXHRcdGlmIChkdHItXHUwMDNlY250cmwgPT0gY250cmwpIHtcbitcdFx0XHRjdHJsX2RldiA9IGR0ci1cdTAwM2VtaGlfZGV2O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoIWN0cmxfZGV2KVxuK1x0XHRyZXR1cm4gMDsgLyogSVBfQ1RSTCBub3QgZW51bWVyYXRlZDsgYmVzdC1lZmZvcnQsIG5vdCBhbiBlcnJvciAqL1xuK1xuK1x0ZHRyX21zZyA9IGt6YWxsb2Nfb2JqKCpkdHJfbXNnKTtcbitcdGlmICghZHRyX21zZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAobWRtYml0cyBcdTAwMjYgVElPQ01fRFRSKVxuK1x0XHRtc2cgfD0gTUhJX0RUUl9NU0dfRFRSO1xuK1x0aWYgKG1kbWJpdHMgXHUwMDI2IFRJT0NNX1JUUylcbitcdFx0bXNnIHw9IE1ISV9EVFJfTVNHX1JUUztcbitcbitcdGR0cl9tc2ctXHUwMDNlcHJlYW1ibGUgPSBjcHVfdG9fbGUzMihNSElfRFRSX0NUUkxfTUFHSUMpO1xuK1x0ZHRyX21zZy1cdTAwM2Vtc2dfaWQgPSBjcHVfdG9fbGUzMihNSElfRFRSX0hPU1RfU1RBVEUpO1xuK1x0ZHRyX21zZy1cdTAwM2VkZXN0X2lkID0gY3B1X3RvX2xlMzIobWhpd3dhbi1cdTAwM2VtaGlfZGV2LVx1MDAzZXVsX2NoYW5faWQpO1xuK1x0ZHRyX21zZy1cdTAwM2VzaXplID0gY3B1X3RvX2xlMzIoc2l6ZW9mKF9fbGUzMikpO1xuK1x0ZHRyX21zZy1cdTAwM2Vtc2cgPSBjcHVfdG9fbGUzMihtc2cpO1xuK1xuK1x0cmV0ID0gbWhpX3F1ZXVlX2J1ZihjdHJsX2RldiwgRE1BX1RPX0RFVklDRSwgZHRyX21zZywgc2l6ZW9mKCpkdHJfbXNnKSxcbitcdFx0XHQgICAgTUhJX0VPVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRrZnJlZShkdHJfbXNnKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2N0cmxfZHRyX3J0cyhzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBib29sIG9uKVxuK3tcbitcdG1oaV93d2FuX2N0cmxfc2VuZF9kdHIod3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpLFxuK1x0XHRcdCAgICAgICBvbiA/IFRJT0NNX0RUUiB8IFRJT0NNX1JUUyA6IDApO1xuK31cbitcbiBzdGF0aWMgaW50IG1oaV93d2FuX2N0cmxfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgbWhpX3d3YW5fZGV2ICptaGl3d2FuID0gd3dhbl9wb3J0X2dldF9kcnZkYXRhKHBvcnQpO1xuQEAgLTE2Myw2ICsyNDEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xuIFx0LnN0YXJ0ID0gbWhpX3d3YW5fY3RybF9zdGFydCxcbiBcdC5zdG9wID0gbWhpX3d3YW5fY3RybF9zdG9wLFxuIFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcbitcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgbWhpX3VsX3hmZXJfY2Ioc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYsXG5AQCAtMjU1LDYgKzMzNCw1OSBAQCBzdGF0aWMgdm9pZCBtaGlfd3dhbl9jdHJsX3JlbW92ZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldilcbiBcdGtmcmVlKG1oaXd3YW4pO1xuIH1cbiBcbisvKiBJUF9DVFJMIGNoYW5uZWwgZHJpdmVyLCBib3VuZCBzZXBhcmF0ZWx5IHNvIHRoZSBkYXRhLXBvcnQgcGF0aCBpcyB1bnRvdWNoZWQgKi9cbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfdWxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdClcbit7XG4rXHQvKiBNSEkgY29yZSBoYXMgZG9uZSB3aXRoIHRoZSBidWZmZXIsIHJlbGVhc2UgaXQgKi9cbitcdGtmcmVlKG1oaV9yZXN1bHQtXHUwMDNlYnVmX2FkZHIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtaGlfd3dhbl9kdHJfZGxfeGZlcl9jYihzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbWhpX3Jlc3VsdCAqbWhpX3Jlc3VsdClcbit7XG4rXHQvKiBNb2RlbSBzZXJpYWwgc3RhdGUgaXMgbm90IG5lZWRlZCwgZHJvcCBpdCAqL1xuK31cbitcbitzdGF0aWMgaW50IG1oaV93d2FuX2R0cl9wcm9iZShzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCAqaWQpXG4re1xuK1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyO1xuK1x0aW50IHJldDtcbitcbitcdGR0ciA9IGt6YWxsb2Nfb2JqKCpkdHIpO1xuK1x0aWYgKCFkdHIpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbWhpX3ByZXBhcmVfZm9yX3RyYW5zZmVyKG1oaV9kZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShkdHIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0ZHRyLVx1MDAzZWNudHJsID0gbWhpX2Rldi1cdTAwM2VtaGlfY250cmw7XG4rXHRkdHItXHUwMDNlbWhpX2RldiA9IG1oaV9kZXY7XG4rXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2bWhpX2Rldi1cdTAwM2VkZXYsIGR0cik7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbitcdGxpc3RfYWRkKFx1MDAyNmR0ci1cdTAwM2Vub2RlLCBcdTAwMjZtaGlfd3dhbl9kdHJfbGlzdCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1oaV93d2FuX2R0cl9yZW1vdmUoc3RydWN0IG1oaV9kZXZpY2UgKm1oaV9kZXYpXG4re1xuK1x0c3RydWN0IG1oaV93d2FuX2R0ciAqZHRyID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1oaV9kZXYtXHUwMDNlZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWhpX3d3YW5fZHRyX2xvY2spO1xuK1x0bGlzdF9kZWwoXHUwMDI2ZHRyLVx1MDAzZW5vZGUpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1oaV93d2FuX2R0cl9sb2NrKTtcbitcbitcdG1oaV91bnByZXBhcmVfZnJvbV90cmFuc2ZlcihtaGlfZGV2KTtcbitcdGtmcmVlKGR0cik7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX2RldmljZV9pZCBtaGlfd3dhbl9jdHJsX21hdGNoX3RhYmxlW10gPSB7XG4gXHR7IC5jaGFuID0gXCJEVU5cIiwgLmRyaXZlcl9kYXRhID0gV1dBTl9QT1JUX0FUIH0sXG4gXHR7IC5jaGFuID0gXCJEVU4yXCIsIC5kcml2ZXJfZGF0YSA9IFdXQU5fUE9SVF9BVCB9LFxuQEAgLTI3OCw3ICs0MTAsNDUgQEAgc3RhdGljIHN0cnVjdCBtaGlfZHJpdmVyIG1oaV93d2FuX2N0cmxfZHJpdmVyID0ge1xuIFx0fSxcbiB9O1xuIFxuLW1vZHVsZV9taGlfZHJpdmVyKG1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1oaV9kZXZpY2VfaWQgbWhpX3d3YW5fZHRyX21hdGNoX3RhYmxlW10gPSB7XG4rXHR7IC5jaGFuID0gXCJJUF9DVFJMXCIgfSxcbitcdHt9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtaGksIG1oaV93d2FuX2R0cl9tYXRjaF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBtaGlfZHJpdmVyIG1oaV93d2FuX2R0cl9kcml2ZXIgPSB7XG4rXHQuaWRfdGFibGUgPSBtaGlfd3dhbl9kdHJfbWF0Y2hfdGFibGUsXG4rXHQucmVtb3ZlID0gbWhpX3d3YW5fZHRyX3JlbW92ZSxcbitcdC5wcm9iZSA9IG1oaV93d2FuX2R0cl9wcm9iZSxcbitcdC51bF94ZmVyX2NiID0gbWhpX3d3YW5fZHRyX3VsX3hmZXJfY2IsXG4rXHQuZGxfeGZlcl9jYiA9IG1oaV93d2FuX2R0cl9kbF94ZmVyX2NiLFxuK1x0LmRyaXZlciA9IHtcbitcdFx0Lm5hbWUgPSBcIm1oaV93d2FuX2R0clwiLFxuK1x0fSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG1oaV93d2FuX2N0cmxfaW5pdCh2b2lkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBtaGlfZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG1oaV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2bWhpX3d3YW5fY3RybF9kcml2ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2R0cl9kcml2ZXIpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rbW9kdWxlX2luaXQobWhpX3d3YW5fY3RybF9pbml0KTtcbitcbitzdGF0aWMgdm9pZCBfX2V4aXQgbWhpX3d3YW5fY3RybF9leGl0KHZvaWQpXG4re1xuK1x0bWhpX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm1oaV93d2FuX2N0cmxfZHJpdmVyKTtcbitcdG1oaV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZtaGlfd3dhbl9kdHJfZHJpdmVyKTtcbit9XG4rbW9kdWxlX2V4aXQobWhpX3d3YW5fY3RybF9leGl0KTtcbiBcbiBNT0RVTEVfTElDRU5TRShcIkdQTCB2MlwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJNSEkgV1dBTiBDVFJMIERyaXZlclwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jIGIvZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuY1xuaW5kZXggZmZiY2YxMWU0ZTY4MS4uZjhjYTljZGEzYzlhZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNcbkBAIC03NTksOCArNzU5LDE1IEBAIHN0YXRpYyBpbnQgd3dhbl9wb3J0X29wX3N0YXJ0KHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4gXHRpZiAoIXBvcnQtXHUwMDNlc3RhcnRfY291bnQpXG4gXHRcdHJldCA9IHBvcnQtXHUwMDNlb3BzLVx1MDAzZXN0YXJ0KHBvcnQpO1xuIFxuLVx0aWYgKCFyZXQpXG4rXHRpZiAoIXJldCkge1xuIFx0XHRwb3J0LVx1MDAzZXN0YXJ0X2NvdW50Kys7XG4rXHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiByYWlzZSBEVFIvUlRTIG9uIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydCAqL1xuK1x0XHRpZiAocG9ydC1cdTAwM2VzdGFydF9jb3VudCA9PSAxIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgPT0gV1dBTl9QT1JUX0FUIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuK1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUztcbitcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKHBvcnQsIHRydWUpO1xuK1x0XHR9XG4rXHR9XG4gXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwb3J0LVx1MDAzZW9wc19sb2NrKTtcbkBAIC03NzMsNiArNzgwLDExIEBAIHN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXG4gXHRtdXRleF9sb2NrKFx1MDAyNnBvcnQtXHUwMDNlb3BzX2xvY2spO1xuIFx0cG9ydC1cdTAwM2VzdGFydF9jb3VudC0tO1xuIFx0aWYgKCFwb3J0LVx1MDAzZXN0YXJ0X2NvdW50KSB7XG4rXHRcdC8qIE1pcnJvciBUVFkgc2VtYW50aWNzOiBkcm9wIERUUi9SVFMgb24gbGFzdCBjbG9zZSBvZiBhbiBBVCBwb3J0ICovXG4rXHRcdGlmIChwb3J0LVx1MDAzZW9wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlID09IFdXQU5fUE9SVF9BVCBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0cykge1xuK1x0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFx1MDAyNj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpO1xuK1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCwgZmFsc2UpO1xuK1x0XHR9XG4gXHRcdGlmIChwb3J0LVx1MDAzZW9wcylcbiBcdFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VzdG9wKHBvcnQpO1xuIFx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2cG9ydC1cdTAwM2VyeHEpO1xuQEAgLTEwMzYsNiArMTA0OCwxMCBAQCBzdGF0aWMgbG9uZyB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bChzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdHBvcnQtXHUwMDNlYXRfZGF0YS5tZG1iaXRzIHw9IG1kbWJpdHM7XG4gXHRcdGVsc2VcbiBcdFx0XHRwb3J0LVx1MDAzZWF0X2RhdGEubWRtYml0cyA9IG1kbWJpdHM7XG4rXHRcdGlmIChwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzKVxuK1x0XHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHMocG9ydCxcbitcdFx0XHRcdFx0ICAgISEocG9ydC1cdTAwM2VhdF9kYXRhLm1kbWJpdHMgXHUwMDI2XG4rXHRcdFx0XHRcdCAgICAgIChUSU9DTV9EVFIgfCBUSU9DTV9SVFMpKSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd3dhbi5oIGIvaW5jbHVkZS9saW51eC93d2FuLmhcbmluZGV4IDFlMGUyY2I1MzU3OTkuLmE3Njg0OTUwZDczYjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3d3YW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC93d2FuLmhcbkBAIC01Nyw2ICs1Nyw4IEBAIHN0cnVjdCB3d2FuX3BvcnQ7XG4gICogQHR4X2Jsb2NraW5nOiBPcHRpb25hbCBibG9ja2luZyByb3V0aW5lIHRoYXQgc2VuZHMgV1dBTiBwb3J0IHByb3RvY29sIGRhdGFcbiAgKiAgICAgICAgICAgICAgIHRvIHRoZSBkZXZpY2UuXG4gICogQHR4X3BvbGw6IE9wdGlvbmFsIHJvdXRpbmUgdGhhdCBzZXRzIGFkZGl0aW9uYWwgVFggcG9sbCBmbGFncy5cbisgKiBAZHRyX3J0czogT3B0aW9uYWwgcm91dGluZSB0aGF0IGFzc2VydHMgKG9uPXRydWUpIG9yIGRlLWFzc2VydHMgKG9uPWZhbHNlKVxuKyAqICAgICAgICAgICB0aGUgRFRSIGFuZCBSVFMgbW9kZW0gY29udHJvbCBsaW5lcy5cbiAgKlxuICAqIFRoZSB3d2FuX3BvcnRfb3BzIHN0cnVjdHVyZSBjb250YWlucyBhIGxpc3Qgb2YgbG93LWxldmVsIG9wZXJhdGlvbnNcbiAgKiB0aGF0IGNvbnRyb2wgYSBXV0FOIHBvcnQgZGV2aWNlLiBBbGwgZnVuY3Rpb25zIGFyZSBtYW5kYXRvcnkgdW5sZXNzIHNwZWNpZmllZC5cbkBAIC03MCw2ICs3Miw3IEBAIHN0cnVjdCB3d2FuX3BvcnRfb3BzIHtcbiBcdGludCAoKnR4X2Jsb2NraW5nKShzdHJ1Y3Qgd3dhbl9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcdF9fcG9sbF90ICgqdHhfcG9sbCkoc3RydWN0IHd3YW5fcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdFx0ICAgIHBvbGxfdGFibGUgKndhaXQpO1xuK1x0dm9pZCAoKmR0cl9ydHMpKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pO1xuIH07XG4gXG4gLyoqIHN0cnVjdCB3d2FuX3BvcnRfY2FwcyAtIFRoZSBXV0FOIHBvcnQgY2FwYmlsaXRpZXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjExLjQzOTEyNDEzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDYyOTAwNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IERUUi9SVFMgU2lnbmFsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBEVFIvUlRTIHNpZ25hbGluZyBzdXBwb3J0IG92ZXIgYW4gYElQX0NUUkxgIE1ISSBjaGFubmVsLiBUaGV5J3JlIHRvdWNoaW5nIGBtaGlfd3dhbl9jdHJsLmNgLCBgd3dhbl9jb3JlLmNgLCBhbmQgYHBjaV9nZW5lcmljLmNgLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIGZhaXJseSBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlOlxuXG4qICAgQWRkZWQgYElQX0NUUkxgIHRvIGBtaGlfc2llcnJhX2VtOTE5eF9jaGFubmVsc2AuIE1ha2VzIHNlbnNlLCB3ZSBuZWVkIHRvIGRlZmluZSB0aGUgY2hhbm5lbC5cbiogICBJbnRyb2R1Y2VkIGEgbmV3IGBtaGlfd3dhbl9kdHJfZHJpdmVyYCBmb3IgaGFuZGxpbmcgdGhlIGBJUF9DVFJMYCBjaGFubmVsIGluIGBtaGlfd3dhbl9jdHJsLmNgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IGFwcHJvYWNoLCBlbmNhcHN1bGF0aW5nIHRoZSBjb250cm9sIGxvZ2ljLlxuKiAgIEltcGxlbWVudGVkIGBtaGlfd3dhbl9jdHJsX3NlbmRfZHRyYCBhbmQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBhY3R1YWxseSBzZW5kaW5nIHRoZSBEVFIvUlRTIHNpZ25hbHMuIEdvb2QsIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMuXG4qICAgTW9kaWZpZWQgYHd3YW5fY29yZS5jYCB0byBjYWxsIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCB3aGVuIGFuIEFUIHBvcnQgaXMgb3BlbmVkL2Nsb3NlZCBvciB2aWEgaW9jdGwuIFRoaXMgaXMgdGhlIGludGVncmF0aW9uIHBvaW50IHdpdGhpbiB0aGUgV1dBTiBjb3JlLiBNYWtlcyBzZW5zZSBmb3IgaG93IHRoZSBXV0FOIGNvcmUgbWFuYWdlcyB0aGUgbW9kZW0gY29ubmVjdGlvbi5cblxuVGhlIHJlYWwgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBpcyB3aGV0aGVyIHRoaXMgd2lsbCBldmVuIHdvcmsgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIFdXQU4gY29yZSBpcyBvYnZpb3VzbHkgcmVhY2hhYmxlLCB0aGF0J3Mgbm90IHRoZSBwcm9ibGVtLiBCdXQgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGlzIGEgZHJpdmVyIGZvciBNSEkgZGV2aWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGVtdWxhdGUgb3IgY3JlYXRlIE1ISSBkZXZpY2VzIGluIHNvZnR3YXJlLiBDYW4gd2UgZXZlbiBzaW11bGF0ZSB0aGUgcHJlc2VuY2Ugb2YgYSBNSEkgaG9zdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNSEkgaXMsIG9mIGNvdXJzZSwgYSBRdWFsY29tbSBtb2RlbSB0aGluZywgc28gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gY3JlYXRlIGEgc29mdHdhcmUgTUhJIGRldmljZSBmb3IgdGVzdGluZy4gTGV0IG1lIGNoZWNrIGZvciB0aGF0Li4uIExldCdzIHNlYXJjaCBmb3IgXCJNSEkgZGV2aWNlIGNyZWF0aW9uXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5OTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODoyOS41MDIwMjg0NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMzg5ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfYWxsb2NfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXFx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTAxMDpcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyOC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzIwLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcXHRcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXFx0XFx0aWYgKElTX0VSUihtaGlfZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6MzEuNTA1OTMyNzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNTk0ODI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNSEkgQ29udHJvbGxlciBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTUhJIGRldmljZXMsIGFuZCBpdCdzIGNsZWFyIHRoZXkncmUgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB0aHJvdWdoIGFuIE1ISSBob3N0IGNvbnRyb2xsZXIuIEJ1dCBhIHRob3VnaHQganVzdCBwb3BwZWQgaW50byBteSBoZWFkOiBpcyB0aGlzIGFsd2F5cyBhIGhhcmR3YXJlIHRoaW5nPyBJIG1lYW4sIGFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZGVkaWNhdGVkIHNpbGljb24gY29tcG9uZW50LCBvciBjb3VsZCB0aGlzIGhvc3QgY29udHJvbGxlciBhbHNvIGJlIGltcGxlbWVudGVkIGluIHNvZnR3YXJlPyBJdCdzIGEgdmFsaWQgcXVlc3Rpb24sIHdvcnRoIGV4cGxvcmluZy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUbyBmaW5kIG91dCwgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGNvZGViYXNlLiBJJ20gZ29pbmcgdG8gc2VhcmNoIGZvciBzb21ldGhpbmcgdGhhdCB3b3VsZCByZWdpc3RlciB0aGUgY29udHJvbGxlci4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYC4gVGhhdCBzaG91bGQgZWl0aGVyIGxlYWQgbWUgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpdCB3b3JrcyBvciBlbGltaW5hdGUgc29tZSBhdmVudWVzLiBUaGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIGNsdWUgaW4gdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6MzYuMjExODgzMzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTA2ODkwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0PTIwPUJlbG93IGFyZSB0aGUgcm9sZXMgb2YgdGhlIE1ISSBjb250cm9sbGVyIGRyaXZlcjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdC0yNC0qIEFsbG9jYXRlcyBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgYW5kIHJlZ2lzdGVycyB3aXRoIHRoZSBNSEkgYnVzIGZyYW1ld29ya1xcbkRvY3VtZW50YXRpb24vbWhpL3RvcG9sb2d5LnJzdDoyNTogIHdpdGggY2hhbm5lbCBhbmQgZXZlbnQgY29uZmlndXJhdGlvbnMgdXNpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIuXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0LTI2LSogSW5pdGlhdGVzIHBvd2VyIG9uIGFuZCBzaHV0ZG93biBzZXF1ZW5jZVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM9ODAwPXN0YXRpYyBpbnQgbWhpX3Jlc2V0X2FuZF9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTgyNi1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYzo4Mjc6c3RydWN0IG1oaV9jb250cm9sbGVyICpxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB2b2lkIF9faW9tZW0gKm1oaV9iYXIsXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODI4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgbWhpX2lycSwgYm9vbCBzaGFyZWRfbXNpLCBpbnQgZmFtaWx5KVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc1LVxcdG1oaV9jb25maWcudGltZW91dF9tcyA9IG1oaV90aW1lb3V0X21zO1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3NjpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIFxcdTAwMjZtaGlfY29uZmlnKTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjg3ODpcXHRcXHRwY2lfZXJyKHBjaV9kZXYsIFxcXCJtaGlfcmVnaXN0ZXJfY29udHJvbGxlciBmYWlsZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODc5LVxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaC04LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oOjk6c3RydWN0IG1oaV9jb250cm9sbGVyICpxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCB2b2lkIF9faW9tZW0gKm1oaV9iYXIsXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmgtMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpO1xcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmM9NTcwPXN0YXRpYyBpbnQgcWFpY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5Ni1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYzo1OTc6XFx0cWRldi1cXHUwMDNlbWhpX2NudHJsID0gcWFpY19taGlfcmVnaXN0ZXJfY29udHJvbGxlcihwZGV2LCBxZGV2LVxcdTAwM2ViYXJfbWhpLCBtaGlfaXJxLFxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jLTU5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcWRldi1cXHUwMDNlc2luZ2xlX21zaSwgY29uZmlnLVxcdTAwM2VmYW1pbHkpO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jPTg4MT1zdGF0aWMgaW50IHBhcnNlX2NvbmZpZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy05MTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjkxOTppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTkyMC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwNTYtfVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYzoxMDU3OkVYUE9SVF9TWU1CT0xfR1BMKG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1OC1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM9MTM2Mz1zdGF0aWMgaW50IG1oaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzNy1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjE0Mzg6XFx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE0MzktXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM9MzM1PWludCBhdGgxMWtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWtfcGNpICphYl9wY2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jLTQwOS1cXHRhYl9wY2ktXFx1MDAzZW1oaV9wcmVfY2IgPSBNSElfQ0JfSU5WQUxJRDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21oaS5jOjQxMDpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYXRoMTFrX21oaV9jb25maWcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtNDExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTg3PWludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTI2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjI2NTpcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0yNjYtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaD0yOTM9c3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oLTM4MS0gKiBGaWVsZHMgbWFya2VkIGFzIChyZXF1aXJlZCkgbmVlZCB0byBiZSBwb3B1bGF0ZWQgYnkgdGhlIGNvbnRyb2xsZXIgZHJpdmVyXFxuaW5jbHVkZS9saW51eC9taGkuaDozODI6ICogYmVmb3JlIGNhbGxpbmcgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoKS4gRm9yIHRoZSBmaWVsZHMgbWFya2VkIGFzIChvcHRpb25hbClcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTM4My0gKiB0aGV5IGNhbiBiZSBwb3B1bGF0ZWQgZGVwZW5kaW5nIG9uIHRoZSB1c2VjYXNlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaD01NDM9dm9pZCBtaGlfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ1LS8qKlxcbmluY2x1ZGUvbGludXgvbWhpLmg6NTQ2OiAqIG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIC0gUmVnaXN0ZXIgTUhJIGNvbnRyb2xsZXJcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0Ny0gKiBAbWhpX2NudHJsOiBNSEkgY29udHJvbGxlciB0byByZWdpc3Rlclxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01NDktICovXFxuaW5jbHVkZS9saW51eC9taGkuaDo1NTA6aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTUxLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtaGlfY29udHJvbGxlcl9jb25maWcgKmNvbmZpZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI4OjM3LjkyMjU3OTA0MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjg5OTExMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ISSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBhbmQgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBNSEkgY29udHJvbGxlcnMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgc2VlIHNldmVyYWwgZHJpdmVycyByZXNwb25zaWJsZTogYHFhaWNfZHJ2LmNgLCBgcGNpX2dlbmVyaWMuY2AsIGFuZCB0aGUgYGF0aDExa2AgYW5kIGBhdGgxMmtgIGRyaXZlcnMuIEFsbCBvZiB0aGVzZSBhcmUgUENJIGRyaXZlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLCBhcyBNSEkgaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgb3ZlciBQQ0kuIEhtbSwgaXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBNSEkgaXRzZWxmPyBObywgbm90IGRpcmVjdGx5LiBUaGF0J3MgY29uZmlybWVkLlxuXG5SaWdodCwgYHBjaV9nZW5lcmljLmNgICppcyogYSBQQ0kgZHJpdmVyLCBzbyB0aGF0J3MgYSBrZXkgcGllY2UuIE5vdywgY2FuIHdlIGxldmVyYWdlIHN5emthbGxlciB0byBmdXp6IE1ISSBkZXZpY2VzPyBTeXprYWxsZXIgKmNhbiogaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGBzeXpfcGNpX3NldHVwYCwgSSByZW1lbWJlciB0aGF0IG5vdy4gQnV0IGl0IGRvZXNuJ3QgKmRpcmVjdGx5KiBlbXVsYXRlIE1ISS4gSXQgY2FuIGVtdWxhdGUgKlBDSSogZGV2aWNlcy5cblxuU28sIHRoZSBzdHJhdGVneSBiZWNvbWVzOiBpZiBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uIGRlZmluZWQgaW4gYHBjaV9nZW5lcmljLmNgLCB0aGVuIGl0IHNob3VsZCBiZSBhYmxlIHRvIHJlZ2lzdGVyIGFuIE1ISSBjb250cm9sbGVyLiBUaGF0J3MgdGhlIGxpbmsuIE5leHQgc3RlcCBpcyB0byBmaW5kIG91dCB3aGF0IFBDSSBJRHMgYG1oaV9wY2lfcHJvYmVgIGFjdHVhbGx5IGJpbmRzIHRvLiBHb3R0YSBjaGVjayB0aG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyODo0OC4yMTI0OTIxNThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4Njc3MDAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcGNpX2lkX3RhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM9OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyBtaGlfbmV0cHJpc21hX2ZjdW42OV9pbmZvID0ge1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy05NDktLyogS2VlcCB0aGUgbGlzdCBzb3J0ZWQgYmFzZWQgb24gdGhlIFBJRC4gTmV3IFZJRCBzaG91bGQgYmUgYWRkZWQgYXMgdGhlIGxhc3QgZW50cnkgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jOjk1MDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWhpX3BjaV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtOTUxLVxcdHtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUNPTSwgMHgwMTE2KSxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTA4NC19O1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTA4NTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWhpX3BjaV9pZF90YWJsZSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMDg2LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xNzY0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtaGlfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE3NjUtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJtaGktcGNpLWdlbmVyaWNcXFwiLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTc2NjpcXHQuaWRfdGFibGVcXHQ9IG1oaV9wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNzY3LVxcdC5wcm9iZVxcdFxcdD0gbWhpX3BjaV9wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NDkuNzk5MjY5MjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MTIxOTgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNSEkgYW5kIFN5emthbGxlcjogQSBRdWljayBJbnF1aXJ5KipcblxuT2theSwgc28gU3l6a2FsbGVyIGhhcyBQQ0kgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgd2hpY2ggaXMgZ3JlYXQuIEJ1dCBNSEkuLi4gTUhJIGlzIGEgYmVhc3QuIEl0J3MgYnVpbHQgb24gdG9wIG9mIFBDSSwgYnV0IHdpdGggdGhpcyB3aG9sZSByaW5nIGFuZCBkb29yYmVsbCBzeXN0ZW07IGl0J3MgcXVpdGUgaW50cmljYXRlLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgU3l6a2FsbGVyIG9mZmVyIGEgZGVkaWNhdGVkIE1ISSBlbXVsYXRvcj8gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHByb3RvY29sLCBpdCdzIG5vdCBhIGdpdmVuLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gTUhJLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgYW5zd2VyIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBzb21ldGhpbmcgcmVhZGlseSBhdmFpbGFibGUgb3IgYSBwb3RlbnRpYWwgcmVzZWFyY2ggcHJvamVjdC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NTMuNzYwNDkxODU1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxOTY1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9saW51eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjg6NTMuODA4ODE5MTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NzM1OTEyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNSEkgRGV2aWNlIFNjZW5hcmlvKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSB3YXMgYWJvdXQgdG8gdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCBmb3IgYHN5cy9saW51eGAsIGJ1dCB0aGF0J3Mgbm90IHJpZ2h0LiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIg4oCTIEkgc2hvdWxkIGJlIHVzaW5nIGByZWFkLXN5ei1zcGVjYCBvciBgc3l6LWdyZXBwZXJgIGZvciB0aG9zZSBzeXprYWxsZXIgc3BlY2lmaWMgc3l6bGFuZyBkZXNjcmlwdGlvbnMuIFRoZSBwcm9ibGVtIGlzLCBuZWl0aGVyIG9mIHRob3NlIHRvb2xzIGFyZSBhY3R1YWxseSBpbiBteSBjdXJyZW50IHRvb2xzZXQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcm9hZGJsb2NrLlxuXG5SaWdodCwgdGhlIHByb21wdCBpdHNlbGYgZmxhZ2dlZCB0aGlzOiBpdCdzIGV4cGxpY2l0bHkgc3RhdGVkIHRoYXQgdGhlIHN0YW5kYXJkIHRvb2wgY2FuJ3QgaGFuZGxlIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zIG9yIGFueXRoaW5nIHdpdGggXCJzeXpfXCIuIEkgbmVlZCB0byBmaW5kIGFuIGFsdGVybmF0aXZlLlxuXG5MZXQncyBzaGlmdCBnZWFycy4gVGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggTUhJIGRldmljZXMuIElmIHN5emthbGxlciBpcyBhYmxlIHRvIGVtdWxhdGUgYSBQQ0kgZGV2aWNlLCB0aGVuLCB0aGVvcmV0aWNhbGx5LCBpdCBjb3VsZCB0cmlnZ2VyIHRoZSBgbWhpX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoYXQgcHJvYmUgZnVuY3Rpb24gaXMgZ29pbmcgdG8gdHJ5IGFuZCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBhY3R1YWwgZGV2aWNlLCBhbmQgdGhhdCdzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5TbywgbGV0J3MgZGlnIGludG8gd2hhdCBgbWhpX3BjaV9wcm9iZWAgYWN0dWFsbHkgKmRvZXMqLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MDEuNzgyNDE0MTQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE1OTIxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9wY2lfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xMzI5PXN0YXRpYyBpbnQgbWhpX3BjaV9nZW5lcmljX2VkbF90cmlnZ2VyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xMzYyLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTM2MzpzdGF0aWMgaW50IG1oaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTEzNjQte1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xNzY0PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtaGlfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTc2Ni1cXHQuaWRfdGFibGVcXHQ9IG1oaV9wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYzoxNzY3OlxcdC5wcm9iZVxcdFxcdD0gbWhpX3BjaV9wcm9iZSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jLTE3NjgtXFx0LnJlbW92ZVxcdFxcdD0gbWhpX3BjaV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjAzLjM5ODM0MTY0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTc5ODMwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZSwgcmVhZHkgZm9yIGEgZmVsbG93IHNwZWNpYWxpc3Q6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIG1oaV9wY2lfcHJvYmUgZm9yIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1oaV9wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBwcm9iZSByb3V0aW5lIGhhcyBhbnkgZnVua3ksIG5vbi1zdGFuZGFyZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBQQ0kgaGFyZHdhcmUgdGhhdCBtaWdodCB0cmlwIHVwIFN5emthbGxlcidzIGdlbmVyaWMgUENJIGVtdWxhdG9yLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJvYWRibG9ja3MgdG8gZWZmZWN0aXZlIGZ1enppbmcuIFdlIGFsbCBrbm93IGhvdyBzZW5zaXRpdmUgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgYml0cyBjYW4gYmUuIElzIGl0IGdvaW5nIHRvIHJlbHkgb24gdW5kb2N1bWVudGVkIHJlZ2lzdGVycywgcHJvcHJpZXRhcnkgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzLCBvciBkZWVwbHkgc3BlY2lmaWMgdGltaW5nIHJlcXVpcmVtZW50cz8gSWYgc28sIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gbW9kZWwgdGhvc2Ugd2l0aGluIHRoZSBlbXVsYXRvciBvciBiZSBmb3JjZWQgdG8gbG9vayBhdCBhbm90aGVyIG1lYW5zIG9mIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzI0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MTEuMzc4MTc0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNjM6XFx0c3RhdGljIGludCBtaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMTM2NDpcXHR7XFxuMTM2NTpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgbWhpX3BjaV9kZXZfaW5mbyAqKSBpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMTM2NjpcXHRcXHRjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICptaGlfY250cmxfY29uZmlnO1xcbjEzNjc6XFx0XFx0c3RydWN0IG1oaV9wY2lfZGV2aWNlICptaGlfcGRldjtcXG4xMzY4OlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsO1xcbjEzNjk6XFx0XFx0dW5zaWduZWQgaW50IGRtYV9kYXRhX3dpZHRoO1xcbjEzNzA6XFx0XFx0aW50IGVycjtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1ISSBQQ0kgZGV2aWNlIGZvdW5kOiAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbmFtZSk7XFxuMTM3MzpcXHRcXG4xMzc0OlxcdFxcdC8qIG1oaV9wZGV2Lm1oaV9jbnRybCBtdXN0IGJlIHplcm8taW5pdGlhbGl6ZWQgKi9cXG4xMzc1OlxcdFxcdG1oaV9wZGV2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqbWhpX3BkZXYpLCBHRlBfS0VSTkVMKTtcXG4xMzc2OlxcdFxcdGlmICghbWhpX3BkZXYpXFxuMTM3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlcmVjb3Zlcnlfd29yaywgbWhpX3BjaV9yZWNvdmVyeV93b3JrKTtcXG4xMzgwOlxcdFxcbjEzODE6XFx0XFx0aWYgKHBkZXYtXFx1MDAzZWlzX3ZpcnRmbiBcXHUwMDI2XFx1MDAyNiBpbmZvLVxcdTAwM2V2Zl9jb25maWcpXFxuMTM4MjpcXHRcXHRcXHRtaGlfY250cmxfY29uZmlnID0gaW5mby1cXHUwMDNldmZfY29uZmlnO1xcbjEzODM6XFx0XFx0ZWxzZVxcbjEzODQ6XFx0XFx0XFx0bWhpX2NudHJsX2NvbmZpZyA9IGluZm8tXFx1MDAzZWNvbmZpZztcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0LyogSW5pdGlhbGl6ZSBoZWFsdGggY2hlY2sgbW9uaXRvciBvbmx5IGZvciBQaHlzaWNhbCBmdW5jdGlvbnMgKi9cXG4xMzg3OlxcdFxcdGlmICghcGRldi1cXHUwMDNlaXNfdmlydGZuKVxcbjEzODg6XFx0XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNm1oaV9wZGV2LVxcdTAwM2VoZWFsdGhfY2hlY2tfdGltZXIsIGhlYWx0aF9jaGVjaywgMCk7XFxuMTM4OTpcXHRcXG4xMzkwOlxcdFxcdG1oaV9jbnRybCA9IFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlbWhpX2NudHJsO1xcbjEzOTE6XFx0XFxuMTM5MjpcXHRcXHRkbWFfZGF0YV93aWR0aCA9IChwZGV2LVxcdTAwM2Vpc192aXJ0Zm4gXFx1MDAyNlxcdTAwMjYgaW5mby1cXHUwMDNldmZfZG1hX2RhdGFfd2lkdGgpID9cXG4xMzkzOlxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNldmZfZG1hX2RhdGFfd2lkdGggOiBpbmZvLVxcdTAwM2VkbWFfZGF0YV93aWR0aDtcXG4xMzk0OlxcdFxcbjEzOTU6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VjbnRybF9kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjEzOTY6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4xMzk3OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlaW92YV9zdG9wID0gKGRtYV9hZGRyX3QpRE1BX0JJVF9NQVNLKGRtYV9kYXRhX3dpZHRoKTtcXG4xMzk4OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZndfaW1hZ2UgPSBpbmZvLVxcdTAwM2VmdztcXG4xMzk5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWRsX2ltYWdlID0gaW5mby1cXHUwMDNlZWRsO1xcbjE0MDA6XFx0XFxuMTQwMTpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXJlYWRfcmVnID0gbWhpX3BjaV9yZWFkX3JlZztcXG4xNDAyOlxcdFxcdG1oaV9jbnRybC1cXHUwMDNld3JpdGVfcmVnID0gbWhpX3BjaV93cml0ZV9yZWc7XFxuMTQwMzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXN0YXR1c19jYiA9IG1oaV9wY2lfc3RhdHVzX2NiO1xcbjE0MDQ6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VydW50aW1lX2dldCA9IG1oaV9wY2lfcnVudGltZV9nZXQ7XFxuMTQwNTpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXJ1bnRpbWVfcHV0ID0gbWhpX3BjaV9ydW50aW1lX3B1dDtcXG4xNDA2OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlbXJ1ID0gaW5mby1cXHUwMDNlbXJ1X2RlZmF1bHQ7XFxuMTQwNzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZW5hbWUgPSBpbmZvLVxcdTAwM2VuYW1lO1xcbjE0MDg6XFx0XFxuMTQwOTpcXHRcXHRpZiAoIXBkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4xNDEwOlxcdFxcdFxcdG1oaV9wZGV2LVxcdTAwM2VyZXNldF9vbl9yZW1vdmUgPSBpbmZvLVxcdTAwM2VyZXNldF9vbl9yZW1vdmU7XFxuMTQxMTpcXHRcXG4xNDEyOlxcdFxcdGlmIChpbmZvLVxcdTAwM2VlZGxfdHJpZ2dlcilcXG4xNDEzOlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWRsX3RyaWdnZXIgPSBtaGlfcGNpX2dlbmVyaWNfZWRsX3RyaWdnZXI7XFxuMTQxNDpcXHRcXG4xNDE1OlxcdFxcdGlmIChpbmZvLVxcdTAwM2VzaWRlYmFuZF93YWtlKSB7XFxuMTQxNjpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfZ2V0ID0gbWhpX3BjaV93YWtlX2dldF9ub3A7XFxuMTQxNzpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfcHV0ID0gbWhpX3BjaV93YWtlX3B1dF9ub3A7XFxuMTQxODpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlID0gbWhpX3BjaV93YWtlX3RvZ2dsZV9ub3A7XFxuMTQxOTpcXHRcXHR9XFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdGVyciA9IG1oaV9wY2lfY2xhaW0obWhpX2NudHJsLCBpbmZvLVxcdTAwM2ViYXJfbnVtLCBETUFfQklUX01BU0soZG1hX2RhdGFfd2lkdGgpKTtcXG4xNDIyOlxcdFxcdGlmIChlcnIpXFxuMTQyMzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHRcXHRlcnIgPSBtaGlfcGNpX2dldF9pcnFzKG1oaV9jbnRybCwgbWhpX2NudHJsX2NvbmZpZyk7XFxuMTQyNjpcXHRcXHRpZiAoZXJyKVxcbjE0Mjc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIG1oaV9wZGV2KTtcXG4xNDMwOlxcdFxcbjE0MzE6XFx0XFx0LyogSGF2ZSBzdG9yZWQgcGNpIGNvbmZzcGFjZSBhdCBoYW5kIGZvciByZXN0b3JlIGluIHN1ZGRlbiBQQ0kgZXJyb3IuXFxuMTQzMjpcXHRcXHQgKiBjYWNoZSB0aGUgc3RhdGUgbG9jYWxseSBhbmQgZGlzY2FyZCB0aGUgUENJIGNvcmUgb25lLlxcbjE0MzM6XFx0XFx0ICovXFxuMTQzNDpcXHRcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG4xNDM1OlxcdFxcdG1oaV9wZGV2LVxcdTAwM2VwY2lfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuMTQzNjpcXHRcXHRwY2lfbG9hZF9zYXZlZF9zdGF0ZShwZGV2LCBOVUxMKTtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0ZXJyID0gbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIobWhpX2NudHJsLCBtaGlfY250cmxfY29uZmlnKTtcXG4xNDM5OlxcdFxcdGlmIChlcnIpXFxuMTQ0MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0NDE6XFx0XFxuMTQ0MjpcXHRcXHQvKiBNSEkgYnVzIGRvZXMgbm90IHBvd2VyIHVwIHRoZSBjb250cm9sbGVyIGJ5IGRlZmF1bHQgKi9cXG4xNDQzOlxcdFxcdGVyciA9IG1oaV9wcmVwYXJlX2Zvcl9wb3dlcl91cChtaGlfY250cmwpO1xcbjE0NDQ6XFx0XFx0aWYgKGVycikge1xcbjE0NDU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHByZXBhcmUgTUhJIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbjE0NDY6XFx0XFx0XFx0Z290byBlcnJfdW5yZWdpc3RlcjtcXG4xNDQ3OlxcdFxcdH1cXG4xNDQ4OlxcdFxcbjE0NDk6XFx0XFx0ZXJyID0gbWhpX2FzeW5jX3Bvd2VyX3VwKG1oaV9jbnRybCk7XFxuMTQ1MDpcXHRcXHRpZiAoZXJyKSB7XFxuMTQ1MTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcG93ZXIgdXAgTUhJIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbjE0NTI6XFx0XFx0XFx0Z290byBlcnJfdW5wcmVwYXJlO1xcbjE0NTM6XFx0XFx0fVxcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHRzZXRfYml0KE1ISV9QQ0lfREVWX1NUQVJURUQsIFxcdTAwMjZtaGlfcGRldi1cXHUwMDNlc3RhdHVzKTtcXG4xNDU2OlxcdFxcbjE0NTc6XFx0XFx0Lyogc3RhcnQgaGVhbHRoIGNoZWNrICovXFxuMTQ1ODpcXHRcXHRpZiAoIXBkZXYtXFx1MDAzZWlzX3ZpcnRmbilcXG4xNDU5OlxcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2bWhpX3BkZXYtXFx1MDAzZWhlYWx0aF9jaGVja190aW1lciwgamlmZmllcyArIEhFQUxUSF9DSEVDS19QRVJJT0QpO1xcbjE0NjA6XFx0XFxuMTQ2MTpcXHRcXHQvKiBBbGxvdyBydW50aW1lIHN1c3BlbmQgb25seSBpZiBib3RoIFBNRSBmcm9tIEQzSG90IGFuZCBNMyBhcmUgc3VwcG9ydGVkICovXFxuMTQ2MjpcXHRcXHRpZiAocGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCkgXFx1MDAyNlxcdTAwMjYgIShpbmZvLVxcdTAwM2Vub19tMykpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MTEuMzc4NTE5MDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNzcwNTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIHRoZSBgbWhpX3BjaV9wcm9iZWAgUm91dGluZSoqXG5cbk9rYXksIHNvIGBtaGlfcGNpX3Byb2JlYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGxvb2tzIGxpa2UgaXQga2lja3Mgb2ZmIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9uczogYG1oaV9wY2lfY2xhaW1gLCBgbWhpX3BjaV9nZXRfaXJxc2AsIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAsIGBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXBgLCBhbmQgdGhlbiBjcnVjaWFsbHksIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lOyB0aGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkIGFuZCBpdCBzdGFydHMgYSB3b3JrZXIgdG8gYWN0dWFsbHkgKnRhbGsqIHRvIHRoZSBkZXZpY2UuXG5cbk5vdywgaGVyZSdzIHdoZXJlIG15IGV4cGVydGlzZSBraWNrcyBpbi4gR2l2ZW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyIGVtdWxhdGluZyBhIFBDSSBkZXZpY2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIHByb2JsZW0uIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSAqcmVhbCogTUhJLWNhcGFibGUgZGV2aWNlLCBidXQgcmF0aGVyIGEgc2ltdWxhdGVkIG9uZSwgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSEkgcHJvdG9jb2wgKHRoYXQgaXMsIHRoZSBCSEksIEVFLCBldGMuIGxheWVycykgd29uJ3QgYmUgZnVsbHkgcmVhbGl6ZWQuIFRoaXMgbWVhbnMgYG1oaV9hc3luY19wb3dlcl91cGAgaXMgYWxtb3N0IGd1YXJhbnRlZWQgdG8gZWl0aGVyIGZhaWwsIG9yIHdvcnNlLCB0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHJlc3BvbnNlcyBpdCdzIG5ldmVyIGdvaW5nIHRvIGdldC4gQ29uc2VxdWVudGx5LCB0aGUgTUhJIGRldmljZXMgKHRoZSBjaGFubmVscykgd29uJ3QgYmUgY3JlYXRlZC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGFoZWFkIG9mIG15c2VsZi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIERpZG4ndCBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGhhbmRsZSB0aGUgY3JlYXRpb24gb2YgdGhlIE1ISSBkZXZpY2VzIHRoZW1zZWx2ZXM/IElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBhIGZhaWx1cmUgaW4gYG1oaV9hc3luY19wb3dlcl91cGAgYmVjb21lcyBldmVuIG1vcmUgY3JpdGljYWwgYmVjYXVzZSwgaWYgaXQncyByZXNwb25zaWJsZSBmb3IgdGhlIHJlc291cmNlcywgYSBmYWlsdXJlIHRoZXJlIGNvdWxkIHByZXZlbnQgZGV2aWNlIGNyZWF0aW9uIGF0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBMZXQncyB0YWtlIGEgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToxNy45OTYyMjgxNTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MTksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTE5OlxcdGludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4gOTIwOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXFxuIDkyMTpcXHR7XFxuIDkyMjpcXHRcXHRzdHJ1Y3QgbWhpX2V2ZW50ICptaGlfZXZlbnQ7XFxuIDkyMzpcXHRcXHRzdHJ1Y3QgbWhpX2NoYW4gKm1oaV9jaGFuO1xcbiA5MjQ6XFx0XFx0c3RydWN0IG1oaV9jbWQgKm1oaV9jbWQ7XFxuIDkyNTpcXHRcXHRzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2RldjtcXG4gOTI2OlxcdFxcdGludCByZXQsIGk7XFxuIDkyNzpcXHRcXG4gOTI4OlxcdFxcdGlmICghbWhpX2NudHJsIHx8ICFtaGlfY250cmwtXFx1MDAzZWNudHJsX2RldiB8fCAhbWhpX2NudHJsLVxcdTAwM2VyZWdzIHx8XFxuIDkyOTpcXHRcXHQgICAgIW1oaV9jbnRybC1cXHUwMDNlcnVudGltZV9nZXQgfHwgIW1oaV9jbnRybC1cXHUwMDNlcnVudGltZV9wdXQgfHxcXG4gOTMwOlxcdFxcdCAgICAhbWhpX2NudHJsLVxcdTAwM2VzdGF0dXNfY2IgfHwgIW1oaV9jbnRybC1cXHUwMDNlcmVhZF9yZWcgfHxcXG4gOTMxOlxcdFxcdCAgICAhbWhpX2NudHJsLVxcdTAwM2V3cml0ZV9yZWcgfHwgIW1oaV9jbnRybC1cXHUwMDNlbnJfaXJxcyB8fFxcbiA5MzI6XFx0XFx0ICAgICFtaGlfY250cmwtXFx1MDAzZWlycSB8fCAhbWhpX2NudHJsLVxcdTAwM2VyZWdfbGVuKVxcbiA5MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdHJldCA9IHBhcnNlX2NvbmZpZyhtaGlfY250cmwsIGNvbmZpZyk7XFxuIDkzNjpcXHRcXHRpZiAocmV0KVxcbiA5Mzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDkzODpcXHRcXG4gOTM5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlbWhpX2NtZCA9IGt6YWxsb2Nfb2JqcygqbWhpX2NudHJsLVxcdTAwM2VtaGlfY21kLCBOUl9PRl9DTURfUklOR1MpO1xcbiA5NDA6XFx0XFx0aWYgKCFtaGlfY250cmwtXFx1MDAzZW1oaV9jbWQpIHtcXG4gOTQxOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDk0MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2V2ZW50O1xcbiA5NDM6XFx0XFx0fVxcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2V0cmFuc2l0aW9uX2xpc3QpO1xcbiA5NDY6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9tdXRleCk7XFxuIDk0NzpcXHRcXHRyd2xvY2tfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gOTQ4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXRyYW5zaXRpb25fbG9jayk7XFxuIDk0OTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2V3bG9jayk7XFxuIDk1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlc3Rfd29ya2VyLCBtaGlfcG1fc3Rfd29ya2VyKTtcXG4gOTUxOlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlc3RhdGVfZXZlbnQpO1xcbiA5NTI6XFx0XFxuIDk1MzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZWhpcHJpb193cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJtaGlfaGlwcmlvX3dxXFxcIiwgV1FfSElHSFBSSSk7XFxuIDk1NDpcXHRcXHRpZiAoIW1oaV9jbnRybC1cXHUwMDNlaGlwcmlvX3dxKSB7XFxuIDk1NTpcXHRcXHRcXHRkZXZfZXJyKG1oaV9jbnRybC1cXHUwMDNlY250cmxfZGV2LCBcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuIDk1NjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiA5NTc6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jbWQ7XFxuIDk1ODpcXHRcXHR9XFxuIDk1OTpcXHRcXG4gOTYwOlxcdFxcdG1oaV9jbWQgPSBtaGlfY250cmwtXFx1MDAzZW1oaV9jbWQ7XFxuIDk2MTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfT0ZfQ01EX1JJTkdTOyBpKyssIG1oaV9jbWQrKylcXG4gOTYyOlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtaGlfY21kLVxcdTAwM2Vsb2NrKTtcXG4gOTYzOlxcdFxcbiA5NjQ6XFx0XFx0bWhpX2V2ZW50ID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnQ7XFxuIDk2NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWhpX2NudHJsLVxcdTAwM2V0b3RhbF9ldl9yaW5nczsgaSsrLCBtaGlfZXZlbnQrKykge1xcbiA5NjY6XFx0XFx0XFx0LyogU2tpcCBmb3Igb2ZmbG9hZCBldmVudHMgKi9cXG4gOTY3OlxcdFxcdFxcdGlmIChtaGlfZXZlbnQtXFx1MDAzZW9mZmxvYWRfZXYpXFxuIDk2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0XFx0bWhpX2V2ZW50LVxcdTAwM2VtaGlfY250cmwgPSBtaGlfY250cmw7XFxuIDk3MTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2Vsb2NrKTtcXG4gOTcyOlxcdFxcdFxcdGlmIChtaGlfZXZlbnQtXFx1MDAzZWRhdGFfdHlwZSA9PSBNSElfRVJfQ1RSTClcXG4gOTczOlxcdFxcdFxcdFxcdHRhc2tsZXRfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2V0YXNrLCBtaGlfY3RybF9ldl90YXNrLFxcbiA5NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAodWxvbmcpbWhpX2V2ZW50KTtcXG4gOTc1OlxcdFxcdFxcdGVsc2VcXG4gOTc2OlxcdFxcdFxcdFxcdHRhc2tsZXRfaW5pdChcXHUwMDI2bWhpX2V2ZW50LVxcdTAwM2V0YXNrLCBtaGlfZXZfdGFzayxcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdCAgICAgKHVsb25nKW1oaV9ldmVudCk7XFxuIDk3ODpcXHRcXHR9XFxuIDk3OTpcXHRcXG4gOTgwOlxcdFxcdG1oaV9jaGFuID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfY2hhbjtcXG4gOTgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaGlfY250cmwtXFx1MDAzZW1heF9jaGFuOyBpKyssIG1oaV9jaGFuKyspIHtcXG4gOTgyOlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNm1oaV9jaGFuLVxcdTAwM2VtdXRleCk7XFxuIDk4MzpcXHRcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNm1oaV9jaGFuLVxcdTAwM2Vjb21wbGV0aW9uKTtcXG4gOTg0OlxcdFxcdFxcdHJ3bG9ja19pbml0KFxcdTAwMjZtaGlfY2hhbi1cXHUwMDNlbG9jayk7XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdFxcdC8qIHVzZWQgaW4gc2V0dGluZyBiZWkgZmllbGQgb2YgVFJFICovXFxuIDk4NzpcXHRcXHRcXHRtaGlfZXZlbnQgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnRbbWhpX2NoYW4tXFx1MDAzZWVyX2luZGV4XTtcXG4gOTg4OlxcdFxcdFxcdG1oaV9jaGFuLVxcdTAwM2VpbnRtb2QgPSBtaGlfZXZlbnQtXFx1MDAzZWludG1vZDtcXG4gOTg5OlxcdFxcdH1cXG4gOTkwOlxcdFxcbiA5OTE6XFx0XFx0aWYgKG1oaV9jbnRybC1cXHUwMDNlYm91bmNlX2J1Zikge1xcbiA5OTI6XFx0XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VtYXBfc2luZ2xlID0gbWhpX21hcF9zaW5nbGVfdXNlX2JiO1xcbiA5OTM6XFx0XFx0XFx0bWhpX2NudHJsLVxcdTAwM2V1bm1hcF9zaW5nbGUgPSBtaGlfdW5tYXBfc2luZ2xlX3VzZV9iYjtcXG4gOTk0OlxcdFxcdH0gZWxzZSB7XFxuIDk5NTpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZW1hcF9zaW5nbGUgPSBtaGlfbWFwX3NpbmdsZV9ub19iYjtcXG4gOTk2OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNldW5tYXBfc2luZ2xlID0gbWhpX3VubWFwX3NpbmdsZV9ub19iYjtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VpbmRleCA9IGlkYV9hbGxvYyhcXHUwMDI2bWhpX2NvbnRyb2xsZXJfaWRhLCBHRlBfS0VSTkVMKTtcXG4xMDAwOlxcdFxcdGlmIChtaGlfY250cmwtXFx1MDAzZWluZGV4IFxcdTAwM2MgMCkge1xcbjEwMDE6XFx0XFx0XFx0cmV0ID0gbWhpX2NudHJsLVxcdTAwM2VpbmRleDtcXG4xMDAyOlxcdFxcdFxcdGdvdG8gZXJyX2Rlc3Ryb3lfd3E7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdHJldCA9IG1oaV9pbml0X2lycV9zZXR1cChtaGlfY250cmwpO1xcbjEwMDY6XFx0XFx0aWYgKHJldClcXG4xMDA3OlxcdFxcdFxcdGdvdG8gZXJyX2lkYV9mcmVlO1xcbjEwMDg6XFx0XFxuMTAwOTpcXHRcXHQvKiBSZWdpc3RlciBjb250cm9sbGVyIHdpdGggTUhJIGJ1cyAqL1xcbjEwMTA6XFx0XFx0bWhpX2RldiA9IG1oaV9hbGxvY19kZXZpY2UobWhpX2NudHJsKTtcXG4xMDExOlxcdFxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4xMDEyOlxcdFxcdFxcdGRldl9lcnIobWhpX2NudHJsLVxcdTAwM2VjbnRybF9kZXYsIFxcXCJGYWlsZWQgdG8gYWxsb2NhdGUgTUhJIGRldmljZVxcXFxuXFxcIik7XFxuMTAxMzpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKG1oaV9kZXYpO1xcbjEwMTQ6XFx0XFx0XFx0Z290byBlcnJvcl9zZXR1cF9pcnE7XFxuMTAxNTpcXHRcXHR9XFxuMTAxNjpcXHRcXG4xMDE3OlxcdFxcdG1oaV9kZXYtXFx1MDAzZWRldl90eXBlID0gTUhJX0RFVklDRV9DT05UUk9MTEVSO1xcbjEwMTg6XFx0XFx0bWhpX2Rldi1cXHUwMDNlbWhpX2NudHJsID0gbWhpX2NudHJsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToxNy45OTYzNTIxOTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5Njc2NzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludGVybmFsIFdvcmtmbG93IGZvciBNSEkgRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBNSEkgZGV2aWNlIHNldHVwLiBUaGUgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gb2YgYW4gTUhJIGRldmljZSwgc3BlY2lmaWNhbGx5IGZvciB0aGUgY29udHJvbGxlciBpdHNlbGYg4oCTIHRoYXQncyB0aGUgYE1ISV9ERVZJQ0VfQ09OVFJPTExFUmAgcGFydC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkga25vdyB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFubmVsIGRldmljZSBjcmVhdGlvbiwgdGhlIGBNSElfREVWSUNFX1hGRVJgIGRldmljZXMsIGlzbid0IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSByZXNwb25zaWJsZSBmdW5jdGlvbi4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBzdGFjay4gTGV0IG1lIGdldCBteSBiZWFyaW5ncyBhbmQgc2VlIHdoZXJlIGV4YWN0bHkgYG1oaV9jcmVhdGVfZGV2aWNlc2AgaXMgYmVpbmcgaW52b2tlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCBkaXNjb3ZlciB3aGVyZSB0aGVzZSB0cmFuc2ZlciBkZXZpY2VzIGFyZSBjb25maWd1cmVkLiBJIHdpbGwgdHJhY2sgdGhlIGludm9jYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTM5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOToyMi43OTMxMjE1MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3NjQ5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWhpX2NyZWF0ZV9kZXZpY2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9MzIxPWludCBtaGlfZGVzdHJveV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjMyMjp2b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMjMtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM9MzYwPUVYUE9SVF9TWU1CT0xfR1BMKG1oaV9ub3RpZnkpO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2Mi0vKiBCaW5kIE1ISSBjaGFubmVscyB0byBNSEkgZGV2aWNlcyAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYzozNjM6dm9pZCBtaGlfY3JlYXRlX2RldmljZXMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM5ND1zdGF0aWMgaW50IG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDU5LVxcdCAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDYwOlxcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNDYxLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMxLVxcdFxcdFxcdCAqL1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODMyOlxcdFxcdFxcdG1oaV9jcmVhdGVfZGV2aWNlcyhtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODMzLVxcdFxcdFxcdGlmIChtaGlfY250cmwtXFx1MDAzZWZiY19kb3dubG9hZClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQ0LVxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4NDU6XFx0XFx0XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDYtXFx0XFx0XFx0bWhpX3VldmVudF9ub3RpZnkobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZWVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6Mjk6MjQuNDE4ODk2MTM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NTIzNzM1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE1ISSBEZXZpY2UgQ3JlYXRpb24gUHJvYmxlbSoqXG5cbk9rYXksIHNvIGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyB0aGUgZ2F0ZXdheSB0byBldmVyeXRoaW5nIGVsc2UgSSBuZWVkLiBJdCdzIHRyaWdnZXJlZCBieSB0aGUgYG1oaV9wbV9zdF93b3JrZXJgIG9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGZ1bmN0aW9ucywgd2hpY2gsIGluIHR1cm4sIGFyZSBkcml2ZW4gYnkgc3RhdGUgY2hhbmdlcyB3aXRoaW4gdGhlIE1ISSBjb250cm9sbGVyIGl0c2VsZi4gVGhvc2Ugc3RhdGUgY2hhbmdlcyBhcmUgbm9ybWFsbHkgdGhlIHJlc3VsdCBvZiBlaXRoZXIgaGFyZHdhcmUgaW50ZXJydXB0cyBvciBzcGVjaWZpYyByZWdpc3RlciByZWFkcywgdGhpbmdzIGxpa2UgQkhJIG9yIEVFIHJlZ2lzdGVycy5cblxuVGhlIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBhIGdlbmVyaWMgUENJIGRldmljZSwgaXQgcHJvYmFibHkgKndvbid0KiBjb3JyZWN0bHkgc2ltdWxhdGUgdGhlIHNwZWNpZmljIGludGVycnVwdHMgb3IgcmVnaXN0ZXIgdmFsdWVzIHRoYXQgdGhlIE1ISSBjb250cm9sbGVyIGV4cGVjdHMgdG8gc2VlIGZvciB0aGVzZSBzdGF0ZSB0cmFuc2l0aW9ucy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBtaGlfY3JlYXRlX2RldmljZXNgIGlzIGxpa2VseSAqbmV2ZXIqIGdvaW5nIHRvIGdldCBjYWxsZWQuIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGBJUF9DVFJMYCBjaGFubmVsIGRldmljZSwgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHRoaXMgd2hvbGUgc2V0dXAsIGp1c3Qgd29uJ3QgYmUgY3JlYXRlZC4gVGhhdCdzIGEgaHVnZSBibG9ja2VyLlxuXG5CdXQgd2FpdC4gVGhpcyBjYW4ndCBiZSB0aGUgKm9ubHkqIHdheSwgcmlnaHQ/IElzIHRoZXJlIGFueSB3YXkgdG8gY3JlYXRlIE1ISSBkZXZpY2VzIGluZGVwZW5kZW50IG9mIHRoaXMgc3BlY2lmaWMgc3RhdGUgdHJhbnNpdGlvbj8gQ2FuIHN5emthbGxlciBzb21laG93ICpkaXJlY3RseSogaW5qZWN0IGRldmljZXMgb250byB0aGUgTUhJIGJ1cz8gTGV0IG1lIHNlZS4uLiBJJ2xsIGNoZWNrIGlmIHN5emthbGxlciBldmVuICpoYXMqIGFuIE1ISSBidXMgZW11bGF0b3IuIEl0IGhhbmRsZXMgUENJLCBVU0IsIFZNQnVzLCBhbmQgb3RoZXJzLCBidXQgSSBkb24ndCByZWNhbGwgc2VlaW5nIGFueXRoaW5nIHNwZWNpZmljIGZvciBNSEkuIEhtbSwgbm8sIGl0IGRvZXNuJ3QgbG9vayBsaWtlIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgTUhJIGJ1cyBpbiBzeXprYWxsZXIuXG5cbkhvbGQgb24uIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jYCBhbmQgYGRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmNgLiBBaCwgYHd3YW5fY29yZS5jYCBpcyB0aGUgV1dBTiBzdWJzeXN0ZW0ncyBjb3JlLiBOb3csIHRoYXQncyBpbnRlcmVzdGluZy4gRG9lcyBzeXprYWxsZXIgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBNSEkgcGF0aCB0byBnZXQgdG8gYHd3YW5fY29yZS5jYD8gQ2FuIGl0IHJlYWNoIGB3d2FuX2NvcmUuY2Agc29tZSBvdGhlciB3YXk/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBtYW55IG90aGVyIFdXQU4gZHJpdmVycyB0aGVyZSBhcmUsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGVudHJ5IHBvaW50cy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjgwMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOTozNC4wNzEyNzIxNzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwibWhpX3d3YW5fY3RybC5jXCIsXG4gICAgXCJtaGlfd3dhbl9tYmltLmNcIixcbiAgICBcInFjb21fYmFtX2RtdXguY1wiLFxuICAgIFwicnBtc2dfd3dhbl9jdHJsLmNcIixcbiAgICBcInd3YW5fY29yZS5jXCIsXG4gICAgXCJ3d2FuX2h3c2ltLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiaW9zbVwiLFxuICAgIFwidDd4eFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjM0LjA3MTMzNTIzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM5ODY4NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXV0FOIEhhcmR3YXJlIFNpbXVsYXRpb246IFBvcnQgQ3JlYXRpb24gQW5hbHlzaXMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGB3d2FuX2h3c2ltLmNgLiBBaCwgeWVzLCBhIHNvZnR3YXJlIHNpbXVsYXRvciBmb3IgV1dBTiBkZXZpY2VzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIHRvb2xzLCBpczogKmRvZXMgaXQgY29ycmVjdGx5IG1vZGVsIHRoZSBlc3NlbnRpYWwgYXNwZWN0cyBvZiBXV0FOIHBvcnQgY3JlYXRpb24/KiBXZSBuZWVkIHRvIHNjcnV0aW5pemUgdGhpcyBjb2RlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzaW11bGF0ZWQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIGhvdyBpdCdzIHRyYW5zbGF0ZWQgaW50byB0aGUga2VybmVsJ3MgcG9ydCBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuIEFyZSB3ZSBhY2N1cmF0ZWx5IHJlcHJlc2VudGluZyB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaG9zdCBzeXN0ZW0gZnJvbSBhIHBvcnQgcGVyc3BlY3RpdmU/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzaW11bGF0ZWQgZGV2aWNlIGlzIGluc3RhbnRpYXRlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhIHZhbGlkIFdXQU4gcG9ydC4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhpcyBzaW11bGF0aW9uIGFjY3VyYXRlbHkgcmVwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBzZXR1cCBiZWhhdmlvcnMgb2YgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHNpbXVsYXRlZCBkZXZpY2UncyByZXBvcnRlZCBjYXBhYmlsaXRpZXMgYW5kIGhvdyB0aGV5IGdldCByZXByZXNlbnRlZCBpbiB0aGUgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCdzIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Njg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjQwLjcxMTIwNjM2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5NDU5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd3YW5fcG9ydF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM9MTMyPXN0YXRpYyBpbnQgd3dhbl9od3NpbV9hdF9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0xOTQtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6MTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmMtMTk2LVxcdC5zdGFydCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdGFydCxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jPTI4OT1zdGF0aWMgaW50IHd3YW5faHdzaW1fbm1lYV9lbXVsX3R4KHN0cnVjdCB3d2FuX3BvcnQgKndwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW4pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTUtXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2h3c2ltLmM6Mjk2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX2h3c2ltX25tZWFfZW11bF9wb3J0X29wcyA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0yOTctXFx0LnN0YXJ0ID0gd3dhbl9od3NpbV9ubWVhX2VtdWxfc3RhcnQsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYz0zMDM9c3RhdGljIHN0cnVjdCB3d2FuX2h3c2ltX3BvcnQgKnd3YW5faHdzaW1fcG9ydF9uZXcoc3RydWN0IHd3YW5faHdzaW1fZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uYy0zMDUte1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jOjMwNjpcXHRjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyAqb3BzO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jLTMwNy1cXHRzdHJ1Y3Qgd3dhbl9od3NpbV9wb3J0ICpwb3J0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjoyOTo0MS4wNTA2NzA3NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTc5MzY1NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBXV0FOIFBvcnQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgd3dhbl9jb3JlLmNgIGFuZCBpdCdzIG1vZGlmeWluZyB0aGUgYHd3YW5fcG9ydF9vcF9zdGFydGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6IGlmIGBwb3J0LVx1MDAzZXN0YXJ0X2NvdW50YCBpcyAxIGFuZCB0aGUgcG9ydCB0eXBlIGlzIEFULCBhbmQgaWYgYHBvcnQtXHUwMDNlb3BzLVx1MDAzZWR0cl9ydHNgIGlzIG5vdCBudWxsLCB0aGVuIERUUiBhbmQgUlRTIGFyZSByYWlzZWQuIFRoaXMgbWltaWNzIFRUWSBzZW1hbnRpY3MsIHdoaWNoIGlzIGdvb2QuIFdlIHdhbnQgbW9kZW0gcG9ydHMgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCBhY3R1YWxseSAqc2V0Kj8gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGUgY29kZSBpcyByZWFjaGFibGUgaWYgaXQgaXMgc2V0LiBUaGUgd2hvbGUgcG9pbnQgb2YgYHd3YW5faHdzaW0uY2AgaXMgdG8gY3JlYXRlIFdXQU4gcG9ydHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJlbGF0ZSB0byB0aG9zZS4gU28gSSBoYXZlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB3d2FuX2h3c2ltX2F0X2VtdWxfcG9ydF9vcHNgLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgYGR0cl9ydHNgIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGZvciB0aGVzZSBlbXVsYXRlZCBwb3J0cy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgd3dhbl9od3NpbS5jYCBwcm92aWRlcyBhIHN1aXRhYmxlIGltcGxlbWVudGF0aW9uIGZvciBgZHRyX3J0c2AuIElmIG5vdCwgd2UgaGF2ZSBhIHByb2JsZW0uIElmIHNvLCB0aGVuIGl0IGFsbCBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjUwLjYzMDAzODk4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93d2FuL3d3YW5faHdzaW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTU6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB3d2FuX3BvcnRfb3BzIHd3YW5faHdzaW1fYXRfZW11bF9wb3J0X29wcyA9IHtcXG4gMTk2OlxcdFxcdC5zdGFydCA9IHd3YW5faHdzaW1fYXRfZW11bF9zdGFydCxcXG4gMTk3OlxcdFxcdC5zdG9wID0gd3dhbl9od3NpbV9hdF9lbXVsX3N0b3AsXFxuIDE5ODpcXHRcXHQudHggPSB3d2FuX2h3c2ltX2F0X2VtdWxfdHgsXFxuIDE5OTpcXHR9O1xcbiAyMDA6XFx0XFxuIDIwMTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfR05TUylcXG4gMjAyOlxcdCNkZWZpbmUgTk1FQV9NQVhfTEVOXFx0XFx0ODJcXHQvKiBNYXggc2VudGVuY2UgbGVuZ3RoICovXFxuIDIwMzpcXHQjZGVmaW5lIE5NRUFfVFJBSUxfTEVOXFx0XFx0NVxcdC8qICcqJyArIENoZWNrc3VtICsgXFx1MDAzY0NSXFx1MDAzZVxcdTAwM2NMRlxcdTAwM2UgKi9cXG4gMjA0OlxcdCNkZWZpbmUgTk1FQV9NQVhfREFUQV9MRU5cXHQoTk1FQV9NQVhfTEVOIC0gTk1FQV9UUkFJTF9MRU4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjUwLjYzMDEyMTMwM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjMwNzU1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgd3dhbl9od3NpbS5jIGFuZCB3d2FuX2NvcmUuYyBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvZGUgaW4gYHd3YW5fY29yZS5jYCBhbmQgcmVhbGl6aW5nIGl0J3MgY29uZGl0aW9uYWxseSBleGVjdXRlZC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYCBmdW5jdGlvbiBwb2ludGVyIGJlaW5nIHNldC4gVGhlIGNvcmUgaXNzdWUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBgd3dhbl9od3NpbS5jYCAqZG9lc24ndCogYWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBtZWFucyB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgd29uJ3QgYmUgdHJpZ2dlcmVkIGluIGEgc2ltdWxhdGVkIGhhcmR3YXJlIGVudmlyb25tZW50LlxuXG5NeSBuZXh0IHRob3VnaHQgaW1tZWRpYXRlbHkgaXM6IHdoZXJlICppcyogYGR0cl9ydHNgIGJlaW5nIHNldD8gRGlnZ2luZyB0aHJvdWdoIHRoZSBwYXRjaCwgSSBzZWUgaXQncyBiZWluZyBhZGRlZCBpbiBgbWhpX3d3YW5fY3RybC5jYC4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGl0IHdpdGhpbiB0aGUgYHd3YW5fcG9wc2Agc3RydWN0LCBzcGVjaWZpY2FsbHkgbGlrZSB0aGlzOlxuXG5gYGBjXG5AQCAtMTYzLDYgKzI0MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XG4gXHQuc3RhcnQgPSBtaGlfd3dhbl9jdHJsX3N0YXJ0LFxuIFx0LnN0b3AgPSBtaGlfd3dhbl9jdHJsX3N0b3AsXG4gXHQudHggPSBtaGlfd3dhbl9jdHJsX3R4LFxuK1x0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXG4gfTtcbiBgYGBcblxuT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IEknbSBub3Qgc3RvcHBpbmcgdGhlcmUuIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlICpvdGhlciogZHJpdmVycyBzZXR0aW5nIHRoaXMgYGR0cl9ydHNgIHBvaW50ZXI/IEkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGZvciB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIG5ldyBjb2RlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQgYWNyb3NzIHRoZSBib2FyZCBhbmQgdG8gc2VlIHdoYXQgcG90ZW50aWFsIGltcGFjdHMgaXQgaGFzIG9uIHRoZSBvdGhlciBkcml2ZXJzIGFuZCBkZXZpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjU4LjI2MDg4MDYyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTY1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5kdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MjQwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3dhbl9wb3J0X29wcyB3d2FuX3BvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYy0yNDMtXFx0LnR4ID0gbWhpX3d3YW5fY3RybF90eCxcXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoyNDQ6XFx0LmR0cl9ydHMgPSBtaGlfd3dhbl9jdHJsX2R0cl9ydHMsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQ1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjI5OjU4LjMwOTIwNDkzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTY4Nzg2MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIFdXQU4gQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcuIEknbSBmb2N1c2luZyBvbiB0aGUgYGR0cl9ydHNgIHNldHRpbmcsIHdoaWNoIHNlZW1zIHRvIG9yaWdpbmF0ZSBzb2xlbHkgZnJvbSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCBpbXBsaWVzIHRoZSBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGlzIG9ubHkgZXZlciB0cmlnZ2VyZWQgd2hlbiBhIFdXQU4gcG9ydCBpcyBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBBbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMsIG9mIGNvdXJzZSwgYW4gTUhJIGRyaXZlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogQ2FuIHN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgc2V0dXAsIGFjdHVhbGx5IGNyZWF0ZSBhbiBNSEkgZGV2aWNlPyBNeSBlYXJsaWVyIGFuYWx5c2lzIHN1Z2dlc3RzIE1ISSBkZXZpY2VzIGFyZSBjcmVhdGVkIGJ5IHRoZSBNSEkgaG9zdCBjb250cm9sbGVyIG9ubHkgd2hlbiBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGlzIHN1Y2Nlc3NmdWwsIGFzIHNlZW4gaW4gdGhlIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIHByb2Nlc3MuIFRoZSBwcm9ibGVtPyBTeXprYWxsZXIncyBQQ0kgZW11bGF0b3IsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lc24ndCBhY3R1YWxseSBlbXVsYXRlIHRoZSBNSEkgaGFyZHdhcmUuIENvbnNlcXVlbnRseSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUuIFRoaXMgbWVhbnMgaXQgKndvbid0KiBiZSBhYmxlIHRvIGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuXG5cblRoZXJlZm9yZSwgYG1oaV93d2FuX2N0cmxfcHJvYmVgIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLCBhbmQgbm8gV1dBTiBwb3J0cyB3aXRoIGBkdHJfcnRzYCB3aWxsIGJlIGNyZWF0ZWQuIFRoYXQgbWVhbnMgdGhlIG5ldyBjb2RlIGluIGJvdGggYHd3YW5fY29yZS5jYCBhbmQgYG1oaV93d2FuX2N0cmwuY2AgaXMgdW5yZWFjaGFibGUgaW4gdGhpcyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgbGlrZSBRRU1VLlxuXG5CdXQsIGhhbmcgb24sIGxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBleHBsb3JlZCBldmVyeSBwb3NzaWJpbGl0eS4gSXMgdGhlcmUgKmFueSogb3RoZXIgd2F5IHRvIGluamVjdCBhbiBNSEkgZGV2aWNlPyBDb3VsZCBzeXprYWxsZXIgcG90ZW50aWFsbHkgdXNlIGBtaGlfYWxsb2NfZGV2aWNlYCBkaXJlY3RseT8gTm8sIHRoYXQncyBub3QgYSBzeXNjYWxsLiBIb3cgYWJvdXQgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYD8gTm9wZS4gT2theSwgd2hhdCBhYm91dCBzb21lIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlIHRoYXQgbWlnaHQgYWxsb3cgZGV2aWNlIGluamVjdGlvbj8gSXQncyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGUgTUhJIHN1YnN5c3RlbSBleHBvc2VzIGFueSBpbnRlcmZhY2VzIGxpa2UgdGhhdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDk2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjA2LjI3Nzk5NDY1NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDYyMzc1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfY3JlYXRlX2RldmljZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaD0zMjE9aW50IG1oaV9kZXN0cm95X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg6MzIyOnZvaWQgbWhpX2NyZWF0ZV9kZXZpY2VzKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTMyMy1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz0zNjA9RVhQT1JUX1NZTUJPTF9HUEwobWhpX25vdGlmeSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzYyLS8qIEJpbmQgTUhJIGNoYW5uZWxzIHRvIE1ISSBkZXZpY2VzICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM2Mzp2b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmMtMzY0LXtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Mzk0PXN0YXRpYyBpbnQgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NTktXFx0ICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo0NjA6XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00NjEtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTc5OD12b2lkIG1oaV9wbV9zdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04MzEtXFx0XFx0XFx0ICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo4MzI6XFx0XFx0XFx0bWhpX2NyZWF0ZV9kZXZpY2VzKG1oaV9jbnRybCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04MzMtXFx0XFx0XFx0aWYgKG1oaV9jbnRybC1cXHUwMDNlZmJjX2Rvd25sb2FkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy04NDQtXFx0XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjg0NTpcXHRcXHRcXHRtaGlfY3JlYXRlX2RldmljZXMobWhpX2NudHJsKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ni1cXHRcXHRcXHRtaGlfdWV2ZW50X25vdGlmeShtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlZWUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDowNy44ODg2MjM3ODdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3ODE1OTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludGVybmFsIEZ1bmN0aW9uIFJldmlldyoqXG5cbkhtbSwgYG1oaV9jcmVhdGVfZGV2aWNlc2AuLi4gcmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IG5vdCBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGl0IGJlaW5nIGNhbGxlZCBvbmx5IHdpdGhpbiBgbWhpX3BtX3N0X3dvcmtlcmAgYW5kIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gLiBPa2F5LCBzbyB0aG9zZSBhcmUgdGhlICpvbmx5KiB0d28gcGxhY2VzLlxuXG5BbHJpZ2h0LCBidXQgdGhhdCBnZXRzIG1lIHRoaW5raW5nOiBJcyB0aGVyZSAqYW5vdGhlciogd2F5IHRvIHRyaWdnZXIgdGhhdCBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCBmdW5jdGlvbj8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHBhdGhzLiBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGNvZGUgZm9yIGBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb25gIGl0c2VsZi4gVGltZSB0byBkaXZlIGJhY2sgaW4gdGhlcmUgYW5kIHJldmlldyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDU2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MTIuNjY2Nzg1NDM0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMDMzMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTM3Mz1pbnQgbWhpX3BtX20zX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTM5My0vKiBIYW5kbGUgZGV2aWNlIE1pc3Npb24gTW9kZSB0cmFuc2l0aW9uICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzozOTQ6c3RhdGljIGludCBtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zOTUte1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03OTg9dm9pZCBtaGlfcG1fc3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODM4LVxcdFxcdGNhc2UgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6ODM5OlxcdFxcdFxcdG1oaV9wbV9taXNzaW9uX21vZGVfdHJhbnNpdGlvbihtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQwLVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDoxNC4yNzc4MjM4NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwNDQxMTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOlxuXG4qKlVucGFja2luZyBUaGlzIFN0YXRlIFRyYW5zaXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyB0aGlzIGNvZGUgaXMgb25seSBjYWxsZWQgZnJvbSBgbWhpX3BtX3N0X3dvcmtlcmAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IHBhcnQgb2Ygc29tZSBwb3dlciBtYW5hZ2VtZW50IG9yIHN0YXRlIG1hbmFnZW1lbnQgc3Vic3lzdGVtIHdpdGhpbiB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSkuIE9rYXksIG1ha2VzIHNlbnNlLlxuXG5gbWhpX3BtX3N0X3dvcmtlcmAgaXMgdGhlIHdvcmtob3JzZSBoZXJlLCBhbmQgaXTigJlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHRoYXQgaXQncyBwdWxsaW5nIHRoZXNlIHRyYW5zaXRpb25zIGZyb20gYG1oaV9jbnRybC1cdTAwM2V0cmFuc2l0aW9uX2xpc3RgLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBwb3BzIGludG8gbXkgaGVhZCBpcyAqd2hvKiBpcyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZyBgbWhpX2NudHJsLVx1MDAzZXRyYW5zaXRpb25fbGlzdGA/IFRoYXQncyB3aGVyZSB0aGUgY29udHJvbCBmbG93IGJlZ2lucy4gRGV0ZXJtaW5pbmcgdGhhdCB3aWxsIGdpdmUgbWUgdmlzaWJpbGl0eSBpbnRvIGhvdyB0cmFuc2l0aW9ucyBhcmUgaW5pdGlhdGVkLCB3aGljaCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgc3lzdGVtJ3Mgc3RhdGUgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbHN0YWNrIHRoYXQgZmVlZHMgdGhpcyBsaXN0IHRlbGxzIG1lIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byB2YXJpb3VzIGV2ZW50cy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGxpc3QgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVycy4gV2hvJ3MgbWFraW5nIHRoZSBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnM/IElzIHRoaXMgZXZlbnQtZHJpdmVuLCB0aW1lci1iYXNlZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MjEuODgyMjM4ODI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MzY2NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9zZXRfbWhpX3N0YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2Jvb3QuYz02Mz1zdGF0aWMgaW50IF9fbWhpX2Rvd25sb2FkX3JkZG1faW5fcGFuaWMoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA1LVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiVHJpZ2dlciBkZXZpY2UgaW50byBSRERNIG1vZGUgdXNpbmcgU1lTIEVSUlxcXFxuXFxcIik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvYm9vdC5jOjEwNjpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9TWVNfRVJSKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9ib290LmMtMTA3LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0xMjA9ZW51bSBtaGlfcG1fc3RhdGUgX19tdXN0X2NoZWNrIG1oaV90cnlzZXRfcG1fc3RhdGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEzOS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjE0MDp2b2lkIG1oaV9zZXRfbWhpX3N0YXRlKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLCBlbnVtIG1oaV9zdGF0ZSBzdGF0ZSlcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTE0MS17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTE3MD1pbnQgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTI1MC1cXHQvKiBTZXQgTUhJIHRvIE0wIHN0YXRlICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoyNTE6XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfTTApO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMjUyLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX2xvY2spO1xcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz0zMzc9dm9pZCBtaGlfcG1fbTFfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMzQ0LVxcdGlmIChzdGF0ZSA9PSBNSElfUE1fTTIpIHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjM0NTpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0zNDYtXFx0XFx0bWhpX2NudHJsLVxcdTAwM2VkZXZfc3RhdGUgPSBNSElfU1RBVEVfTTI7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTQ3Mj1zdGF0aWMgdm9pZCBtaGlfcG1fZGlzYWJsZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy00OTQtXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJUcmlnZ2VyaW5nIE1ISSBSZXNldCBpbiBkZXZpY2VcXFxcblxcXCIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM6NDk1OlxcdFxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTQ5Ni1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNjU3LVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiVHJpZ2dlcmluZyBNSEkgUmVzZXQgaW4gZGV2aWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjY1ODpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9SRVNFVCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy02NTktXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTg2Nz1pbnQgbWhpX3BtX3N1c3BlbmQoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTkyNS1cXHQvKiBTZXQgTUhJIHRvIE0zIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo5MjY6XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfTTMpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTI3LVxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTk1NT1zdGF0aWMgaW50IF9fbWhpX3BtX3Jlc3VtZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgYm9vbCBmb3JjZSlcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtOTk4LVxcdC8qIFNldCBNSEkgdG8gTTAgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24gKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjk5OTpcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMDAwLVxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE2NS1cXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExNjY6XFx0XFx0bWhpX3NldF9taGlfc3RhdGUobWhpX2NudHJsLCBNSElfU1RBVEVfUkVTRVQpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE2Ny1cXHRcXHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZXJlZ3MsIE1ISUNUUkwsXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEzMDE9aW50IG1oaV9mb3JjZV9yZGRtX21vZGUoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEzMTAtXFx0ZGV2X2RiZyhkZXYsIFxcXCJUcmlnZ2VyaW5nIFNZU19FUlIgdG8gZm9yY2UgUkRETSBzdGF0ZVxcXFxuXFxcIik7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMzExOlxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1NZU19FUlIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTMxMi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmg9NTg2PXZvaWQgbWhpX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBtaGlfZHJpdmVyICptaGlfZHJ2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTg4LS8qKlxcbmluY2x1ZGUvbGludXgvbWhpLmg6NTg5OiAqIG1oaV9zZXRfbWhpX3N0YXRlIC0gU2V0IE1ISSBkZXZpY2Ugc3RhdGVcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU5MC0gKiBAbWhpX2NudHJsOiBNSEkgY29udHJvbGxlclxcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01OTItICovXFxuaW5jbHVkZS9saW51eC9taGkuaDo1OTM6dm9pZCBtaGlfc2V0X21oaV9zdGF0ZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU5NC1cXHRcXHQgICAgICAgZW51bSBtaGlfc3RhdGUgc3RhdGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDoyMy41MDk2MjQyNjhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4OTg2MDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBTdGF0ZSBUcmFuc2l0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgc3RhdGUgdHJhbnNpdGlvbiB3b3Jrcy4uLiBMZXQgbWUgc2VlLiBJJ20gZm9jdXNpbmcgb24gYG1oaV9zZXRfbWhpX3N0YXRlYCwgcmlnaHQ/IFRoYXQgZnVuY3Rpb24gaXMgKmRpcmVjdGx5KiB3cml0aW5nIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgdGhpbmdzIGxpa2UgYE1ISUNUUkxgLiBUaGF0J3MgdGhlIGtleSwgaXQncyB0aGUgYWN0dWFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gcGFydC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5BbmQgaXQgbG9va3MgbGlrZSB0aGUgKnRyaWdnZXIqIGZvciBhIHN0YXRlIGNoYW5nZSB0byBgREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFYCBpcyBiZWluZyBoYW5kbGVkIGJ5IGBtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbmAuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBxdWV1aW5nIHVwIHRoYXQgc3BlY2lmaWMgdHJhbnNpdGlvbi4gVGhpcyBtZWFucyBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHRoZSAnZG9lcicsIGFuZCBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIGlzIHRoZSBzY2hlZHVsZXIgb3IgdGhlIHJlcXVlc3Rvci4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA0NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjI4LjI5OTQ4NzcwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NDk4NDQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMzMz1jb25zdCBjaGFyICp0b19taGlfcG1fc3RhdGVfc3RyKHUzMiBzdGF0ZSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMzQ6aW50IG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzM1LVxcdFxcdFxcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKTtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYz03OTk9aW50IG1oaV9wcm9jZXNzX2N0cmxfZXZfcmluZyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy05MjItXFx0XFx0XFx0aWYgKHN0ICE9IERFVl9TVF9UUkFOU0lUSU9OX01BWClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9tYWluLmM6OTIzOlxcdFxcdFxcdFxcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCwgc3QpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy05MjQtXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTU5Nz1zdGF0aWMgdm9pZCBtaGlfcG1fc3lzX2Vycm9yX3RyYW5zaXRpb24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc1Mi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjc1MzpcXHRtaGlfcXVldWVfc3RhdGVfdHJhbnNpdGlvbihtaGlfY250cmwsIG5leHRfc3RhdGUpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzU0LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03NjMtLyogUXVldWUgYSBuZXcgd29yayBpdGVtIGFuZCBzY2hlZHVsZSB3b3JrICovXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3NjQ6aW50IG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzY1LVxcdFxcdFxcdCAgICAgICBlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0YXRlKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYz03ODQ9dm9pZCBtaGlfcG1fc3lzX2Vycl9oYW5kbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy03OTMtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3OTQ6XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBERVZfU1RfVFJBTlNJVElPTl9TWVNfRVJSKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTc5NS19XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5NS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjExOTY6XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBuZXh0X3N0YXRlKTtcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTExOTctXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTEyMTI9c3RhdGljIHZvaWQgX19taGlfcG93ZXJfZG93bihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCwgYm9vbCBncmFjZWZ1bCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1MS1cXHRpZiAoZGVzdHJveV9kZXZpY2UpXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMjUyOlxcdFxcdG1oaV9xdWV1ZV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTEyNTMtXFx0XFx0XFx0XFx0XFx0ICAgREVWX1NUX1RSQU5TSVRJT05fRElTQUJMRV9ERVNUUk9ZX0RFVklDRSk7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYy0xMjU0LVxcdGVsc2VcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjEyNTU6XFx0XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLFxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTI1Ni1cXHRcXHRcXHRcXHRcXHQgICBERVZfU1RfVFJBTlNJVElPTl9ESVNBQkxFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6MjkuOTc0NDgwNzc0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDczNjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIENhbGwqKlxuXG5Pa2F5LCBzbyBgbWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb25gIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4gSW50ZXJlc3RpbmcuIFRoZSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gaGVyZSBpcyB0aGF0IGBuZXh0X3N0YXRlYCBpcyBzZXQgdG8gYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoYXQncyB0aGUgc3RhdGUgaXQncyB0cmFuc2l0aW9uaW5nICp0byouICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNhbGwsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIHdoYXQgYG1oaV9hc3luY19wb3dlcl91cGAgZG9lcy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4uLiBiZWNhdXNlIHVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGltbWVkaWF0ZWx5IGlsbHVtaW5hdGUgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNzAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDozNC40ODE4NDQxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEyMTpcXHRpbnQgbWhpX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0c3RydWN0IG1oaV9ldmVudCAqbWhpX2V2ZW50ID0gbWhpX2NudHJsLVxcdTAwM2VtaGlfZXZlbnQ7XFxuMTEyNDpcXHRcXHRlbnVtIG1oaV9zdGF0ZSBzdGF0ZTtcXG4xMTI1OlxcdFxcdGVudW0gbWhpX2VlX3R5cGUgY3VycmVudF9lZTtcXG4xMTI2OlxcdFxcdGVudW0gZGV2X3N0X3RyYW5zaXRpb24gbmV4dF9zdGF0ZTtcXG4xMTI3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9kZXYtXFx1MDAzZWRldjtcXG4xMTI4OlxcdFxcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xcbjExMjk6XFx0XFx0aW50IHJldCwgaTtcXG4xMTMwOlxcdFxcbjExMzE6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiUmVxdWVzdGVkIHRvIHBvd2VyIE9OXFxcXG5cXFwiKTtcXG4xMTMyOlxcdFxcbjExMzM6XFx0XFx0LyogU3VwcGx5IGRlZmF1bHQgd2FrZSByb3V0aW5lcyBpZiBub3QgcHJvdmlkZWQgYnkgY29udHJvbGxlciBkcml2ZXIgKi9cXG4xMTM0OlxcdFxcdGlmICghbWhpX2NudHJsLVxcdTAwM2V3YWtlX2dldCB8fCAhbWhpX2NudHJsLVxcdTAwM2V3YWtlX3B1dCB8fFxcbjExMzU6XFx0XFx0ICAgICFtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlKSB7XFxuMTEzNjpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfZ2V0ID0gbWhpX2Fzc2VydF9kZXZfd2FrZTtcXG4xMTM3OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNld2FrZV9wdXQgPSBtaGlfZGVhc3NlcnRfZGV2X3dha2U7XFxuMTEzODpcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXdha2VfdG9nZ2xlID0gKG1oaV9jbnRybC1cXHUwMDNlZGJfYWNjZXNzIFxcdTAwMjYgTUhJX1BNX00yKSA/XFxuMTEzOTpcXHRcXHRcXHRcXHRtaGlfdG9nZ2xlX2Rldl93YWtlX25vcCA6IG1oaV90b2dnbGVfZGV2X3dha2U7XFxuMTE0MDpcXHRcXHR9XFxuMTE0MTpcXHRcXG4xMTQyOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbXV0ZXgpO1xcbjExNDM6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xcbjExNDQ6XFx0XFxuMTE0NTpcXHRcXHQvKiBTZXR1cCBCSEkgSU5UVkVDICovXFxuMTE0NjpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4xMTQ3OlxcdFxcdG1oaV93cml0ZV9yZWcobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZWJoaSwgQkhJX0lOVFZFQywgMCk7XFxuMTE0ODpcXHRcXHRtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlID0gTUhJX1BNX1BPUjtcXG4xMTQ5OlxcdFxcdG1oaV9jbnRybC1cXHUwMDNlZWUgPSBNSElfRUVfTUFYO1xcbjExNTA6XFx0XFx0Y3VycmVudF9lZSA9IG1oaV9nZXRfZXhlY19lbnYobWhpX2NudHJsKTtcXG4xMTUxOlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuMTE1MjpcXHRcXG4xMTUzOlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgZGV2aWNlIGlzIGluIHZhbGlkIGV4ZWMgZW52ICovXFxuMTE1NDpcXHRcXHRpZiAoIU1ISV9QT1dFUl9VUF9DQVBBQkxFKGN1cnJlbnRfZWUpKSB7XFxuMTE1NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzIGlzIG5vdCBhIHZhbGlkIEVFIGZvciBwb3dlciBvblxcXFxuXFxcIixcXG4xMTU2OlxcdFxcdFxcdFxcdFRPX01ISV9FWEVDX1NUUihjdXJyZW50X2VlKSk7XFxuMTE1NzpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjExNTg6XFx0XFx0XFx0Z290byBlcnJvcl9leGl0O1xcbjExNTk6XFx0XFx0fVxcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRzdGF0ZSA9IG1oaV9nZXRfbWhpX3N0YXRlKG1oaV9jbnRybCk7XFxuMTE2MjpcXHRcXHRkZXZfZGJnKGRldiwgXFxcIkF0dGVtcHRpbmcgcG93ZXIgb24gd2l0aCBFRTogJXMsIHN0YXRlOiAlc1xcXFxuXFxcIixcXG4xMTYzOlxcdFxcdFxcdFRPX01ISV9FWEVDX1NUUihjdXJyZW50X2VlKSwgbWhpX3N0YXRlX3N0cihzdGF0ZSkpO1xcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRpZiAoc3RhdGUgPT0gTUhJX1NUQVRFX1NZU19FUlIpIHtcXG4xMTY2OlxcdFxcdFxcdG1oaV9zZXRfbWhpX3N0YXRlKG1oaV9jbnRybCwgTUhJX1NUQVRFX1JFU0VUKTtcXG4xMTY3OlxcdFxcdFxcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlcmVncywgTUhJQ1RSTCxcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdCBNSElDVFJMX1JFU0VUX01BU0ssIDAsIGludGVydmFsX3VzLFxcbjExNjk6XFx0XFx0XFx0XFx0XFx0IG1oaV9jbnRybC1cXHUwMDNldGltZW91dF9tcyk7XFxuMTE3MDpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE3MTpcXHRcXHRcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJGYWlsZWQgdG8gcmVzZXQgTUhJIGR1ZSB0byBzeXNlcnIgc3RhdGVcXFxcblxcXCIpO1xcbjExNzI6XFx0XFx0XFx0XFx0Z290byBlcnJvcl9leGl0O1xcbjExNzM6XFx0XFx0XFx0fVxcbjExNzQ6XFx0XFxuMTE3NTpcXHRcXHRcXHQvKlxcbjExNzY6XFx0XFx0XFx0ICogZGV2aWNlIGNsZWFyZXMgSU5UVkVDIGFzIHBhcnQgb2YgUkVTRVQgcHJvY2Vzc2luZyxcXG4xMTc3OlxcdFxcdFxcdCAqIHJlLXByb2dyYW0gaXRcXG4xMTc4OlxcdFxcdFxcdCAqL1xcbjExNzk6XFx0XFx0XFx0bWhpX3dyaXRlX3JlZyhtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlYmhpLCBCSElfSU5UVkVDLCAwKTtcXG4xMTgwOlxcdFxcdH1cXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0LyogSVJRcyBoYXZlIGJlZW4gcmVxdWVzdGVkIGR1cmluZyBwcm9iZSwgc28gd2UganVzdCBuZWVkIHRvIGVuYWJsZSB0aGVtLiAqL1xcbjExODM6XFx0XFx0ZW5hYmxlX2lycShtaGlfY250cmwtXFx1MDAzZWlycVswXSk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaGlfY250cmwtXFx1MDAzZXRvdGFsX2V2X3JpbmdzOyBpKyssIG1oaV9ldmVudCsrKSB7XFxuMTE4NjpcXHRcXHRcXHRpZiAobWhpX2V2ZW50LVxcdTAwM2VvZmZsb2FkX2V2KVxcbjExODc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTE4ODpcXHRcXG4xMTg5OlxcdFxcdFxcdGVuYWJsZV9pcnEobWhpX2NudHJsLVxcdTAwM2VpcnFbbWhpX2V2ZW50LVxcdTAwM2VpcnFdKTtcXG4xMTkwOlxcdFxcdH1cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0LyogVHJhbnNpdGlvbiB0byBuZXh0IHN0YXRlICovXFxuMTE5MzpcXHRcXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XFxuMTE5NDpcXHRcXHRcXHRERVZfU1RfVFJBTlNJVElPTl9QQkwgOiBERVZfU1RfVFJBTlNJVElPTl9SRUFEWTtcXG4xMTk1OlxcdFxcbjExOTY6XFx0XFx0bWhpX3F1ZXVlX3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsLCBuZXh0X3N0YXRlKTtcXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX211dGV4KTtcXG4xMTk5OlxcdFxcbjEyMDA6XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiUG93ZXIgb24gc2V0dXAgc3VjY2Vzc1xcXFxuXFxcIik7XFxuMTIwMTpcXHRcXG4xMjAyOlxcdFxcdHJldHVybiAwO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRlcnJvcl9leGl0OlxcbjEyMDU6XFx0XFx0bWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSA9IE1ISV9QTV9ESVNBQkxFO1xcbjEyMDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZXBtX211dGV4KTtcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjA5OlxcdH1cXG4xMjEwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG1oaV9hc3luY19wb3dlcl91cCk7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdHN0YXRpYyB2b2lkIF9fbWhpX3Bvd2VyX2Rvd24oc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsIGJvb2wgZ3JhY2VmdWwsXFxuMTIxMzpcXHRcXHRcXHRcXHQgICAgIGJvb2wgZGVzdHJveV9kZXZpY2UpXFxuMTIxNDpcXHR7XFxuMTIxNTpcXHRcXHRlbnVtIG1oaV9wbV9zdGF0ZSBjdXJfc3RhdGUsIHRyYW5zaXRpb25fc3RhdGU7XFxuMTIxNjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuMTIxNzpcXHRcXG4xMjE4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbXV0ZXgpO1xcbjEyMTk6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuMTIyMDpcXHRcXHRjdXJfc3RhdGUgPSBtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDozNC40ODE5Nzc5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MTQ5MTEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3dlci1VcCBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIHRoZSBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBmdW5jdGlvbiBpcyB0aGUga2V5IGhlcmUuIEl0J3MgdGhlIHBvaW50IHdoZXJlIHdlIHRyYW5zaXRpb24gdGhpbmdzLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGVucXVldWluZyBlaXRoZXIgYERFVl9TVF9UUkFOU0lUSU9OX1BCTGAgb3IgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkaWN0YXRlIHdoaWNoIG9uZS4gSSBrbm93IGl0J3MgcmVhZGluZyB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IHVzaW5nIGBtaGlfZ2V0X2V4ZWNfZW52YCBhbmQgYWxzbyBjaGVja2luZyB0aGUgb3ZlcmFsbCBNSEkgc3RhdGUgd2l0aCBgbWhpX2dldF9taGlfc3RhdGVgLCB3aGljaCBpcyBub3JtYWwuIFRoZSBpbnRlcmVzdGluZyBiaXQgY29tZXMgd2l0aCB0aGUgc3l6a2FsbGVyIGVtdWxhdGlvbi4gQmVjYXVzZSBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBQQ0kgZGV2aWNlLCBhbmQgdGhlcmVmb3JlIGNvbnRyb2wgbWVtb3J5LW1hcHBlZCBJL08sIGl0IGNhbiBlZmZlY3RpdmVseSBtYW5pcHVsYXRlIHRoZSB2YWx1ZXMgdGhlc2UgZnVuY3Rpb25zIHJldHVybi4gSSBjYW4gZmVlZCBpdCBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZXMgYW5kIHNlZSBob3cgaXQgcmVhY3RzLlxuXG5JIHNlZSBhIHZ1bG5lcmFiaWxpdHkuIFN5emthbGxlciBjb3VsZCBmb3JjZSBgbWhpX2dldF9leGVjX2VudmAgdG8gcmV0dXJuIGBNSElfRUVfQU1TU2AgKE1pc3Npb24gTW9kZSkgb3IgZXZlbiBgTUhJX0VFX1BCTGAsIHRoZSBwcmUtYm9vdCBsb2FkZXIsIGlmIGl0IHdhbnRzLiBJZiBpdCByZXR1cm5zIGBNSElfRUVfQU1TU2AsIHRoZSBgbmV4dF9zdGF0ZWAgdmFyaWFibGUgZ2V0cyBzZXQgdG8gYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyBpbiB0aGUgYERFVl9TVF9UUkFOU0lUSU9OX1JFQURZYCBzdGF0ZS4gVGhhdCdzIHRoZSBjcml0aWNhbCBwYXRoIEkgbmVlZCB0byBleGFtaW5lIG5vdy4gV2hhdCBoYXBwZW5zIHRoZXJlLCBhbmQgd2hhdCBjYW4gZ28gd3Jvbmc/IExldCdzIHRyYWNlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MzQ4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NDAuMzk2ODkxOTAzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMzEyODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVl9TVF9UUkFOU0lUSU9OX1JFQURZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9ODI9ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiB7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC04My1cXHRERVZfU1RfVFJBTlNJVElPTl9QQkwsXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDo4NDpcXHRERVZfU1RfVFJBTlNJVElPTl9SRUFEWSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVxcdERFVl9TVF9UUkFOU0lUSU9OX1NCTCxcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9NTk3PXN0YXRpYyB2b2lkIG1oaV9wbV9zeXNfZXJyb3JfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzQ5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzo3NTA6XFx0XFx0bmV4dF9zdGF0ZSA9IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtNzUxLVxcdH1cXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzk4PXZvaWQgbWhpX3BtX3N0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTg0Ny1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjg0ODpcXHRcXHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX1JFQURZOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtODQ5LVxcdFxcdFxcdG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uKG1oaV9jbnRybCk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jPTExMjE9aW50IG1oaV9hc3luY19wb3dlcl91cChzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5My1cXHRuZXh0X3N0YXRlID0gTUhJX0lOX1BCTChjdXJyZW50X2VlKSA/XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uYzoxMTk0OlxcdFxcdERFVl9TVF9UUkFOU0lUSU9OX1BCTCA6IERFVl9TVF9UUkFOU0lUSU9OX1JFQURZO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmMtMTE5NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NDEuOTc4MjEzMzA1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjQ5NDA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGRvbWFpbjpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgYG1oaV9wbV9zdF93b3JrZXJgIFRyYW5zaXRpb24qKlxuXG5SaWdodCwgc28gYG1oaV9wbV9zdF93b3JrZXJgIGlzIG1ha2luZyBhIGNhbGwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoZSBzdGF0ZSB3b3JrZXIgaXMgaW5pdGlhdGluZyBzb21ldGhpbmcuXCIgQW5kIGxvb2tpbmcgYXQgdGhlIGNhbGwgaXRzZWxmLCBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb24obWhpX2NudHJsKWAsIEkgaW5zdGFudGx5IHJlY29nbml6ZSB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzdGF0ZSBjaGFuZ2UuIEl0IG1lYW5zIHdlJ3JlIG1vdmluZyB0aGUgTWFuYWdlbWVudCBIb3N0IEludGVyZmFjZSAoTUhJKSBpbnRvIGEgXCJyZWFkeVwiIHN0YXRlLCBvciBhdCBsZWFzdCwgdGhlICpwb3RlbnRpYWwqIGZvciByZWFkaW5lc3MgaXMgYmVpbmcgdHJpZ2dlcmVkLiBJIGFscmVhZHkga25vdyB0aGF0IGBtaGlfY250cmxgIGlzIHRoZSBjb250cm9sIHN0cnVjdHVyZSwgc28gdGhpcyB0cmFuc2l0aW9uIGlzIHRpZWQgZGlyZWN0bHkgdG8gdGhlIE1ISSdzIG1haW4gY29udHJvbCBlbGVtZW50LiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyOlxuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgdHJhbnNpdGlvbj8qKiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQgb2YgYG1oaV9wbV9zdF93b3JrZXJgLiBJcyB0aGlzIGJlaW5nIGNhbGxlZCBpbiByZXNwb25zZSB0byBhIGhhcmR3YXJlIGV2ZW50LCBhIHRpbWVyLCBvciBhIGNvbW1hbmQgZnJvbSB0aGUgaG9zdD8gVW5kZXJzdGFuZGluZyB0aGUgdHJpZ2dlciBpcyBwYXJhbW91bnQuXG4qICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBXaGF0IGhhcHBlbnMgKmFmdGVyKiBgbWhpX3JlYWR5X3N0YXRlX3RyYW5zaXRpb25gIGlzIGNhbGxlZD8gQXJlIGludGVycnVwdHMgZW5hYmxlZCwgY2xvY2tzIGFjdGl2YXRlZCwgcG93ZXIgZG9tYWlucyB0dXJuZWQgb24/IElzIHRoaXMgYSBjb21wbGV0ZWx5IHBhc3NpdmUgdHJhbnNpdGlvbiBvciBhbiBhY3RpdmUgb25lP1xuKiAgICoqV2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZT8qKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHJhbnNpdGlvbiBpcyBtb25pdG9yZWQgdG8gc2VlIHRoYXQgaXQgd29ya3MgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBiZSByZWFkeSB0byBhbmFseXplIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBhbmQgaG93IHRob3NlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYW5kIGhhbmRsZWQuXG5cblRoZSBmdW5jdGlvbiBuYW1lIGlzIHByZXR0eSBleHBsaWNpdCwgc28gaXQgaXMganVzdCBzZXR0aW5nIHRoZSBzdGF0ZSwgYnV0IEkgY2FuJ3QgYXNzdW1lLiBTbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgcHJvY2VzcyBhbmQgdGhlIGNoZWNrcyBpdCBwZXJmb3Jtcy4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiAqaG93KiB0aGUgTUhJIGlzIHJlYWRpZWQgaXMga2V5LiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGUgTUhJIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgc2V0cyB0aGUgc3RhZ2UgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBmb2xsb3dzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM4OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjQ3LjUwMzE1NzUyOVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvbWhpL2hvc3QvcG0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdGludCBtaGlfcmVhZHlfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudDtcXG4gMTczOlxcdFxcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcXG4gMTc0OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9kZXYtXFx1MDAzZWRldjtcXG4gMTc1OlxcdFxcdHUzMiBpbnRlcnZhbF91cyA9IDI1MDAwOyAvKiBwb2xsIHJlZ2lzdGVyIGZpZWxkIGV2ZXJ5IDI1IG1pbGxpc2Vjb25kcyAqL1xcbiAxNzY6XFx0XFx0dTMyIHRpbWVvdXRfbXM7XFxuIDE3NzpcXHRcXHRpbnQgcmV0LCBpO1xcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQvKiBDaGVjayBpZiBkZXZpY2UgZW50ZXJlZCBlcnJvciBzdGF0ZSAqL1xcbiAxODA6XFx0XFx0aWYgKE1ISV9QTV9JTl9GQVRBTF9TVEFURShtaGlfY250cmwtXFx1MDAzZXBtX3N0YXRlKSkge1xcbiAxODE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgbGluayBpcyBub3QgYWNjZXNzaWJsZVxcXFxuXFxcIik7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0LyogV2FpdCBmb3IgUkVTRVQgdG8gYmUgY2xlYXJlZCBhbmQgUkVBRFkgYml0IHRvIGJlIHNldCBieSB0aGUgZGV2aWNlICovXFxuIDE4NjpcXHRcXHRyZXQgPSBtaGlfcG9sbF9yZWdfZmllbGQobWhpX2NudHJsLCBtaGlfY250cmwtXFx1MDAzZXJlZ3MsIE1ISUNUUkwsXFxuIDE4NzpcXHRcXHRcXHRcXHRcXHQgTUhJQ1RSTF9SRVNFVF9NQVNLLCAwLCBpbnRlcnZhbF91cyxcXG4gMTg4OlxcdFxcdFxcdFxcdFxcdCBtaGlfY250cmwtXFx1MDAzZXRpbWVvdXRfbXMpO1xcbiAxODk6XFx0XFx0aWYgKHJldCkge1xcbiAxOTA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJEZXZpY2UgZmFpbGVkIHRvIGNsZWFyIE1ISSBSZXNldFxcXFxuXFxcIik7XFxuIDE5MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHR0aW1lb3V0X21zID0gbWhpX2NudHJsLVxcdTAwM2VyZWFkeV90aW1lb3V0X21zID9cXG4gMTk1OlxcdFxcdFxcdG1oaV9jbnRybC1cXHUwMDNlcmVhZHlfdGltZW91dF9tcyA6IG1oaV9jbnRybC1cXHUwMDNldGltZW91dF9tcztcXG4gMTk2OlxcdFxcdHJldCA9IG1oaV9wb2xsX3JlZ19maWVsZChtaGlfY250cmwsIG1oaV9jbnRybC1cXHUwMDNlcmVncywgTUhJU1RBVFVTLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0IE1ISVNUQVRVU19SRUFEWV9NQVNLLCAxLCBpbnRlcnZhbF91cyxcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdCB0aW1lb3V0X21zKTtcXG4gMTk5OlxcdFxcdGlmIChyZXQpIHtcXG4gMjAwOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlIGZhaWxlZCB0byBlbnRlciBNSEkgUmVhZHlcXFxcblxcXCIpO1xcbiAyMDE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjAyOlxcdFxcdH1cXG4gMjAzOlxcdFxcbiAyMDQ6XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJEZXZpY2UgaW4gUkVBRFkgU3RhdGVcXFxcblxcXCIpO1xcbiAyMDU6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDIwNjpcXHRcXHRjdXJfc3RhdGUgPSBtaGlfdHJ5c2V0X3BtX3N0YXRlKG1oaV9jbnRybCwgTUhJX1BNX1BPUik7XFxuIDIwNzpcXHRcXHRtaGlfY250cmwtXFx1MDAzZWRldl9zdGF0ZSA9IE1ISV9TVEFURV9SRUFEWTtcXG4gMjA4OlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdFxcdGlmIChjdXJfc3RhdGUgIT0gTUhJX1BNX1BPUikge1xcbiAyMTE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJFcnJvciBtb3ZpbmcgdG8gc3RhdGUgJXMgZnJvbSAlc1xcXFxuXFxcIixcXG4gMjEyOlxcdFxcdFxcdFxcdHRvX21oaV9wbV9zdGF0ZV9zdHIoTUhJX1BNX1BPUiksXFxuIDIxMzpcXHRcXHRcXHRcXHR0b19taGlfcG1fc3RhdGVfc3RyKGN1cl9zdGF0ZSkpO1xcbiAyMTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDIxNTpcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdHJlYWRfbG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjE4OlxcdFxcdGlmICghTUhJX1JFR19BQ0NFU1NfVkFMSUQobWhpX2NudHJsLVxcdTAwM2VwbV9zdGF0ZSkpIHtcXG4gMjE5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRGV2aWNlIHJlZ2lzdGVycyBub3QgYWNjZXNzaWJsZVxcXFxuXFxcIik7XFxuIDIyMDpcXHRcXHRcXHRnb3RvIGVycm9yX21taW87XFxuIDIyMTpcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdC8qIENvbmZpZ3VyZSBNTUlPIHJlZ2lzdGVycyAqL1xcbiAyMjQ6XFx0XFx0cmV0ID0gbWhpX2luaXRfbW1pbyhtaGlfY250cmwpO1xcbiAyMjU6XFx0XFx0aWYgKHJldCkge1xcbiAyMjY6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJFcnJvciBjb25maWd1cmluZyBNTUlPIHJlZ2lzdGVyc1xcXFxuXFxcIik7XFxuIDIyNzpcXHRcXHRcXHRnb3RvIGVycm9yX21taW87XFxuIDIyODpcXHRcXHR9XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdC8qIEFkZCBlbGVtZW50cyB0byBhbGwgU1cgZXZlbnQgcmluZ3MgKi9cXG4gMjMxOlxcdFxcdG1oaV9ldmVudCA9IG1oaV9jbnRybC1cXHUwMDNlbWhpX2V2ZW50O1xcbiAyMzI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1oaV9jbnRybC1cXHUwMDNldG90YWxfZXZfcmluZ3M7IGkrKywgbWhpX2V2ZW50KyspIHtcXG4gMjMzOlxcdFxcdFxcdHN0cnVjdCBtaGlfcmluZyAqcmluZyA9IFxcdTAwMjZtaGlfZXZlbnQtXFx1MDAzZXJpbmc7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdFxcdC8qIFNraXAgaWYgdGhpcyBpcyBhbiBvZmZsb2FkIG9yIEhXIGV2ZW50ICovXFxuIDIzNjpcXHRcXHRcXHRpZiAobWhpX2V2ZW50LVxcdTAwM2VvZmZsb2FkX2V2IHx8IG1oaV9ldmVudC1cXHUwMDNlaHdfcmluZylcXG4gMjM3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRyaW5nLVxcdTAwM2V3cCA9IHJpbmctXFx1MDAzZWJhc2UgKyByaW5nLVxcdTAwM2VsZW4gLSByaW5nLVxcdTAwM2VlbF9zaXplO1xcbiAyNDA6XFx0XFx0XFx0KnJpbmctXFx1MDAzZWN0eHRfd3AgPSBjcHVfdG9fbGU2NChyaW5nLVxcdTAwM2Vpb21tdV9iYXNlICsgcmluZy1cXHUwMDNlbGVuIC0gcmluZy1cXHUwMDNlZWxfc2l6ZSk7XFxuIDI0MTpcXHRcXHRcXHQvKiBVcGRhdGUgYWxsIGNvcmVzICovXFxuIDI0MjpcXHRcXHRcXHRzbXBfd21iKCk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdFxcdC8qIFJpbmcgdGhlIGV2ZW50IHJpbmcgZGIgKi9cXG4gMjQ1OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1oaV9ldmVudC1cXHUwMDNlbG9jayk7XFxuIDI0NjpcXHRcXHRcXHRtaGlfcmluZ19lcl9kYihtaGlfZXZlbnQpO1xcbiAyNDc6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtaGlfZXZlbnQtXFx1MDAzZWxvY2spO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHQvKiBTZXQgTUhJIHRvIE0wIHN0YXRlICovXFxuIDI1MTpcXHRcXHRtaGlfc2V0X21oaV9zdGF0ZShtaGlfY250cmwsIE1ISV9TVEFURV9NMCk7XFxuIDI1MjpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdGVycm9yX21taW86XFxuIDI1NzpcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0cmV0dXJuIC1FSU87XFxuIDI2MDpcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdGludCBtaGlfcG1fbTBfdHJhbnNpdGlvbihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4gMjYzOlxcdHtcXG4gMjY0OlxcdFxcdGVudW0gbWhpX3BtX3N0YXRlIGN1cl9zdGF0ZTtcXG4gMjY1OlxcdFxcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XFxuIDI2NjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuIDI2NzpcXHRcXHRpbnQgaTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMwOjQ3LjUwMzI5ODc5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE2NTM0OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNSEkgUmVhZHkgU3RhdGUgVHJhbnNpdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1oaV9yZWFkeV9zdGF0ZV90cmFuc2l0aW9uYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBjcnVjaWFsIGZvciBnZXR0aW5nIHRoZSBNSEkgY29udHJvbGxlciByZWFkeS4gSXQncyBwb2xsaW5nIHR3byByZWdpc3RlcnMsIGBNSElDVFJMX1JFU0VUX01BU0tgIGFuZCBgTUhJU1RBVFVTX1JFQURZX01BU0tgLCBtYWtlcyBzZW5zZS4gVGhlIGtleSBpcyBpbiBob3cgc3l6a2FsbGVyJ3MgUENJIGVtdWxhdG9yIHJlc3BvbmRzLiBJZiBpdCByZXR1cm5zIDAgZm9yIHRoZSByZXNldCBtYXNrIGFuZCAxIGZvciB0aGUgcmVhZHkgbWFzaywgdGhlIGZ1bmN0aW9uIGNvbnRpbnVlcy4gR3JlYXQuIFRoZW4sIHRoZSBzeXN0ZW0gc2V0cyB0aGUgTUhJIHN0YXRlIHRvIGBNSElfU1RBVEVfTTBgLlxuXG5XYWl0IGEgbWludXRlLCBgbWhpX3NldF9taGlfc3RhdGVgIGlzIHdyaXRpbmcgdG8gYE1ISUNUUkxgIHdoaWNoIHdvdWxkIGJlIHdoYXQncyBjb250cm9sbGVkIGJ5IHRoZSBQQ0kgZW11bGF0b3IuIFRoYXQncyBhIGdvb2QgY29ubmVjdGlvbiB0byBtYWtlLiBCdXQsIHdoYXQgSSByZWFsbHkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGUgc3lzdGVtIHJlYWNoZXMgYSBwb2ludCB0aGF0IGl0IGNhbiBjaGVjayB0aGlzIGZ1bmN0aW9uLiBNb3JlIHNwZWNpZmljYWxseSwgd2hvIGlzIHF1ZXVpbmcgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWA/IFRoaXMgdHJhbnNpdGlvbiBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB3aGF0IHN0YXRlIHRoZSBzeXN0ZW0gaXMgaW4uIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoYXQncyBiZWluZyBzZXQgdXAgYW5kIHF1ZXVlZC4gTGV0J3MgZGlnIGRlZXBlciBhbmQgc2VlIHdoZXJlIHRoYXQncyBjb21pbmcgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MjAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMDo1Mi4yMTk4MzcxNjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njg4ODM0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWX1NUX1RSQU5TSVRJT05fTUlTU0lPTl9NT0RFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmg9ODI9ZW51bSBkZXZfc3RfdHJhbnNpdGlvbiB7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg1LVxcdERFVl9TVF9UUkFOU0lUSU9OX1NCTCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oOjg2OlxcdERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERSxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oLTg3LVxcdERFVl9TVF9UUkFOU0lUSU9OX0ZQLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTc5OT1pbnQgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkwNS1cXHRcXHRcXHRjYXNlIE1ISV9FRV9BTVNTOlxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYzo5MDY6XFx0XFx0XFx0XFx0c3QgPSBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jLTkwNy1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BtLmM9Nzk4PXZvaWQgbWhpX3BtX3N0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzNy1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jOjgzODpcXHRcXHRjYXNlIERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERTpcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9wbS5jLTgzOS1cXHRcXHRcXHRtaGlfcG1fbWlzc2lvbl9tb2RlX3RyYW5zaXRpb24obWhpX2NudHJsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzA6NTQuMDg4NzI2MzkxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDkyOTcwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIEV2ZW50IFF1ZXVlKipcblxuUmlnaHQsIHNvIHRoaXMgbmV3IGV2ZW50IGlzIHF1ZXVlZCB1cC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBsYW5kaW5nIGluIHRoZSBgbWhpX3Byb2Nlc3NfY3RybF9ldl9yaW5nYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3QuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTUhJIChwcmVzdW1hYmx5IE1vYmlsZSBIb3N0IEludGVyZmFjZSwgdGhvdWdoIHRoZSBjb250ZXh0IHdvdWxkIGNsYXJpZnkgcHJlY2lzZWx5IHdoaWNoIGltcGxlbWVudGF0aW9uKSBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgY29udHJvbCBwbGFuZSBvciBldmVudCBoYW5kbGluZyBmb3IgdGhhdCBpbnRlcmZhY2UuIFRoZSBcInJpbmdcIiBlbGVtZW50IHN1Z2dlc3RzIGEgY2lyY3VsYXIgYnVmZmVyIG9yIGEgZGVkaWNhdGVkIHF1ZXVlaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBjb25jdXJyZW50IGV4ZWN1dGlvbiBtb2RlbCwgb3IgYXQgbGVhc3QgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc3luY2hyb25pemF0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gTXkgaW1tZWRpYXRlIGxpbmUgb2YgdGhpbmtpbmcgd2lsbCBnbyBkb3duIHRoZSBmb2xsb3dpbmc6XG5cbiogICAqKlVuZGVyc3RhbmRpbmcgdGhlIEV2ZW50IFR5cGUqKjogSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbnRlbnQgb2YgdGhpcyBldmVudC4gV2hhdCBwYXJhbWV0ZXJzIGFyZSBhc3NvY2lhdGVkIHdpdGggaXQ/IFdoYXQgZG9lcyBpdCBzaWduYWw/IERvZXMgaXQgcmVwcmVzZW50IGEgY29tbWFuZCwgYSBzdGF0dXMgdXBkYXRlLCBvciBhbiBlcnJvciBjb25kaXRpb24/IFRoZSB0eXBlIG9mIGV2ZW50IGRpY3RhdGVzIHRoZSBuZWNlc3NhcnkgcmVzcG9uc2UsIHdoaWNoIGRpY3RhdGVzIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzLlxuKiAgICoqQ29udGV4dCB3aXRoaW4gdGhlIFN5c3RlbSoqOiBUaGUgTUhJIGlzIGEgYnVzLiBNeSBrbm93bGVkZ2Ugb2YgdGhlIHdpZGVyIHN5c3RlbSdzIHRvcG9sb2d5IGlzIG5lY2Vzc2FyeSBoZXJlLiBXaGVyZSBkb2VzIHRoaXMgZXZlbnQgb3JpZ2luYXRlIGFuZCB3aGVyZSBpcyBpdCBnb2luZz8gVGhpcyBoZWxwcyB1bmRlcnN0YW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBhIGNyaXRpY2FsIGNvbnRyb2wgcGF0aCwgb3IgbG93ZXIgcHJpb3JpdHk/XG4qICAgKipQb3RlbnRpYWwgQm90dGxlbmVja3MqKjogV2l0aCBhIHF1ZXVlLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGJvdHRsZW5lY2sgYXJlYXMuIFdoYXQgaXMgdGhlIHByb2Nlc3NpbmcgbGF0ZW5jeSBmb3IgZXZlbnRzIGluIHRoaXMgcmluZz8gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgd2l0aCBxdWV1ZSBvdmVyZmxvdyBvciBzdGFydmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGxhdGVuY3kgZm9yIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLCByZWFsLXRpbWUgY29uc3RyYWludHMsIGFuZCBzdGFiaWxpdHk/XG4qICAgKipFcnJvciBIYW5kbGluZyoqOiBMZXQncyBzZWUuIElmIHNvbWV0aGluZyB3ZW50IHdyb25nLCB3aGVyZSdzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGlzIHRoZSBxdWV1ZSBwcm90ZWN0ZWQ/IENhbiBpdCBiZSBjb3JydXB0ZWQsIG92ZXJmbG93IG9yIGJlY29tZSBjb3JydXB0ZWQuIERvZXMgaXQgaGF2ZSB0aGUgcmVxdWlyZWQgcHJvdGVjdGlvbiBtZWNoYW5pc21zP1xuXG5TbywgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGRpc3NlY3RpbmcgdGhlIGV2ZW50IGl0c2VsZiBhbmQgbWFwcGluZyBpdCBvbnRvIHRoZSBsYXJnZXIgTUhJIGNvbnRyb2wgYXJjaGl0ZWN0dXJlLiBJdCdzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHNwZWNpZmljIGV2ZW50J3MgaW1wYWN0IGFuZCBuZWNlc3NhcnkgcHJvY2Vzc2luZyBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTowMC4xOTgwMjYwMDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk5OlxcdGludCBtaGlfcHJvY2Vzc19jdHJsX2V2X3Jpbmcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuIDgwMDpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtaGlfZXZlbnQgKm1oaV9ldmVudCxcXG4gODAxOlxcdFxcdFxcdFxcdCAgICAgdTMyIGV2ZW50X3F1b3RhKVxcbiA4MDI6XFx0e1xcbiA4MDM6XFx0XFx0c3RydWN0IG1oaV9yaW5nX2VsZW1lbnQgKmRldl9ycCwgKmxvY2FsX3JwO1xcbiA4MDQ6XFx0XFx0c3RydWN0IG1oaV9yaW5nICpldl9yaW5nID0gXFx1MDAyNm1oaV9ldmVudC1cXHUwMDNlcmluZztcXG4gODA1OlxcdFxcdHN0cnVjdCBtaGlfZXZlbnRfY3R4dCAqZXJfY3R4dCA9XFxuIDgwNjpcXHRcXHRcXHRcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfY3R4dC1cXHUwMDNlZXJfY3R4dFttaGlfZXZlbnQtXFx1MDAzZWVyX2luZGV4XTtcXG4gODA3OlxcdFxcdHN0cnVjdCBtaGlfY2hhbiAqbWhpX2NoYW47XFxuIDgwODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VtaGlfZGV2LVxcdTAwM2VkZXY7XFxuIDgwOTpcXHRcXHR1MzIgY2hhbjtcXG4gODEwOlxcdFxcdGludCBjb3VudCA9IDA7XFxuIDgxMTpcXHRcXHRkbWFfYWRkcl90IHB0ciA9IGxlNjRfdG9fY3B1KGVyX2N0eHQtXFx1MDAzZXJwKTtcXG4gODEyOlxcdFxcbiA4MTM6XFx0XFx0LypcXG4gODE0OlxcdFxcdCAqIFRoaXMgaXMgYSBxdWljayBjaGVjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBldmVudCBwcm9jZXNzaW5nXFxuIDgxNTpcXHRcXHQgKiBpbiBjYXNlIE1ISSBpcyBhbHJlYWR5IGluIGVycm9yIHN0YXRlLCBidXQgaXQncyBzdGlsbCBwb3NzaWJsZVxcbiA4MTY6XFx0XFx0ICogdG8gdHJhbnNpdGlvbiB0byBlcnJvciBzdGF0ZSB3aGlsZSBwcm9jZXNzaW5nIGV2ZW50c1xcbiA4MTc6XFx0XFx0ICovXFxuIDgxODpcXHRcXHRpZiAodW5saWtlbHkoTUhJX0VWRU5UX0FDQ0VTU19JTlZBTElEKG1oaV9jbnRybC1cXHUwMDNlcG1fc3RhdGUpKSlcXG4gODE5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA4MjA6XFx0XFxuIDgyMTpcXHRcXHRpZiAoIWlzX3ZhbGlkX3JpbmdfcHRyKGV2X3JpbmcsIHB0cikpIHtcXG4gODIyOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlbWhpX2Rldi1cXHUwMDNlZGV2LFxcbiA4MjM6XFx0XFx0XFx0XFx0XFxcIkV2ZW50IHJpbmcgcnAgcG9pbnRzIG91dHNpZGUgb2YgdGhlIGV2ZW50IHJpbmdcXFxcblxcXCIpO1xcbiA4MjQ6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDgyNTpcXHRcXHR9XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdGRldl9ycCA9IG1oaV90b192aXJ0dWFsKGV2X3JpbmcsIHB0cik7XFxuIDgyODpcXHRcXHRsb2NhbF9ycCA9IGV2X3JpbmctXFx1MDAzZXJwO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHR3aGlsZSAoZGV2X3JwICE9IGxvY2FsX3JwKSB7XFxuIDgzMTpcXHRcXHRcXHRlbnVtIG1oaV9wa3RfdHlwZSB0eXBlID0gTUhJX1RSRV9HRVRfRVZfVFlQRShsb2NhbF9ycCk7XFxuIDgzMjpcXHRcXG4gODMzOlxcdFxcdFxcdHRyYWNlX21oaV9jdHJsX2V2ZW50KG1oaV9jbnRybCwgbG9jYWxfcnApO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRcXHRzd2l0Y2ggKHR5cGUpIHtcXG4gODM2OlxcdFxcdFxcdGNhc2UgTUhJX1BLVF9UWVBFX0JXX1JFUV9FVkVOVDpcXG4gODM3OlxcdFxcdFxcdHtcXG4gODM4OlxcdFxcdFxcdFxcdHN0cnVjdCBtaGlfbGlua19pbmZvICpsaW5rX2luZm87XFxuIDgzOTpcXHRcXG4gODQwOlxcdFxcdFxcdFxcdGxpbmtfaW5mbyA9IFxcdTAwMjZtaGlfY250cmwtXFx1MDAzZW1oaV9saW5rX2luZm87XFxuIDg0MTpcXHRcXHRcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2bWhpX2NudHJsLVxcdTAwM2VwbV9sb2NrKTtcXG4gODQyOlxcdFxcdFxcdFxcdGxpbmtfaW5mby1cXHUwMDNldGFyZ2V0X2xpbmtfc3BlZWQgPVxcbiA4NDM6XFx0XFx0XFx0XFx0XFx0TUhJX1RSRV9HRVRfRVZfTElOS1NQRUVEKGxvY2FsX3JwKTtcXG4gODQ0OlxcdFxcdFxcdFxcdGxpbmtfaW5mby1cXHUwMDNldGFyZ2V0X2xpbmtfd2lkdGggPVxcbiA4NDU6XFx0XFx0XFx0XFx0XFx0TUhJX1RSRV9HRVRfRVZfTElOS1dJRFRIKGxvY2FsX3JwKTtcXG4gODQ2OlxcdFxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg0NzpcXHRcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlJlY2VpdmVkIEJXX1JFUSBldmVudFxcXFxuXFxcIik7XFxuIDg0ODpcXHRcXHRcXHRcXHRtaGlfY250cmwtXFx1MDAzZXN0YXR1c19jYihtaGlfY250cmwsIE1ISV9DQl9CV19SRVEpO1xcbiA4NDk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg1MDpcXHRcXHRcXHR9XFxuIDg1MTpcXHRcXHRcXHRjYXNlIE1ISV9QS1RfVFlQRV9TVEFURV9DSEFOR0VfRVZFTlQ6XFxuIDg1MjpcXHRcXHRcXHR7XFxuIDg1MzpcXHRcXHRcXHRcXHRlbnVtIG1oaV9zdGF0ZSBuZXdfc3RhdGU7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdFxcdFxcdG5ld19zdGF0ZSA9IE1ISV9UUkVfR0VUX0VWX1NUQVRFKGxvY2FsX3JwKTtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJTdGF0ZSBjaGFuZ2UgZXZlbnQgdG8gc3RhdGU6ICVzXFxcXG5cXFwiLFxcbiA4NTg6XFx0XFx0XFx0XFx0XFx0bWhpX3N0YXRlX3N0cihuZXdfc3RhdGUpKTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0XFx0XFx0c3dpdGNoIChuZXdfc3RhdGUpIHtcXG4gODYxOlxcdFxcdFxcdFxcdGNhc2UgTUhJX1NUQVRFX00wOlxcbiA4NjI6XFx0XFx0XFx0XFx0XFx0bWhpX3BtX20wX3RyYW5zaXRpb24obWhpX2NudHJsKTtcXG4gODYzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NjQ6XFx0XFx0XFx0XFx0Y2FzZSBNSElfU1RBVEVfTTE6XFxuIDg2NTpcXHRcXHRcXHRcXHRcXHRtaGlfcG1fbTFfdHJhbnNpdGlvbihtaGlfY250cmwpO1xcbiA4NjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg2NzpcXHRcXHRcXHRcXHRjYXNlIE1ISV9TVEFURV9NMzpcXG4gODY4OlxcdFxcdFxcdFxcdFxcdG1oaV9wbV9tM190cmFuc2l0aW9uKG1oaV9jbnRybCk7XFxuIDg2OTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gODcwOlxcdFxcdFxcdFxcdGNhc2UgTUhJX1NUQVRFX1NZU19FUlI6XFxuIDg3MTpcXHRcXHRcXHRcXHR7XFxuIDg3MjpcXHRcXHRcXHRcXHRcXHRlbnVtIG1oaV9wbV9zdGF0ZSBwbV9zdGF0ZTtcXG4gODczOlxcdFxcbiA4NzQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJTeXN0ZW0gZXJyb3IgZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbiA4NzU6XFx0XFx0XFx0XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg3NjpcXHRcXHRcXHRcXHRcXHRwbV9zdGF0ZSA9IG1oaV90cnlzZXRfcG1fc3RhdGUobWhpX2NudHJsLFxcbiA4Nzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TUhJX1BNX1NZU19FUlJfREVURUNUKTtcXG4gODc4OlxcdFxcdFxcdFxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNm1oaV9jbnRybC1cXHUwMDNlcG1fbG9jayk7XFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRpZiAocG1fc3RhdGUgPT0gTUhJX1BNX1NZU19FUlJfREVURUNUKVxcbiA4ODA6XFx0XFx0XFx0XFx0XFx0XFx0bWhpX3BtX3N5c19lcnJfaGFuZGxlcihtaGlfY250cmwpO1xcbiA4ODE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg4MjpcXHRcXHRcXHRcXHR9XFxuIDg4MzpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4ODQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJJbnZhbGlkIHN0YXRlOiAlc1xcXFxuXFxcIixcXG4gODg1OlxcdFxcdFxcdFxcdFxcdFxcdG1oaV9zdGF0ZV9zdHIobmV3X3N0YXRlKSk7XFxuIDg4NjpcXHRcXHRcXHRcXHR9XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4ODk6XFx0XFx0XFx0fVxcbiA4OTA6XFx0XFx0XFx0Y2FzZSBNSElfUEtUX1RZUEVfQ01EX0NPTVBMRVRJT05fRVZFTlQ6XFxuIDg5MTpcXHRcXHRcXHRcXHRtaGlfcHJvY2Vzc19jbWRfY29tcGxldGlvbihtaGlfY250cmwsIGxvY2FsX3JwKTtcXG4gODkyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4OTM6XFx0XFx0XFx0Y2FzZSBNSElfUEtUX1RZUEVfRUVfRVZFTlQ6XFxuIDg5NDpcXHRcXHRcXHR7XFxuIDg5NTpcXHRcXHRcXHRcXHRlbnVtIGRldl9zdF90cmFuc2l0aW9uIHN0ID0gREVWX1NUX1RSQU5TSVRJT05fTUFYO1xcbiA4OTY6XFx0XFx0XFx0XFx0ZW51bSBtaGlfZWVfdHlwZSBldmVudCA9IE1ISV9UUkVfR0VUX0VWX0VYRUNFTlYobG9jYWxfcnApO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlJlY2VpdmVkIEVFIGV2ZW50OiAlc1xcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MDAuMTk4MTUyNDU5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MjgyNzM0MDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIE5ldyBXV0FOIENvZGUgaW4gTUhJIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhpcyBuZXcgV1dBTiBmdW5jdGlvbmFsaXR5LCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHJlYWNoYWJsZSBieSBzeXprYWxsZXIuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgIGZ1bmN0aW9uLCB3aGljaCBoYW5kbGVzIHRoZSBNSEkgY29udHJvbCBldmVudCByaW5nLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBhbiBpbnRlcnJ1cHQgb3IgYSB0YXNrbGV0LCByaWdodD9cblxuVGhlIHNjZW5hcmlvIGlzIHRoaXM6IHN5emthbGxlciBlbXVsYXRlcyBhIFBDSSBkZXZpY2UsIHdoaWNoIHRoZW4gaWRlYWxseSB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQsIG1hcHBpbmcgdGhlIGV2ZW50IHJpbmcgd2l0aCBhbiBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBjb250YWluaW5nIGBNSElfRUVfQU1TU2AuIFRoaXMgZXZlbnQgdGhlbiBxdWV1ZXMgYERFVl9TVF9UUkFOU0lUSU9OX01JU1NJT05fTU9ERWAuIFRoZSBrZXJuZWwgdGhlbiBjYWxscyBgbWhpX3BtX21pc3Npb25fbW9kZV90cmFuc2l0aW9uYCwgYW5kIHRoZSBjcnV4IG9mIGl0IGFsbCwgYG1oaV9jcmVhdGVfZGV2aWNlc2AsIGlzIGV4ZWN1dGVkLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjcmVhdGVzIE1ISSBkZXZpY2VzIGJhc2VkIG9uIHRoZSBjaGFubmVscyBkZWZpbmVkIGluIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYElQX0NUUkxgIGNoYW5uZWxzLCBtZWFuaW5nIHRoYXQgaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgUENJIGRldmljZSBtYXRjaGluZyB0aGUgU2llcnJhIEVNOTE5eCBJRCAodGhhbmtzIHRvIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2J1cy9taGkvaG9zdC9wY2lfZ2VuZXJpYy5jYCksIHRoZSBzeXN0ZW0gd2lsbCB1c2UgYG1oaV9zaWVycmFfZW05MTl4X2NoYW5uZWxzYC4gU28sIGBtaGlfY3JlYXRlX2RldmljZXNgIGNyZWF0ZXMgYW4gYElQX0NUUkxgIGRldmljZS4gRnJvbSB0aGVyZSwgYG1oaV93d2FuX2R0cl9wcm9iZWAgaXMgY2FsbGVkIHRvIHJlZ2lzdGVyIHRoaXMgZGV2aWNlLlxuXG5Ob3csIGlmIHN5emthbGxlciB0aGVuIG9wZW5zIGEgV1dBTiBBVCBwb3J0IChwb3RlbnRpYWxseSBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBmb3IgY2hhbm5lbHMgbGlrZSBgRFVOYCBvciBgTUJJTWApLCB3ZSBoaXQgYG1oaV93d2FuX2N0cmxfZHRyX3J0c2AuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWhpX3d3YW5fY3RybF9wcm9iZWAgY3JlYXRlcyBXV0FOIHBvcnRzIGZvciBgRFVOYCwgYE1CSU1gLCBldGMuIElmIHN5emthbGxlciBjcmVhdGVzIHRoZSBgRFVOYCBjaGFubmVsIGRldmljZSwgdGhlbiBgbWhpX3d3YW5fY3RybF9wcm9iZWAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIGEgV1dBTiBwb3J0ISBUaGVuIHN5emthbGxlciBjYW4gb3BlbiB0aGlzIHBvcnQsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYHd3YW5fcG9ydF9vcF9zdGFydGAgYW5kIGZpbmFsbHksIGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYC4gVGhpcyBpbiB0dXJuIGNhbGxzIGBtaGlfd3dhbl9jdHJsX2R0cl9ydHNgLCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfc2VuZF9kdHJgLiBUaGlzIGZ1bmN0aW9uIHF1ZXVlcyBhIGJ1ZmZlciB0byB0aGUgYElQX0NUUkxgIGNoYW5uZWwgZGV2aWNlIHVzaW5nIGBtaGlfcXVldWVfYnVmYC5cblxuU28sIHRoZSBlbnRpcmUgZmxvdyBoaW5nZXMgb24gc3l6a2FsbGVyICpzdWNjZXNzZnVsbHkqIGVtdWxhdGluZyB0aGUgTUhJIFBDSSBkZXZpY2UgYW5kIGl0cyBldmVudCByaW5ncy4gQnV0IGRvZXMgaXQ/IFRoZSBnZW5lcmljIFBDSSBlbXVsYXRvciBpbiBzeXprYWxsZXIgY2FuIG1hcCBCQVJzIGFuZCB0cmlnZ2VyIGludGVycnVwdHMsIGJ1dCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIE1ISSBldmVudCByaW5nIG1lbW9yeSBsYXlvdXQuIFRoZSBNSEkgaG9zdCBkcml2ZXIgYWxsb2NhdGVzIHRoZSBldmVudCByaW5nIG1lbW9yeSBhbmQgY29tbXVuaWNhdGVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gdGhlIGRldmljZSB2aWEgTU1JTyByZWdpc3RlcnMuIFRoZSBkZXZpY2UgKG9yIGVtdWxhdG9yKSBpcyBzdXBwb3NlZCB0byB3cml0ZSBNSEkgZXZlbnRzIHRvIHRoZXNlIHBoeXNpY2FsIGFkZHJlc3NlcyBhbmQgdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFRoZSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24ndCByZWFkIHRoZXNlIE1NSU8gcmVnaXN0ZXJzIHRvIGZpbmQgdGhlIGV2ZW50IHJpbmcgYWRkcmVzc2VzLiBOZWl0aGVyIGRvZXMgaXQgd3JpdGUgdGhlIE1ISSBldmVudHMuIFRoZXJlZm9yZSwgdGhlcmUncyBubyB3YXkgdG8gdHJpZ2dlciBgTUhJX1BLVF9UWVBFX0VFX0VWRU5UYCBvciBhbnkgb3RoZXIgTUhJIGV2ZW50cy4gU2luY2Ugd2UgY2Fubm90IGdlbmVyYXRlIE1ISSBldmVudHMsIGBtaGlfcHJvY2Vzc19jdHJsX2V2X3JpbmdgIHdvbid0IGRldGVjdCBhbnl0aGluZywgYW5kIHRoZSBmbG93IGNvbXBsZXRlbHkgYnJlYWtzIGRvd24uIGBERVZfU1RfVFJBTlNJVElPTl9NSVNTSU9OX01PREVgIGlzbid0IHF1ZXVlZC4gTm8gZGV2aWNlcyBnZXQgY3JlYXRlZCwgbm8gV1dBTiBwb3J0cyBhcmUgbWFkZSwgYW5kIHRoZSBuZXcgY29kZSBpbiBgd3dhbl9jb3JlLmNgIGFuZCBgbWhpX3d3YW5fY3RybC5jYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLlxuXG5XYWl0LCBhcmUgdGhlcmUgYWx0ZXJuYXRpdmUgcm91dGVzIHRvIGdldCBXV0FOIHBvcnRzPyBJIHJlbWVtYmVyIGB3d2FuX2h3c2ltLmNgIGNyZWF0aW5nIHRoZW0uIEJ1dCwgY2hlY2tpbmcgYmFjayBpbiB0aGF0IHBhdGgsIGl0IGRvZXMgKm5vdCogc2V0IGBwb3J0LVx1MDAzZW9wcy1cdTAwM2VkdHJfcnRzYC4gU28sIHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgd291bGQgbm90IGJlIHJlYWNoZWQgdGhyb3VnaCB0aGlzIG1lYW5zIGVpdGhlci4gT2theSwgSSdsbCBkb3VibGUgY2hlY2sgdGhlIG90aGVyIGRyaXZlcnMgaW4gY2FzZSB0aGV5IGFyZSBzZXR0aW5nIGBkdHJfcnRzYCwgYnV0IG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhleSB3aWxsIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMToxNi40ODA4ODg3OTRaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjM4ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuZHRyX3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVxcdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0OlxcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMToxNi41MzQ1MzM2OTNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1MDM3NzcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBEVFIvUlRTIGNoZWNraW5nIGxvZ2ljIHdpdGhpbiBgd3dhbl9jb3JlLmNgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcG9ydHMgY3JlYXRlZCBieSBgbWhpX3d3YW5fY3RybC5jYC4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGNvbnN0cmFpbnQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWhpX3d3YW5fY3RybC5jYCBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgTUhJIGRldmljZXMsIGFuZCB0aGVzZSBhcmVuJ3QgeW91ciBydW4tb2YtdGhlLW1pbGwgUENJIGRldmljZXMuIFRoZXkgZGVtYW5kIHNvcGhpc3RpY2F0ZWQgRE1BIGFuZCByaW5nIGludGVyYWN0aW9ucywgc29tZXRoaW5nIHN5emthbGxlcidzIGdlbmVyaWMgUENJIGVtdWxhdG9yIGp1c3QgaXNuJ3QgYnVpbHQgdG8gaGFuZGxlLiBUaHVzLCB0aGUgY29uZGl0aW9uIGZvciB0aGlzIGNoZWNrIHRvIGJlIGV2YWx1YXRlZCBpcyB0aGF0IHRoZSBwb3J0IHdhcyBjcmVhdGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLCBhbmQgdGhhdCdzIG5vdCBwb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkLCBzeXprYWxsZXItZHJpdmVuIGVudmlyb25tZW50LiBUaGlzIGNvZGUgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUuXG5cbkJ1dCBJJ20gYSBiaXQgb2YgYSBzdGlja2xlciBmb3IgdGhvcm91Z2huZXNzLCBzbyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlcmUncyAqbm8qIG90aGVyIHJvdXRlIHRvIGNhbGxpbmcgYG1oaV93d2FuX2N0cmxfcHJvYmVgLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgaW5qZWN0IGRldmljZXMgZGlyZWN0bHkgb250byB0aGUgYG1oaWAgYnVzPyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIHN5c2ZzIG9yIGFueXRoaW5nIHNpbWlsYXIgY291bGQgb2ZmZXIgYSBiYWNrZG9vci4gR290dGEgcnVsZSBvdXQgZXZlcnkgcG9zc2liaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1Njk1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjI0Ljk4NDkxNDkwOVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjY5NTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfYWxsb2NfZGV2aWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz05MTk9aW50IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTEwMDktXFx0LyogUmVnaXN0ZXIgY29udHJvbGxlciB3aXRoIE1ISSBidXMgKi9cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTAxMDpcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDExLVxcdGlmIChJU19FUlIobWhpX2RldikpIHtcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYz0xMjA4PXN0YXRpYyB2b2lkIG1oaV9yZWxlYXNlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyNi1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6MTIyNzpzdHJ1Y3QgbWhpX2RldmljZSAqbWhpX2FsbG9jX2RldmljZShzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTIyOC17XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbnRlcm5hbC5oPTMxND1zdGF0aWMgaW5saW5lIHZvaWQgbWhpX2RlYnVnZnNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaC0zMTgtXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW50ZXJuYWwuaDozMTk6c3RydWN0IG1oaV9kZXZpY2UgKm1oaV9hbGxvY19kZXZpY2Uoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2ludGVybmFsLmgtMzIwLVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jPTM2Mz12b2lkIG1oaV9jcmVhdGVfZGV2aWNlcyhzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybClcXG4tLVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzQtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvbWFpbi5jOjM3NTpcXHRcXHRtaGlfZGV2ID0gbWhpX2FsbG9jX2RldmljZShtaGlfY250cmwpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L21haW4uYy0zNzYtXFx0XFx0aWYgKElTX0VSUihtaGlfZGV2KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MjYuNTc3NjE1ODcxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDU3ODMwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBNSEkgRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgc28gYG1oaV9hbGxvY19kZXZpY2VgIHNlZW1zIHRvIGJlIGFuIGludGVybmFsIGZ1bmN0aW9uLCBub3Qgc29tZXRoaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBvdXRzaWRlLiBUaGF0IGVsaW1pbmF0ZXMgdGhlIG1vc3Qgb2J2aW91cyBwb3RlbnRpYWwgc291cmNlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgZHJpdmVyKHMpIGFyZSBhY3R1YWxseSByZXNwb25zaWJsZSBmb3IgKmNyZWF0aW5nKiBNSEkgZGV2aWNlcyBpbiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gdHJhY2sgZG93biBob3cgdGhlc2UgTUhJIGhvc3QgZGV2aWNlcyBhcmUgYmVpbmcgcmVnaXN0ZXJlZC5cblxuTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIE1ISSBlbmRwb2ludCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBgZHJpdmVycy9idXMvbWhpL2VwL2A/IFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciBhbnl0aGluZyB0byBkbyB3aXRoIE1ISSBlbmRwb2ludCBkZXZpY2VzLiBCdXQsIG5vLCB3YWl0Li4uIHRoYXQgZnJhbWV3b3JrIGZvY3VzZXMgb24gKmVuZHBvaW50KiBkZXZpY2VzLiBJJ20gbG9va2luZyBmb3IgaG9zdCBkZXZpY2VzIGhlcmUsIHRoZSBvbmVzIHRoYXQgKmhvc3QqIHRoZSBNSEkgY29tbXVuaWNhdGlvbi5cblxuSGFuZyBvbi4uLiBpcyB0aGVyZSBhIGxvb3BiYWNrIGRyaXZlciBmb3IgTUhJLCBwZXJoYXBzPyBUaGF0J3MgYSBwb3NzaWJpbGl0eSBJIGhhZG4ndCBjb25zaWRlcmVkLiBBIGxvb3BiYWNrIGNvdWxkIGJlIGNyZWF0aW5nIGEgdmlydHVhbCBNSEkgaG9zdCwgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcHVycG9zZXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IGFuZ2xlLiBJdCdzIGEga2V5IGF2ZW51ZSB0byBleHBsb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY4OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjM1Ljc4MzQwMTY4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NjUzMzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaGlfcmVnaXN0ZXJfY29udHJvbGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3Q9MjA9QmVsb3cgYXJlIHRoZSByb2xlcyBvZiB0aGUgTUhJIGNvbnRyb2xsZXIgZHJpdmVyOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0LTI0LSogQWxsb2NhdGVzIHN0cnVjdCBtaGlfY29udHJvbGxlciBhbmQgcmVnaXN0ZXJzIHdpdGggdGhlIE1ISSBidXMgZnJhbWV3b3JrXFxuRG9jdW1lbnRhdGlvbi9taGkvdG9wb2xvZ3kucnN0OjI1OiAgd2l0aCBjaGFubmVsIGFuZCBldmVudCBjb25maWd1cmF0aW9ucyB1c2luZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlci5cXG5Eb2N1bWVudGF0aW9uL21oaS90b3BvbG9neS5yc3QtMjYtKiBJbml0aWF0ZXMgcG93ZXIgb24gYW5kIHNodXRkb3duIHNlcXVlbmNlXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYz04MDA9c3RhdGljIGludCBtaGlfcmVzZXRfYW5kX2FzeW5jX3Bvd2VyX3VwKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmMtODI2LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jOjgyNzpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04MjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBtaGlfaXJxLCBib29sIHNoYXJlZF9tc2ksIGludCBmYW1pbHkpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzUtXFx0bWhpX2NvbmZpZy50aW1lb3V0X21zID0gbWhpX3RpbWVvdXRfbXM7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM6ODc2OlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jbnRybCwgXFx1MDAyNm1oaV9jb25maWcpO1xcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5jLTg3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmM6ODc4OlxcdFxcdHBjaV9lcnIocGNpX2RldiwgXFxcIm1oaV9yZWdpc3Rlcl9jb250cm9sbGVyIGZhaWxlZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuYy04NzktXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4tLVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9taGlfY29udHJvbGxlci5oLTgtXFxuZHJpdmVycy9hY2NlbC9xYWljL21oaV9jb250cm9sbGVyLmg6OTpzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKnFhaWNfbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHZvaWQgX19pb21lbSAqbWhpX2JhcixcXG5kcml2ZXJzL2FjY2VsL3FhaWMvbWhpX2NvbnRyb2xsZXIuaC0xMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IG1oaV9pcnEsIGJvb2wgc2hhcmVkX21zaSwgaW50IGZhbWlseSk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL3FhaWMvcWFpY19kcnYuYz01NzA9c3RhdGljIGludCBxYWljX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk2LVxcbmRyaXZlcnMvYWNjZWwvcWFpYy9xYWljX2Rydi5jOjU5NzpcXHRxZGV2LVxcdTAwM2VtaGlfY250cmwgPSBxYWljX21oaV9yZWdpc3Rlcl9jb250cm9sbGVyKHBkZXYsIHFkZXYtXFx1MDAzZWJhcl9taGksIG1oaV9pcnEsXFxuZHJpdmVycy9hY2NlbC9xYWljL3FhaWNfZHJ2LmMtNTk4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBxZGV2LVxcdTAwM2VzaW5nbGVfbXNpLCBjb25maWctXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM9ODgxPXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jLTkxOC1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmM6OTE5OmludCBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jbnRybCxcXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtOTIwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL2J1cy9taGkvaG9zdC9pbml0LmMtMTA1Ni19XFxuZHJpdmVycy9idXMvbWhpL2hvc3QvaW5pdC5jOjEwNTc6RVhQT1JUX1NZTUJPTF9HUEwobWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L2luaXQuYy0xMDU4LVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYz0xMzYzPXN0YXRpYyBpbnQgbWhpX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9idXMvbWhpL2hvc3QvcGNpX2dlbmVyaWMuYy0xNDM3LVxcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmM6MTQzODpcXHRlcnIgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY250cmwsIG1oaV9jbnRybF9jb25maWcpO1xcbmRyaXZlcnMvYnVzL21oaS9ob3N0L3BjaV9nZW5lcmljLmMtMTQzOS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYz0zMzU9aW50IGF0aDExa19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDExa19wY2kgKmFiX3BjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmMtNDA5LVxcdGFiX3BjaS1cXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWhpLmM6NDEwOlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhdGgxMWtfbWhpX2NvbmZpZyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9taGkuYy00MTEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODc9aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMjY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6MjY1OlxcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VtaGlfY29uZmlnKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTI2Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oPTI5Mz1zdHJ1Y3QgbWhpX2NvbnRyb2xsZXJfY29uZmlnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgxLSAqIEZpZWxkcyBtYXJrZWQgYXMgKHJlcXVpcmVkKSBuZWVkIHRvIGJlIHBvcHVsYXRlZCBieSB0aGUgY29udHJvbGxlciBkcml2ZXJcXG5pbmNsdWRlL2xpbnV4L21oaS5oOjM4MjogKiBiZWZvcmUgY2FsbGluZyBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcigpLiBGb3IgdGhlIGZpZWxkcyBtYXJrZWQgYXMgKG9wdGlvbmFsKVxcbmluY2x1ZGUvbGludXgvbWhpLmgtMzgzLSAqIHRoZXkgY2FuIGJlIHBvcHVsYXRlZCBkZXBlbmRpbmcgb24gdGhlIHVzZWNhc2UuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oPTU0Mz12b2lkIG1oaV9mcmVlX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9taGkuaC01NDUtLyoqXFxuaW5jbHVkZS9saW51eC9taGkuaDo1NDY6ICogbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIgLSBSZWdpc3RlciBNSEkgY29udHJvbGxlclxcbmluY2x1ZGUvbGludXgvbWhpLmgtNTQ3LSAqIEBtaGlfY250cmw6IE1ISSBjb250cm9sbGVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21oaS5oLTU0OS0gKi9cXG5pbmNsdWRlL2xpbnV4L21oaS5oOjU1MDppbnQgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuaW5jbHVkZS9saW51eC9taGkuaC01NTEtXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1oaV9jb250cm9sbGVyX2NvbmZpZyAqY29uZmlnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzE6MzcuNDI5OTQxMDQ3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzY5NTU1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgUGF0aHMgaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJ3Mgbm8gd2F5IHRvIHRyaWdnZXIgYG1oaV93d2FuX2N0cmxfcHJvYmVgIHdpdGhvdXQgYW4gTUhJIGRldmljZSwgYW5kIHRoYXQgb25seSBoYXBwZW5zIGlmIHRoZSBNSEkgY29udHJvbGxlciBpbml0aWFsaXplcyBhbmQgZW50ZXJzIG1pc3Npb24gbW9kZS4gVGhhdCBtaXNzaW9uIG1vZGUgdHJhbnNpdGlvbiByZWxpZXMgb24gcmVjZWl2aW5nIGFuIGBNSElfUEtUX1RZUEVfRUVfRVZFTlRgIHdpdGggYE1ISV9FRV9BTVNTYCBpbiBpdHMgZXZlbnQgcmluZywgd2hpY2ggdGhlIGhhcmR3YXJlIHBvcHVsYXRlcyB2aWEgRE1BLiBDcnVjaWFsbHksIHRoZSBnZW5lcmljIFBDSSBlbXVsYXRvciBpbiBzeXprYWxsZXIgZG9lc24ndCBpbXBsZW1lbnQgdGhlIE1ISSBwcm90b2NvbCwgc28gaXQgKndvbid0KiBwb3B1bGF0ZSB0aGlzIGV2ZW50IHJpbmcgY29ycmVjdGx5LiAgU28sIG5vIG1pc3Npb24gbW9kZSwgbm8gTUhJIGRldmljZSwgYW5kLCBjb25zZXF1ZW50bHksIG5vdGhpbmcgaW4gYG1oaV93d2FuX2N0cmwuY2Agb3IgaXRzIGludGVyYWN0aW9ucyB3aXRoIGB3d2FuX2NvcmUuY2Agd2lsbCBoYXBwZW4uXG5cbk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBhbnkgb2YgdGhlIGB3d2FuX2NvcmUuY2AgY2hhbmdlcyBjYW4gYmUgaGl0ICphbm90aGVyKiB3YXkuIFRoZSBjaGFuZ2UgaW4gYHd3YW5fcG9ydF9vcF9zdGFydGAgaW5jbHVkZXMgYSBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AgY2hlY2suIEFzIEkgcmVjYWxsLCBvbmx5IGBtaGlfd3dhbl9jdHJsLmNgIHNldHMgYGR0cl9ydHNgLiBUaGF0IGNvZGUgYmxvY2sgcmFpc2VzIERUUi9SVFMgb24gdGhlIGZpcnN0IG9wZW4gb2YgYW4gQVQgcG9ydC4gU2luY2UgaXQncyBkZXBlbmRlbnQgb24gdGhhdCBmdW5jdGlvbiBwb2ludGVyIGJlaW5nIHNldCwgd2hpY2ggaXMgTUhJLXNwZWNpZmljLCBpdCdzIHVucmVhY2hhYmxlLlxuXG5Pa2F5LCB3aGF0IGFib3V0IGB3d2FuX3BvcnRfZm9wc19hdF9pb2N0bGA/IFRoYXQgc2VjdGlvbiBjb250YWlucyB0aGUgRFRSL1JUUyBpb2N0bCBjYWxscywgYW5kIGFsc28gZGVwZW5kcyBvbiBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AuIFRoaXMgaXMgYWxzbyBnYXRlZCBieSB0aGUgc2FtZSBgZHRyX3J0c2AgcG9pbnRlciBzZXQgYnkgdGhlIHVucmVhY2hhYmxlIGBtaGlfd3dhbl9jdHJsLmNgIGNvZGUuXG5cblNvLCB0aGUgZW50aXJlIGZ1bmN0aW9uYWwgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgcG9ydC1cdTAwM2VvcHMtXHUwMDNlZHRyX3J0c2AsIHdoaWNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBleGNsdXNpdmVseSBzZXQgYnkgYG1oaV93d2FuX2N0cmwuY2AsIHdoaWNoIHJlcXVpcmVzIGFuIE1ISSBkZXZpY2UsIHdoaWNoIGlzbid0IHBvc3NpYmxlIGluIGEgc3l6a2FsbGVyIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgc2ltcGx5IGltcG9zc2libGUgdG8gaGl0LlxuXG5Ob3csIGxldCdzIGNpcmNsZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHNwZWNpZmllczogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSBNSEkgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgKFF1YWxjb21tIG1vZGVtcykgYW5kIHRoZXJlJ3Mgbm8ga2VybmVsLXNpZGUgc29mdHdhcmUgTUhJIGVtdWxhdG9yLCB1bmxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgd3dhbl9od3NpbWAsIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuIFN0aWxsLCBJIHNob3VsZCBjaGVjayB0aGUgbGF0dGVyIGFnYWluLi4uIGp1c3QgaW4gY2FzZSBJIG1pc3NlZCBhbnkgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1MC43OTk1MDAxMThaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjg1MTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vd3dhbl9od3NpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1MC44NDU4MTA3NjdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MDUyODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqV1dBTiBEcml2ZXIgRGVlcCBEaXZlKipcblxuSG1tLCByaWdodCwgSSB3YXMganVzdCBkb3VibGUtY2hlY2tpbmcgdGhlIGB3d2FuX2h3c2ltLmNgIGNvZGUsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzZXR0aW5nIG9mIGBkdHJfcnRzYC4gVGhhdCdzIG5vdCBpdHMgcmVzcG9uc2liaWxpdHkuIEl0J3MgZm9jdXNlZCBvbiB0aGUgaGFyZHdhcmUgc2ltdWxhdGlvbiBhc3BlY3QsIG5vdCB0aGUgaGlnaGVyLWxldmVsIG1vZGVtIGNvbnRyb2wgc2lnbmFscy5cblxuU28sIHdoZXJlICppcyogdGhhdCBoYW5kbGVkIHRoZW4/IEkgbmVlZCB0byB0aGluayBiaWdnZXIgcGljdHVyZS4gV2hhdCBhYm91dCB0aGUgb3RoZXIgV1dBTiBkcml2ZXJzIGluIHRoZSBzeXN0ZW0/IEknbSBiZXR0aW5nIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW4gYW5vdGhlciBzZWN0aW9uLCBsaWtlbHkgYmFzZWQgb24gdGhlIHNwZWNpZmljIGhhcmR3YXJlIG9yIG1vZGVtIGJlaW5nIHVzZWQuIFRoZXJlJ3MgcHJvYmFibHkgYSBtb3JlIGdlbmVyYWxpemVkIGZyYW1ld29yayBvciBhYnN0cmFjdGlvbiBsYXllciBkZWFsaW5nIHdpdGggdGhvc2UgY29udHJvbCBzaWduYWxzLiBJIG5lZWQgdG8gc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hpY2ggb2YgdGhvc2UgZnJhbWV3b3JrcyBvciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBkdHJfcnRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QyMjozMTo1NC43MTYzNDE0NzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTQxNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdHJfcnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM9MTM1PXN0YXRpYyBpbnQgbWhpX3d3YW5fY3RybF9zZW5kX2R0cihzdHJ1Y3QgbWhpX3d3YW5fZGV2ICptaGl3d2FuLCB1bnNpZ25lZCBpbnQgbWRtYml0cylcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTE3Ny1cXG5kcml2ZXJzL25ldC93d2FuL21oaV93d2FuX2N0cmwuYzoxNzg6c3RhdGljIHZvaWQgbWhpX3d3YW5fY3RybF9kdHJfcnRzKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIGJvb2wgb24pXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jPTI0MD1zdGF0aWMgY29uc3Qgc3RydWN0IHd3YW5fcG9ydF9vcHMgd3dhbl9wb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmMtMjQzLVxcdC50eCA9IG1oaV93d2FuX2N0cmxfdHgsXFxuZHJpdmVycy9uZXQvd3dhbi9taGlfd3dhbl9jdHJsLmM6MjQ0OlxcdC5kdHJfcnRzID0gbWhpX3d3YW5fY3RybF9kdHJfcnRzLFxcbmRyaXZlcnMvbmV0L3d3YW4vbWhpX3d3YW5fY3RybC5jLTI0NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYz03NDI9c3RhdGljIGludCB3d2FuX3BvcnRfb3Bfc3RhcnQoc3RydWN0IHd3YW5fcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY1LVxcdFxcdGlmIChwb3J0LVxcdTAwM2VzdGFydF9jb3VudCA9PSAxIFxcdTAwMjZcXHUwMDI2IHBvcnQtXFx1MDAzZXR5cGUgPT0gV1dBTl9QT1JUX0FUIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3NjY6XFx0XFx0ICAgIHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cykge1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY3LVxcdFxcdFxcdHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYzo3Njg6XFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKHBvcnQsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzY5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9Nzc4PXN0YXRpYyB2b2lkIHd3YW5fcG9ydF9vcF9zdG9wKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTc4My1cXHRcXHQvKiBNaXJyb3IgVFRZIHNlbWFudGljczogZHJvcCBEVFIvUlRTIG9uIGxhc3QgY2xvc2Ugb2YgYW4gQVQgcG9ydCAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM6Nzg0OlxcdFxcdGlmIChwb3J0LVxcdTAwM2VvcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSA9PSBXV0FOX1BPUlRfQVQgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKSB7XFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy03ODUtXFx0XFx0XFx0cG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzIFxcdTAwMjY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTtcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjc4NjpcXHRcXHRcXHRwb3J0LVxcdTAwM2VvcHMtXFx1MDAzZWR0cl9ydHMocG9ydCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmMtNzg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vd3dhbl9jb3JlLmM9OTkxPXN0YXRpYyBsb25nIHd3YW5fcG9ydF9mb3BzX2F0X2lvY3RsKHN0cnVjdCB3d2FuX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jLTEwNTAtXFx0XFx0XFx0cG9ydC1cXHUwMDNlYXRfZGF0YS5tZG1iaXRzID0gbWRtYml0cztcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTE6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZW9wcy1cXHUwMDNlZHRyX3J0cylcXG5kcml2ZXJzL25ldC93d2FuL3d3YW5fY29yZS5jOjEwNTI6XFx0XFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VkdHJfcnRzKHBvcnQsXFxuZHJpdmVycy9uZXQvd3dhbi93d2FuX2NvcmUuYy0xMDUzLVxcdFxcdFxcdFxcdFxcdCAgICEhKHBvcnQtXFx1MDAzZWF0X2RhdGEubWRtYml0cyBcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDIyOjMxOjU1LjA1Nzc2MjEwMloiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2NDk1OTgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbWhpX3d3YW5fY3RybC5jYCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGFmdGVyIGRpZ2dpbmcgaW50byB0aGlzLCBJJ3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGUgYGR0cl9ydHNgIHNldHRpbmcgaXMgKm9ubHkqIHRvdWNoZWQgYnkgYG1oaV93d2FuX2N0cmwuY2AuIFRoYXQsIGNvdXBsZWQgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnZpcm9ubWVudCB3ZSdyZSB3b3JraW5nIHdpdGgsIGxlYWRzIG1lIHRvIGEgcHJldHR5IHNvbGlkIGNvbmNsdXNpb246IHRoZXNlIGNoYW5nZXMgYXJlIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZXkncmUgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHdhbnRlZCB0byBzZWUgaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgc25lYWsgYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgcGVyaGFwcyBieSBkaXJlY3RseSBjYWxsaW5nIGBtaGlfd3dhbl9jdHJsX3Byb2JlYCBvciBzb21lIHNpbWlsYXIgZnVuY3Rpb24uIEJ1dCwgbm8sIHN5emthbGxlciBkb2Vzbid0IGRpcmVjdGx5IGludm9rZSBkcml2ZXIgcHJvYmUgZnVuY3Rpb25zLiBJdCB3b3JrcyBieSBnZW5lcmF0aW5nIGRldmljZXMgKFBDSSwgVVNCLCBldGMuKSBhbmQgYWxsb3dpbmcgdGhlIGtlcm5lbCdzIGRyaXZlciBjb3JlIHRvIGhhbmRsZSB0aGUgYmluZGluZy4gU2luY2Ugc3l6a2FsbGVyIGNhbid0IHNpbXVsYXRlIG9yIGNyZWF0ZSBhbiBNSEkgZGV2aWNlLCBgbWhpX3d3YW5fY3RybF9wcm9iZWAgd2lsbCBuZXZlciBnZXQgY2FsbGVkLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgY29kZSBwYXRoIGhhcyBhIGhhcmQgZGVwZW5kZW5jeSBvbiBNSEkgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBvciBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU2NSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzI6MDUuOTIyNzI0OTg5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ISSBXV0FOIGNvbnRyb2wgZHJpdmVyIGFuZCBXV0FOIGNvcmUgdG8gc3VwcG9ydCBEVFIvUlRTIHNpZ25hbGluZyBvdmVyIGFuIE1ISSBJUF9DVFJMIGNoYW5uZWwuIFRoZSBuZXcgY29kZSBpbiB3d2FuX2NvcmUuYyBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIFdXQU4gcG9ydCBwcm92aWRlcyB0aGUgYGR0cl9ydHNgIGNhbGxiYWNrLCB3aGljaCBpcyBvbmx5IGltcGxlbWVudGVkIGJ5IGBtaGlfd3dhbl9jdHJsLmNgLiBTaW5jZSBNSEkgZGV2aWNlcyByZXF1aXJlIHNwZWNpZmljIFF1YWxjb21tIG1vZGVtIGhhcmR3YXJlIGFuZCBjb21wbGV4IERNQS9yaW5nIGludGVyYWN0aW9ucyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhlIE1ISSBob3N0IGNvbnRyb2xsZXIgd2lsbCBmYWlsIHRvIGluaXRpYWxpemUgYW5kIHdpbGwgbm90IGNyZWF0ZSBhbnkgTUhJIGRldmljZXMuIENvbnNlcXVlbnRseSwgdGhlIFdXQU4gcG9ydHMgd2lsbCBub3QgYmUgY3JlYXRlZCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMjI6MzI6MDUuOTIyNzU1NDU5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowptm88[1] Phase: Running StartedAt: 2026-08-07 22:32:17 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowptm88[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 22:32:17 +0000 UTC FinishedAt: 2026-08-07 22:32:22 +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,}