Name: series-workflowcxfbq Phase: Succeeded StartedAt: 2026-07-12 04:36:00 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[0] Phase: Succeeded StartedAt: 2026-07-12 04:36:00 +0000 UTC FinishedAt: 2026-07-12 05:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 04:36:00 +0000 UTC FinishedAt: 2026-07-12 05:02:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PSE_PD692X0", "PSE_SI3474", "PSE_TPS23881" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PSE_PD692X0", "PSE_SI3474", "PSE_TPS23881" ], "series_id": "e561a5b0-3b82-4610-ad7d-227cf37459ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pse_release_pis", "pse_pi_is_enabled", "pse_pi_enable", "pse_pi_disable", "pse_controller_unregister" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UFNFX1BENjkyWDAmIzM0OywKICAgICYjMzQ7UFNFX1NJMzQ3NCYjMzQ7LAogICAgJiMzNDtQU0VfVFBTMjM4ODEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2VfcmVsZWFzZV9waXMmIzM0OywKICAgICYjMzQ7cHNlX3BpX2lzX2VuYWJsZWQmIzM0OywKICAgICYjMzQ7cHNlX3BpX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtwc2VfcGlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZCBkaXNhYmxlIGZsdXNoLCB3aGljaCBhY2Nlc3NlcyB0aGUgZnJlZWQgYHBjZGV2LVx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IGE1ZTZkN2IyNmI5ZmQ3Li4yMWNjYjUxNDY2MTYwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTE0NCw3ICYjNDM7MTQ0LDEzIEBAIHN0YXRpYyB2b2lkIHBzZV9yZWxlYXNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdFx0b2Zfbm9kZV9wdXQocGNkZXYtXHUwMDNlcGlbaV0ucGFpcnNldFsxXS5ucCk7XG4gXHRcdG9mX25vZGVfcHV0KHBjZGV2LVx1MDAzZXBpW2ldLm5wKTtcbiBcdH1cbiYjNDM7XHQvKiBGcmVlIHVuZGVyIHRoZSBsb2NrIHNvIHRoZSBOVUxMIHN0b3JlIGlzIGF1dGhvcml0YXRpdmUgYWdhaW5zdFxuJiM0MztcdCAqIHRoZSByZWd1bGF0b3Igb3BzIHRoYXQgcmVhZCBwY2Rldi1cdTAwM2VwaSB1bmRlciBwY2Rldi1cdTAwM2Vsb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwY2Rldi1cdTAwM2VwaSk7XG4mIzQzO1x0cGNkZXYtXHUwMDNlcGkgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDIxLDYgJiM0Mzs0MjcsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBcbiBcdGlkID0gcmRldl9nZXRfaWQocmRldik7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIENvbnRyb2xsZXIgbWF5IGJlIHVucmVnaXN0ZXJlZCAocGNkZXYtXHUwMDNlcGkgZnJlZWQpIG1pZC10ZWFyZG93bi4gKi9cbiYjNDM7XHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFx0aWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LVx1MDAzZXBpW2lkXS5wd19kKSkge1xuIFx0XHRyZXQgPSBwY2Rldi1cdTAwM2VwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZDtcbiBcdFx0Z290byBvdXQ7XG5AQCAtNjc0LDYgJiM0Mzs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIFxuIFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0LyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi1cdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xuJiM0MztcdGlmICghcGNkZXYtXHUwMDNlcGkpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiBcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cdTAwM2VwaVtpZF0ucHdfZCkpIHtcbiBcdFx0LyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLlxuIFx0XHQgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuXG5AQCAtNzAyLDE1ICYjNDM7NzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIHtcbiBcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTtcbi1cdHN0cnVjdCBwc2VfcGkgKnBpO1xuIFx0aW50IGlkLCByZXQ7XG4gXG4gXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xuLVx0cGkgPSBcdTAwMjZwY2Rldi1cdTAwM2VwaVtpZF07XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyXG4mIzQzO1x0ICogcGNkZXYtXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbiBcdGlmICghcmV0KVxuLVx0XHRwaS1cdTAwM2VhZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiYjNDM7XHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTExMTQsMTEgJiM0MzsxMTM1LDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuLVx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbi1cdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4mIzQzO1x0LyogU3RvcCB0aGUgSVJRIGFuZCBub3RpZmljYXRpb24gd29ya2VyIGJlZm9yZSBmcmVlaW5nIHdoYXQgdGhleVxuJiM0MztcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbiYjNDM7XHQgKiB0aGF0IHBzZV9mbHVzaF9wd19kcygpIGRyb3BzLlxuJiM0MztcdCAqL1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbiBcdFx0ZGlzYWJsZV9pcnEocGNkZXYtXHUwMDNlaXJxKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cGNkZXYtXHUwMDNlbnRmX3dvcmspO1xuJiM0MztcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4mIzQzO1x0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbiBcdGtmaWZvX2ZyZWUoXHUwMDI2cGNkZXYtXHUwMDNlbnRmX2ZpZm8pO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwc2VfbGlzdF9tdXRleCk7XG4gXHRsaXN0X2RlbChcdTAwMjZwY2Rldi1cdTAwM2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BTRV9QRDY5MlgwJiMzNDssCiAgICAmIzM0O1BTRV9TSTM0NzQmIzM0OywKICAgICYjMzQ7UFNFX1RQUzIzODgxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNlX3JlbGVhc2VfcGlzJiMzNDssCiAgICAmIzM0O3BzZV9waV9pc19lbmFibGVkJiMzNDssCiAgICAmIzM0O3BzZV9waV9lbmFibGUmIzM0OywKICAgICYjMzQ7cHNlX3BpX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXIgY29yZSBmcmFtZXdvcmsuIFRoZSBidWcgb2NjdXJzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yIGNvcmUmIzM5O3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cdTAwM2VwaWAgYXJyYXkuIFRoZSBwYXRjaCBhZGRzIE5VTEwgY2hlY2tzIGFuZCByZW9yZGVycyB0ZWFyZG93biBzdGVwcyB0byBwcmV2ZW50IHRoaXMuIFRoZSBQU0UgY29yZSBhbmQgaXRzIGRyaXZlcnMgKGUuZy4sIEkyQy1iYXNlZCBQRDY5MngwKSBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBpbnN0YW50aWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlbSB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwppbmRleCBhNWU2ZDdiMjZiOWZkNy4uMjFjY2I1MTQ2NjE2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCkBAIC0xNDQsNyAmIzQzOzE0NCwxMyBAQCBzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiAJCW9mX25vZGVfcHV0KHBjZGV2LSZndDtwaVtpXS5wYWlyc2V0WzFdLm5wKTsKIAkJb2Zfbm9kZV9wdXQocGNkZXYtJmd0O3BpW2ldLm5wKTsKIAl9CiYjNDM7CS8qIEZyZWUgdW5kZXIgdGhlIGxvY2sgc28gdGhlIE5VTEwgc3RvcmUgaXMgYXV0aG9yaXRhdGl2ZSBhZ2FpbnN0CiYjNDM7CSAqIHRoZSByZWd1bGF0b3Igb3BzIHRoYXQgcmVhZCBwY2Rldi0mZ3Q7cGkgdW5kZXIgcGNkZXYtJmd0O2xvY2suCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGNkZXYtJmd0O2xvY2spOwogCWtmcmVlKHBjZGV2LSZndDtwaSk7CiYjNDM7CXBjZGV2LSZndDtwaSA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKIH0KIAogLyoqCkBAIC00MjEsNiAmIzQzOzQyNywxMSBAQCBzdGF0aWMgaW50IHBzZV9waV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogCiAJaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAltdXRleF9sb2NrKCZhbXA7cGNkZXYtJmd0O2xvY2spOwomIzQzOwkvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LSZndDtwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqLwomIzQzOwlpZiAoIXBjZGV2LSZndDtwaSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LSZndDtwaVtpZF0ucHdfZCkpIHsKIAkJcmV0ID0gcGNkZXYtJmd0O3BpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkOwogCQlnb3RvIG91dDsKQEAgLTY3NCw2ICYjNDM7Njg1LDExIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIAogCWlkID0gcmRldl9nZXRfaWQocmRldik7CiAJbXV0ZXhfbG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJLyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi0mZ3Q7cGkgZnJlZWQpIG1pZC10ZWFyZG93bi4gKi8KJiM0MzsJaWYgKCFwY2Rldi0mZ3Q7cGkpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiAJaWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LSZndDtwaVtpZF0ucHdfZCkpIHsKIAkJLyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLgogCQkgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuCkBAIC03MDIsMTUgJiM0Mzs3MTgsMjAgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogc3RhdGljIGludCBwc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IHBzZV9waSAqcGk7CiAJaW50IGlkLCByZXQ7CiAKIAlpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwotCXBpID0gJmFtcDtwY2Rldi0mZ3Q7cGlbaWRdOwogCW11dGV4X2xvY2soJmFtcDtwY2Rldi0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyCiYjNDM7CSAqIHBjZGV2LSZndDtwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwY2Rldi0mZ3Q7cGkpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAJcmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7CiAJaWYgKCFyZXQpCi0JCXBpLSZndDthZG1pbl9zdGF0ZV9lbmFibGVkID0gMDsKJiM0MzsJCXBjZGV2LSZndDtwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZCA9IDA7CiAKIAltdXRleF91bmxvY2soJmFtcDtwY2Rldi0mZ3Q7bG9jayk7CiAJcmV0dXJuIDA7CkBAIC0xMTE0LDExICYjNDM7MTEzNSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CiAgKi8KIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIHsKLQlwc2VfZmx1c2hfcHdfZHMocGNkZXYpOwotCXBzZV9yZWxlYXNlX3BpcyhwY2Rldik7CiYjNDM7CS8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXkKJiM0MzsJICogcmVhY2g6IGJvdGggdG91Y2ggcGNkZXYtJmd0O3BpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC0mZ3Q7c3VwcGx5CiYjNDM7CSAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuCiYjNDM7CSAqLwogCWlmIChwY2Rldi0mZ3Q7aXJxKQogCQlkaXNhYmxlX2lycShwY2Rldi0mZ3Q7aXJxKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7cGNkZXYtJmd0O250Zl93b3JrKTsKJiM0MzsJcHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTsKJiM0MzsJcHNlX3JlbGVhc2VfcGlzKHBjZGV2KTsKIAlrZmlmb19mcmVlKCZhbXA7cGNkZXYtJmd0O250Zl9maWZvKTsKIAltdXRleF9sb2NrKCZhbXA7cHNlX2xpc3RfbXV0ZXgpOwogCWxpc3RfZGVsKCZhbXA7cGNkZXYtJmd0O2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBTRSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBOVUxMIGNoZWNrcyBhcm91bmQgYHBjZGV2LSZndDtwaWAgd2l0aGluIGEgZmV3IGZ1bmN0aW9uczogYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBhbmQgYHBzZV9waV9kaXNhYmxlYC4gVGhhdCYjMzk7cyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBJIGFsd2F5cyBhcHByZWNpYXRlIHRoYXQuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgYHBzZV9yZWxlYXNlX3Bpc2AgdG8gc2V0IGBwY2Rldi0mZ3Q7cGlgIHRvIE5VTEwsIGFsbCB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgYHBjZGV2LSZndDtsb2NrYC4gVGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpc3N1ZSB3YXMgaWRlbnRpZmllZCBhbmQgdGhlIGxvY2sgYWRkZWQgdG8gcHJvdGVjdCBpdC4gR29vZCBjYXRjaCB0aGVyZS4gRmluYWxseSwgSSBzZWUgc29tZSByZW9yZGVyaW5nIGhhcHBlbmluZyBpbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBleGFjdGx5IGlzIHRoaXMgJiMzNDtQU0UmIzM0OyB0aGluZz8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHJpZ2h0LCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQb3dlciBvdmVyIEV0aGVybmV0IHNpZGUgb2YgdGhpbmdzLiBPa2F5LCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc3Vic3lzdGVtIGZvciBQU0UgY29udHJvbGxlcnMsIHdoaWNoICpjb3VsZCogYmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZXMgaGVyZS4gVGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBnaXZlIHVzIGEgZ29vZCBpZGVhIG9mIHdoYXQmIzM5O3MgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFNFX0NPTlRST0xMRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6NjptZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERyaXZlciBMYW5kc2NhcGUgZm9yIFBTRSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwcmFjdGljYWxpdGllcy4gVGhlIGNvcmUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciBzdXBwb3J0LCBvciByYXRoZXIgdGhlIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNvbnRleHQgb2YgUFNFIChQb3dlciBTeXN0ZW0gRW5naW5lZXJpbmcpIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGV4aXN0aW5nIGRyaXZlcnMsIGxpYnJhcmllcywgb3IgQVBJcyBhcmUgYXZhaWxhYmxlLCBhbmQgd2hlcmUgdGhlIGdhcHMgYXJlLgoKV2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmZXcgYW5nbGVzIGhlcmUuIEZpcnN0LCBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIG1heWJlIHNwZWNpZmljIGNoaXBzZXRzIG9yIGludGVyZmFjZXMuIFRoZW4sIG1vcmUgYWJzdHJhY3QgbGV2ZWxzIOKAkyBwb3dlciBtYW5hZ2VtZW50IGZyYW1ld29ya3Mgb3Igc3RhbmRhcmQgcHJvdG9jb2xzIHdlIGNhbiBsZXZlcmFnZS4gQXJlIHRoZXJlIHByZS1idWlsdCBkcml2ZXJzIGZvciB0aGUgcGFydGljdWxhciBoYXJkd2FyZSwgb3IgYXJlIHdlIHN0YXJpbmcgZG93biBhIGN1c3RvbSBkcml2ZXIgZGV2ZWxvcG1lbnQgcHJvamVjdD8gQW5kIHdoYXQgYWJvdXQgdGhlIHNvZnR3YXJlIHNpZGU/IEFyZSB0aGUgZHJpdmVycyBkZXNpZ25lZCB3ZWxsIHRvIGhhbmRsZSBjb21wbGV4IGNhbGN1bGF0aW9ucyBhbmQgb3B0aW1pemF0aW9ucz8KClRoaXMgYWxzbyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2lsbCB0aGUgZHJpdmVycyBiZSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIE9TLCBvciBiZSBoYW5kbGVkIHRocm91Z2ggYSBkZWRpY2F0ZWQgY29udHJvbGxlcj8gSG93IGRvIHRoZXkgaW50ZXJmYWNlIHdpdGggdGhlIGNvbnRyb2wgc3lzdGVtPyBJcyB0aGVyZSBhIG5lZWQgZm9yIHNvbWUgc29ydCBvZiBtaWRkbGUtd2FyZSwgc28gdGhlIGRyaXZlcnMgYXJlIHBvcnRhYmxlPyBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhbiBpbmZvcm1lZCBwbGFuIGZvciBkZXZlbG9wbWVudC4gVGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgZHJpdmVycyB3aWxsIGRpcmVjdGx5IGluZmx1ZW5jZSBteSBkZXNpZ24gY2hvaWNlcyBmb3IgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtwZDY5MngwLmMmIzM0OywKICAgICYjMzQ7cHNlX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtwc2VfcmVndWxhdG9yLmMmIzM0OywKICAgICYjMzQ7c2kzNDc0LmMmIzM0OywKICAgICYjMzQ7dHBzMjM4ODEuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEhhcmR3YXJlIERyaXZlciBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMuLi4gaXQmIzM5O3MgY2xlYXJseSBhIGhhcmR3YXJlIGRyaXZlciBzdWJzeXN0ZW0uIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGZyb20gdXNlciBzcGFjZT8mIzM0OyBJdCYjMzk7cyBjcnVjaWFsIGZvciBtb3N0IG9mIHdoYXQgSSBkby4gTm93LCB0byBmaWd1cmUgdGhhdCBvdXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBwc2VfY29yZS5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBwbGFjZSB0byBmaW5kIHRoZSB1c2VyIHNwYWNlIGludGVyZmFjZXMsIGlmIGFueSBleGlzdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsocHNlX3BpX2lzX2VuYWJsZWR8cHNlX3BpX2VuYWJsZXxwc2VfcGlfZGlzYWJsZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00MDM9c3RhdGljIGJvb2wgcHNlX3B3X2RfaXNfc3dfcHdfY29udHJvbChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldixcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00MTctXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo0MTg6c3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQxOS17XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9NDUyPXN0YXRpYyB2b2lkIHBzZV9waV9kZWFsbG9jYXRlX3B3X2J1ZGdldChzdHJ1Y3QgcHNlX3BpICpwaSlcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00NjEtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo0NjI6ICogX3BzZV9waV9kaXNhYmxlIC0gQ2FsbCBkaXNhYmxlIG9wZXJhdGlvbi4gQXNzdW1lcyB0aGUgUFNFIGxvY2sgaGFzIGJlZW5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2My0gKlx0XHQgICAgIGFjcXVpcmVkLlxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2OC0gKi9cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQ2OTpzdGF0aWMgaW50IF9wc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDcwLXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00OTY9c3RhdGljIGludCBwc2VfZGlzYWJsZV9waV9wb2woc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy01MDMtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo1MDQ6XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTUwNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9NjI0PXN0YXRpYyBpbnQgX3BzZV9waV9kZWxpdmVyeV9wb3dlcl9zd19wd19jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3NS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjY3NjpzdGF0aWMgaW50IHBzZV9waV9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy02Nzcte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTcxNy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjcxODpzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNzE5LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy03MzEtXHR9XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo3MzI6XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMy1cdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcHNlX3BpX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg0MjpcdC5pc19lbmFibGVkID0gcHNlX3BpX2lzX2VuYWJsZWQsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDM6XHQuZW5hYmxlID0gcHNlX3BpX2VuYWJsZSxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg0NDpcdC5kaXNhYmxlID0gcHNlX3BpX2Rpc2FibGUsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy04NDUtXHQuZ2V0X3ZvbHRhZ2UgPSBwc2VfcGlfZ2V0X3ZvbHRhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTIyOT1zdGF0aWMgaW50IHBzZV9zZXRfY29uZmlnX2lzcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNTgtXHRcdCAgICBwY2Rldi1cdTAwM2VwaVtpZF0uaXNyX3BkX2RldGVjdGVkKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTI1OTpcdFx0XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNjAtXHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5pc3JfcGRfZGV0ZWN0ZWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBSZWd1bGF0b3IgT3BlcmF0aW9ucyBhbmQgUG90ZW50aWFsIFRyaWdnZXIgTWVjaGFuaXNtcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBGcm9tIHRoZSBjb2RlLCB0aGV5JiMzOTtyZSBjbGVhcmx5IHJlZ3VsYXRvciBvcGVyYXRpb25zLiBUaGUgcmVndWxhdG9yIHN1YnN5c3RlbSBpcyB0aGUgY29uc3VtZXIgaGVyZSwgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHNvbWV0aGluZy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBjYW4gd2UgaW50ZXJhY3Qgd2l0aCB0aGVzZSByZWd1bGF0b3JzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb250cm9sIHBhdGhzLiBDYW4gd2UgaW50ZXJmYWNlIHZpYSBzeXNmcz8gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGZpcnN0IHBvcnQgb2YgY2FsbCBmb3IgbG93ZXItbGV2ZWwgZGV2aWNlIGNvbnRyb2wuIE9yLCBwZXJoYXBzLCBpcyB0aGVyZSBhIE5ldGxpbmsgaW50ZXJmYWNlIGludm9sdmVkPyBMb29raW5nIGF0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0sIHRoZSBQU0Ugc3Vic3lzdGVtICpkb2VzKiBleHBvc2UgTmV0bGluayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBldGh0b29sLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgcG9pbnRzIHRvd2FyZHMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGV0aHRvb2wgY29tbWFuZHMgdG8gdHJpZ2dlciByZWd1bGF0b3IgYWN0aW9ucyBpbmRpcmVjdGx5LiBXZSBtYXkgYmUgYWJsZSB0byBsZXZlcmFnZSBleGlzdGluZyBQU0UgbmV0bGluayBpbmZyYXN0cnVjdHVyZSB0byBjb250cm9sIHRoaXMgcmVndWxhdG9yIGluZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGF2ZW51ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGh0b29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTU5NT1zdGF0aWMgdm9pZCBwc2VfZ2V0X3N3X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjE4LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTYxOTogKiBwc2VfZXRodG9vbF9nZXRfc3RhdHVzIC0gZ2V0IHN0YXR1cyBvZiBQU0UgY29udHJvbFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTYyMC0gKiBAcHNlYzogUFNFIGNvbnRyb2wgcG9pbnRlclxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjUtICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNjI2OmludCBwc2VfZXRodG9vbF9nZXRfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjctXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTYyODpcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wc2VfY29udHJvbF9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2Mjkte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzMtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTczNDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9nZXRfc3RhdHVzKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzM2OnN0YXRpYyBpbnQgcHNlX2V0aHRvb2xfYzMzX3NldF9jb25maWcoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTczNy1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzcwLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc3MTpzdGF0aWMgaW50IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzcyLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzk1LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc5NjogKiBwc2VfZXRodG9vbF9zZXRfY29uZmlnIC0gc2V0IFBTRSBjb250cm9sIGNvbmZpZ3VyYXRpb25cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3OTctICogQHBzZWM6IFBTRSBjb250cm9sIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODAyLSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgwMzppbnQgcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA0LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA5LVx0aWYgKHBzZV9oYXNfYzMzKHBzZWMpIFx1MDAyNlx1MDAyNiBjb25maWctXHUwMDNlYzMzX2FkbWluX2NvbnRyb2wpIHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4MTA6XHRcdGVyciA9IHBzZV9ldGh0b29sX2MzM19zZXRfY29uZmlnKHBzZWMsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODExLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTUtXHRpZiAocHNlX2hhc19wb2RsKHBzZWMpIFx1MDAyNlx1MDAyNiBjb25maWctXHUwMDNlcG9kbF9hZG1pbl9jb250cm9sKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgxNjpcdFx0ZXJyID0gcHNlX2V0aHRvb2xfcG9kbF9zZXRfY29uZmlnKHBzZWMsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODE3LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTktfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgyMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9zZXRfY29uZmlnKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MjEtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTgzMj1zdGF0aWMgaW50IHBzZV9waV91cGRhdGVfcHdfYnVkZ2V0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg2OC0vKipcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4Njk6ICogcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0IC0gc2V0IFBTRSBjb250cm9sIHBvd2VyIGxpbWl0XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODcwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg3NS0gKi9cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4NzY6aW50IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODc3LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjUtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTkyNjpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTkyNy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjgtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTI5OiAqIHBzZV9ldGh0b29sX3NldF9wcmlvIC0gU2V0IFBTRSBQSSBwcmlvcml0eSBhY2NvcmRpbmcgdG8gdGhlIGJ1ZGdldFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTkzMC0gKlx0XHRcdCAgZXZhbHVhdGlvbiBzdHJhdGVneVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MzYtICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTM3OmludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM4LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTk5NS19XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTk2OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9wcmlvKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQU0UgQ29uZmlndXJhdGlvbiBhbmQgRHJpdmVyIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlOyBpdCBzZWVtcyBJIGNhbiBjb25maWd1cmUgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIHRocm91Z2ggaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSAqdHJpZ2dlciogdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbj8gSXQmIzM5O3MgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIGEgZHJpdmVyIGlzIHVuYm91bmQsIG9yIGEgbW9kdWxlIGlzIHVubG9hZGVkLiBUaGUgcGxhbiB0aGVuIGlzLCBpZiBJIGNhbiBzb21laG93IGJpbmQgYW5kIHVuYmluZCBhIFBTRSBkcml2ZXIg4oCTIHNvbWV0aGluZyBsaWtlIGBwZDY5MngwYCBvciBgdHBzMjM4ODFgIOKAkyBJICpzaG91bGQqIGJlIGFibGUgdG8gZ2V0IGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCB0byBmaXJlLiBUaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIGRvbmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIGFueSB2aXJ0dWFsIG9yIG1vY2sgUFNFIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgZm9yIHRoaXMgdGVzdGluZz8gSSBuZWVkIHRvIGNoZWNrIGFuZCBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE3NTY9c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTgzOC1cdHByaXYtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTgzOTpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg0MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAzMz1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU0LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA1NTogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU2LSAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsaXplZCBQU0UgY29udHJvbGxlciBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU5LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2MDppbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDYxLXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTI5LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExMzA6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEzMS1cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTU0PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTU5LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2MDogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYxLSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYzLSAqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY0OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY1LSAqIHRoaXMgZnVuY3Rpb24sIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvblxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NjogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjctICpcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY5LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3MDppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTcxLVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODAtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOlx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4Mi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkxLX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTI6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkzLVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI2LVx0cHJpdi1cdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjEyNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0Mi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfU1RBVElDO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkgc2VlIGEgZmlsZSBjYWxsZWQgYHBzZV9yZWd1bGF0b3IuY2AuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBwb3dlciBzdXBwbHkgZWxlbWVudHMgcmVsYXRlZCB0byBzb21ldGhpbmcgdGhhdCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gJiMzNDtQU0UsJiMzNDsgd2hpY2ggY291bGQgbWVhbiBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIG9yIHBlcmhhcHMgYSBjb21wb25lbnQgd2l0aCBhIHNpbWlsYXIgbmFtZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgd2l0aGluIGBwc2VfcmVndWxhdG9yLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9yZWd1bGF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqUmVmbGVjdGluZyBvbiB0aGUgTWV0aG9kKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB1c2luZyBgcHNlX3JlZ3VsYXRvcmAgZm9yIHRoaXMgdGFzay4gQnV0IGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcmVseWluZyBvbiB0aGF0LCBwZXJoYXBzIEkgc2hvdWxkIGp1c3QgZ28gc3RyYWlnaHQgdG8gcmVhZGluZyB0aGUgZGF0YSBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAsIGFuZCBpdCBtaWdodCByZXZlYWwgZXZlcnl0aGluZyBJIG5lZWQgd2l0aG91dCBuZWVkaW5nIGEgbW9yZSBlbGFib3JhdGUgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlIGJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYuIEVmZmljaWVuY3kgaXMga2V5LCByaWdodD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvL1xuICAgMzpcdC8vIERyaXZlciBmb3IgdGhlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHdpdGhvdXRcbiAgIDQ6XHQvLyBhdXRvIGNsYXNzaWZpY2F0aW9uIHN1cHBvcnQuXG4gICA1Olx0Ly9cbiAgIDY6XHQvLyBDb3B5cmlnaHQgKGMpIDIwMjIgUGVuZ3V0cm9uaXgsIE9sZWtzaWogUmVtcGVsIFx1MDAzY2tlcm5lbEBwZW5ndXRyb25peC5kZVx1MDAzZVxuICAgNzpcdC8vXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdHN0cnVjdCBwc2VfcmVnX3ByaXYge1xuICAxNjpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbiAgMTc6XHRcdHN0cnVjdCByZWd1bGF0b3IgKnBzOyAvKnBvd2VyIHNvdXJjZSAqL1xuICAxODpcdFx0ZW51bSBldGh0b29sX3BvZGxfcHNlX2FkbWluX3N0YXRlIGFkbWluX3N0YXRlO1xuICAxOTpcdH07XG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIHN0cnVjdCBwc2VfcmVnX3ByaXYgKnRvX3BzZV9yZWcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gIDIyOlx0e1xuICAyMzpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHBzZV9yZWdfcHJpdiwgcGNkZXYpO1xuICAyNDpcdH1cbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50XG4gIDI3Olx0cHNlX3JlZ19waV9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiAgMjg6XHR7XG4gIDI5Olx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDMwOlx0XHRpbnQgcmV0O1xuICAzMTpcdFxuICAzMjpcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXBzKTtcbiAgMzM6XHRcdGlmIChyZXQpXG4gIDM0Olx0XHRcdHJldHVybiByZXQ7XG4gIDM1Olx0XG4gIDM2Olx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xuICAzNzpcdFx0cmV0dXJuIDA7XG4gIDM4Olx0fVxuICAzOTpcdFxuICA0MDpcdHN0YXRpYyBpbnRcbiAgNDE6XHRwc2VfcmVnX3BpX2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiAgNDI6XHR7XG4gIDQzOlx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDQ0Olx0XHRpbnQgcmV0O1xuICA0NTpcdFxuICA0NjpcdFx0cmV0ID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2Vwcyk7XG4gIDQ3Olx0XHRpZiAocmV0KVxuICA0ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA0OTpcdFxuICA1MDpcdFx0cHJpdi1cdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4gIDUxOlx0XHRyZXR1cm4gMDtcbiAgNTI6XHR9XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIGludFxuICA1NTpcdHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4gIDU2Olx0XHRcdFx0ICAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXG4gIDU3Olx0e1xuICA1ODpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICA1OTpcdFxuICA2MDpcdFx0YWRtaW5fc3RhdGUtXHUwMDNlcG9kbF9hZG1pbl9zdGF0ZSA9IHByaXYtXHUwMDNlYWRtaW5fc3RhdGU7XG4gIDYxOlx0XG4gIDYyOlx0XHRyZXR1cm4gMDtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludFxuICA2NjpcdHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuICA2NzpcdFx0XHRcdCBzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuICA2ODpcdHtcbiAgNjk6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcbiAgNzA6XHRcdGludCByZXQ7XG4gIDcxOlx0XG4gIDcyOlx0XHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVx1MDAzZXBzKTtcbiAgNzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDc0Olx0XHRcdHJldHVybiByZXQ7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoIXJldClcbiAgNzc6XHRcdFx0cHdfc3RhdHVzLVx1MDAzZXBvZGxfcHdfc3RhdHVzID1cbiAgNzg6XHRcdFx0XHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuICA3OTpcdFx0ZWxzZVxuICA4MDpcdFx0XHRwd19zdGF0dXMtXHUwMDNlcG9kbF9wd19zdGF0dXMgPVxuICA4MTpcdFx0XHRcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbiAgODI6XHRcbiAgODM6XHRcdHJldHVybiAwO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBwc2VfcmVnX29wcyA9IHtcbiAgODc6XHRcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZSxcbiAgODg6XHRcdC5waV9nZXRfcHdfc3RhdHVzID0gcHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzLFxuICA4OTpcdFx0LnBpX2VuYWJsZSA9IHBzZV9yZWdfcGlfZW5hYmxlLFxuICA5MDpcdFx0LnBpX2Rpc2FibGUgPSBwc2VfcmVnX3BpX2Rpc2FibGUsXG4gIDkxOlx0fTtcbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW50XG4gIDk0Olx0cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuICA5NTpcdHtcbiAgOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuICA5NzpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdjtcbiAgOTg6XHRcdGludCByZXQ7XG4gIDk5Olx0XG4gMTAwOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwc2VfcmVndWxhdG9yYCBEcml2ZXIgYW5kIFN5emthbGxlciYjMzk7cyBQb3RlbnRpYWwgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHBzZV9yZWd1bGF0b3JgIGRyaXZlci4gUmlnaHQsIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0JiMzOTtzIGtleS4gUGxhdGZvcm0gZHJpdmVycyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbiB0aGVpciBkZXZpY2UgbWF0Y2hpbmc7IHRoZXkgcmVseSBvbiBkZXZpY2UgdHJlZSBub2RlcyBvciwgaW4gc29tZSBjYXNlcywgZGlyZWN0IGRldmljZSBjcmVhdGlvbiB2aWEgb3RoZXIgbWVjaGFuaXNtcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgd2l0aCBTeXprYWxsZXIuIEkga25vdyBTeXprYWxsZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNwaW4gdXAgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAg4oCTIHdoaWNoIEkgYmVsaWV2ZSBkaXJlY3RseSBjYWxscyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIEFQSSB0byBjcmVhdGUgYSBkZXZpY2Ug4oCTIG9yLCBtb3JlIHN1YnRseSwgYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBJdCBjYW4gYmUgYSBwcmV0dHkgdmVyc2F0aWxlIHRvb2wuCgpXYWl0IGEgc2Vjb25k4oCmIHNpbmNlIGBwc2VfcmVndWxhdG9yYCBpcyBhICpwbGF0Zm9ybSogZHJpdmVyLCB0aGUgbW9zdCBsaWtlbHkgYXZlbnVlIGZvciBTeXprYWxsZXIgdG8gdHJpZ2dlciBhIHByb2JlIHdvdWxkIGJlIHRocm91Z2ggYSBtYXRjaGluZyBjb21wYXRpYmxlIHN0cmluZyBpbiBhIGRldmljZSB0cmVlIG5vZGUuIEl0IG1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZHJpdmVycy4gSWYgU3l6a2FsbGVyIGNyYWZ0cyBhIGRldmljZSB0cmVlIGVudHJ5IHdpdGggdGhlIGNvcnJlY3QgY29tcGF0aWJsZSBzdHJpbmcsIHRoZSBrZXJuZWwgc2hvdWxkIHByb2JlIHRoZSBgcHNlX3JlZ3VsYXRvcmAgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgaXMsIGlmIEkgd2FudCB0byB0YXJnZXQgdGhpcyBkcml2ZXIgd2l0aCBTeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0aWYgKCFwcml2KVxuIDEwMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmICghcGRldi1cdTAwM2VkZXYub2Zfbm9kZSlcbiAxMDU6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTA2Olx0XG4gMTA3Olx0XHRwcml2LVx1MDAzZXBzID0gZGV2bV9yZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZShkZXYsIFwmIzM0O3BzZVwmIzM0Oyk7XG4gMTA4Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHMpKVxuIDEwOTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2VwcyksXG4gMTEwOlx0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIHJlZ3VsYXRvci5cXG5cJiMzNDspO1xuIDExMTpcdFxuIDExMjpcdFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gMTEzOlx0XG4gMTE0Olx0XHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVx1MDAzZXBzKTtcbiAxMTU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTE2Olx0XHRcdHJldHVybiByZXQ7XG4gMTE3Olx0XG4gMTE4Olx0XHRpZiAocmV0KVxuIDExOTpcdFx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xuIDEyMDpcdFx0ZWxzZVxuIDEyMTpcdFx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiAxMjI6XHRcbiAxMjM6XHRcdHByaXYtXHUwMDNlcGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcbiAxMjQ6XHRcdHByaXYtXHUwMDNlcGNkZXYub3BzID0gXHUwMDI2cHNlX3JlZ19vcHM7XG4gMTI1Olx0XHRwcml2LVx1MDAzZXBjZGV2LmRldiA9IGRldjtcbiAxMjY6XHRcdHByaXYtXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xuIDEyNzpcdFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuIDEyODpcdFx0aWYgKHJldCkge1xuIDEyOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBTRSBjb250cm9sbGVyICglcGUpXFxuXCYjMzQ7LFxuIDEzMDpcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4gMTMxOlx0XHRcdHJldHVybiByZXQ7XG4gMTMyOlx0XHR9XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXR1cm4gMDtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGNvbnN0IF9fbWF5YmVfdW51c2VkIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHNlX3JlZ19vZl9tYXRjaFtdID0ge1xuIDEzODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3BvZGwtcHNlLXJlZ3VsYXRvclwmIzM0OywgfSxcbiAxMzk6XHRcdHsgfSxcbiAxNDA6XHR9O1xuIDE0MTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBzZV9yZWdfb2ZfbWF0Y2gpO1xuIDE0MjpcdFxuIDE0MzpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBzZV9yZWdfZHJpdmVyID0ge1xuIDE0NDpcdFx0LnByb2JlXHRcdD0gcHNlX3JlZ19wcm9iZSxcbiAxNDU6XHRcdC5kcml2ZXJcdFx0PSB7XG4gMTQ2Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7UFNFIHJlZ3VsYXRvclwmIzM0OyxcbiAxNDc6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHBzZV9yZWdfb2ZfbWF0Y2gpLFxuIDE0ODpcdFx0fSxcbiAxNDk6XHR9O1xuIDE1MDpcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocHNlX3JlZ19kcml2ZXIpO1xuIDE1MTpcdFxuIDE1MjpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7T2xla3NpaiBSZW1wZWwgXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXHUwMDNlXCYjMzQ7KTtcbiAxNTM6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7cmVndWxhdG9yIGJhc2VkIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudFwmIzM0Oyk7XG4gMTU0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiAxNTU6XHRNT0RVTEVfQUxJQVMoXCYjMzQ7cGxhdGZvcm06cHNlLXJlZ3VsYXRvclwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgdGhlIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoZSBrZXkgc3RyaW5nIGhlcmUgc2VlbXMgdG8gYmUgYHBvZGwtcHNlLXJlZ3VsYXRvcmAuIEkgd29uZGVyIGlmIFN5emthbGxlciBjYW4gaW5qZWN0IHRoaXMgZGlyZWN0bHk/IEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBNYXliZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24gd291bGQgYmUgcG9zc2liaWxpdGllcy4gQnV0IFN5emthbGxlciBpcyB1c3VhbGx5IGxpbWl0ZWQgaW4gZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSBkZXZpY2UgdHJlZSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBzZXQgdXAuIEFuZCwgd2hpbGUgYHN5el9tb3VudF9pbWFnZWAgYW5kIHNpbWlsYXIgY2FsbHMgZXhpc3QsIGluamVjdGluZyBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IHdheSBpcyB1c3VhbGx5IGRpZmZpY3VsdC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGFsdGVybmF0aXZlIG1ldGhvZHMgdG8gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlPyBJIHNlZSBhIGZldyBJMkMgZHJpdmVycyBsaXN0ZWQ6IGBwZDY5MngwLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIHRocm91Z2ggYC9kZXYvaTJjLSpgIG9yIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIGRldmljZXMgdXNpbmcgYGkyYy1zdHViYCBvciBzaW1pbGFyIHRvb2xzLCBidXQgdXN1YWxseSBJIG5lZWQgdG8gZ2V0IHRoZSBkcml2ZXIgcmVnaXN0ZXJlZC4gSXQgY2FuIG9mdGVuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHZpYSBgaW9jdGwoSTJDX1JEV1IpYCBvciBuZXRsaW5rLCBidXQgdG8gdHJ1bHkgKnByb2JlKiBhIGRyaXZlciwgaXQgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBmaXJzdC4KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciBkb2VzIGhhdmUgY2FsbHMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgLiBGb3IgSTJDIHNwZWNpZmljYWxseSwgaXQgY2FuIGxpa2VseSB1c2UgYGlvY3RsKEkyQ19TTEFWRSlgIG9yIGV2ZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBgbmV3X2RldmljZWAgdG8gaW5zdGFudGlhdGUgdGhlc2UgSTJDIGRldmljZXMuIFllcywgdGhhdCYjMzk7cyBpdCEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYCBpcyB0aGUga2V5LiBJIGNhbiB1c2UgdGhpcyB0byBpbnN0YW50aWF0ZSBhbiBJMkMgZGV2aWNlIGFuZCwgY3J1Y2lhbGx5LCBiaW5kIGl0IHRvIGEgZHJpdmVyIQoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIEkyQyBkcml2ZXJzLCBsaWtlIGBwZDY5MngwYCwgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpMmNfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE4NzQ9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGQ2OTJ4MF9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4NzY6c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBkNjkyeDBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODc3LVx0LnByb2JlXHRcdD0gcGQ2OTJ4MF9pMmNfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg0LX07XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4ODU6bW9kdWxlX2kyY19kcml2ZXIocGQ2OTJ4MF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg2LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz01NjQ9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2kzNDc0X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NjUtXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmM6NTY2OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTM0NzRfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU2Ny1cdC5wcm9iZSA9IHNpMzQ3NF9pMmNfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU3My19O1xuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU3NDptb2R1bGVfaTJjX2RyaXZlcihzaTM0NzRfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NzUtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTU0OD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cHMyMzg4MV9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTQ5LVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTU1MDpzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzMjM4ODFfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1MS1cdC5wcm9iZVx0XHQ9IHRwczIzODgxX2kyY19wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTU3LX07XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTU4Om1vZHVsZV9pMmNfZHJpdmVyKHRwczIzODgxX2RyaXZlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJMkMgRHJpdmVyIEluc3RhbnRpYXRpb24gYW5kIFBvdGVudGlhbCBGaXJtd2FyZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJMkMgZHJpdmVycyBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IFN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlc2UuIFJpZ2h0LCBpdCYjMzk7cyB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAsIGdvdCBpdC4gVGhhdCBtZWFucyBJIGNhbiB0cmlnZ2VyIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgc3BlY2lmaWMgZGV2aWNlLCBsaWtlIGBwZDY5MngwYCwgYnkgd3JpdGluZyBzb21ldGhpbmcgbGlrZSBgcGQ2OTJ4MCAweDEwYCB0byBgbmV3X2RldmljZWAuIFRoYXQgc2hvdWxkIHByb2JlIHRoZSBkcml2ZXIsIHRoZW9yZXRpY2FsbHkuCgpCdXQgaGFuZyBvbi4uLiBhIHJlZCBmbGFnIGlzIGdvaW5nIHVwLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgcGQ2OTJ4MGAgbWlnaHQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB0aGFuIGEgc2ltcGxlIGluc3RhbnRpYXRpb24gYW5kIHByb2JlLiBJdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlIHRoZXJlJiMzOTtzIHNvbWUgZmlybXdhcmUgaW50ZXJhY3Rpb24gaW52b2x2ZWQsIG9yIG1heWJlIGl0IGV4cGVjdHMgY2VydGFpbiBJMkMgcmVzcG9uc2VzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZS4gVGhpcyBpc24mIzM5O3QgYWx3YXlzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIHlvdSBrbm93IHRoYXQuCgpCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBpbW1lZGlhdGVseSBsb29rIGF0IGBwZDY5MngwX2kyY19wcm9iZWAgYW5kIGNvbmZpcm0gdGhvc2UgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IGhhcyBhbnkgcHJlcmVxdWlzaXRlIGZpcm13YXJlIG9yIGNvbW11bmljYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSByZWx5aW5nIG9uIFN5emthbGxlciYjMzk7cyBpbnN0YW50aWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzU2Olx0c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuMTc1NzpcdHtcbjE3NTg6XHRcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yc1tdID0geyBcJiMzNDt2ZGRcJiMzNDssIFwmIzM0O3ZkZGFcJiMzNDsgfTtcbjE3NTk6XHRcdHN0cnVjdCBwZDY5MngwX21zZyBtc2csIGJ1ZiA9IHswfSwgemVybyA9IHswfTtcbjE3NjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4xNzYxOlx0XHRzdHJ1Y3QgZ3Bpb19kZXNjICpkaXNhYmxlX3BvcnRzO1xuMTc2MjpcdFx0c3RydWN0IHBkNjkyeDBfbXNnX3ZlciB2ZXI7XG4xNzYzOlx0XHRzdHJ1Y3QgcGQ2OTJ4MF9wcml2ICpwcml2O1xuMTc2NDpcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuMTc2NTpcdFx0aW50IHJldDtcbjE3NjY6XHRcbjE3Njc6XHRcdHJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZShkZXYsIEFSUkFZX1NJWkUocmVndWxhdG9ycyksXG4xNzY4Olx0XHRcdFx0XHRcdCAgICAgcmVndWxhdG9ycyk7XG4xNzY5Olx0XHRpZiAocmV0KVxuMTc3MDpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbjE3NzE6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXFxuXCYjMzQ7KTtcbjE3NzI6XHRcbjE3NzM6XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHtcbjE3NzQ6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2kyYyBjaGVjayBmdW5jdGlvbmFsaXR5IGZhaWxlZFxcblwmIzM0Oyk7XG4xNzc1Olx0XHRcdHJldHVybiAtRU5YSU87XG4xNzc2Olx0XHR9XG4xNzc3Olx0XG4xNzc4Olx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4xNzc5Olx0XHRpZiAoIXByaXYpXG4xNzgwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTc4MTpcdFxuMTc4MjpcdFx0cHJpdi1cdTAwM2VjbGllbnQgPSBjbGllbnQ7XG4xNzgzOlx0XHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwcml2KTtcbjE3ODQ6XHRcbjE3ODU6XHRcdGRpc2FibGVfcG9ydHMgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFwmIzM0O2Rpc2FibGUtcG9ydHNcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuMTc4NjpcdFx0aWYgKElTX0VSUihkaXNhYmxlX3BvcnRzKSlcbjE3ODc6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihkaXNhYmxlX3BvcnRzKSxcbjE3ODg6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBkaXNhYmxlIHBvcnRzIEdQSU9cXG5cJiMzNDspO1xuMTc4OTpcdFxuMTc5MDpcdFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopXHUwMDI2YnVmLCBzaXplb2YoYnVmKSk7XG4xNzkxOlx0XHRpZiAocmV0ICE9IHNpemVvZihidWYpKSB7XG4xNzkyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXG5cJiMzNDspO1xuMTc5MzpcdFx0XHRyZXR1cm4gLUVJTztcbjE3OTQ6XHRcdH1cbjE3OTU6XHRcbjE3OTY6XHRcdC8qIFByb2JlIGhhcyBiZWVuIGFscmVhZHkgcnVuIGFuZCB0aGUgc3RhdHVzIGR1bXBlZCAqL1xuMTc5NzpcdFx0aWYgKCFtZW1jbXAoXHUwMDI2YnVmLCBcdTAwMjZ6ZXJvLCBzaXplb2YoYnVmKSkpIHtcbjE3OTg6XHRcdFx0LyogQXNrIGFnYWluIHRoZSBjb250cm9sbGVyIHN0YXR1cyAqL1xuMTc5OTpcdFx0XHRtc2cgPSBwZDY5MngwX21zZ190ZW1wbGF0ZV9saXN0W1BENjkyWDBfTVNHX0dFVF9TWVNfU1RBVFVTXTtcbjE4MDA6XHRcdFx0cmV0ID0gcGQ2OTJ4MF9zZW5kcmVjdl9tc2cocHJpdiwgXHUwMDI2bXNnLCBcdTAwMjZidWYpO1xuMTgwMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4xODAyOlx0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcblwmIzM0Oyk7XG4xODAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4MDQ6XHRcdFx0fVxuMTgwNTpcdFx0fVxuMTgwNjpcdFxuMTgwNzpcdFx0aWYgKGJ1Zi5rZXkgIT0gMHgwMyB8fCBidWYuc3ViWzBdIFx1MDAyNiAweDAxKSB7XG4xODA4Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtQU0UgY29udHJvbGxlciBlcnJvclxcblwmIzM0Oyk7XG4xODA5Olx0XHRcdHJldHVybiAtRUlPO1xuMTgxMDpcdFx0fVxuMTgxMTpcdFx0aWYgKGJ1Zi5zdWJbMF0gXHUwMDI2IDB4MDIpIHtcbjE4MTI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1BTRSBmaXJtd2FyZSBlcnJvci4gUGxlYXNlIHVwZGF0ZSBpdC5cXG5cJiMzNDspO1xuMTgxMzpcdFx0XHRwcml2LVx1MDAzZWZ3X3N0YXRlID0gUEQ2OTJYMF9GV19CUk9LRU47XG4xODE0Olx0XHR9IGVsc2Uge1xuMTgxNTpcdFx0XHR2ZXIgPSBwZDY5MngwX2dldF9zd192ZXJzaW9uKHByaXYpO1xuMTgxNjpcdFx0XHRkZXZfaW5mbyhcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcJiMzNDtTb2Z0d2FyZSB2ZXJzaW9uICVkLiUwMmQuJWQuJWRcXG5cJiMzNDssXG4xODE3Olx0XHRcdFx0IHZlci5wcm9kLCB2ZXIubWFqX3N3X3ZlciwgdmVyLm1pbl9zd192ZXIsXG4xODE4Olx0XHRcdFx0IHZlci5wYV9zd192ZXIpO1xuMTgxOTpcdFxuMTgyMDpcdFx0XHRpZiAodmVyLm1hal9zd192ZXIgXHUwMDNjIFBENjkyWDBfRldfTUFKX1ZFUikge1xuMTgyMTpcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUb28gb2xkIGZpcm13YXJlIHZlcnNpb24uIFBsZWFzZSB1cGRhdGUgaXRcXG5cJiMzNDspO1xuMTgyMjpcdFx0XHRcdHByaXYtXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX05FRURfVVBEQVRFO1xuMTgyMzpcdFx0XHR9IGVsc2Uge1xuMTgyNDpcdFx0XHRcdHByaXYtXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX09LO1xuMTgyNTpcdFx0XHR9XG4xODI2Olx0XHR9XG4xODI3Olx0XG4xODI4Olx0XHRpZiAoYnVmLmRhdGFbMl0gPT0gUEQ2OTJYMF9VU0VSX0JZVEUpXG4xODI5Olx0XHRcdHByaXYtXHUwMDNlY2ZnX3NhdmVkID0gdHJ1ZTtcbjE4MzA6XHRcbjE4MzE6XHRcdHByaXYtXHUwMDNlbnAgPSBkZXYtXHUwMDNlb2Zfbm9kZTtcbjE4MzI6XHRcdHByaXYtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBQRDY5MlgwX01BWF9QSVM7XG4xODMzOlx0XHRwcml2LVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4xODM0Olx0XHRwcml2LVx1MDAzZXBjZGV2Lm9wcyA9IFx1MDAyNnBkNjkyeDBfb3BzO1xuMTgzNTpcdFx0cHJpdi1cdTAwM2VwY2Rldi5kZXYgPSBkZXY7XG4xODM2Olx0XHRwcml2LVx1MDAzZXBjZGV2LnR5cGVzID0gRVRIVE9PTF9QU0VfQzMzO1xuMTgzNzpcdFx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbjE4Mzg6XHRcdHByaXYtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcbjE4Mzk6XHRcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbjE4NDA6XHRcdGlmIChyZXQpXG4xODQxOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuMTg0MjpcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUFNFIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTg0MzpcdFxuMTg0NDpcdFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBkZXYsIGRldl9uYW1lKGRldiksXG4xODQ1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGQ2OTJ4MF9md19vcHMsIHByaXYpO1xuMTg0NjpcdFx0aWYgKElTX0VSUihmd2wpKVxuMTg0NzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZndsKSxcbjE4NDg6XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIHRoZSBGaXJtd2FyZSBVcGxvYWQgQVBJXFxuXCYjMzQ7KTtcbjE4NDk6XHRcdHByaXYtXHUwMDNlZndsID0gZndsO1xuMTg1MDpcdFxuMTg1MTpcdFx0cmV0dXJuIDA7XG4xODUyOlx0fVxuMTg1MzpcdFxuMTg1NDpcdHN0YXRpYyB2b2lkIHBkNjkyeDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuMTg1NTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEkyQyBEcml2ZXIgYW5kIFN5emthbGxlciYjMzk7cyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgZHJpdmVyJiMzOTtzIGV4cGVjdGluZyBzcGVjaWZpYyBJMkMgdmFsdWVzLiBTcGVjaWZpY2FsbHksIGlmIGBidWYua2V5YCBpc24mIzM5O3QgYDB4MDNgICpvciogaWYgdGhlIGZpcnN0IGJ5dGUgb2YgYGJ1Zi5zdWJgIGhhcyBpdHMgTFNCIHNldCwgaXQgcmV0dXJucyBgLUVJT2AuICBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbSBmb3IgZnV6emluZywgcmlnaHQ/IFN5emthbGxlciYjMzk7cyBgc3l6X2kyY19zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuLi4gd2VsbCwgaXQgcHJvYmFibHkgd29uJiMzOTt0IGVhc2lseSBoYW5kbGUgc3VjaCBhIHByZWNpc2UgbW9ja2luZyB1bmxlc3MgdGhlcmUmIzM5O3MgZGVkaWNhdGVkIHN1cHBvcnQuIFdlJiMzOTt2ZSBnb3QgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLCBidXQgSSBkb24mIzM5O3QgcmVjYWxsIGEgZ2VuZXJpYyBJMkMgbW9jayBpbiBTeXprYWxsZXIgdGhhdCBhbGxvd3MgYXJiaXRyYXJ5IGRhdGEgcmVzcG9uc2VzLgoKSG9sZCBvbi4uLiBgaTJjLXN0dWJgPyBObywgdGhhdCYjMzk7cyBub3QgZmxleGlibGUgZW5vdWdoIGZvciBkeW5hbWljIHJlcGxpZXMuCgpXYWl0IGEgc2Vjb25kLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBwc2VfY29yZS5jYCDigJMgdGhhdCYjMzk7cyB0aGUgKmNvcmUqIGZyYW1ld29yay4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gQWgsIHJpZ2h0LiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgd2hlcmUgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQsIGJ1dCB0aGVuIGxhdGVyIGFjY2Vzc2VkIGJ5IHJlZ3VsYXRvciBvcGVyYXRpb25zLCBvciBldmVuIHRoZSBJUlEgb3Igbm90aWZpY2F0aW9uIHdvcmtlcnMuIERlZmluaXRlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uCgpUaGUgYnVnIHdhcyBmb3VuZCBieSBgc3l6LWNsdXN0ZXJgLi4uIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgY29uZmlybXMgaXQ6ICYjMzQ7QXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7JiMzNDsuIEFuZCBldmVuIGJldHRlciwgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OyEgRGFtbiwgU3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWchCgpTbywgaG93IGRpZCBTeXprYWxsZXIgdHJpZ2dlciB0aGlzIHVzZS1hZnRlci1mcmVlPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRocm91Z2ggYHBzZV9yZWd1bGF0b3JgLiBTaW5jZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyIGNvdWxkIGJlIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzLiBJdCYjMzk7cyBub3QgYG5sODAyMTFgLi4uIHByb2JhYmx5IGBzeXpfZGV2X2NyZWF0ZWAsIG9yIG1heWJlIHNvbWV0aGluZyBlbHNlPwoKQWhhISBUaGVyZSYjMzk7cyBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaW4gYHBzZV9yZWd1bGF0b3IuY2AuIElzIHRoZXJlIGFueSBvdGhlciBwYXRoIHRvIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXI/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyByZWxhdGVkIHRvIHRoaXMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIHdheSB0aGlzIGNvdWxkIGhhdmUgYmVlbiB0cmlnZ2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTc1Nj1zdGF0aWMgaW50IHBkNjkyeDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODM4LVx0cHJpdi1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSAyO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODM5Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODQwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDMzPXN0YXRpYyB2b2lkIHBzZV9zZW5kX250Zl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTQtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDU1OiAqIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBQU0UgY29udHJvbGxlciBkZXZpY2VcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTYtICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTktICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDYwOmludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjEte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMjktfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTEzMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTMxLVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNTQ9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNTktLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTYwOiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjEtICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQU0UgY29udHJvbGxlclxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjMtICpcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNjQ6ICogTWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpLiBGb3IgUFNFIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgYnlcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjUtICogdGhpcyBmdW5jdGlvbiwgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY2OiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2Ny0gKlxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjktICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTcwOmludCBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzEtXHRcdFx0XHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExODE6XHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTEtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE5MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTMtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjYtXHRwcml2LVx1MDAzZXBjZGV2LnR5cGVzID0gRVRIVE9PTF9QU0VfUE9ETDtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTI3Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQyLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTQzMD1zdGF0aWMgaW50IHRwczIzODgxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXHRwcml2LVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9TVEFUSUM7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTUxOC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gaW5qZWN0IEkyQyBkZXZpY2VzPyBJJiMzOTttIGRyYXdpbmcgYSBibGFuayBvbiB0aGUgc3BlY2lmaWMgc3lzY2FsbCAtIGlzIGl0IGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgdGhpbmsgaXQmIzM5O3MgYHN5el9pMmNfZGV2YC4gUmlnaHQsIHRoYXQmIzM5O3MgaXQuIFdhaXQsIEkgc2VlICYjMzQ7cmVndWxhdG9yJiMzNDsgbWVudGlvbmVkLiBBaGEsICp0aGF0KiBwaXF1ZXMgbXkgaW50ZXJlc3QuIElmIHN5emthbGxlciBoYXMgYSBob29rIGludG8gdGhlIHJlZ3VsYXRvciBzdWJzeXN0ZW0sIHRoaXMgaXMgKmFic29sdXRlbHkqIHdvcnRoIGEgZGVlcGVyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLgoKVGhlIHBhdGNoIGl0c2VsZiBwb2ludHMgdG8gYSBVc2VyLUFmdGVyLUZyZWUvTlVMTC1kZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQgaW4gYHBzZV9yZWxlYXNlX3Bpc2AsIGJ1dCBzdWJzZXF1ZW50IHJlZ3VsYXRvciBvcGVyYXRpb25zIGNhbiBzdGlsbCBiZSBpbnZva2VkIG9uIGl0LiBTbyBiYXNpY2FsbHkgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhleSYjMzk7cmUgYWRkaW5nIGBpZiAoIXBjZGV2LSZndDtwaSlgIGNoZWNrcyB0byB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgVUFGLiBQbHVzLCB0aGV5JiMzOTtyZSBzZXR0aW5nIGBwY2Rldi0mZ3Q7cGkgPSBOVUxMYCB1bmRlciBgcGNkZXYtJmd0O2xvY2tgIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBGaW5hbGx5LCB0aGUgY29kZSByZW9yZGVycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gc2h1dCBkb3duIHRoZSBJUlEgYW5kIG5vdGlmaWNhdGlvbiB3b3JrZXIgYmVmb3JlIGZyZWVpbmcgYHBjZGV2LSZndDtwaWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIHByZWNpc2VseSB0byBzZWUgaWYgdGhlIGZpeCBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzA6XHRFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4xMTMxOlx0XG4xMTMyOlx0LyoqXG4xMTMzOlx0ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBQU0UgY29udHJvbGxlciBkZXZpY2VcbjExMzQ6XHQgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG4xMTM1Olx0ICovXG4xMTM2Olx0dm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuMTEzNzpcdHtcbjExMzg6XHRcdC8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXlcbjExMzk6XHRcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbjExNDA6XHRcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXG4xMTQxOlx0XHQgKi9cbjExNDI6XHRcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG4xMTQzOlx0XHRcdGRpc2FibGVfaXJxKHBjZGV2LVx1MDAzZWlycSk7XG4xMTQ0Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl93b3JrKTtcbjExNDU6XHRcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4xMTQ2Olx0XHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuMTE0NzpcdFx0a2ZpZm9fZnJlZShcdTAwMjZwY2Rldi1cdTAwM2VudGZfZmlmbyk7XG4xMTQ4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbjExNDk6XHRcdGxpc3RfZGVsKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QpO1xuMTE1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbjExNTE6XHR9XG4xMTUyOlx0RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfdW5yZWdpc3Rlcik7XG4xMTUzOlx0XG4xMTU0Olx0c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuMTE1NTpcdHtcbjExNTY6XHRcdHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqKXJlcyk7XG4xMTU3Olx0fVxuMTE1ODpcdFxuMTE1OTpcdC8qKlxuMTE2MDpcdCAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcbjExNjE6XHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBTRSBjb250cm9sbGVyXG4xMTYyOlx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxuMTE2MzpcdCAqXG4xMTY0Olx0ICogTWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpLiBGb3IgUFNFIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgYnlcbjExNjU6XHQgKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cbjExNjY6XHQgKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjExNjc6XHQgKlxuMTE2ODpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXG4xMTY5Olx0ICovXG4xMTcwOlx0aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuMTE3MTpcdFx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuMTE3MjpcdHtcbjExNzM6XHRcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKipwY2RldnA7XG4xMTc0Olx0XHRpbnQgcmV0O1xuMTE3NTpcdFxuMTE3NjpcdFx0cGNkZXZwID0gZGV2cmVzX2FsbG9jKGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZSwgc2l6ZW9mKCpwY2RldnApLFxuMTE3NzpcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTE3ODpcdFx0aWYgKCFwY2RldnApXG4xMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE4MDpcdFxuMTE4MTpcdFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuMTE4MjpcdFx0aWYgKHJldCkge1xuMTE4MzpcdFx0XHRkZXZyZXNfZnJlZShwY2RldnApO1xuMTE4NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTE4NTpcdFx0fVxuMTE4NjpcdFxuMTE4NzpcdFx0KnBjZGV2cCA9IHBjZGV2O1xuMTE4ODpcdFx0ZGV2cmVzX2FkZChkZXYsIHBjZGV2cCk7XG4xMTg5Olx0XG4xMTkwOlx0XHRyZXR1cm4gMDtcbjExOTE6XHR9XG4xMTkyOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4xMTkzOlx0XG4xMTk0Olx0c3RydWN0IHBzZV9pcnEge1xuMTE5NTpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXY7XG4xMTk2Olx0XHRzdHJ1Y3QgcHNlX2lycV9kZXNjIGRlc2M7XG4xMTk3Olx0XHR1bnNpZ25lZCBsb25nICpub3RpZnM7XG4xMTk4Olx0XHR1bnNpZ25lZCBsb25nICpub3RpZnNfbWFzaztcbjExOTk6XHR9O1xuMTIwMDpcdFxuMTIwMTpcdC8qKlxuMTIwMjpcdCAqIHBzZV90b19yZWd1bGF0b3Jfbm90aWZzIC0gQ29udmVydCBQU0Ugbm90aWZpY2F0aW9ucyB0byBSZWd1bGF0b3JcbjEyMDM6XHQgKlx0XHRcdCAgICAgbm90aWZpY2F0aW9uc1xuMTIwNDpcdCAqIEBub3RpZnM6IFBTRSBub3RpZmljYXRpb25zXG4xMjA1Olx0ICpcbjEyMDY6XHQgKiBSZXR1cm46IFJlZ3VsYXRvciBub3RpZmljYXRpb25zXG4xMjA3Olx0ICovXG4xMjA4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcHNlX3RvX3JlZ3VsYXRvcl9ub3RpZnModW5zaWduZWQgbG9uZyBub3RpZnMpXG4xMjA5Olx0e1xuMTIxMDpcdFx0dW5zaWduZWQgbG9uZyBybm90aWZzID0gMDtcbjEyMTE6XHRcbjEyMTI6XHRcdGlmIChub3RpZnMgXHUwMDI2IEVUSFRPT0xfUFNFX0VWRU5UX09WRVJfQ1VSUkVOVClcbjEyMTM6XHRcdFx0cm5vdGlmcyB8PSBSRUdVTEFUT1JfRVZFTlRfT1ZFUl9DVVJSRU5UO1xuMTIxNDpcdFx0aWYgKG5vdGlmcyBcdTAwMjYgRVRIVE9PTF9QU0VfRVZFTlRfT1ZFUl9URU1QKVxuMTIxNTpcdFx0XHRybm90aWZzIHw9IFJFR1VMQVRPUl9FVkVOVF9PVkVSX1RFTVA7XG4xMjE2Olx0XG4xMjE3Olx0XHRyZXR1cm4gcm5vdGlmcztcbjEyMTg6XHR9XG4xMjE5Olx0XG4xMjIwOlx0LyoqXG4xMjIxOlx0ICogcHNlX3NldF9jb25maWdfaXNyIC0gU2V0IFBTRSBjb250cm9sIGNvbmZpZyBhY2NvcmRpbmcgdG8gdGhlIFBTRVxuMTIyMjpcdCAqXHRcdFx0bm90aWZpY2F0aW9uc1xuMTIyMzpcdCAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0VcbjEyMjQ6XHQgKiBAaWQ6IGluZGV4IG9mIHRoZSBQU0UgY29udHJvbFxuMTIyNTpcdCAqIEBub3RpZnM6IFBTRSBldmVudCBub3RpZmljYXRpb25zXG4xMjI2Olx0ICpcbjEyMjc6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZSBvbiBlcnJvclxuMTIyODpcdCAqL1xuMTIyOTpcdHN0YXRpYyBpbnQgcHNlX3NldF9jb25maWdfaXNyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTgwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBQU0UgQ29udHJvbGxlciBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyBiZXR3ZWVuIHRoZSBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHRoZSByZWd1bGF0b3Igb3BlcmF0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIFBzZXVkby1TdGF0aWMgRWxlbWVudCAoUFNFKSBjb250cm9sbGVyLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIGluIHRoZSB0aW1pbmcgb2YgdGhlIGNsZWFudXAuIFdoZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGlzIGNhbGxlZCwgYHBzZV9yZWxlYXNlX3Bpc2AgaXMgaW52b2tlZC4gQW5kICp0aGF0KiBmdW5jdGlvbiBmcmVlcyBgcGNkZXYtJmd0O3BpYCwgd2hpY2ggSSBwcmVzdW1lIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBQcml2YXRlIEludGVyZmFjZSBzdHJ1Y3R1cmUuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJiMzOTt0IHRob3NlIHJlZ3VsYXRvciBvcGVyYXRpb25zIOKAkyBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgIOKAkyBwb3RlbnRpYWxseSAqc3RpbGwqIGJlaW5nIGNhbGxlZCBieSB0aGUgcmVndWxhdG9yIGNvcmUgZXZlbiBhZnRlciBgcHNlX3JlbGVhc2VfcGlzYCBoYXMgZnJlZWQgdGhlIG1lbW9yeT8gVGhhdCB3b3VsZCBiZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIGFuZCBvYnZpb3VzbHkgcHJvYmxlbWF0aWMuIFRoZSByYWNlLCB0aGVuLCBpcyB0aGF0IHRoZSByZWd1bGF0b3IgZGV2aWNlcyBhcmVuJiMzOTt0IHVucmVnaXN0ZXJlZCB1bnRpbCBsYXRlciwgY3JlYXRpbmcgdGhpcyB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eS4KCkhtbSwgdGhpcyByZW1pbmRzIG1lLi4uYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhdG9ycywgcmlnaHQ/IFNvLCB0aGUgcmVndWxhdG9yIGNvcmUgaXMgcG90ZW50aWFsbHkgaG9sZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQU0UgY29udHJvbGxlciYjMzk7cyByZXNvdXJjZXMgZXZlbiBhcyB0aGUgY29udHJvbGxlciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1bnJlZ2lzdGVyZWQuIEdvdCB0byBjaGVjayBob3cgdGhlIHJlZ3VsYXRvcnMgYXJlIHJlZ2lzdGVyZWQgaW4gbW9yZSBkZXRhaWwgdG8gY29uZmlybSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSByYWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlZ3VsYXRvciByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhpcyBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIHRoZSB0aW1pbmcgYW5kIHdoYXQgdGhlIGZpeCBpcyBhY3R1YWxseSBhZGRyZXNzaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3VsYXRvcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg1MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NTE6ZGV2bV9wc2VfcGlfcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODUyLVx0XHRcdCAgICAgICBjaGFyICpuYW1lLCBpbnQgaWQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODg5LVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODkwOlx0cmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKHBjZGV2LVx1MDAzZWRldiwgcmRlc2MsIFx1MDAyNnJjb25maWcpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODkxLVx0aWYgKElTX0VSUihyZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEwNjA9aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTQtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTE1Olx0XHRyZXQgPSBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIocGNkZXYsIHJlZ19uYW1lLCBpKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTYtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWd1bGF0b3IgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgIHVzZWQgaGVyZSwgbWVhbmluZyB0aGVzZSByZWd1bGF0b3JzIGFyZSBkaXJlY3RseSBsaW5rZWQgdG8gYHBjZGV2LSZndDtkZXZgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgYmVhdXR5IG9mIGBkZXZyZXNgIGlzIHRoYXQgb24gdW5iaW5kaW5nLCB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uLCBhdXRvbWF0aWNhbGx5IGNsZWFuaW5nIHVwLgoKTm93LCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgY3JlYXRlcyBhIGBkZXZyZXNgIGZvciBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCwgYW5kIHRoZW4gYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBjYWxscyBgZGV2bV9wc2VfcGlfcmVndWxhdG9yX3JlZ2lzdGVyYCB3aGljaCBhbGxvY2F0ZXMgYGRldnJlc2AgZm9yIHRoZSByZWd1bGF0b3JzLiAgU28sIHRoZSByZWd1bGF0b3JzIGFyZSByZWdpc3RlcmVkICphZnRlciogdGhlIGNvbnRyb2xsZXI/ICBXYWl0LCBubywgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGNhbGxzIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgKndoaWNoKiByZWdpc3RlcnMgdGhlIHJlZ3VsYXRvcnMuIEdvdCBpdC4KClNvLCB0aGUgYWxsb2NhdGlvbiBvcmRlciBmb3IgZGV2cmVzIGlzOiAxKSBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCBhbmQgdGhlbiAyKSBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgICh3aGljaCBpcyBpbnNpZGUgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCkuIFRoYXQgY2xhcmlmaWVzIHRoZSBzZXR1cC4KClRoZXJlZm9yZSwgd2hlbiB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIHRoZSByZWxlYXNlIG9yZGVyIGlzIHRoZSByZXZlcnNlOiBmaXJzdCB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkIHZpYSBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAsIGFuZCB0aGVuIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuCgpBaGEhIE5vdyBJIHNlZSB0aGUgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkICpiZWZvcmUqIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBpcyBjYWxsZWQsIGhvdyBjYW4gdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zIHBvc3NpYmx5IGJlIGNhbGxlZCAqYWZ0ZXIqIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYD8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgVXNlLUFmdGVyLUZyZWUuCgpIYW5nIG9uLi4uIGFoLCB0aGUgcmVndWxhdG9yIGNvcmUhIEl0IGxpa2VseSBoYXMgZGVmZXJyZWQgd29yaywgbGlrZSBhIGRlZmVycmVkIGRpc2FibGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyBvciB0aGUgY29kZSBjb21tZW50LiAgWWVzLCBoZXJlIGl0IGlzOiAgYC8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyIHBjZGV2LSZndDtwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLiAqL2AgU28sIHRoZSByZWd1bGF0b3IgY29yZSAqZG9lcyogaGF2ZSBhIGRlZmVycmVkIGRpc2FibGUgZmx1c2ghICBUaGlzIHByb2JhYmx5IGV4cGxhaW5zIGl0LgoKT2theSwgc28gd2hlbiByZWd1bGF0b3JzIGFyZSB1bnJlZ2lzdGVyZWQsIGl0IGZsdXNoZXMgdGhlc2UgZGVmZXJyZWQgZGlzYWJsZXMuIE9rYXksIEkmIzM5O20gd2l0aCB5b3Ugc28gZmFyLiBXYWl0LCBidXQgaWYgYHJlZ3VsYXRvcl91bnJlZ2lzdGVyYCBmbHVzaGVzIHRoZSBkZWZlcnJlZCB3b3JrLi4uIHRoZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgICpoYXNuJiMzOTt0KiBiZWVuIGNhbGxlZCB5ZXQhICAKCklmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGBwY2Rldi0mZ3Q7cGlgIGlzbiYjMzk7dCBmcmVlZC4gU28gd2h5IGlzIHRoZXJlIGEgVXNlLUFmdGVyLUZyZWU/IExldCBtZSBjaGVjayB0aGUgb3JkZXIgb2YgZGV2cmVzIGluIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyYC4gVGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O20gbWlzc2luZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRpbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xMTcxOlx0XHRcdFx0XHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4xMTcyOlx0e1xuMTE3MzpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqKnBjZGV2cDtcbjExNzQ6XHRcdGludCByZXQ7XG4xMTc1Olx0XG4xMTc2Olx0XHRwY2RldnAgPSBkZXZyZXNfYWxsb2MoZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlLCBzaXplb2YoKnBjZGV2cCksXG4xMTc3Olx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xMTc4Olx0XHRpZiAoIXBjZGV2cClcbjExNzk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTgwOlx0XG4xMTgxOlx0XHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XG4xMTgyOlx0XHRpZiAocmV0KSB7XG4xMTgzOlx0XHRcdGRldnJlc19mcmVlKHBjZGV2cCk7XG4xMTg0Olx0XHRcdHJldHVybiByZXQ7XG4xMTg1Olx0XHR9XG4xMTg2Olx0XG4xMTg3Olx0XHQqcGNkZXZwID0gcGNkZXY7XG4xMTg4Olx0XHRkZXZyZXNfYWRkKGRldiwgcGNkZXZwKTtcbjExODk6XHRcbjExOTA6XHRcdHJldHVybiAwO1xuMTE5MTpcdH1cbjExOTI6XHRFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbjExOTM6XHRcbjExOTQ6XHRzdHJ1Y3QgcHNlX2lycSB7XG4xMTk1Olx0XHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldjtcbjExOTY6XHRcdHN0cnVjdCBwc2VfaXJxX2Rlc2MgZGVzYztcbjExOTc6XHRcdHVuc2lnbmVkIGxvbmcgKm5vdGlmcztcbjExOTg6XHRcdHVuc2lnbmVkIGxvbmcgKm5vdGlmc19tYXNrO1xuMTE5OTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXZyZXMgT3JkZXJpbmcgQnVnIGluIFBTRSBDb250cm9sbGVyIFVuYmluZGluZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24uIEkgc2VlIHRoYXQgdGhlIGBkZXZyZXNfYWRkKGRldiwgcGNkZXZwKWAgY2FsbCBoYXBwZW5zICphZnRlciogYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KWAuIFRoaXMgbWVhbnMgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGVzdGFibGlzaGVkICphZnRlciogYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYC4gIFRoZXJlZm9yZSwgb24gZHJpdmVyIHVuYmluZCwgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgZ2V0cyBjYWxsZWQgKmZpcnN0KiwgYW5kIHRoZW4gYGRldm1fcmVndWxhdG9yX3JlbGVhc2VgLgoKVGhlIHByb2JsZW0gaXMgdGhlIHNlcXVlbmNlOiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZ2V0cyBjYWxsZWQsIGZyZWVpbmcgYHBjZGV2LSZndDtwaWAsIGFuZCAqdGhlbiogdGhlIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZC4gIFVucmVnaXN0ZXJpbmcgdGhlIHJlZ3VsYXRvcnMgdHJpZ2dlcnMgZGVmZXJyZWQgZGlzYWJsZXMsIGxlYWRpbmcgdG8gYSBjYWxsIHRvIGBwc2VfcGlfZGlzYWJsZWAsIGJ1dCBub3cgaXQmIzM5O3MgYWNjZXNzaW5nIGBwY2Rldi0mZ3Q7cGlgIGFmdGVyIGl0JiMzOTtzIGJlZW4gZnJlZWQuIENsYXNzaWMgZGV2cmVzIG9yZGVyaW5nIGJ1ZyEKCkNhbiB3ZSB0cmlnZ2VyIHRoaXMgd2l0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBTeXprYWxsZXIgY2FuIHByb2JhYmx5IHJlcHJvZHVjZSB0aGlzLiAgVGhlIHN0ZXBzIHdvdWxkIGJlOgoKMS4gIFJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgKGUuZy4sIHRocm91Z2ggYW4gSTJDIGBuZXdfZGV2aWNlYCBmb3IgYHBkNjkyeDBgKS4KMi4gIEVuYWJsZSB0aGUgcmVndWxhdG9yIChlLmcuLCB0aHJvdWdoIGBldGh0b29sYCBvciByZWd1bGF0b3Igc3lzZnMpLgozLiAgRGlzYWJsZSB0aGUgcmVndWxhdG9yIHdpdGggZGVmZXJyZWQgZGlzYWJsZSAoaWYgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcmVndWxhdG9yKS4KNC4gIFVuYmluZCB0aGUgZHJpdmVyICh1c2luZyBzeXNmcyBgdW5iaW5kYCBvciBkZWxldGluZyB0aGUgSTJDIGRldmljZSkuCgpUaGF0IHNob3VsZCBuYWlsIHRoZSBkZXZyZXMgcmVsZWFzZSBvcmRlciBidWcgcmlnaHQgb24gdGhlIGhlYWQuCgpCdXQsIGhvdyBsaWtlbHkgaXMgdGhpcyB0byBiZSByZWFjaGFibGU/IExldCYjMzk7cyBmaWd1cmUgb3V0IGlmIGBwZDY5MngwYCBpdHNlbGYgaXMgcmVhY2hhYmxlLiBUaGUgY29kZSBzdWdnZXN0cyBhIHByb2JlIGlzIHBlcmZvcm1lZC4KClRoZSBgcGQ2OTJ4MF9pMmNfcHJvYmVgIGZ1bmN0aW9uIGhhcyB0aGlzIGNoZWNrOgoKYGBgYwpyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAodTggKikmYW1wO2J1Ziwgc2l6ZW9mKGJ1ZikpOwppZiAocmV0ICE9IHNpemVvZihidWYpKSB7CglkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcbiYjMzQ7KTsKCXJldHVybiAtRUlPOwp9CgovKiBQcm9iZSBoYXMgYmVlbiBhbHJlYWR5IHJ1biBhbmQgdGhlIHN0YXR1cyBkdW1wZWQgKi8KaWYgKCFtZW1jbXAoJmFtcDtidWYsICZhbXA7emVybywgc2l6ZW9mKGJ1ZikpKSB7CgkvKiBBc2sgYWdhaW4gdGhlIGNvbnRyb2xsZXIgc3RhdHVzICovCgltc2cgPSBwZDY5MngwX21zZ190ZW1wbGF0ZV9saXN0W1BENjkyWDBfTVNHX0dFVF9TWVNfU1RBVFVTXTsKCXJldCA9IHBkNjkyeDBfc2VuZHJlY3ZfbXNnKHByaXYsICZhbXA7bXNnLCAmYW1wO2J1Zik7CglpZiAocmV0ICZsdDsgMCkgewoJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xuJiMzNDspOwoJCXJldHVybiByZXQ7Cgl9Cn0KCmlmIChidWYua2V5ICE9IDB4MDMgfHwgYnVmLnN1YlswXSAmYW1wOyAweDAxKSB7CglkZXZfZXJyKGRldiwgJiMzNDtQU0UgY29udHJvbGxlciBlcnJvclxuJiMzNDspOwoJcmV0dXJuIC1FSU87Cn0KYGBgCgpTbywgaWYgU3l6a2FsbGVyIHVzZXMgYSBtb2NrIEkyQyBkZXZpY2UsIGl0IHdvdWxkIG5lZWQgdG8gcmVzcG9uZCBjb3JyZWN0bHkgdG8gYnlwYXNzIHRoZXNlIGNoZWNrcy4gIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jayB0aGF0IGNhbiByZXNwb25kIHdpdGggYXJiaXRyYXJ5IGRhdGEsIGJ1dCBpdCAqY2FuKiB1c2UgYGkyYy1zdHViYCEgSG93ZXZlciwgYGkyYy1zdHViYCB3b3JrcyB3aXRoIFNNQnVzIGNvbW1hbmRzIGFuZCBub3QgcmF3IEkyQyB0cmFuc2ZlcnMgbGlrZSB0aGUgY29kZSB1c2VzIHdpdGggYGkyY19tYXN0ZXJfcmVjdmAuIFNvLCBgaTJjLXN0dWJgIG1pZ2h0IG5vdCB3b3JrIGhlcmUuCgpXaGF0IGFib3V0IGBwc2VfcmVndWxhdG9yLmNgPyBBaCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXI6CgpgYGBjCnN0YXRpYyBjb25zdCBfX21heWJlX3VudXNlZCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBzZV9yZWdfb2ZfbWF0Y2hbXSA9IHsKCXsgLmNvbXBhdGlibGUgPSAmIzM0O3BvZGwtcHNlLXJlZ3VsYXRvciYjMzQ7LCB9LAoJeyB9LAp9OwpgYGAKCkNhbiBTeXprYWxsZXIgaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCB0aGlzIGNvbXBhdGlibGUgc3RyaW5nPyBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyB1c2luZyBgc3l6X2Rldl9jcmVhdGVgLCBJIHRoaW5rLCBidXQgdXN1YWxseSB0ZXN0cyBwbGF0Zm9ybSBkcml2ZXJzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHRlc3QgVk0mIzM5O3MgZGV2aWNlIHRyZWUuIEJ1dCwgU3l6a2FsbGVyICpjYW4qIGFsc28gdXNlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIHNvbWVob3csIHRocm91Z2ggc29tZSBvdGhlciBtZWFucz8KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciAqZGlkKiBmaW5kIHRoaXMhIFRoZSBjb21taXQgbWVzc2FnZSBpcyBmcm9tIHN5ei1jbHVzdGVyISBJdCBzYXlzLCBgQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gVGhpcyBpcyBhIHN5emthbGxlciBkaXNjb3ZlcnksIGFuZCBpdCBnb3QgYXBwbGllZCEKClNvLCBob3cgZGlkIFN5emthbGxlciBnZXQgdGhlcmU/IEl0IG11c3QgYmUgc29tZSB2aXJ0dWFsIFBTRSBkcml2ZXIuIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvcHNlLXBkL2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3BkNjkyeDAuYyYjMzQ7LAogICAgJiMzNDtwc2VfY29yZS5jJiMzNDssCiAgICAmIzM0O3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICAgJiMzNDtzaTM0NzQuYyYjMzQ7LAogICAgJiMzNDt0cHMyMzg4MS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBENjkyeDAgRHJpdmVyOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkhKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBhbmQgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGBwZDY5MngwYCBkcml2ZXIgd2FzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJldGhpbmsgdGhpcy4gSXQmIzM5O3Mgbm90IHRoZSBvbmx5IEkyQyBkcml2ZXIgb3V0IHRoZXJlOyB0aGVyZSBhcmUgb3RoZXJzLCBsaWtlIGBzaTM0NzQuY2AgYW5kIGB0cHMyMzg4MS5jYC4gTWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIGFuIEkyQyBtb2NrLCBsaWtlIGBpMmMtc3R1YmA/IE9yLCBtYXliZSBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyB0aGUgVVNCIHN1YnN5c3RlbT8gSXQgY291bGQgYmUgdXNpbmcgYHZoY2lgIGZvciBVU0IgYW5kIGEgVVNCLXRvLUkyQyBhZGFwdGVyIGxpa2UgYGkyYy10aW55LXVzYmAuIFllcywgdGhhdCYjMzk7cyBsaWtlbHkhIFN5emthbGxlciBjb3VsZCBtb2NrIGBpMmMtdGlueS11c2JgIHdpdGggYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIGluIHR1cm4gcmVnaXN0ZXJzIGFuIEkyQyBhZGFwdGVyLiBUaGVuLCBpdCBpbnN0YW50aWF0ZXMgYHBkNjkyeDBgIHVzaW5nIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtKi9uZXdfZGV2aWNlYC4gU2luY2Ugc3l6a2FsbGVyIGNvbnRyb2xzIHRoZSBVU0IgcmVzcG9uc2VzLCBpdCBjYW4gZmVlZCBhcmJpdHJhcnkgZGF0YSB0byBgaTJjX21hc3Rlcl9yZWN2YCEgVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRlY2huaXF1ZSBmb3IgZnV6emluZyBJMkMgYW5kIFNQSSBkcml2ZXJzLgoKU28sIHRoZSBkcml2ZXIgSVMgcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IGZ1enphYmxlIQoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIEkgc2VlIGNoZWNrcyBmb3IgYCFwY2Rldi0mZ3Q7cGlgIGluIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBBbHNvLCB0aGVyZSYjMzk7cyBga2ZyZWUocGNkZXYtJmd0O3BpKTsgcGNkZXYtJmd0O3BpID0gTlVMTDtgIGluIGBwc2VfcmVsZWFzZV9waXNgIGFuZCB0aGUgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQgaW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmaXggdGhhdCYjMzk7cyB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuCgpOb3csIHdoaWNoIGNvbmZpZ3MgZG8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhcmUgc2V0PyBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBpcyB0aGUgbWFpbiBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQU0VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjY6bWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7RXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZz0xND1pZiBQU0VfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzoxNjpjb25maWcgUFNFX1JFR1VMQVRPUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0yMi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjIzOmNvbmZpZyBQU0VfUEQ2OTJYMFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtQRDY5MlgwIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozNTpjb25maWcgUFNFX1NJMzQ3NFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtTaTM0NzQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjQ2OmNvbmZpZyBQU0VfVFBTMjM4ODFcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VFBTMjM4ODEgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgUG9FIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZW5hYmxlIHRob3NlIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCAoUFNFKSBkcml2ZXJzIOKAkyBgUFNFX0NPTlRST0xMRVJgLCBgUFNFX1JFR1VMQVRPUmAsIGBQU0VfUEQ2OTJYMGAsIGBQU0VfU0kzNDc0YCwgYW5kIGBQU0VfVFBTMjM4ODFgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHNldCBvZiBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFBvRSBzZXR1cC4gSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nJiMzOTtzIHBpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4uLiBXYXNuJiMzOTt0IHRoZXJlIGEgcmVjZW50IGJ1ZyByZXBvcnQgcmVsYXRlZCB0byBQU0UgZnVuY3Rpb25hbGl0eT8gQWgsIHllcywgdGhlIGNvcmUgaXNzdWUgd2FzIHRyYWNlZCBiYWNrIHRvIGBwc2VfY29yZS5jYC4gQW5kIHRoYXQgc3BlY2lmaWMgZmlsZSBnZXRzIGNvbXBpbGVkICpvbmx5KiB3aGVuIGBQU0VfQ09OVFJPTExFUmAgaXMgYWN0aXZlLiBTbywgdGhlcmUmIzM5O3MgYSBkaXJlY3QgY29ubmVjdGlvbiB0aGVyZS4gTm93LCBsZXQgbWUganVzdCBjcm9zcy1yZWZlcmVuY2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgTWFrZWZpbGUgdGhhdCBnb3Zlcm5zIHRoZSBQb0UgUEQgZHJpdmVycy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBwbGFubmVkIGNvbmZpZ3VyYXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSBidWlsZCB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGUgYnVpbGQgcHJvY2VzcyB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgY29udHJpYnV0ZSB0byB0aGUgcHJvYmxlbSBvciBjYXVzZSBhbiB1bmludGVuZGVkIGNvbnNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgTWFrZWZpbGUgZm9yIExpbnV4IFBTRSBkcml2ZXJzXG4gICAzOlx0XG4gICA0Olx0b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSAmIzQzOz0gcHNlX2NvcmUub1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuICAgOTpcdG9iai0kKENPTkZJR19QU0VfVFBTMjM4ODEpICYjNDM7PSB0cHMyMzg4MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBQU0UgQ29udHJvbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBgUFNFX0NPTlRST0xMRVJgIOKAkyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiBpdCBhbGwuIFRvIHJlYWxseSBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcyB3aXRoIHN5emthbGxlciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRyaXZlcnMgYXJlIGVuYWJsZWQsIHNvIHRoYXQgdG9vbCBjYW4gdHJpZ2dlciB0aGUgY29yZSBjb2RlLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0OgoKKiAgIGBQU0VfQ09OVFJPTExFUmAKKiAgIGBQU0VfUkVHVUxBVE9SYAoqICAgYFBTRV9QRDY5MlgwYAoqICAgYFBTRV9TSTM0NzRgCiogICBgUFNFX1RQUzIzODgxYAoKTm93LCB3aGVyZSYjMzk7cyB0aGUgbW9zdCBpbXBhY3RmdWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCB0aGUgY29kZT8gSSBzZWUgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcHNlX3JlbGVhc2VfcGlzYCwgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgLCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBFeGNlbGxlbnQuIFRoZXNlIGFyZW4mIzM5O3QgZnVuY3Rpb25zIHRoYXQgZ2V0IGNhbGxlZCBhIHRob3VzYW5kIHRpbWVzIGEgc2Vjb25kLiBUaGV5JiMzOTtyZSBjb250cm9sLXBhdGggZnVuY3Rpb25zIGZvciBzZXR1cCwgdGVhcmRvd24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBTbywgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggaG90LXBhdGggY29kZSB0aGF0IG1pZ2h0IGJlIHVuZGVyIGludGVuc2UgcGVyZm9ybWFuY2UgcHJlc3N1cmUuIFRoZXkgYXJlIG1vcmUgbGlrZWx5IHRvIHJldmVhbCBpbnRlcmVzdGluZyBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIGl0LiBJJiMzOTtsbCBzdGFydCB3aXRoIGBwc2VfcmVsZWFzZV9waXNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIG9idmlvdXMgaXMgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2VfcmVsZWFzZV9waXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDA9c3RhdGljIGludCBvZl9sb2FkX3BzZV9waV9wYWlyc2V0cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM3LVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTM4OnN0YXRpYyB2b2lkIHBzZV9yZWxlYXNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEzOS17XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTYyPXN0YXRpYyBpbnQgb2ZfbG9hZF9wc2VfcGlzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTIzNS1vdXQ6XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoyMzY6XHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMjM3LVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTEzNj12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0NS1cdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTQ2Olx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNDctXHRrZmlmb19mcmVlKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl9maWZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFBTRSBSZWxlYXNlIFBJUyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGBwc2VfcmVsZWFzZV9waXNgIOKAkyB0aGF0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBHb29kIGNob2ljZS4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBvcmdhbml6ZWQ6CgoqICAgYHBzZV9yZWxlYXNlX3Bpc2AKKiAgIGBwc2VfcGlfaXNfZW5hYmxlZGAKKiAgIGBwc2VfcGlfZW5hYmxlYAoqICAgYHBzZV9waV9kaXNhYmxlYAoqICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgCgpSaWdodCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIGluIHRoaXMgYXJlYT8gTm8sIGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCB0aG9zZSBmaXZlLiBHb29kLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIExldCBtZSBjaGVjazogYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBORVRgIGFuZCBgUEhZTElCYCwgY29ycmVjdD8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMuIE9rYXksIGJhY2sgdG8gYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmb3IgYW5vdGhlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IGRyaXZlcnNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBuby5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBQU0VfQ09OVFJPTExFUlxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gIDE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxuICAyMDpcdFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXG4gIDIxOlx0XHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFBTRV9QRDY5MlgwXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQRDY5MlgwIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICAyNjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyNzpcdFx0c2VsZWN0IEZXX1VQTE9BRFxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxuICAzMDpcdFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGQ2OTJ4MC5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgUFNFX1NJMzQ3NFxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2kzNDc0IFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBTaTM0NzQgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XG4gIDQwOlx0XHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cbiAgNDE6XHRcdCAgT25seSA0LXBhaXIgUFNFIGNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA0NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2kzNDc0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBQU0VfVFBTMjM4ODFcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RQUzIzODgxIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBUUFMyMzg4MSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMjkKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQU0UgQ29udHJvbGxlciBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCB0aGUgYFBTRV9DT05UUk9MTEVSYCByZWxpZXMgaGVhdmlseSBvbiBgUkVHVUxBVE9SYC4gIE9mIGNvdXJzZSwgdGhlIHNwZWNpZmljIGRyaXZlcnMgYWxzbyBkZXBlbmQgb24gYEkyQ2Ag4oCTIHN0YW5kYXJkIHN0dWZmIGZvciBzeXprYWxsZXIsIHVzdWFsbHkgYWxyZWFkeSBlbmFibGVkLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSwgc28gSSYjMzk7bGwgbGlzdCBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDoKCiogICBgUFNFX0NPTlRST0xMRVJgCiogICBgUFNFX1JFR1VMQVRPUmAKKiAgIGBQU0VfUEQ2OTJYMGAKKiAgIGBQU0VfU0kzNDc0YAoqICAgYFBTRV9UUFMyMzg4MWAKClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlIGluIHRoZSBQU0UgY29udHJvbGxlciBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoYXQgY2xhc3NpYyByYWNlIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yJiMzOTtzIGRlZmVycmVkIGRpc2FibGUgZmx1c2hpbmcgcHJvY2Vzcy4gVGhlIGZsdXNoIGlzIHRyeWluZyB0byBhY2Nlc3MgYHBjZGV2LSZndDtwaWAgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBmcmVlZC4gVGhlIHBhdGNoJiMzOTtzIGZpeCBpbnZvbHZlcyBudWxsIGNoZWNrcyBhbmQgcmVvcmRlcmluZyB0aGUgdGVhcmRvd24gdG8gcHJldmVudCB0aGlzLgoKVGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgdGhlIFBTRSBjb3JlIGFuZCBkcml2ZXJzLCBsaWtlIHRoZSBJMkMtYmFzZWQgUEQ2OTJ4MCwgYXJlIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgV2UgY2FuIGZ1enogdGhlbSBieSBjcmVhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgZnVuY3Rpb25zIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAuIFRoZXkgYXJlIHN0YXRpYyB0byBgcHNlX2NvcmUuY2AuIFRoaXMgaXMgcGVyZmVjdCBiZWNhdXNlIGlmIFN5emthbGxlciB0cmlnZ2VycyB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMsIGl0JiMzOTtsbCBjb3ZlciB0aG9zZSBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvdmVyYWdlIHRvIHZhbGlkYXRlIHRoaXMgZml4LgoKSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BTRV9QRDY5MlgwJiMzNDssCiAgICAmIzM0O1BTRV9TSTM0NzQmIzM0OywKICAgICYjMzQ7UFNFX1RQUzIzODgxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNlX3JlbGVhc2VfcGlzJiMzNDssCiAgICAmIzM0O3BzZV9waV9pc19lbmFibGVkJiMzNDssCiAgICAmIzM0O3BzZV9waV9lbmFibGUmIzM0OywKICAgICYjMzQ7cHNlX3BpX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXIgY29yZSBmcmFtZXdvcmsuIFRoZSBidWcgb2NjdXJzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yIGNvcmUmIzM5O3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cdTAwM2VwaWAgYXJyYXkuIFRoZSBwYXRjaCBhZGRzIE5VTEwgY2hlY2tzIGFuZCByZW9yZGVycyB0ZWFyZG93biBzdGVwcyB0byBwcmV2ZW50IHRoaXMuIFRoZSBQU0UgY29yZSBhbmQgaXRzIGRyaXZlcnMgKGUuZy4sIEkyQy1iYXNlZCBQRDY5MngwKSBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBpbnN0YW50aWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlbSB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtQU0VfUEQ2OTJYMCYjMzQ7LAogICAgJiMzNDtQU0VfU0kzNDc0JiMzNDssCiAgICAmIzM0O1BTRV9UUFMyMzg4MSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BzZV9yZWxlYXNlX3BpcyYjMzQ7LAogICAgJiMzNDtwc2VfcGlfaXNfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDtwc2VfcGlfZW5hYmxlJiMzNDssCiAgICAmIzM0O3BzZV9waV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3VucmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJiMzOTtzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS4xOTk0ODk5NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzODMxNDQwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlBTRV9QRDY5MlgwXCIsXG4gICAgXCJQU0VfU0kzNDc0XCIsXG4gICAgXCJQU0VfVFBTMjM4ODFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgICBcInBzZV9waV9pc19lbmFibGVkXCIsXG4gICAgXCJwc2VfcGlfZW5hYmxlXCIsXG4gICAgXCJwc2VfcGlfZGlzYWJsZVwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSdzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXFx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS4xOTk0OTU0MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjc5OTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhZmUxNTA0ZTE2ZmI3NzA0NmM3YTkzNGFhOGM0ZTMwNjc0YzMwY2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMDQ6NTk6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbmluZGV4IGE1ZTZkN2IyNmI5ZmQ3Li4yMWNjYjUxNDY2MTYwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXFxuQEAgLTE0NCw3ICsxNDQsMTMgQEAgc3RhdGljIHZvaWQgcHNlX3JlbGVhc2VfcGlzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiBcXHRcXHRvZl9ub2RlX3B1dChwY2Rldi1cXHUwMDNlcGlbaV0ucGFpcnNldFsxXS5ucCk7XFxuIFxcdFxcdG9mX25vZGVfcHV0KHBjZGV2LVxcdTAwM2VwaVtpXS5ucCk7XFxuIFxcdH1cXG4rXFx0LyogRnJlZSB1bmRlciB0aGUgbG9jayBzbyB0aGUgTlVMTCBzdG9yZSBpcyBhdXRob3JpdGF0aXZlIGFnYWluc3RcXG4rXFx0ICogdGhlIHJlZ3VsYXRvciBvcHMgdGhhdCByZWFkIHBjZGV2LVxcdTAwM2VwaSB1bmRlciBwY2Rldi1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4gXFx0a2ZyZWUocGNkZXYtXFx1MDAzZXBpKTtcXG4rXFx0cGNkZXYtXFx1MDAzZXBpID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2Rldi1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00MjEsNiArNDI3LDExIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXFxuIFxcbiBcXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwY2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdC8qIENvbnRyb2xsZXIgbWF5IGJlIHVucmVnaXN0ZXJlZCAocGNkZXYtXFx1MDAzZXBpIGZyZWVkKSBtaWQtdGVhcmRvd24uICovXFxuK1xcdGlmICghcGNkZXYtXFx1MDAzZXBpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cXHUwMDNlcGlbaWRdLnB3X2QpKSB7XFxuIFxcdFxcdHJldCA9IHBjZGV2LVxcdTAwM2VwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTY3NCw2ICs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbiBcXG4gXFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbitcXHQvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LVxcdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xcbitcXHRpZiAoIXBjZGV2LVxcdTAwM2VwaSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4gXFx0aWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LVxcdTAwM2VwaVtpZF0ucHdfZCkpIHtcXG4gXFx0XFx0LyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLlxcbiBcXHRcXHQgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuXFxuQEAgLTcwMiwxNSArNzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcXG4gc3RhdGljIGludCBwc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7XFxuLVxcdHN0cnVjdCBwc2VfcGkgKnBpO1xcbiBcXHRpbnQgaWQsIHJldDtcXG4gXFxuIFxcdGlkID0gcmRldl9nZXRfaWQocmRldik7XFxuLVxcdHBpID0gXFx1MDAyNnBjZGV2LVxcdTAwM2VwaVtpZF07XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0LyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlclxcbitcXHQgKiBwY2Rldi1cXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cXG4rXFx0ICovXFxuK1xcdGlmICghcGNkZXYtXFx1MDAzZXBpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHBpLVxcdTAwM2VhZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcXG4rXFx0XFx0cGNkZXYtXFx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTExNCwxMSArMTEzNSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuIHtcXG4tXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4tXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4rXFx0LyogU3RvcCB0aGUgSVJRIGFuZCBub3RpZmljYXRpb24gd29ya2VyIGJlZm9yZSBmcmVlaW5nIHdoYXQgdGhleVxcbitcXHQgKiByZWFjaDogYm90aCB0b3VjaCBwY2Rldi1cXHUwMDNlcGksIGFuZCB0aGUgSVJRIGFsc28gdXNlcyBwd19kLVxcdTAwM2VzdXBwbHlcXG4rXFx0ICogdGhhdCBwc2VfZmx1c2hfcHdfZHMoKSBkcm9wcy5cXG4rXFx0ICovXFxuIFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbiBcXHRcXHRkaXNhYmxlX2lycShwY2Rldi1cXHUwMDNlaXJxKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl93b3JrKTtcXG4rXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4rXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4gXFx0a2ZpZm9fZnJlZShcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl9maWZvKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cGNkZXYtXFx1MDAzZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS44MTI5NDc0NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDc2OTY3MjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUFNFX1BENjkyWDBcIixcbiAgICBcIlBTRV9TSTM0NzRcIixcbiAgICBcIlBTRV9UUFMyMzg4MVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBzZV9yZWxlYXNlX3Bpc1wiLFxuICAgIFwicHNlX3BpX2lzX2VuYWJsZWRcIixcbiAgICBcInBzZV9waV9lbmFibGVcIixcbiAgICBcInBzZV9waV9kaXNhYmxlXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuaW5kZXggYTVlNmQ3YjI2YjlmZDcuLjIxY2NiNTE0NjYxNjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtMTQ0LDcgKzE0NCwxMyBAQCBzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gXHRcdG9mX25vZGVfcHV0KHBjZGV2LVx1MDAzZXBpW2ldLnBhaXJzZXRbMV0ubnApO1xuIFx0XHRvZl9ub2RlX3B1dChwY2Rldi1cdTAwM2VwaVtpXS5ucCk7XG4gXHR9XG4rXHQvKiBGcmVlIHVuZGVyIHRoZSBsb2NrIHNvIHRoZSBOVUxMIHN0b3JlIGlzIGF1dGhvcml0YXRpdmUgYWdhaW5zdFxuK1x0ICogdGhlIHJlZ3VsYXRvciBvcHMgdGhhdCByZWFkIHBjZGV2LVx1MDAzZXBpIHVuZGVyIHBjZGV2LVx1MDAzZWxvY2suXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwY2Rldi1cdTAwM2VwaSk7XG4rXHRwY2Rldi1cdTAwM2VwaSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQyMSw2ICs0MjcsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBcbiBcdGlkID0gcmRldl9nZXRfaWQocmRldik7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuK1x0LyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi1cdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xuK1x0aWYgKCFwY2Rldi1cdTAwM2VwaSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cdTAwM2VwaVtpZF0ucHdfZCkpIHtcbiBcdFx0cmV0ID0gcGNkZXYtXHUwMDNlcGlbaWRdLmFkbWluX3N0YXRlX2VuYWJsZWQ7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTY3NCw2ICs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIFxuIFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4rXHQvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LVx1MDAzZXBpIGZyZWVkKSBtaWQtdGVhcmRvd24uICovXG4rXHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4gXHRpZiAocHNlX3B3X2RfaXNfc3dfcHdfY29udHJvbChwY2RldiwgcGNkZXYtXHUwMDNlcGlbaWRdLnB3X2QpKSB7XG4gXHRcdC8qIE1hbmFnZSBlbmFibGVkIHN0YXR1cyBieSBzb2Z0d2FyZS5cbiBcdFx0ICogUmVhbCBlbmFibGUgcHJvY2VzcyB3aWxsIGhhcHBlbiBpZiBhIHBvcnQgaXMgY29ubmVjdGVkLlxuQEAgLTcwMiwxNSArNzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIHtcbiBcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTtcbi1cdHN0cnVjdCBwc2VfcGkgKnBpO1xuIFx0aW50IGlkLCByZXQ7XG4gXG4gXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xuLVx0cGkgPSBcdTAwMjZwY2Rldi1cdTAwM2VwaVtpZF07XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuK1x0LyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlclxuK1x0ICogcGNkZXYtXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cbitcdCAqL1xuK1x0aWYgKCFwY2Rldi1cdTAwM2VwaSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFx0cmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7XG4gXHRpZiAoIXJldClcbi1cdFx0cGktXHUwMDNlYWRtaW5fc3RhdGVfZW5hYmxlZCA9IDA7XG4rXHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTExMTQsMTEgKzExMzUsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiB7XG4tXHRwc2VfZmx1c2hfcHdfZHMocGNkZXYpO1xuLVx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbitcdC8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXlcbitcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbitcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXG4rXHQgKi9cbiBcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG4gXHRcdGRpc2FibGVfaXJxKHBjZGV2LVx1MDAzZWlycSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl93b3JrKTtcbitcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4rXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0a2ZpZm9fZnJlZShcdTAwMjZwY2Rldi1cdTAwM2VudGZfZmlmbyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcdGxpc3RfZGVsKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6MTkuODEyOTQ4NzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMTg5ODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQU0UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY2AuIExvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBOVUxMIGNoZWNrcyBhcm91bmQgYHBjZGV2LVx1MDAzZXBpYCB3aXRoaW4gYSBmZXcgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBUaGF0J3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZSwgSSBhbHdheXMgYXBwcmVjaWF0ZSB0aGF0LiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGBwc2VfcmVsZWFzZV9waXNgIHRvIHNldCBgcGNkZXYtXHUwMDNlcGlgIHRvIE5VTEwsIGFsbCB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgYHBjZGV2LVx1MDAzZWxvY2tgLiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGlzc3VlIHdhcyBpZGVudGlmaWVkIGFuZCB0aGUgbG9jayBhZGRlZCB0byBwcm90ZWN0IGl0LiBHb29kIGNhdGNoIHRoZXJlLiBGaW5hbGx5LCBJIHNlZSBzb21lIHJlb3JkZXJpbmcgaGFwcGVuaW5nIGluIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHdoYXQgZXhhY3RseSBpcyB0aGlzIFwiUFNFXCIgdGhpbmc/IExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHJpZ2h0LCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQb3dlciBvdmVyIEV0aGVybmV0IHNpZGUgb2YgdGhpbmdzLiBPa2F5LCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBJdCBsb29rcyBsaWtlIGl0J3MgYSBzdWJzeXN0ZW0gZm9yIFBTRSBjb250cm9sbGVycywgd2hpY2ggKmNvdWxkKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2VzIGhlcmUuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBnaXZlIHVzIGEgZ29vZCBpZGVhIG9mIHdoYXQncyBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6MjQuNjQ0ODUwNTUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFNFX0NPTlRST0xMRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzo2Om1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToyNC43NDc3OTAwNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg5MDk5MDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERyaXZlciBMYW5kc2NhcGUgZm9yIFBTRSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgcHJhY3RpY2FsaXRpZXMuIFRoZSBjb3JlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgc3VwcG9ydCwgb3IgcmF0aGVyIHRoZSBsYWNrIHRoZXJlb2YsIGluIHRoZSBjb250ZXh0IG9mIFBTRSAoUG93ZXIgU3lzdGVtIEVuZ2luZWVyaW5nKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBleGlzdGluZyBkcml2ZXJzLCBsaWJyYXJpZXMsIG9yIEFQSXMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoZXJlIHRoZSBnYXBzIGFyZS5cblxuV2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBhIGZldyBhbmdsZXMgaGVyZS4gRmlyc3QsIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgbWF5YmUgc3BlY2lmaWMgY2hpcHNldHMgb3IgaW50ZXJmYWNlcy4gVGhlbiwgbW9yZSBhYnN0cmFjdCBsZXZlbHMg4oCTIHBvd2VyIG1hbmFnZW1lbnQgZnJhbWV3b3JrcyBvciBzdGFuZGFyZCBwcm90b2NvbHMgd2UgY2FuIGxldmVyYWdlLiBBcmUgdGhlcmUgcHJlLWJ1aWx0IGRyaXZlcnMgZm9yIHRoZSBwYXJ0aWN1bGFyIGhhcmR3YXJlLCBvciBhcmUgd2Ugc3RhcmluZyBkb3duIGEgY3VzdG9tIGRyaXZlciBkZXZlbG9wbWVudCBwcm9qZWN0PyBBbmQgd2hhdCBhYm91dCB0aGUgc29mdHdhcmUgc2lkZT8gQXJlIHRoZSBkcml2ZXJzIGRlc2lnbmVkIHdlbGwgdG8gaGFuZGxlIGNvbXBsZXggY2FsY3VsYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zP1xuXG5UaGlzIGFsc28gdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFdpbGwgdGhlIGRyaXZlcnMgYmUgaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBPUywgb3IgYmUgaGFuZGxlZCB0aHJvdWdoIGEgZGVkaWNhdGVkIGNvbnRyb2xsZXI/IEhvdyBkbyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHN5c3RlbT8gSXMgdGhlcmUgYSBuZWVkIGZvciBzb21lIHNvcnQgb2YgbWlkZGxlLXdhcmUsIHNvIHRoZSBkcml2ZXJzIGFyZSBwb3J0YWJsZT8gVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYW4gaW5mb3JtZWQgcGxhbiBmb3IgZGV2ZWxvcG1lbnQuIFRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGRyaXZlcnMgd2lsbCBkaXJlY3RseSBpbmZsdWVuY2UgbXkgZGVzaWduIGNob2ljZXMgZm9yIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjM1LjYzODc4Mzk5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9wc2UtcGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwicGQ2OTJ4MC5jXCIsXG4gICAgXCJwc2VfY29yZS5jXCIsXG4gICAgXCJwc2VfcmVndWxhdG9yLmNcIixcbiAgICBcInNpMzQ3NC5jXCIsXG4gICAgXCJ0cHMyMzg4MS5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjM1LjYzODg1NjE1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzA4NDQ1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgSGFyZHdhcmUgRHJpdmVyIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMuLi4gaXQncyBjbGVhcmx5IGEgaGFyZHdhcmUgZHJpdmVyIHN1YnN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsIFwiQ2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoaXMgZnJvbSB1c2VyIHNwYWNlP1wiIEl0J3MgY3J1Y2lhbCBmb3IgbW9zdCBvZiB3aGF0IEkgZG8uIE5vdywgdG8gZmlndXJlIHRoYXQgb3V0LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgcHNlX2NvcmUuY2AgZmlsZS4gVGhhdCdzIHRoZSB1c3VhbCBwbGFjZSB0byBmaW5kIHRoZSB1c2VyIHNwYWNlIGludGVyZmFjZXMsIGlmIGFueSBleGlzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjQzLjMwOTcwMjk5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MjA1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBzZV9waV9pc19lbmFibGVkfHBzZV9waV9lbmFibGV8cHNlX3BpX2Rpc2FibGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTQwMz1zdGF0aWMgYm9vbCBwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDE3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQxODpzdGF0aWMgaW50IHBzZV9waV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00NTI9c3RhdGljIHZvaWQgcHNlX3BpX2RlYWxsb2NhdGVfcHdfYnVkZ2V0KHN0cnVjdCBwc2VfcGkgKnBpKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDYxLS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQ2MjogKiBfcHNlX3BpX2Rpc2FibGUgLSBDYWxsIGRpc2FibGUgb3BlcmF0aW9uLiBBc3N1bWVzIHRoZSBQU0UgbG9jayBoYXMgYmVlblxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2My0gKlxcdFxcdCAgICAgYWNxdWlyZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00NjgtICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NDY5OnN0YXRpYyBpbnQgX3BzZV9waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTQ5Nj1zdGF0aWMgaW50IHBzZV9kaXNhYmxlX3BpX3BvbChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNTAzLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjUwNDpcXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy01MDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTYyND1zdGF0aWMgaW50IF9wc2VfcGlfZGVsaXZlcnlfcG93ZXJfc3dfcHdfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3NS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo2NzY6c3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy03MTctXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NzE4OnN0YXRpYyBpbnQgcHNlX3BpX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMS1cXHR9XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NzMyOlxcdHJldCA9IF9wc2VfcGlfZGlzYWJsZShwY2RldiwgaWQpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMy1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcHNlX3BpX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDI6XFx0LmlzX2VuYWJsZWQgPSBwc2VfcGlfaXNfZW5hYmxlZCxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDM6XFx0LmVuYWJsZSA9IHBzZV9waV9lbmFibGUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODQ0OlxcdC5kaXNhYmxlID0gcHNlX3BpX2Rpc2FibGUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODQ1LVxcdC5nZXRfdm9sdGFnZSA9IHBzZV9waV9nZXRfdm9sdGFnZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEyMjk9c3RhdGljIGludCBwc2Vfc2V0X2NvbmZpZ19pc3Ioc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNTgtXFx0XFx0ICAgIHBjZGV2LVxcdTAwM2VwaVtpZF0uaXNyX3BkX2RldGVjdGVkKVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEyNTk6XFx0XFx0XFx0cmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTI2MC1cXHRcXHRwY2Rldi1cXHUwMDNlcGlbaWRdLmlzcl9wZF9kZXRlY3RlZCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OTo0My40MjM1Mjg1MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxMzM3NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFJlZ3VsYXRvciBPcGVyYXRpb25zIGFuZCBQb3RlbnRpYWwgVHJpZ2dlciBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBGcm9tIHRoZSBjb2RlLCB0aGV5J3JlIGNsZWFybHkgcmVndWxhdG9yIG9wZXJhdGlvbnMuIFRoZSByZWd1bGF0b3Igc3Vic3lzdGVtIGlzIHRoZSBjb25zdW1lciBoZXJlLCBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB0byBtYW5hZ2Ugc29tZXRoaW5nLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBjYW4gd2UgaW50ZXJhY3Qgd2l0aCB0aGVzZSByZWd1bGF0b3JzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb250cm9sIHBhdGhzLiBDYW4gd2UgaW50ZXJmYWNlIHZpYSBzeXNmcz8gVGhhdCdzIGFsd2F5cyB0aGUgZmlyc3QgcG9ydCBvZiBjYWxsIGZvciBsb3dlci1sZXZlbCBkZXZpY2UgY29udHJvbC4gT3IsIHBlcmhhcHMsIGlzIHRoZXJlIGEgTmV0bGluayBpbnRlcmZhY2UgaW52b2x2ZWQ/IExvb2tpbmcgYXQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbSwgdGhlIFBTRSBzdWJzeXN0ZW0gKmRvZXMqIGV4cG9zZSBOZXRsaW5rIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGV0aHRvb2wuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwb2ludHMgdG93YXJkcyB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgZXRodG9vbCBjb21tYW5kcyB0byB0cmlnZ2VyIHJlZ3VsYXRvciBhY3Rpb25zIGluZGlyZWN0bHkuIFdlIG1heSBiZSBhYmxlIHRvIGxldmVyYWdlIGV4aXN0aW5nIFBTRSBuZXRsaW5rIGluZnJhc3RydWN0dXJlIHRvIGNvbnRyb2wgdGhpcyByZWd1bGF0b3IgaW5kaXJlY3RseS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBhdmVudWUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjQ2Ljk5NDg2OTEyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTM2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTE1OTU9c3RhdGljIHZvaWQgcHNlX2dldF9zd19hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjE4LS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2MTk6ICogcHNlX2V0aHRvb2xfZ2V0X3N0YXR1cyAtIGdldCBzdGF0dXMgb2YgUFNFIGNvbnRyb2xcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjIwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjI1LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2MjY6aW50IHBzZV9ldGh0b29sX2dldF9zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjctXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2Mjg6XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcHNlX2NvbnRyb2xfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTYyOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzMzLX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzM0OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX2dldF9zdGF0dXMpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTczNjpzdGF0aWMgaW50IHBzZV9ldGh0b29sX2MzM19zZXRfY29uZmlnKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzM3LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3NzAtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc3MTpzdGF0aWMgaW50IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTc3Mi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTc5NS0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzk2OiAqIHBzZV9ldGh0b29sX3NldF9jb25maWcgLSBzZXQgUFNFIGNvbnRyb2wgY29uZmlndXJhdGlvblxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3OTctICogQHBzZWM6IFBTRSBjb250cm9sIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MDItICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgwMzppbnQgcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTgwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA5LVxcdGlmIChwc2VfaGFzX2MzMyhwc2VjKSBcXHUwMDI2XFx1MDAyNiBjb25maWctXFx1MDAzZWMzM19hZG1pbl9jb250cm9sKSB7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgxMDpcXHRcXHRlcnIgPSBwc2VfZXRodG9vbF9jMzNfc2V0X2NvbmZpZyhwc2VjLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTUtXFx0aWYgKHBzZV9oYXNfcG9kbChwc2VjKSBcXHUwMDI2XFx1MDAyNiBjb25maWctXFx1MDAzZXBvZGxfYWRtaW5fY29udHJvbClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxODE2OlxcdFxcdGVyciA9IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhwc2VjLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTctXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODE5LX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxODIwOkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9jb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MjEtXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xODMyPXN0YXRpYyBpbnQgcHNlX3BpX3VwZGF0ZV9wd19idWRnZXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4NjgtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTg2OTogKiBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQgLSBzZXQgUFNFIGNvbnRyb2wgcG93ZXIgbGltaXRcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODcwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODc1LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4NzY6aW50IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjUtfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE5MjY6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTI3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjgtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTkyOTogKiBwc2VfZXRodG9vbF9zZXRfcHJpbyAtIFNldCBQU0UgUEkgcHJpb3JpdHkgYWNjb3JkaW5nIHRvIHRoZSBidWRnZXRcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTMwLSAqXFx0XFx0XFx0ICBldmFsdWF0aW9uIHN0cmF0ZWd5XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM2LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE5Mzc6aW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTk1LX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTk2OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9wcmlvKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OTo0Ny4xMjI4MTE4NzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NjMwOTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBTRSBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlOyBpdCBzZWVtcyBJIGNhbiBjb25maWd1cmUgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIHRocm91Z2ggaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSAqdHJpZ2dlciogdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbj8gSXQncyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gYSBkcml2ZXIgaXMgdW5ib3VuZCwgb3IgYSBtb2R1bGUgaXMgdW5sb2FkZWQuIFRoZSBwbGFuIHRoZW4gaXMsIGlmIEkgY2FuIHNvbWVob3cgYmluZCBhbmQgdW5iaW5kIGEgUFNFIGRyaXZlciDigJMgc29tZXRoaW5nIGxpa2UgYHBkNjkyeDBgIG9yIGB0cHMyMzg4MWAg4oCTIEkgKnNob3VsZCogYmUgYWJsZSB0byBnZXQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIHRvIGZpcmUuIFRoZSBuZXh0IHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgZG9uZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBcmUgdGhlcmUgYW55IHZpcnR1YWwgb3IgbW9jayBQU0UgZHJpdmVycyBJIGNhbiBsZXZlcmFnZSBmb3IgdGhpcyB0ZXN0aW5nPyBJIG5lZWQgdG8gY2hlY2sgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjU0LjE2OTEyMzg1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTQyMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYz0xNzU2PXN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTgzOC1cXHRwcml2LVxcdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSAyO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTgzOTpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NDAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEwMzM9c3RhdGljIHZvaWQgcHNlX3NlbmRfbnRmX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU0LS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNTU6ICogcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIGRldmljZVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTYtICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA1OS0gKi9cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDYwOmludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMjktfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExMzA6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTU0PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNTktLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2MDogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2MS0gKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBTRSBjb250cm9sbGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYzLSAqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NDogKiBNYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkuIEZvciBQU0UgY29udHJvbGxlcnMgcmVnaXN0ZXJlZCBieVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjUtICogdGhpcyBmdW5jdGlvbiwgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NjogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY3LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY5LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNzA6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzEtXFx0XFx0XFx0XFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOlxcdHJldCA9IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTEtfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTI6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjYtXFx0cHJpdi1cXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTI3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQyLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYz0xNDMwPXN0YXRpYyBpbnQgdHBzMjM4ODFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVxcdHByaXYtXFx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9TVEFUSUM7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6NTQuMzE0Mjc1NTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDkzMzQwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGZpbGUgY2FsbGVkIGBwc2VfcmVndWxhdG9yLmNgLiBGcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN1cHBseSBlbGVtZW50cyByZWxhdGVkIHRvIHNvbWV0aGluZyB0aGF0IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBcIlBTRSxcIiB3aGljaCBjb3VsZCBtZWFuIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCwgb3IgcGVyaGFwcyBhIGNvbXBvbmVudCB3aXRoIGEgc2ltaWxhciBuYW1lLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgd2l0aGluIGBwc2VfcmVndWxhdG9yLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MDIuMDIzNjEyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNDMyODgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2VfcmVndWxhdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjAyLjEyNTA1NDI0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjI1NjY4MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlJlZmxlY3Rpbmcgb24gdGhlIE1ldGhvZCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB1c2luZyBgcHNlX3JlZ3VsYXRvcmAgZm9yIHRoaXMgdGFzay4gQnV0IGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHJlbHlpbmcgb24gdGhhdCwgcGVyaGFwcyBJIHNob3VsZCBqdXN0IGdvIHN0cmFpZ2h0IHRvIHJlYWRpbmcgdGhlIGRhdGEgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAsIGFuZCBpdCBtaWdodCByZXZlYWwgZXZlcnl0aGluZyBJIG5lZWQgd2l0aG91dCBuZWVkaW5nIGEgbW9yZSBlbGFib3JhdGUgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZSBiZWZvcmUgSSBnZXQgYWhlYWQgb2YgbXlzZWxmLiBFZmZpY2llbmN5IGlzIGtleSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoxMS43NTA3MjU3MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Ly9cXG4gICAzOlxcdC8vIERyaXZlciBmb3IgdGhlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHdpdGhvdXRcXG4gICA0OlxcdC8vIGF1dG8gY2xhc3NpZmljYXRpb24gc3VwcG9ydC5cXG4gICA1OlxcdC8vXFxuICAgNjpcXHQvLyBDb3B5cmlnaHQgKGMpIDIwMjIgUGVuZ3V0cm9uaXgsIE9sZWtzaWogUmVtcGVsIFxcdTAwM2NrZXJuZWxAcGVuZ3V0cm9uaXguZGVcXHUwMDNlXFxuICAgNzpcXHQvL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0cnVjdCBwc2VfcmVnX3ByaXYge1xcbiAgMTY6XFx0XFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcXG4gIDE3OlxcdFxcdHN0cnVjdCByZWd1bGF0b3IgKnBzOyAvKnBvd2VyIHNvdXJjZSAqL1xcbiAgMTg6XFx0XFx0ZW51bSBldGh0b29sX3BvZGxfcHNlX2FkbWluX3N0YXRlIGFkbWluX3N0YXRlO1xcbiAgMTk6XFx0fTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RhdGljIHN0cnVjdCBwc2VfcmVnX3ByaXYgKnRvX3BzZV9yZWcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcHNlX3JlZ19wcml2LCBwY2Rldik7XFxuICAyNDpcXHR9XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBpbnRcXG4gIDI3OlxcdHBzZV9yZWdfcGlfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICAzMDpcXHRcXHRpbnQgcmV0O1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXFx1MDAzZXBzKTtcXG4gIDMzOlxcdFxcdGlmIChyZXQpXFxuICAzNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRU5BQkxFRDtcXG4gIDM3OlxcdFxcdHJldHVybiAwO1xcbiAgMzg6XFx0fVxcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgaW50XFxuICA0MTpcXHRwc2VfcmVnX3BpX2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXFx1MDAzZXBzKTtcXG4gIDQ3OlxcdFxcdGlmIChyZXQpXFxuICA0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XFxuICA1MTpcXHRcXHRyZXR1cm4gMDtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIGludFxcbiAgNTU6XFx0cHNlX3JlZ19waV9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxcbiAgNTc6XFx0e1xcbiAgNTg6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRhZG1pbl9zdGF0ZS1cXHUwMDNlcG9kbF9hZG1pbl9zdGF0ZSA9IHByaXYtXFx1MDAzZWFkbWluX3N0YXRlO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyZXR1cm4gMDtcXG4gIDYzOlxcdH1cXG4gIDY0OlxcdFxcbiAgNjU6XFx0c3RhdGljIGludFxcbiAgNjY6XFx0cHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuICA2NzpcXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDcwOlxcdFxcdGludCByZXQ7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKHByaXYtXFx1MDAzZXBzKTtcXG4gIDczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0aWYgKCFyZXQpXFxuICA3NzpcXHRcXHRcXHRwd19zdGF0dXMtXFx1MDAzZXBvZGxfcHdfc3RhdHVzID1cXG4gIDc4OlxcdFxcdFxcdFxcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7XFxuICA3OTpcXHRcXHRlbHNlXFxuICA4MDpcXHRcXHRcXHRwd19zdGF0dXMtXFx1MDAzZXBvZGxfcHdfc3RhdHVzID1cXG4gIDgxOlxcdFxcdFxcdFxcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0cmV0dXJuIDA7XFxuICA4NDpcXHR9XFxuICA4NTpcXHRcXG4gIDg2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHBzZV9yZWdfb3BzID0ge1xcbiAgODc6XFx0XFx0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlLFxcbiAgODg6XFx0XFx0LnBpX2dldF9wd19zdGF0dXMgPSBwc2VfcmVnX3BpX2dldF9wd19zdGF0dXMsXFxuICA4OTpcXHRcXHQucGlfZW5hYmxlID0gcHNlX3JlZ19waV9lbmFibGUsXFxuICA5MDpcXHRcXHQucGlfZGlzYWJsZSA9IHBzZV9yZWdfcGlfZGlzYWJsZSxcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0YXRpYyBpbnRcXG4gIDk0OlxcdHBzZV9yZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2O1xcbiAgOTg6XFx0XFx0aW50IHJldDtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MTEuNzUwODQ3NzE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc5NjU0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcHNlX3JlZ3VsYXRvcmAgRHJpdmVyIGFuZCBTeXprYWxsZXIncyBQb3RlbnRpYWwgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwc2VfcmVndWxhdG9yYCBkcml2ZXIuIFJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0J3Mga2V5LiBQbGF0Zm9ybSBkcml2ZXJzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluIHRoZWlyIGRldmljZSBtYXRjaGluZzsgdGhleSByZWx5IG9uIGRldmljZSB0cmVlIG5vZGVzIG9yLCBpbiBzb21lIGNhc2VzLCBkaXJlY3QgZGV2aWNlIGNyZWF0aW9uIHZpYSBvdGhlciBtZWNoYW5pc21zLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgd2l0aCBTeXprYWxsZXIuIEkga25vdyBTeXprYWxsZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNwaW4gdXAgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAg4oCTIHdoaWNoIEkgYmVsaWV2ZSBkaXJlY3RseSBjYWxscyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIEFQSSB0byBjcmVhdGUgYSBkZXZpY2Ug4oCTIG9yLCBtb3JlIHN1YnRseSwgYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBJdCBjYW4gYmUgYSBwcmV0dHkgdmVyc2F0aWxlIHRvb2wuXG5cbldhaXQgYSBzZWNvbmTigKYgc2luY2UgYHBzZV9yZWd1bGF0b3JgIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIsIHRoZSBtb3N0IGxpa2VseSBhdmVudWUgZm9yIFN5emthbGxlciB0byB0cmlnZ2VyIGEgcHJvYmUgd291bGQgYmUgdGhyb3VnaCBhIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nIGluIGEgZGV2aWNlIHRyZWUgbm9kZS4gSXQgbWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgc3RhbmRhcmQgZm9yIHBsYXRmb3JtIGRyaXZlcnMuIElmIFN5emthbGxlciBjcmFmdHMgYSBkZXZpY2UgdHJlZSBlbnRyeSB3aXRoIHRoZSBjb3JyZWN0IGNvbXBhdGlibGUgc3RyaW5nLCB0aGUga2VybmVsIHNob3VsZCBwcm9iZSB0aGUgYHBzZV9yZWd1bGF0b3JgIGRyaXZlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgaXMsIGlmIEkgd2FudCB0byB0YXJnZXQgdGhpcyBkcml2ZXIgd2l0aCBTeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTM2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoxNS40NDg4MTU2MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHRpZiAoIXByaXYpXFxuIDEwMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0aWYgKCFwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSlcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRwcml2LVxcdTAwM2VwcyA9IGRldm1fcmVndWxhdG9yX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicHNlXFxcIik7XFxuIDEwODpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXBzKSlcXG4gMTA5OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VwcyksXFxuIDExMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IFBTRSByZWd1bGF0b3IuXFxcXG5cXFwiKTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKHByaXYtXFx1MDAzZXBzKTtcXG4gMTE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0aWYgKHJldClcXG4gMTE5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xcbiAxMjA6XFx0XFx0ZWxzZVxcbiAxMjE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcbiAxMjQ6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYub3BzID0gXFx1MDAyNnBzZV9yZWdfb3BzO1xcbiAxMjU6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYuZGV2ID0gZGV2O1xcbiAxMjY6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xcbiAxMjc6XFx0XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuIDEyODpcXHRcXHRpZiAocmV0KSB7XFxuIDEyOTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBQU0UgY29udHJvbGxlciAoJXBlKVxcXFxuXFxcIixcXG4gMTMwOlxcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuIDEzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzI6XFx0XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGNvbnN0IF9fbWF5YmVfdW51c2VkIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHNlX3JlZ19vZl9tYXRjaFtdID0ge1xcbiAxMzg6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJwb2RsLXBzZS1yZWd1bGF0b3JcXFwiLCB9LFxcbiAxMzk6XFx0XFx0eyB9LFxcbiAxNDA6XFx0fTtcXG4gMTQxOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBzZV9yZWdfb2ZfbWF0Y2gpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcXG4gMTQ0OlxcdFxcdC5wcm9iZVxcdFxcdD0gcHNlX3JlZ19wcm9iZSxcXG4gMTQ1OlxcdFxcdC5kcml2ZXJcXHRcXHQ9IHtcXG4gMTQ2OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUFNFIHJlZ3VsYXRvclxcXCIsXFxuIDE0NzpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocHNlX3JlZ19vZl9tYXRjaCksXFxuIDE0ODpcXHRcXHR9LFxcbiAxNDk6XFx0fTtcXG4gMTUwOlxcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocHNlX3JlZ19kcml2ZXIpO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJPbGVrc2lqIFJlbXBlbCBcXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXFx1MDAzZVxcXCIpO1xcbiAxNTM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJyZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50XFxcIik7XFxuIDE1NDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuIDE1NTpcXHRNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOnBzZS1yZWd1bGF0b3JcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MTUuNDQ4OTI1NDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzgzNDg5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBhIHdheSB0byB0cmlnZ2VyIHRoZSBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IHN0cmluZyBoZXJlIHNlZW1zIHRvIGJlIGBwb2RsLXBzZS1yZWd1bGF0b3JgLiBJIHdvbmRlciBpZiBTeXprYWxsZXIgY2FuIGluamVjdCB0aGlzIGRpcmVjdGx5PyBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBNYXliZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24gd291bGQgYmUgcG9zc2liaWxpdGllcy4gQnV0IFN5emthbGxlciBpcyB1c3VhbGx5IGxpbWl0ZWQgaW4gZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSBkZXZpY2UgdHJlZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHNldCB1cC4gQW5kLCB3aGlsZSBgc3l6X21vdW50X2ltYWdlYCBhbmQgc2ltaWxhciBjYWxscyBleGlzdCwgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgd2F5IGlzIHVzdWFsbHkgZGlmZmljdWx0LlxuXG5Pa2F5LCBsZXQncyBleHBsb3JlIGFsdGVybmF0aXZlIG1ldGhvZHMgdG8gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlPyBJIHNlZSBhIGZldyBJMkMgZHJpdmVycyBsaXN0ZWQ6IGBwZDY5MngwLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIHRocm91Z2ggYC9kZXYvaTJjLSpgIG9yIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIGRldmljZXMgdXNpbmcgYGkyYy1zdHViYCBvciBzaW1pbGFyIHRvb2xzLCBidXQgdXN1YWxseSBJIG5lZWQgdG8gZ2V0IHRoZSBkcml2ZXIgcmVnaXN0ZXJlZC4gSXQgY2FuIG9mdGVuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHZpYSBgaW9jdGwoSTJDX1JEV1IpYCBvciBuZXRsaW5rLCBidXQgdG8gdHJ1bHkgKnByb2JlKiBhIGRyaXZlciwgaXQgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBmaXJzdC5cblxuV2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBjYWxscyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAuIEZvciBJMkMgc3BlY2lmaWNhbGx5LCBpdCBjYW4gbGlrZWx5IHVzZSBgaW9jdGwoSTJDX1NMQVZFKWAgb3IgZXZlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGBuZXdfZGV2aWNlYCB0byBpbnN0YW50aWF0ZSB0aGVzZSBJMkMgZGV2aWNlcy4gWWVzLCB0aGF0J3MgaXQhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtJWQvbmV3X2RldmljZWAgaXMgdGhlIGtleS4gSSBjYW4gdXNlIHRoaXMgdG8gaW5zdGFudGlhdGUgYW4gSTJDIGRldmljZSBhbmQsIGNydWNpYWxseSwgYmluZCBpdCB0byBhIGRyaXZlciFcblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIEkyQyBkcml2ZXJzLCBsaWtlIGBwZDY5MngwYCwgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjIuNzg3Mjc3MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyMDUxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaTJjX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTg3ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwZDY5MngwX29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODc2OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwZDY5MngwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzctXFx0LnByb2JlXFx0XFx0PSBwZDY5MngwX2kyY19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg4NC19O1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTg4NTptb2R1bGVfaTJjX2RyaXZlcihwZDY5MngwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg2LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTU2ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaTM0NzRfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NjUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU2NjpzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2kzNDc0X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTY3LVxcdC5wcm9iZSA9IHNpMzQ3NF9pMmNfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTczLX07XFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU3NDptb2R1bGVfaTJjX2RyaXZlcihzaTM0NzRfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTc1LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTU0OD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cHMyMzg4MV9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU0OS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTUwOnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cHMyMzg4MV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1MS1cXHQucHJvYmVcXHRcXHQ9IHRwczIzODgxX2kyY19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1NTctfTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTU4Om1vZHVsZV9pMmNfZHJpdmVyKHRwczIzODgxX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjMuMDEzNDg4MzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDQwMDM3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSTJDIERyaXZlciBJbnN0YW50aWF0aW9uIGFuZCBQb3RlbnRpYWwgRmlybXdhcmUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIEkyQyBkcml2ZXJzIGhlcmUsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBob3cgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGVzZS4gUmlnaHQsIGl0J3MgdXNpbmcgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgLCBnb3QgaXQuIFRoYXQgbWVhbnMgSSBjYW4gdHJpZ2dlciB0aGUgaW5zdGFudGlhdGlvbiBvZiBhIHNwZWNpZmljIGRldmljZSwgbGlrZSBgcGQ2OTJ4MGAsIGJ5IHdyaXRpbmcgc29tZXRoaW5nIGxpa2UgYHBkNjkyeDAgMHgxMGAgdG8gYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCBwcm9iZSB0aGUgZHJpdmVyLCB0aGVvcmV0aWNhbGx5LlxuXG5CdXQgaGFuZyBvbi4uLiBhIHJlZCBmbGFnIGlzIGdvaW5nIHVwLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgcGQ2OTJ4MGAgbWlnaHQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB0aGFuIGEgc2ltcGxlIGluc3RhbnRpYXRpb24gYW5kIHByb2JlLiBJdCdzIHZlcnkgcG9zc2libGUgdGhlcmUncyBzb21lIGZpcm13YXJlIGludGVyYWN0aW9uIGludm9sdmVkLCBvciBtYXliZSBpdCBleHBlY3RzIGNlcnRhaW4gSTJDIHJlc3BvbnNlcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUuIFRoaXMgaXNuJ3QgYWx3YXlzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIHlvdSBrbm93IHRoYXQuXG5cbkJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYHBkNjkyeDBfaTJjX3Byb2JlYCBhbmQgY29uZmlybSB0aG9zZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaGFzIGFueSBwcmVyZXF1aXNpdGUgZmlybXdhcmUgb3IgY29tbXVuaWNhdGlvbiBkZXBlbmRlbmNpZXMgYmVmb3JlIHJlbHlpbmcgb24gU3l6a2FsbGVyJ3MgaW5zdGFudGlhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjkuODE3NDk0MzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzU2OlxcdHN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4xNzU3OlxcdHtcXG4xNzU4OlxcdFxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yc1tdID0geyBcXFwidmRkXFxcIiwgXFxcInZkZGFcXFwiIH07XFxuMTc1OTpcXHRcXHRzdHJ1Y3QgcGQ2OTJ4MF9tc2cgbXNnLCBidWYgPSB7MH0sIHplcm8gPSB7MH07XFxuMTc2MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuMTc2MTpcXHRcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpkaXNhYmxlX3BvcnRzO1xcbjE3NjI6XFx0XFx0c3RydWN0IHBkNjkyeDBfbXNnX3ZlciB2ZXI7XFxuMTc2MzpcXHRcXHRzdHJ1Y3QgcGQ2OTJ4MF9wcml2ICpwcml2O1xcbjE3NjQ6XFx0XFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xcbjE3NjU6XFx0XFx0aW50IHJldDtcXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0cmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShyZWd1bGF0b3JzKSxcXG4xNzY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVndWxhdG9ycyk7XFxuMTc2OTpcXHRcXHRpZiAocmV0KVxcbjE3NzA6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuMTc3MTpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcXFxcblxcXCIpO1xcbjE3NzI6XFx0XFxuMTc3MzpcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkge1xcbjE3NzQ6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpMmMgY2hlY2sgZnVuY3Rpb25hbGl0eSBmYWlsZWRcXFxcblxcXCIpO1xcbjE3NzU6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4xNzc2OlxcdFxcdH1cXG4xNzc3OlxcdFxcbjE3Nzg6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjE3Nzk6XFx0XFx0aWYgKCFwcml2KVxcbjE3ODA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc4MTpcXHRcXG4xNzgyOlxcdFxcdHByaXYtXFx1MDAzZWNsaWVudCA9IGNsaWVudDtcXG4xNzgzOlxcdFxcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHByaXYpO1xcbjE3ODQ6XFx0XFxuMTc4NTpcXHRcXHRkaXNhYmxlX3BvcnRzID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcXFwiZGlzYWJsZS1wb3J0c1xcXCIsIEdQSU9EX09VVF9MT1cpO1xcbjE3ODY6XFx0XFx0aWYgKElTX0VSUihkaXNhYmxlX3BvcnRzKSlcXG4xNzg3OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihkaXNhYmxlX3BvcnRzKSxcXG4xNzg4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBnZXQgZGlzYWJsZSBwb3J0cyBHUElPXFxcXG5cXFwiKTtcXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopXFx1MDAyNmJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbjE3OTE6XFx0XFx0aWYgKHJldCAhPSBzaXplb2YoYnVmKSkge1xcbjE3OTI6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXFxcblxcXCIpO1xcbjE3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMTc5NDpcXHRcXHR9XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdC8qIFByb2JlIGhhcyBiZWVuIGFscmVhZHkgcnVuIGFuZCB0aGUgc3RhdHVzIGR1bXBlZCAqL1xcbjE3OTc6XFx0XFx0aWYgKCFtZW1jbXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNnplcm8sIHNpemVvZihidWYpKSkge1xcbjE3OTg6XFx0XFx0XFx0LyogQXNrIGFnYWluIHRoZSBjb250cm9sbGVyIHN0YXR1cyAqL1xcbjE3OTk6XFx0XFx0XFx0bXNnID0gcGQ2OTJ4MF9tc2dfdGVtcGxhdGVfbGlzdFtQRDY5MlgwX01TR19HRVRfU1lTX1NUQVRVU107XFxuMTgwMDpcXHRcXHRcXHRyZXQgPSBwZDY5MngwX3NlbmRyZWN2X21zZyhwcml2LCBcXHUwMDI2bXNnLCBcXHUwMDI2YnVmKTtcXG4xODAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTgwMjpcXHRcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcXFxuXFxcIik7XFxuMTgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MDQ6XFx0XFx0XFx0fVxcbjE4MDU6XFx0XFx0fVxcbjE4MDY6XFx0XFxuMTgwNzpcXHRcXHRpZiAoYnVmLmtleSAhPSAweDAzIHx8IGJ1Zi5zdWJbMF0gXFx1MDAyNiAweDAxKSB7XFxuMTgwODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBTRSBjb250cm9sbGVyIGVycm9yXFxcXG5cXFwiKTtcXG4xODA5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjE4MTA6XFx0XFx0fVxcbjE4MTE6XFx0XFx0aWYgKGJ1Zi5zdWJbMF0gXFx1MDAyNiAweDAyKSB7XFxuMTgxMjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBTRSBmaXJtd2FyZSBlcnJvci4gUGxlYXNlIHVwZGF0ZSBpdC5cXFxcblxcXCIpO1xcbjE4MTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX0JST0tFTjtcXG4xODE0OlxcdFxcdH0gZWxzZSB7XFxuMTgxNTpcXHRcXHRcXHR2ZXIgPSBwZDY5MngwX2dldF9zd192ZXJzaW9uKHByaXYpO1xcbjE4MTY6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwiU29mdHdhcmUgdmVyc2lvbiAlZC4lMDJkLiVkLiVkXFxcXG5cXFwiLFxcbjE4MTc6XFx0XFx0XFx0XFx0IHZlci5wcm9kLCB2ZXIubWFqX3N3X3ZlciwgdmVyLm1pbl9zd192ZXIsXFxuMTgxODpcXHRcXHRcXHRcXHQgdmVyLnBhX3N3X3Zlcik7XFxuMTgxOTpcXHRcXG4xODIwOlxcdFxcdFxcdGlmICh2ZXIubWFqX3N3X3ZlciBcXHUwMDNjIFBENjkyWDBfRldfTUFKX1ZFUikge1xcbjE4MjE6XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUb28gb2xkIGZpcm13YXJlIHZlcnNpb24uIFBsZWFzZSB1cGRhdGUgaXRcXFxcblxcXCIpO1xcbjE4MjI6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX05FRURfVVBEQVRFO1xcbjE4MjM6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODI0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWZ3X3N0YXRlID0gUEQ2OTJYMF9GV19PSztcXG4xODI1OlxcdFxcdFxcdH1cXG4xODI2OlxcdFxcdH1cXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKGJ1Zi5kYXRhWzJdID09IFBENjkyWDBfVVNFUl9CWVRFKVxcbjE4Mjk6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY2ZnX3NhdmVkID0gdHJ1ZTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0cHJpdi1cXHUwMDNlbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTgzMjpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IFBENjkyWDBfTUFYX1BJUztcXG4xODMzOlxcdFxcdHByaXYtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuMTgzNDpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5vcHMgPSBcXHUwMDI2cGQ2OTJ4MF9vcHM7XFxuMTgzNTpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5kZXYgPSBkZXY7XFxuMTgzNjpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX0MzMztcXG4xODM3OlxcdFxcdHByaXYtXFx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xcbjE4Mzg6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcXG4xODM5OlxcdFxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbjE4NDA6XFx0XFx0aWYgKHJldClcXG4xODQxOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbjE4NDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBTRSBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBkZXYsIGRldl9uYW1lKGRldiksXFxuMTg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBkNjkyeDBfZndfb3BzLCBwcml2KTtcXG4xODQ2OlxcdFxcdGlmIChJU19FUlIoZndsKSlcXG4xODQ3OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihmd2wpLFxcbjE4NDg6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIHRoZSBGaXJtd2FyZSBVcGxvYWQgQVBJXFxcXG5cXFwiKTtcXG4xODQ5OlxcdFxcdHByaXYtXFx1MDAzZWZ3bCA9IGZ3bDtcXG4xODUwOlxcdFxcbjE4NTE6XFx0XFx0cmV0dXJuIDA7XFxuMTg1MjpcXHR9XFxuMTg1MzpcXHRcXG4xODU0OlxcdHN0YXRpYyB2b2lkIHBkNjkyeDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbjE4NTU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoyOS44MTc2NzA2MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2NTYzNDU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSTJDIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBkcml2ZXIncyBleHBlY3Rpbmcgc3BlY2lmaWMgSTJDIHZhbHVlcy4gU3BlY2lmaWNhbGx5LCBpZiBgYnVmLmtleWAgaXNuJ3QgYDB4MDNgICpvciogaWYgdGhlIGZpcnN0IGJ5dGUgb2YgYGJ1Zi5zdWJgIGhhcyBpdHMgTFNCIHNldCwgaXQgcmV0dXJucyBgLUVJT2AuICBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbSBmb3IgZnV6emluZywgcmlnaHQ/IFN5emthbGxlcidzIGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiB3ZWxsLCBpdCBwcm9iYWJseSB3b24ndCBlYXNpbHkgaGFuZGxlIHN1Y2ggYSBwcmVjaXNlIG1vY2tpbmcgdW5sZXNzIHRoZXJlJ3MgZGVkaWNhdGVkIHN1cHBvcnQuIFdlJ3ZlIGdvdCBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCBJIGRvbid0IHJlY2FsbCBhIGdlbmVyaWMgSTJDIG1vY2sgaW4gU3l6a2FsbGVyIHRoYXQgYWxsb3dzIGFyYml0cmFyeSBkYXRhIHJlc3BvbnNlcy5cblxuSG9sZCBvbi4uLiBgaTJjLXN0dWJgPyBObywgdGhhdCdzIG5vdCBmbGV4aWJsZSBlbm91Z2ggZm9yIGR5bmFtaWMgcmVwbGllcy5cblxuV2FpdCBhIHNlY29uZC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgcHNlX2NvcmUuY2Ag4oCTIHRoYXQncyB0aGUgKmNvcmUqIGZyYW1ld29yay4gVGhhdCdzIGludGVyZXN0aW5nLiBBaCwgcmlnaHQuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIGBwY2Rldi1cdTAwM2VwaWAgaXMgZnJlZWQsIGJ1dCB0aGVuIGxhdGVyIGFjY2Vzc2VkIGJ5IHJlZ3VsYXRvciBvcGVyYXRpb25zLCBvciBldmVuIHRoZSBJUlEgb3Igbm90aWZpY2F0aW9uIHdvcmtlcnMuIERlZmluaXRlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uXG5cblRoZSBidWcgd2FzIGZvdW5kIGJ5IGBzeXotY2x1c3RlcmAuLi4gYW5kIHRoZSBjb21taXQgbWVzc2FnZSBjb25maXJtcyBpdDogXCJBdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXCIuIEFuZCBldmVuIGJldHRlciwgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiEgRGFtbiwgU3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWchXG5cblNvLCBob3cgZGlkIFN5emthbGxlciB0cmlnZ2VyIHRoaXMgdXNlLWFmdGVyLWZyZWU/IE15IGZpcnN0IHRob3VnaHQgaXMgdGhyb3VnaCBgcHNlX3JlZ3VsYXRvcmAuIFNpbmNlIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIFN5emthbGxlciBjb3VsZCBiZSBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcy4gSXQncyBub3QgYG5sODAyMTFgLi4uIHByb2JhYmx5IGBzeXpfZGV2X2NyZWF0ZWAsIG9yIG1heWJlIHNvbWV0aGluZyBlbHNlP1xuXG5BaGEhIFRoZXJlJ3MgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGluIGBwc2VfcmVndWxhdG9yLmNgLiBJcyB0aGVyZSBhbnkgb3RoZXIgcGF0aCB0byByZWdpc3RlciBhIFBTRSBjb250cm9sbGVyPyBJJ2QgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyByZWxhdGVkIHRvIHRoaXMuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgdGhpcyBjb3VsZCBoYXZlIGJlZW4gdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjM3LjM4MzMwODMxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzODcxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE3NTY9c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODM4LVxcdHByaXYtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IDI7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODM5OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg0MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAzMz1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTQtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA1NTogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA1Ni0gKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgaW5pdGlhbGl6ZWQgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU5LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjEte1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEyOS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTEzMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNTQ9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE1OS0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTYwOiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYxLSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjMtICpcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY0OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2NS0gKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY2OiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjktICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3MDppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE3MS1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgwLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExODE6XFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5MS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE5MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkzLVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTEyNi1cXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzoxMjc6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDItXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXFx0cHJpdi1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX1NUQVRJQztcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDozNy42MjcxODU0NDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzY0NzQwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIHRvIGluamVjdCBJMkMgZGV2aWNlcz8gSSdtIGRyYXdpbmcgYSBibGFuayBvbiB0aGUgc3BlY2lmaWMgc3lzY2FsbCAtIGlzIGl0IGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgdGhpbmsgaXQncyBgc3l6X2kyY19kZXZgLiBSaWdodCwgdGhhdCdzIGl0LiBXYWl0LCBJIHNlZSBcInJlZ3VsYXRvclwiIG1lbnRpb25lZC4gQWhhLCAqdGhhdCogcGlxdWVzIG15IGludGVyZXN0LiBJZiBzeXprYWxsZXIgaGFzIGEgaG9vayBpbnRvIHRoZSByZWd1bGF0b3Igc3Vic3lzdGVtLCB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBhIGRlZXBlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC5cblxuVGhlIHBhdGNoIGl0c2VsZiBwb2ludHMgdG8gYSBVc2VyLUFmdGVyLUZyZWUvTlVMTC1kZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYHBjZGV2LVx1MDAzZXBpYCBpcyBmcmVlZCBpbiBgcHNlX3JlbGVhc2VfcGlzYCwgYnV0IHN1YnNlcXVlbnQgcmVndWxhdG9yIG9wZXJhdGlvbnMgY2FuIHN0aWxsIGJlIGludm9rZWQgb24gaXQuIFNvIGJhc2ljYWxseSBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZXkncmUgYWRkaW5nIGBpZiAoIXBjZGV2LVx1MDAzZXBpKWAgY2hlY2tzIHRvIHRoZSByZWd1bGF0b3Igb3BlcmF0aW9ucyB0byBndWFyZCBhZ2FpbnN0IHRoZSBVQUYuIFBsdXMsIHRoZXkncmUgc2V0dGluZyBgcGNkZXYtXHUwMDNlcGkgPSBOVUxMYCB1bmRlciBgcGNkZXYtXHUwMDNlbG9ja2AgZm9yIHByb3BlciBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIHRoZSBjb2RlIHJlb3JkZXJzIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCB0byBzaHV0IGRvd24gdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyBgcGNkZXYtXHUwMDNlcGlgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIHByZWNpc2VseSB0byBzZWUgaWYgdGhlIGZpeCBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6NDguMDAzNjYyMzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG4xMTMxOlxcdFxcbjExMzI6XFx0LyoqXFxuMTEzMzpcXHQgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExMzQ6XFx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExMzU6XFx0ICovXFxuMTEzNjpcXHR2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHQvKiBTdG9wIHRoZSBJUlEgYW5kIG5vdGlmaWNhdGlvbiB3b3JrZXIgYmVmb3JlIGZyZWVpbmcgd2hhdCB0aGV5XFxuMTEzOTpcXHRcXHQgKiByZWFjaDogYm90aCB0b3VjaCBwY2Rldi1cXHUwMDNlcGksIGFuZCB0aGUgSVJRIGFsc28gdXNlcyBwd19kLVxcdTAwM2VzdXBwbHlcXG4xMTQwOlxcdFxcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXFxuMTE0MTpcXHRcXHQgKi9cXG4xMTQyOlxcdFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbjExNDM6XFx0XFx0XFx0ZGlzYWJsZV9pcnEocGNkZXYtXFx1MDAzZWlycSk7XFxuMTE0NDpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwY2Rldi1cXHUwMDNlbnRmX3dvcmspO1xcbjExNDU6XFx0XFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4xMTQ2OlxcdFxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuMTE0NzpcXHRcXHRrZmlmb19mcmVlKFxcdTAwMjZwY2Rldi1cXHUwMDNlbnRmX2ZpZm8pO1xcbjExNDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbjExNDk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnBjZGV2LVxcdTAwM2VsaXN0KTtcXG4xMTUwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfdW5yZWdpc3Rlcik7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdHN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG4xMTU1OlxcdHtcXG4xMTU2OlxcdFxcdHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqKXJlcyk7XFxuMTE1NzpcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdC8qKlxcbjExNjA6XFx0ICogZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlc291cmNlIG1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKVxcbjExNjE6XFx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQU0UgY29udHJvbGxlclxcbjExNjI6XFx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExNjM6XFx0ICpcXG4xMTY0OlxcdCAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuMTE2NTpcXHQgKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG4xMTY2OlxcdCAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNjc6XFx0ICpcXG4xMTY4OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXFxuMTE2OTpcXHQgKi9cXG4xMTcwOlxcdGludCBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcXG4xMTcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4xMTcyOlxcdHtcXG4xMTczOlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKipwY2RldnA7XFxuMTE3NDpcXHRcXHRpbnQgcmV0O1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRwY2RldnAgPSBkZXZyZXNfYWxsb2MoZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlLCBzaXplb2YoKnBjZGV2cCksXFxuMTE3NzpcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xMTc4OlxcdFxcdGlmICghcGNkZXZwKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdHJldCA9IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KTtcXG4xMTgyOlxcdFxcdGlmIChyZXQpIHtcXG4xMTgzOlxcdFxcdFxcdGRldnJlc19mcmVlKHBjZGV2cCk7XFxuMTE4NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExODU6XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHQqcGNkZXZwID0gcGNkZXY7XFxuMTE4ODpcXHRcXHRkZXZyZXNfYWRkKGRldiwgcGNkZXZwKTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0cmV0dXJuIDA7XFxuMTE5MTpcXHR9XFxuMTE5MjpcXHRFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG4xMTkzOlxcdFxcbjExOTQ6XFx0c3RydWN0IHBzZV9pcnEge1xcbjExOTU6XFx0XFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXY7XFxuMTE5NjpcXHRcXHRzdHJ1Y3QgcHNlX2lycV9kZXNjIGRlc2M7XFxuMTE5NzpcXHRcXHR1bnNpZ25lZCBsb25nICpub3RpZnM7XFxuMTE5ODpcXHRcXHR1bnNpZ25lZCBsb25nICpub3RpZnNfbWFzaztcXG4xMTk5OlxcdH07XFxuMTIwMDpcXHRcXG4xMjAxOlxcdC8qKlxcbjEyMDI6XFx0ICogcHNlX3RvX3JlZ3VsYXRvcl9ub3RpZnMgLSBDb252ZXJ0IFBTRSBub3RpZmljYXRpb25zIHRvIFJlZ3VsYXRvclxcbjEyMDM6XFx0ICpcXHRcXHRcXHQgICAgIG5vdGlmaWNhdGlvbnNcXG4xMjA0OlxcdCAqIEBub3RpZnM6IFBTRSBub3RpZmljYXRpb25zXFxuMTIwNTpcXHQgKlxcbjEyMDY6XFx0ICogUmV0dXJuOiBSZWd1bGF0b3Igbm90aWZpY2F0aW9uc1xcbjEyMDc6XFx0ICovXFxuMTIwODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwc2VfdG9fcmVndWxhdG9yX25vdGlmcyh1bnNpZ25lZCBsb25nIG5vdGlmcylcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHVuc2lnbmVkIGxvbmcgcm5vdGlmcyA9IDA7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdGlmIChub3RpZnMgXFx1MDAyNiBFVEhUT09MX1BTRV9FVkVOVF9PVkVSX0NVUlJFTlQpXFxuMTIxMzpcXHRcXHRcXHRybm90aWZzIHw9IFJFR1VMQVRPUl9FVkVOVF9PVkVSX0NVUlJFTlQ7XFxuMTIxNDpcXHRcXHRpZiAobm90aWZzIFxcdTAwMjYgRVRIVE9PTF9QU0VfRVZFTlRfT1ZFUl9URU1QKVxcbjEyMTU6XFx0XFx0XFx0cm5vdGlmcyB8PSBSRUdVTEFUT1JfRVZFTlRfT1ZFUl9URU1QO1xcbjEyMTY6XFx0XFxuMTIxNzpcXHRcXHRyZXR1cm4gcm5vdGlmcztcXG4xMjE4OlxcdH1cXG4xMjE5OlxcdFxcbjEyMjA6XFx0LyoqXFxuMTIyMTpcXHQgKiBwc2Vfc2V0X2NvbmZpZ19pc3IgLSBTZXQgUFNFIGNvbnRyb2wgY29uZmlnIGFjY29yZGluZyB0byB0aGUgUFNFXFxuMTIyMjpcXHQgKlxcdFxcdFxcdG5vdGlmaWNhdGlvbnNcXG4xMjIzOlxcdCAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0VcXG4xMjI0OlxcdCAqIEBpZDogaW5kZXggb2YgdGhlIFBTRSBjb250cm9sXFxuMTIyNTpcXHQgKiBAbm90aWZzOiBQU0UgZXZlbnQgbm90aWZpY2F0aW9uc1xcbjEyMjY6XFx0ICpcXG4xMjI3OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXFxuMTIyODpcXHQgKi9cXG4xMjI5OlxcdHN0YXRpYyBpbnQgcHNlX3NldF9jb25maWdfaXNyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjQ4LjAwMzk0MDM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDkxNjU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFBTRSBDb250cm9sbGVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBmbGFnZ2VkIGFzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIGJldHdlZW4gdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgUHNldWRvLVN0YXRpYyBFbGVtZW50IChQU0UpIGNvbnRyb2xsZXIuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgY2xlYW51cC4gV2hlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgaXMgY2FsbGVkLCBgcHNlX3JlbGVhc2VfcGlzYCBpcyBpbnZva2VkLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGZyZWVzIGBwY2Rldi1cdTAwM2VwaWAsIHdoaWNoIEkgcHJlc3VtZSBpcyB0aGUgcG9pbnRlciB0byB0aGUgUHJpdmF0ZSBJbnRlcmZhY2Ugc3RydWN0dXJlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJ3QgdGhvc2UgcmVndWxhdG9yIG9wZXJhdGlvbnMg4oCTIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAg4oCTIHBvdGVudGlhbGx5ICpzdGlsbCogYmVpbmcgY2FsbGVkIGJ5IHRoZSByZWd1bGF0b3IgY29yZSBldmVuIGFmdGVyIGBwc2VfcmVsZWFzZV9waXNgIGhhcyBmcmVlZCB0aGUgbWVtb3J5PyBUaGF0IHdvdWxkIGJlIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgYW5kIG9idmlvdXNseSBwcm9ibGVtYXRpYy4gVGhlIHJhY2UsIHRoZW4sIGlzIHRoYXQgdGhlIHJlZ3VsYXRvciBkZXZpY2VzIGFyZW4ndCB1bnJlZ2lzdGVyZWQgdW50aWwgbGF0ZXIsIGNyZWF0aW5nIHRoaXMgd2luZG93IG9mIHZ1bG5lcmFiaWxpdHkuXG5cbkhtbSwgdGhpcyByZW1pbmRzIG1lLi4uYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhdG9ycywgcmlnaHQ/IFNvLCB0aGUgcmVndWxhdG9yIGNvcmUgaXMgcG90ZW50aWFsbHkgaG9sZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQU0UgY29udHJvbGxlcidzIHJlc291cmNlcyBldmVuIGFzIHRoZSBjb250cm9sbGVyIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHVucmVnaXN0ZXJlZC4gR290IHRvIGNoZWNrIGhvdyB0aGUgcmVndWxhdG9ycyBhcmUgcmVnaXN0ZXJlZCBpbiBtb3JlIGRldGFpbCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIHJhY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVndWxhdG9yIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRpbWluZyBhbmQgd2hhdCB0aGUgZml4IGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjU1LjExMzEwNzcxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzk2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3VsYXRvcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz04NTA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg1MTpkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODUyLVxcdFxcdFxcdCAgICAgICBjaGFyICpuYW1lLCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy04ODktXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODkwOlxcdHJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcihwY2Rldi1cXHUwMDNlZGV2LCByZGVzYywgXFx1MDAyNnJjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTg5MS1cXHRpZiAoSVNfRVJSKHJkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDYwPWludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTQtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTExNTpcXHRcXHRyZXQgPSBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIocGNkZXYsIHJlZ19uYW1lLCBpKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTE2LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjU1LjIyNDkxMTE3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgzNjI0NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWd1bGF0b3IgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYCB1c2VkIGhlcmUsIG1lYW5pbmcgdGhlc2UgcmVndWxhdG9ycyBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIGBwY2Rldi1cdTAwM2VkZXZgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgYmVhdXR5IG9mIGBkZXZyZXNgIGlzIHRoYXQgb24gdW5iaW5kaW5nLCB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uLCBhdXRvbWF0aWNhbGx5IGNsZWFuaW5nIHVwLlxuXG5Ob3csIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBjcmVhdGVzIGEgYGRldnJlc2AgZm9yIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgLCBhbmQgdGhlbiBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGNhbGxzIGBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXJgIHdoaWNoIGFsbG9jYXRlcyBgZGV2cmVzYCBmb3IgdGhlIHJlZ3VsYXRvcnMuICBTbywgdGhlIHJlZ3VsYXRvcnMgYXJlIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGUgY29udHJvbGxlcj8gIFdhaXQsIG5vLCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgY2FsbHMgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCAqd2hpY2gqIHJlZ2lzdGVycyB0aGUgcmVndWxhdG9ycy4gR290IGl0LlxuXG5TbywgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIGRldnJlcyBpczogMSkgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgYW5kIHRoZW4gMikgYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYCAod2hpY2ggaXMgaW5zaWRlIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmApLiBUaGF0IGNsYXJpZmllcyB0aGUgc2V0dXAuXG5cblRoZXJlZm9yZSwgd2hlbiB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIHRoZSByZWxlYXNlIG9yZGVyIGlzIHRoZSByZXZlcnNlOiBmaXJzdCB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkIHZpYSBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAsIGFuZCB0aGVuIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuXG5cbkFoYSEgTm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSByZWd1bGF0b3JzIGFyZSB1bnJlZ2lzdGVyZWQgKmJlZm9yZSogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGlzIGNhbGxlZCwgaG93IGNhbiB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMgcG9zc2libHkgYmUgY2FsbGVkICphZnRlciogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgPyBUaGF0J3MgYSBjbGFzc2ljIFVzZS1BZnRlci1GcmVlLlxuXG5IYW5nIG9uLi4uIGFoLCB0aGUgcmVndWxhdG9yIGNvcmUhIEl0IGxpa2VseSBoYXMgZGVmZXJyZWQgd29yaywgbGlrZSBhIGRlZmVycmVkIGRpc2FibGUuIExldCdzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzIG9yIHRoZSBjb2RlIGNvbW1lbnQuICBZZXMsIGhlcmUgaXQgaXM6ICBgLyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlciBwY2Rldi1cdTAwM2VwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLiAqL2AgU28sIHRoZSByZWd1bGF0b3IgY29yZSAqZG9lcyogaGF2ZSBhIGRlZmVycmVkIGRpc2FibGUgZmx1c2ghICBUaGlzIHByb2JhYmx5IGV4cGxhaW5zIGl0LlxuXG5Pa2F5LCBzbyB3aGVuIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZCwgaXQgZmx1c2hlcyB0aGVzZSBkZWZlcnJlZCBkaXNhYmxlcy4gT2theSwgSSdtIHdpdGggeW91IHNvIGZhci4gV2FpdCwgYnV0IGlmIGByZWd1bGF0b3JfdW5yZWdpc3RlcmAgZmx1c2hlcyB0aGUgZGVmZXJyZWQgd29yay4uLiB0aGVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCAqaGFzbid0KiBiZWVuIGNhbGxlZCB5ZXQhICBcblxuSWYgdGhhdCdzIHRoZSBjYXNlLCBgcGNkZXYtXHUwMDNlcGlgIGlzbid0IGZyZWVkLiBTbyB3aHkgaXMgdGhlcmUgYSBVc2UtQWZ0ZXItRnJlZT8gTGV0IG1lIGNoZWNrIHRoZSBvcmRlciBvZiBkZXZyZXMgaW4gYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBUaGVyZSdzIHNvbWV0aGluZyBJJ20gbWlzc2luZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzg4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjA0LjkwODUzODAyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRpbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTE3MTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuMTE3MjpcXHR7XFxuMTE3MzpcXHRcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqcGNkZXZwO1xcbjExNzQ6XFx0XFx0aW50IHJldDtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0cGNkZXZwID0gZGV2cmVzX2FsbG9jKGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZSwgc2l6ZW9mKCpwY2RldnApLFxcbjExNzc6XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMTE3ODpcXHRcXHRpZiAoIXBjZGV2cClcXG4xMTc5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExODA6XFx0XFxuMTE4MTpcXHRcXHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XFxuMTE4MjpcXHRcXHRpZiAocmV0KSB7XFxuMTE4MzpcXHRcXHRcXHRkZXZyZXNfZnJlZShwY2RldnApO1xcbjExODQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTg1OlxcdFxcdH1cXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0KnBjZGV2cCA9IHBjZGV2O1xcbjExODg6XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHBjZGV2cCk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldHVybiAwO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdHN0cnVjdCBwc2VfaXJxIHtcXG4xMTk1OlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2O1xcbjExOTY6XFx0XFx0c3RydWN0IHBzZV9pcnFfZGVzYyBkZXNjO1xcbjExOTc6XFx0XFx0dW5zaWduZWQgbG9uZyAqbm90aWZzO1xcbjExOTg6XFx0XFx0dW5zaWduZWQgbG9uZyAqbm90aWZzX21hc2s7XFxuMTE5OTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTowNC45MDg2NjgzNjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2MDg0MDgwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGV2cmVzIE9yZGVyaW5nIEJ1ZyBpbiBQU0UgQ29udHJvbGxlciBVbmJpbmRpbmcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgdGhhdCB0aGUgYGRldnJlc19hZGQoZGV2LCBwY2RldnApYCBjYWxsIGhhcHBlbnMgKmFmdGVyKiBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpYC4gVGhpcyBtZWFucyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgaXMgZXN0YWJsaXNoZWQgKmFmdGVyKiBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgLiAgVGhlcmVmb3JlLCBvbiBkcml2ZXIgdW5iaW5kLCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCBnZXRzIGNhbGxlZCAqZmlyc3QqLCBhbmQgdGhlbiBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAuXG5cblRoZSBwcm9ibGVtIGlzIHRoZSBzZXF1ZW5jZTogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGdldHMgY2FsbGVkLCBmcmVlaW5nIGBwY2Rldi1cdTAwM2VwaWAsIGFuZCAqdGhlbiogdGhlIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZC4gIFVucmVnaXN0ZXJpbmcgdGhlIHJlZ3VsYXRvcnMgdHJpZ2dlcnMgZGVmZXJyZWQgZGlzYWJsZXMsIGxlYWRpbmcgdG8gYSBjYWxsIHRvIGBwc2VfcGlfZGlzYWJsZWAsIGJ1dCBub3cgaXQncyBhY2Nlc3NpbmcgYHBjZGV2LVx1MDAzZXBpYCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIENsYXNzaWMgZGV2cmVzIG9yZGVyaW5nIGJ1ZyFcblxuQ2FuIHdlIHRyaWdnZXIgdGhpcyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIFN5emthbGxlciBjYW4gcHJvYmFibHkgcmVwcm9kdWNlIHRoaXMuICBUaGUgc3RlcHMgd291bGQgYmU6XG5cbjEuICBSZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIChlLmcuLCB0aHJvdWdoIGFuIEkyQyBgbmV3X2RldmljZWAgZm9yIGBwZDY5MngwYCkuXG4yLiAgRW5hYmxlIHRoZSByZWd1bGF0b3IgKGUuZy4sIHRocm91Z2ggYGV0aHRvb2xgIG9yIHJlZ3VsYXRvciBzeXNmcykuXG4zLiAgRGlzYWJsZSB0aGUgcmVndWxhdG9yIHdpdGggZGVmZXJyZWQgZGlzYWJsZSAoaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyByZWd1bGF0b3IpLlxuNC4gIFVuYmluZCB0aGUgZHJpdmVyICh1c2luZyBzeXNmcyBgdW5iaW5kYCBvciBkZWxldGluZyB0aGUgSTJDIGRldmljZSkuXG5cblRoYXQgc2hvdWxkIG5haWwgdGhlIGRldnJlcyByZWxlYXNlIG9yZGVyIGJ1ZyByaWdodCBvbiB0aGUgaGVhZC5cblxuQnV0LCBob3cgbGlrZWx5IGlzIHRoaXMgdG8gYmUgcmVhY2hhYmxlPyBMZXQncyBmaWd1cmUgb3V0IGlmIGBwZDY5MngwYCBpdHNlbGYgaXMgcmVhY2hhYmxlLiBUaGUgY29kZSBzdWdnZXN0cyBhIHByb2JlIGlzIHBlcmZvcm1lZC5cblxuVGhlIGBwZDY5MngwX2kyY19wcm9iZWAgZnVuY3Rpb24gaGFzIHRoaXMgY2hlY2s6XG5cbmBgYGNcbnJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKVx1MDAyNmJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuaWYgKHJldCAhPSBzaXplb2YoYnVmKSkge1xuXHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXG5cIik7XG5cdHJldHVybiAtRUlPO1xufVxuXG4vKiBQcm9iZSBoYXMgYmVlbiBhbHJlYWR5IHJ1biBhbmQgdGhlIHN0YXR1cyBkdW1wZWQgKi9cbmlmICghbWVtY21wKFx1MDAyNmJ1ZiwgXHUwMDI2emVybywgc2l6ZW9mKGJ1ZikpKSB7XG5cdC8qIEFzayBhZ2FpbiB0aGUgY29udHJvbGxlciBzdGF0dXMgKi9cblx0bXNnID0gcGQ2OTJ4MF9tc2dfdGVtcGxhdGVfbGlzdFtQRDY5MlgwX01TR19HRVRfU1lTX1NUQVRVU107XG5cdHJldCA9IHBkNjkyeDBfc2VuZHJlY3ZfbXNnKHByaXYsIFx1MDAyNm1zZywgXHUwMDI2YnVmKTtcblx0aWYgKHJldCBcdTAwM2MgMCkge1xuXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcblwiKTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG59XG5cbmlmIChidWYua2V5ICE9IDB4MDMgfHwgYnVmLnN1YlswXSBcdTAwMjYgMHgwMSkge1xuXHRkZXZfZXJyKGRldiwgXCJQU0UgY29udHJvbGxlciBlcnJvclxcblwiKTtcblx0cmV0dXJuIC1FSU87XG59XG5gYGBcblxuU28sIGlmIFN5emthbGxlciB1c2VzIGEgbW9jayBJMkMgZGV2aWNlLCBpdCB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgY29ycmVjdGx5IHRvIGJ5cGFzcyB0aGVzZSBjaGVja3MuICBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jayB0aGF0IGNhbiByZXNwb25kIHdpdGggYXJiaXRyYXJ5IGRhdGEsIGJ1dCBpdCAqY2FuKiB1c2UgYGkyYy1zdHViYCEgSG93ZXZlciwgYGkyYy1zdHViYCB3b3JrcyB3aXRoIFNNQnVzIGNvbW1hbmRzIGFuZCBub3QgcmF3IEkyQyB0cmFuc2ZlcnMgbGlrZSB0aGUgY29kZSB1c2VzIHdpdGggYGkyY19tYXN0ZXJfcmVjdmAuIFNvLCBgaTJjLXN0dWJgIG1pZ2h0IG5vdCB3b3JrIGhlcmUuXG5cbldoYXQgYWJvdXQgYHBzZV9yZWd1bGF0b3IuY2A/IEFoLCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyOlxuXG5gYGBjXG5zdGF0aWMgY29uc3QgX19tYXliZV91bnVzZWQgc3RydWN0IG9mX2RldmljZV9pZCBwc2VfcmVnX29mX21hdGNoW10gPSB7XG5cdHsgLmNvbXBhdGlibGUgPSBcInBvZGwtcHNlLXJlZ3VsYXRvclwiLCB9LFxuXHR7IH0sXG59O1xuYGBgXG5cbkNhbiBTeXprYWxsZXIgaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCB0aGlzIGNvbXBhdGlibGUgc3RyaW5nPyBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyB1c2luZyBgc3l6X2Rldl9jcmVhdGVgLCBJIHRoaW5rLCBidXQgdXN1YWxseSB0ZXN0cyBwbGF0Zm9ybSBkcml2ZXJzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHRlc3QgVk0ncyBkZXZpY2UgdHJlZS4gQnV0LCBTeXprYWxsZXIgKmNhbiogYWxzbyB1c2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgc29tZWhvdywgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zP1xuXG5XYWl0IGEgbWludXRlLCBTeXprYWxsZXIgKmRpZCogZmluZCB0aGlzISBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgZnJvbSBzeXotY2x1c3RlciEgSXQgc2F5cywgYEF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzIGlzIGEgc3l6a2FsbGVyIGRpc2NvdmVyeSwgYW5kIGl0IGdvdCBhcHBsaWVkIVxuXG5TbywgaG93IGRpZCBTeXprYWxsZXIgZ2V0IHRoZXJlPyBJdCBtdXN0IGJlIHNvbWUgdmlydHVhbCBQU0UgZHJpdmVyLiBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9gIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMToxOS41MTcwNzkyODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJwZDY5MngwLmNcIixcbiAgICBcInBzZV9jb3JlLmNcIixcbiAgICBcInBzZV9yZWd1bGF0b3IuY1wiLFxuICAgIFwic2kzNDc0LmNcIixcbiAgICBcInRwczIzODgxLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MTkuNTE3MTY4MDc4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQ2ODg1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBQRDY5MngwIERyaXZlcjogQSBGdXp6aW5nIE9wcG9ydHVuaXR5ISoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBhbmQgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGBwZDY5MngwYCBkcml2ZXIgd2FzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJldGhpbmsgdGhpcy4gSXQncyBub3QgdGhlIG9ubHkgSTJDIGRyaXZlciBvdXQgdGhlcmU7IHRoZXJlIGFyZSBvdGhlcnMsIGxpa2UgYHNpMzQ3NC5jYCBhbmQgYHRwczIzODgxLmNgLiBNYXliZSBzeXprYWxsZXIgaXMgdXNpbmcgYW4gSTJDIG1vY2ssIGxpa2UgYGkyYy1zdHViYD8gT3IsIG1heWJlIHN5emthbGxlciBpcyBsZXZlcmFnaW5nIHRoZSBVU0Igc3Vic3lzdGVtPyBJdCBjb3VsZCBiZSB1c2luZyBgdmhjaWAgZm9yIFVTQiBhbmQgYSBVU0ItdG8tSTJDIGFkYXB0ZXIgbGlrZSBgaTJjLXRpbnktdXNiYC4gWWVzLCB0aGF0J3MgbGlrZWx5ISBTeXprYWxsZXIgY291bGQgbW9jayBgaTJjLXRpbnktdXNiYCB3aXRoIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCBpbiB0dXJuIHJlZ2lzdGVycyBhbiBJMkMgYWRhcHRlci4gVGhlbiwgaXQgaW5zdGFudGlhdGVzIGBwZDY5MngwYCB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAuIFNpbmNlIHN5emthbGxlciBjb250cm9scyB0aGUgVVNCIHJlc3BvbnNlcywgaXQgY2FuIGZlZWQgYXJiaXRyYXJ5IGRhdGEgdG8gYGkyY19tYXN0ZXJfcmVjdmAhIFRoYXQncyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRlY2huaXF1ZSBmb3IgZnV6emluZyBJMkMgYW5kIFNQSSBkcml2ZXJzLlxuXG5TbywgdGhlIGRyaXZlciBJUyByZWFjaGFibGUgYW5kIGFic29sdXRlbHkgZnV6emFibGUhXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIEkgc2VlIGNoZWNrcyBmb3IgYCFwY2Rldi1cdTAwM2VwaWAgaW4gYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBhbmQgYHBzZV9waV9kaXNhYmxlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEFsc28sIHRoZXJlJ3MgYGtmcmVlKHBjZGV2LVx1MDAzZXBpKTsgcGNkZXYtXHUwMDNlcGkgPSBOVUxMO2AgaW4gYHBzZV9yZWxlYXNlX3Bpc2AgYW5kIHRoZSBgcGNkZXYtXHUwMDNlcGlgIGlzIGZyZWVkIGluIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZml4IHRoYXQncyB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuXG5cbk5vdywgd2hpY2ggY29uZmlncyBkbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGFyZSBzZXQ/IGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIHRoZSBtYWluIG9uZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjI5LjY2NDA1NTkzOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNzUxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQU0VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6NjptZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNy1cXHRib29sIFxcXCJFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnPTE0PWlmIFBTRV9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MTY6Y29uZmlnIFBTRV9SRUdVTEFUT1JcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiUmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjM6Y29uZmlnIFBTRV9QRDY5MlgwXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozNTpjb25maWcgUFNFX1NJMzQ3NFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJTaTM0NzQgUFNFIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy00NS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzo0Njpjb25maWcgUFNFX1RQUzIzODgxXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTozMC4xMDQ4MTUwMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ1MjM3ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgUG9FIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGVuYWJsZSB0aG9zZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgKFBTRSkgZHJpdmVycyDigJMgYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBgUFNFX1BENjkyWDBgLCBgUFNFX1NJMzQ3NGAsIGFuZCBgUFNFX1RQUzIzODgxYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzZXQgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBQb0Ugc2V0dXAuIEhvbGQgb24gYSBzZWNvbmQsIHNvbWV0aGluZydzIHBpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4uLiBXYXNuJ3QgdGhlcmUgYSByZWNlbnQgYnVnIHJlcG9ydCByZWxhdGVkIHRvIFBTRSBmdW5jdGlvbmFsaXR5PyBBaCwgeWVzLCB0aGUgY29yZSBpc3N1ZSB3YXMgdHJhY2VkIGJhY2sgdG8gYHBzZV9jb3JlLmNgLiBBbmQgdGhhdCBzcGVjaWZpYyBmaWxlIGdldHMgY29tcGlsZWQgKm9ubHkqIHdoZW4gYFBTRV9DT05UUk9MTEVSYCBpcyBhY3RpdmUuIFNvLCB0aGVyZSdzIGEgZGlyZWN0IGNvbm5lY3Rpb24gdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgY3Jvc3MtcmVmZXJlbmNlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIE1ha2VmaWxlIHRoYXQgZ292ZXJucyB0aGUgUG9FIFBEIGRyaXZlcnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgcGxhbm5lZCBjb25maWd1cmF0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYnVpbGQgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCBsZXQncyBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoZSBidWlsZCBwcm9jZXNzIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBjb250cmlidXRlIHRvIHRoZSBwcm9ibGVtIG9yIGNhdXNlIGFuIHVuaW50ZW5kZWQgY29uc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MzcuMTUwMDU3MzA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBNYWtlZmlsZSBmb3IgTGludXggUFNFIGRyaXZlcnNcXG4gICAzOlxcdFxcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSArPSBwc2VfcmVndWxhdG9yLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXFxuICAgODpcXHRvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19QU0VfVFBTMjM4ODEpICs9IHRwczIzODgxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MzcuMTUwMTU5NjE2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTEyOTkwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFBTRSBDb250cm9sbGVyKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgUFNFX0NPTlRST0xMRVJgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIGl0IGFsbC4gVG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzIHdpdGggc3l6a2FsbGVyLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVycyBhcmUgZW5hYmxlZCwgc28gdGhhdCB0b29sIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGNvZGUuIFRoYXQgbWVhbnMgd2UncmUgbG9va2luZyBhdDpcblxuKiAgIGBQU0VfQ09OVFJPTExFUmBcbiogICBgUFNFX1JFR1VMQVRPUmBcbiogICBgUFNFX1BENjkyWDBgXG4qICAgYFBTRV9TSTM0NzRgXG4qICAgYFBTRV9UUFMyMzg4MWBcblxuTm93LCB3aGVyZSdzIHRoZSBtb3N0IGltcGFjdGZ1bCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoZSBjb2RlPyBJIHNlZSB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBwc2VfcmVsZWFzZV9waXNgLCBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGBwc2VfcGlfZGlzYWJsZWAsIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIEV4Y2VsbGVudC4gVGhlc2UgYXJlbid0IGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgYSB0aG91c2FuZCB0aW1lcyBhIHNlY29uZC4gVGhleSdyZSBjb250cm9sLXBhdGggZnVuY3Rpb25zIGZvciBzZXR1cCwgdGVhcmRvd24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBTbywgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBob3QtcGF0aCBjb2RlIHRoYXQgbWlnaHQgYmUgdW5kZXIgaW50ZW5zZSBwZXJmb3JtYW5jZSBwcmVzc3VyZS4gVGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gcmV2ZWFsIGludGVyZXN0aW5nIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoaW4gaXQuIEknbGwgc3RhcnQgd2l0aCBgcHNlX3JlbGVhc2VfcGlzYCB0byBtYWtlIHN1cmUgbm90aGluZyBvYnZpb3VzIGlzIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTo0Mi4xMDE0NjEyMzVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzc0MTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAwPXN0YXRpYyBpbnQgb2ZfbG9hZF9wc2VfcGlfcGFpcnNldHMoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEzODpzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTE2Mj1zdGF0aWMgaW50IG9mX2xvYWRfcHNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTIzNS1vdXQ6XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MjM2OlxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTEzNj12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTQ1LVxcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE0NjpcXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNDctXFx0a2ZpZm9fZnJlZShcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl9maWZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NDIuMjI1MjA3MjE0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODExNDQzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFBTRSBSZWxlYXNlIFBJUyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgYHBzZV9yZWxlYXNlX3Bpc2Ag4oCTIHRoYXQncyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gR29vZCBjaG9pY2UuIE5vdywgbGV0J3MganVzdCBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBvcmdhbml6ZWQ6XG5cbiogICBgcHNlX3JlbGVhc2VfcGlzYFxuKiAgIGBwc2VfcGlfaXNfZW5hYmxlZGBcbiogICBgcHNlX3BpX2VuYWJsZWBcbiogICBgcHNlX3BpX2Rpc2FibGVgXG4qICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgXG5cblJpZ2h0LCB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiB0aGlzIGFyZWE/IE5vLCBsb29rcyBsaWtlIGl0J3MganVzdCB0aG9zZSBmaXZlLiBHb29kLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBMZXQgbWUgY2hlY2s6IGBQU0VfQ09OVFJPTExFUmAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFBIWUxJQmAsIGNvcnJlY3Q/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBPa2F5LCBiYWNrIHRvIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIGFub3RoZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NDYuMzA2MzU0Mzk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBkcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IG5vLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBQU0VfQ09OVFJPTExFUlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgUFNFX1JFR1VMQVRPUlxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxcbiAgMjA6XFx0XFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXFxuICAyMTpcXHRcXHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBQU0VfUEQ2OTJYMFxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMjY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjc6XFx0XFx0c2VsZWN0IEZXX1VQTE9BRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxcbiAgMzA6XFx0XFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgUFNFX1NJMzQ3NFxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpMzQ3NCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gSTJDXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcXG4gIDQwOlxcdFxcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxcbiAgNDE6XFx0XFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQ0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpMzQ3NC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIFBTRV9UUFMyMzg4MVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVFBTMjM4ODEgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjQ2LjMwNjQyOTU5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTIwNTEyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQU0UgQ29udHJvbGxlciBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgdGhlIGBQU0VfQ09OVFJPTExFUmAgcmVsaWVzIGhlYXZpbHkgb24gYFJFR1VMQVRPUmAuICBPZiBjb3Vyc2UsIHRoZSBzcGVjaWZpYyBkcml2ZXJzIGFsc28gZGVwZW5kIG9uIGBJMkNgIOKAkyBzdGFuZGFyZCBzdHVmZiBmb3Igc3l6a2FsbGVyLCB1c3VhbGx5IGFscmVhZHkgZW5hYmxlZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNsZWFyIHBpY3R1cmUsIHNvIEknbGwgbGlzdCBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDpcblxuKiAgIGBQU0VfQ09OVFJPTExFUmBcbiogICBgUFNFX1JFR1VMQVRPUmBcbiogICBgUFNFX1BENjkyWDBgXG4qICAgYFBTRV9TSTM0NzRgXG4qICAgYFBTRV9UUFMyMzg4MWBcblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGEgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIFBTRSBjb250cm9sbGVyIGZyYW1ld29yay4gSXQncyB0aGF0IGNsYXNzaWMgcmFjZSBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvcidzIGRlZmVycmVkIGRpc2FibGUgZmx1c2hpbmcgcHJvY2Vzcy4gVGhlIGZsdXNoIGlzIHRyeWluZyB0byBhY2Nlc3MgYHBjZGV2LVx1MDAzZXBpYCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIFRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyBudWxsIGNoZWNrcyBhbmQgcmVvcmRlcmluZyB0aGUgdGVhcmRvd24gdG8gcHJldmVudCB0aGlzLlxuXG5UaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCB0aGUgUFNFIGNvcmUgYW5kIGRyaXZlcnMsIGxpa2UgdGhlIEkyQy1iYXNlZCBQRDY5MngwLCBhcmUgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBXZSBjYW4gZnV6eiB0aGVtIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZ1bmN0aW9ucyBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBUaGV5IGFyZSBzdGF0aWMgdG8gYHBzZV9jb3JlLmNgLiBUaGlzIGlzIHBlcmZlY3QgYmVjYXVzZSBpZiBTeXprYWxsZXIgdHJpZ2dlcnMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zLCBpdCdsbCBjb3ZlciB0aG9zZSBmdW5jdGlvbnMuIFRoZXkncmUgZ29vZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRoZSBuZWNlc3NhcnkgY292ZXJhZ2UgdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMjksIk91dHB1dFRva2VucyI6MjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NTQuNDI2OTQ1OTU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjY3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUFNFX1BENjkyWDBcIixcbiAgICBcIlBTRV9TSTM0NzRcIixcbiAgICBcIlBTRV9UUFMyMzg4MVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBzZV9yZWxlYXNlX3Bpc1wiLFxuICAgIFwicHNlX3BpX2lzX2VuYWJsZWRcIixcbiAgICBcInBzZV9waV9lbmFibGVcIixcbiAgICBcInBzZV9waV9kaXNhYmxlXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlBTRV9QRDY5MlgwXCIsXG4gICAgXCJQU0VfU0kzNDc0XCIsXG4gICAgXCJQU0VfVFBTMjM4ODFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgICBcInBzZV9waV9pc19lbmFibGVkXCIsXG4gICAgXCJwc2VfcGlfZW5hYmxlXCIsXG4gICAgXCJwc2VfcGlfZGlzYWJsZVwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSdzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXFx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 04:36:00 +0000 UTC FinishedAt: 2026-07-12 05:01:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PSE_PD692X0", "PSE_SI3474", "PSE_TPS23881" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PSE_PD692X0", "PSE_SI3474", "PSE_TPS23881" ], "series_id": "e561a5b0-3b82-4610-ad7d-227cf37459ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pse_release_pis", "pse_pi_is_enabled", "pse_pi_enable", "pse_pi_disable", "pse_controller_unregister" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UFNFX1BENjkyWDAmIzM0OywKICAgICYjMzQ7UFNFX1NJMzQ3NCYjMzQ7LAogICAgJiMzNDtQU0VfVFBTMjM4ODEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2VfcmVsZWFzZV9waXMmIzM0OywKICAgICYjMzQ7cHNlX3BpX2lzX2VuYWJsZWQmIzM0OywKICAgICYjMzQ7cHNlX3BpX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtwc2VfcGlfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZCBkaXNhYmxlIGZsdXNoLCB3aGljaCBhY2Nlc3NlcyB0aGUgZnJlZWQgYHBjZGV2LVx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IGE1ZTZkN2IyNmI5ZmQ3Li4yMWNjYjUxNDY2MTYwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTE0NCw3ICYjNDM7MTQ0LDEzIEBAIHN0YXRpYyB2b2lkIHBzZV9yZWxlYXNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdFx0b2Zfbm9kZV9wdXQocGNkZXYtXHUwMDNlcGlbaV0ucGFpcnNldFsxXS5ucCk7XG4gXHRcdG9mX25vZGVfcHV0KHBjZGV2LVx1MDAzZXBpW2ldLm5wKTtcbiBcdH1cbiYjNDM7XHQvKiBGcmVlIHVuZGVyIHRoZSBsb2NrIHNvIHRoZSBOVUxMIHN0b3JlIGlzIGF1dGhvcml0YXRpdmUgYWdhaW5zdFxuJiM0MztcdCAqIHRoZSByZWd1bGF0b3Igb3BzIHRoYXQgcmVhZCBwY2Rldi1cdTAwM2VwaSB1bmRlciBwY2Rldi1cdTAwM2Vsb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwY2Rldi1cdTAwM2VwaSk7XG4mIzQzO1x0cGNkZXYtXHUwMDNlcGkgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gLyoqXG5AQCAtNDIxLDYgJiM0Mzs0MjcsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBcbiBcdGlkID0gcmRldl9nZXRfaWQocmRldik7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIENvbnRyb2xsZXIgbWF5IGJlIHVucmVnaXN0ZXJlZCAocGNkZXYtXHUwMDNlcGkgZnJlZWQpIG1pZC10ZWFyZG93bi4gKi9cbiYjNDM7XHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFx0aWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LVx1MDAzZXBpW2lkXS5wd19kKSkge1xuIFx0XHRyZXQgPSBwY2Rldi1cdTAwM2VwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZDtcbiBcdFx0Z290byBvdXQ7XG5AQCAtNjc0LDYgJiM0Mzs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIFxuIFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0LyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi1cdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xuJiM0MztcdGlmICghcGNkZXYtXHUwMDNlcGkpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiBcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cdTAwM2VwaVtpZF0ucHdfZCkpIHtcbiBcdFx0LyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLlxuIFx0XHQgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuXG5AQCAtNzAyLDE1ICYjNDM7NzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIHtcbiBcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTtcbi1cdHN0cnVjdCBwc2VfcGkgKnBpO1xuIFx0aW50IGlkLCByZXQ7XG4gXG4gXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xuLVx0cGkgPSBcdTAwMjZwY2Rldi1cdTAwM2VwaVtpZF07XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdC8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyXG4mIzQzO1x0ICogcGNkZXYtXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbiBcdGlmICghcmV0KVxuLVx0XHRwaS1cdTAwM2VhZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiYjNDM7XHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTExMTQsMTEgJiM0MzsxMTM1LDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbiAgKi9cbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4ge1xuLVx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcbi1cdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XG4mIzQzO1x0LyogU3RvcCB0aGUgSVJRIGFuZCBub3RpZmljYXRpb24gd29ya2VyIGJlZm9yZSBmcmVlaW5nIHdoYXQgdGhleVxuJiM0MztcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbiYjNDM7XHQgKiB0aGF0IHBzZV9mbHVzaF9wd19kcygpIGRyb3BzLlxuJiM0MztcdCAqL1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbiBcdFx0ZGlzYWJsZV9pcnEocGNkZXYtXHUwMDNlaXJxKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cGNkZXYtXHUwMDNlbnRmX3dvcmspO1xuJiM0MztcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4mIzQzO1x0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbiBcdGtmaWZvX2ZyZWUoXHUwMDI2cGNkZXYtXHUwMDNlbnRmX2ZpZm8pO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwc2VfbGlzdF9tdXRleCk7XG4gXHRsaXN0X2RlbChcdTAwMjZwY2Rldi1cdTAwM2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BTRV9QRDY5MlgwJiMzNDssCiAgICAmIzM0O1BTRV9TSTM0NzQmIzM0OywKICAgICYjMzQ7UFNFX1RQUzIzODgxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNlX3JlbGVhc2VfcGlzJiMzNDssCiAgICAmIzM0O3BzZV9waV9pc19lbmFibGVkJiMzNDssCiAgICAmIzM0O3BzZV9waV9lbmFibGUmIzM0OywKICAgICYjMzQ7cHNlX3BpX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXIgY29yZSBmcmFtZXdvcmsuIFRoZSBidWcgb2NjdXJzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yIGNvcmUmIzM5O3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cdTAwM2VwaWAgYXJyYXkuIFRoZSBwYXRjaCBhZGRzIE5VTEwgY2hlY2tzIGFuZCByZW9yZGVycyB0ZWFyZG93biBzdGVwcyB0byBwcmV2ZW50IHRoaXMuIFRoZSBQU0UgY29yZSBhbmQgaXRzIGRyaXZlcnMgKGUuZy4sIEkyQy1iYXNlZCBQRDY5MngwKSBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBpbnN0YW50aWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlbSB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYwppbmRleCBhNWU2ZDdiMjZiOWZkNy4uMjFjY2I1MTQ2NjE2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCkBAIC0xNDQsNyAmIzQzOzE0NCwxMyBAQCBzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiAJCW9mX25vZGVfcHV0KHBjZGV2LSZndDtwaVtpXS5wYWlyc2V0WzFdLm5wKTsKIAkJb2Zfbm9kZV9wdXQocGNkZXYtJmd0O3BpW2ldLm5wKTsKIAl9CiYjNDM7CS8qIEZyZWUgdW5kZXIgdGhlIGxvY2sgc28gdGhlIE5VTEwgc3RvcmUgaXMgYXV0aG9yaXRhdGl2ZSBhZ2FpbnN0CiYjNDM7CSAqIHRoZSByZWd1bGF0b3Igb3BzIHRoYXQgcmVhZCBwY2Rldi0mZ3Q7cGkgdW5kZXIgcGNkZXYtJmd0O2xvY2suCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGNkZXYtJmd0O2xvY2spOwogCWtmcmVlKHBjZGV2LSZndDtwaSk7CiYjNDM7CXBjZGV2LSZndDtwaSA9IE5VTEw7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKIH0KIAogLyoqCkBAIC00MjEsNiAmIzQzOzQyNywxMSBAQCBzdGF0aWMgaW50IHBzZV9waV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogCiAJaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAltdXRleF9sb2NrKCZhbXA7cGNkZXYtJmd0O2xvY2spOwomIzQzOwkvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LSZndDtwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqLwomIzQzOwlpZiAoIXBjZGV2LSZndDtwaSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiAJaWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LSZndDtwaVtpZF0ucHdfZCkpIHsKIAkJcmV0ID0gcGNkZXYtJmd0O3BpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkOwogCQlnb3RvIG91dDsKQEAgLTY3NCw2ICYjNDM7Njg1LDExIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIAogCWlkID0gcmRldl9nZXRfaWQocmRldik7CiAJbXV0ZXhfbG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJLyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi0mZ3Q7cGkgZnJlZWQpIG1pZC10ZWFyZG93bi4gKi8KJiM0MzsJaWYgKCFwY2Rldi0mZ3Q7cGkpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiAJaWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LSZndDtwaVtpZF0ucHdfZCkpIHsKIAkJLyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLgogCQkgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuCkBAIC03MDIsMTUgJiM0Mzs3MTgsMjAgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogc3RhdGljIGludCBwc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IHBzZV9waSAqcGk7CiAJaW50IGlkLCByZXQ7CiAKIAlpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOwotCXBpID0gJmFtcDtwY2Rldi0mZ3Q7cGlbaWRdOwogCW11dGV4X2xvY2soJmFtcDtwY2Rldi0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyCiYjNDM7CSAqIHBjZGV2LSZndDtwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwY2Rldi0mZ3Q7cGkpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO3BjZGV2LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiAJcmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7CiAJaWYgKCFyZXQpCi0JCXBpLSZndDthZG1pbl9zdGF0ZV9lbmFibGVkID0gMDsKJiM0MzsJCXBjZGV2LSZndDtwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZCA9IDA7CiAKIAltdXRleF91bmxvY2soJmFtcDtwY2Rldi0mZ3Q7bG9jayk7CiAJcmV0dXJuIDA7CkBAIC0xMTE0LDExICYjNDM7MTEzNSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CiAgKi8KIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKIHsKLQlwc2VfZmx1c2hfcHdfZHMocGNkZXYpOwotCXBzZV9yZWxlYXNlX3BpcyhwY2Rldik7CiYjNDM7CS8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXkKJiM0MzsJICogcmVhY2g6IGJvdGggdG91Y2ggcGNkZXYtJmd0O3BpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC0mZ3Q7c3VwcGx5CiYjNDM7CSAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuCiYjNDM7CSAqLwogCWlmIChwY2Rldi0mZ3Q7aXJxKQogCQlkaXNhYmxlX2lycShwY2Rldi0mZ3Q7aXJxKTsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7cGNkZXYtJmd0O250Zl93b3JrKTsKJiM0MzsJcHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTsKJiM0MzsJcHNlX3JlbGVhc2VfcGlzKHBjZGV2KTsKIAlrZmlmb19mcmVlKCZhbXA7cGNkZXYtJmd0O250Zl9maWZvKTsKIAltdXRleF9sb2NrKCZhbXA7cHNlX2xpc3RfbXV0ZXgpOwogCWxpc3RfZGVsKCZhbXA7cGNkZXYtJmd0O2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzc3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBTRSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBOVUxMIGNoZWNrcyBhcm91bmQgYHBjZGV2LSZndDtwaWAgd2l0aGluIGEgZmV3IGZ1bmN0aW9uczogYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBhbmQgYHBzZV9waV9kaXNhYmxlYC4gVGhhdCYjMzk7cyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLCBJIGFsd2F5cyBhcHByZWNpYXRlIHRoYXQuIFRoZSBwYXRjaCBhbHNvIHVwZGF0ZXMgYHBzZV9yZWxlYXNlX3Bpc2AgdG8gc2V0IGBwY2Rldi0mZ3Q7cGlgIHRvIE5VTEwsIGFsbCB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgYHBjZGV2LSZndDtsb2NrYC4gVGhhdCBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpc3N1ZSB3YXMgaWRlbnRpZmllZCBhbmQgdGhlIGxvY2sgYWRkZWQgdG8gcHJvdGVjdCBpdC4gR29vZCBjYXRjaCB0aGVyZS4gRmluYWxseSwgSSBzZWUgc29tZSByZW9yZGVyaW5nIGhhcHBlbmluZyBpbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hhdCBleGFjdGx5IGlzIHRoaXMgJiMzNDtQU0UmIzM0OyB0aGluZz8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHJpZ2h0LCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQb3dlciBvdmVyIEV0aGVybmV0IHNpZGUgb2YgdGhpbmdzLiBPa2F5LCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc3Vic3lzdGVtIGZvciBQU0UgY29udHJvbGxlcnMsIHdoaWNoICpjb3VsZCogYmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhdHRhY2sgc3VyZmFjZXMgaGVyZS4gVGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmaWxlIGFuZCBzZWUgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBnaXZlIHVzIGEgZ29vZCBpZGVhIG9mIHdoYXQmIzM5O3MgZXhwb3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFNFX0NPTlRST0xMRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6NjptZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERyaXZlciBMYW5kc2NhcGUgZm9yIFBTRSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwcmFjdGljYWxpdGllcy4gVGhlIGNvcmUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciBzdXBwb3J0LCBvciByYXRoZXIgdGhlIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNvbnRleHQgb2YgUFNFIChQb3dlciBTeXN0ZW0gRW5naW5lZXJpbmcpIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IGV4aXN0aW5nIGRyaXZlcnMsIGxpYnJhcmllcywgb3IgQVBJcyBhcmUgYXZhaWxhYmxlLCBhbmQgd2hlcmUgdGhlIGdhcHMgYXJlLgoKV2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBmZXcgYW5nbGVzIGhlcmUuIEZpcnN0LCBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIG1heWJlIHNwZWNpZmljIGNoaXBzZXRzIG9yIGludGVyZmFjZXMuIFRoZW4sIG1vcmUgYWJzdHJhY3QgbGV2ZWxzIOKAkyBwb3dlciBtYW5hZ2VtZW50IGZyYW1ld29ya3Mgb3Igc3RhbmRhcmQgcHJvdG9jb2xzIHdlIGNhbiBsZXZlcmFnZS4gQXJlIHRoZXJlIHByZS1idWlsdCBkcml2ZXJzIGZvciB0aGUgcGFydGljdWxhciBoYXJkd2FyZSwgb3IgYXJlIHdlIHN0YXJpbmcgZG93biBhIGN1c3RvbSBkcml2ZXIgZGV2ZWxvcG1lbnQgcHJvamVjdD8gQW5kIHdoYXQgYWJvdXQgdGhlIHNvZnR3YXJlIHNpZGU/IEFyZSB0aGUgZHJpdmVycyBkZXNpZ25lZCB3ZWxsIHRvIGhhbmRsZSBjb21wbGV4IGNhbGN1bGF0aW9ucyBhbmQgb3B0aW1pemF0aW9ucz8KClRoaXMgYWxzbyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gV2lsbCB0aGUgZHJpdmVycyBiZSBpbnRlZ3JhdGVkIGRpcmVjdGx5IGludG8gdGhlIE9TLCBvciBiZSBoYW5kbGVkIHRocm91Z2ggYSBkZWRpY2F0ZWQgY29udHJvbGxlcj8gSG93IGRvIHRoZXkgaW50ZXJmYWNlIHdpdGggdGhlIGNvbnRyb2wgc3lzdGVtPyBJcyB0aGVyZSBhIG5lZWQgZm9yIHNvbWUgc29ydCBvZiBtaWRkbGUtd2FyZSwgc28gdGhlIGRyaXZlcnMgYXJlIHBvcnRhYmxlPyBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhbiBpbmZvcm1lZCBwbGFuIGZvciBkZXZlbG9wbWVudC4gVGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgZHJpdmVycyB3aWxsIGRpcmVjdGx5IGluZmx1ZW5jZSBteSBkZXNpZ24gY2hvaWNlcyBmb3IgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtwZDY5MngwLmMmIzM0OywKICAgICYjMzQ7cHNlX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtwc2VfcmVndWxhdG9yLmMmIzM0OywKICAgICYjMzQ7c2kzNDc0LmMmIzM0OywKICAgICYjMzQ7dHBzMjM4ODEuYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyMwoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEhhcmR3YXJlIERyaXZlciBTdWJzeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMuLi4gaXQmIzM5O3MgY2xlYXJseSBhIGhhcmR3YXJlIGRyaXZlciBzdWJzeXN0ZW0uIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O0NhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGZyb20gdXNlciBzcGFjZT8mIzM0OyBJdCYjMzk7cyBjcnVjaWFsIGZvciBtb3N0IG9mIHdoYXQgSSBkby4gTm93LCB0byBmaWd1cmUgdGhhdCBvdXQsIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBwc2VfY29yZS5jYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBwbGFjZSB0byBmaW5kIHRoZSB1c2VyIHNwYWNlIGludGVyZmFjZXMsIGlmIGFueSBleGlzdC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsocHNlX3BpX2lzX2VuYWJsZWR8cHNlX3BpX2VuYWJsZXxwc2VfcGlfZGlzYWJsZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00MDM9c3RhdGljIGJvb2wgcHNlX3B3X2RfaXNfc3dfcHdfY29udHJvbChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldixcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00MTctXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo0MTg6c3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQxOS17XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9NDUyPXN0YXRpYyB2b2lkIHBzZV9waV9kZWFsbG9jYXRlX3B3X2J1ZGdldChzdHJ1Y3QgcHNlX3BpICpwaSlcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00NjEtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo0NjI6ICogX3BzZV9waV9kaXNhYmxlIC0gQ2FsbCBkaXNhYmxlIG9wZXJhdGlvbi4gQXNzdW1lcyB0aGUgUFNFIGxvY2sgaGFzIGJlZW5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2My0gKlx0XHQgICAgIGFjcXVpcmVkLlxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2OC0gKi9cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQ2OTpzdGF0aWMgaW50IF9wc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDcwLXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00OTY9c3RhdGljIGludCBwc2VfZGlzYWJsZV9waV9wb2woc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy01MDMtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo1MDQ6XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTUwNS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9NjI0PXN0YXRpYyBpbnQgX3BzZV9waV9kZWxpdmVyeV9wb3dlcl9zd19wd19jdHJsKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3NS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjY3NjpzdGF0aWMgaW50IHBzZV9waV9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy02Nzcte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTcxNy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjcxODpzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNzE5LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy03MzEtXHR9XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo3MzI6XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMy1cdGlmICghcmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcHNlX3BpX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg0MjpcdC5pc19lbmFibGVkID0gcHNlX3BpX2lzX2VuYWJsZWQsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDM6XHQuZW5hYmxlID0gcHNlX3BpX2VuYWJsZSxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg0NDpcdC5kaXNhYmxlID0gcHNlX3BpX2Rpc2FibGUsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy04NDUtXHQuZ2V0X3ZvbHRhZ2UgPSBwc2VfcGlfZ2V0X3ZvbHRhZ2UsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTIyOT1zdGF0aWMgaW50IHBzZV9zZXRfY29uZmlnX2lzcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNTgtXHRcdCAgICBwY2Rldi1cdTAwM2VwaVtpZF0uaXNyX3BkX2RldGVjdGVkKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTI1OTpcdFx0XHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNjAtXHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5pc3JfcGRfZGV0ZWN0ZWQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBSZWd1bGF0b3IgT3BlcmF0aW9ucyBhbmQgUG90ZW50aWFsIFRyaWdnZXIgTWVjaGFuaXNtcyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBGcm9tIHRoZSBjb2RlLCB0aGV5JiMzOTtyZSBjbGVhcmx5IHJlZ3VsYXRvciBvcGVyYXRpb25zLiBUaGUgcmVndWxhdG9yIHN1YnN5c3RlbSBpcyB0aGUgY29uc3VtZXIgaGVyZSwgY2FsbGluZyB0aGVzZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHNvbWV0aGluZy4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBjYW4gd2UgaW50ZXJhY3Qgd2l0aCB0aGVzZSByZWd1bGF0b3JzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb250cm9sIHBhdGhzLiBDYW4gd2UgaW50ZXJmYWNlIHZpYSBzeXNmcz8gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGZpcnN0IHBvcnQgb2YgY2FsbCBmb3IgbG93ZXItbGV2ZWwgZGV2aWNlIGNvbnRyb2wuIE9yLCBwZXJoYXBzLCBpcyB0aGVyZSBhIE5ldGxpbmsgaW50ZXJmYWNlIGludm9sdmVkPyBMb29raW5nIGF0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0sIHRoZSBQU0Ugc3Vic3lzdGVtICpkb2VzKiBleHBvc2UgTmV0bGluayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBldGh0b29sLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgcG9pbnRzIHRvd2FyZHMgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGV0aHRvb2wgY29tbWFuZHMgdG8gdHJpZ2dlciByZWd1bGF0b3IgYWN0aW9ucyBpbmRpcmVjdGx5LiBXZSBtYXkgYmUgYWJsZSB0byBsZXZlcmFnZSBleGlzdGluZyBQU0UgbmV0bGluayBpbmZyYXN0cnVjdHVyZSB0byBjb250cm9sIHRoaXMgcmVndWxhdG9yIGluZGlyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGF2ZW51ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGh0b29sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtOC0jaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6OTojaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTU5NT1zdGF0aWMgdm9pZCBwc2VfZ2V0X3N3X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjE4LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTYxOTogKiBwc2VfZXRodG9vbF9nZXRfc3RhdHVzIC0gZ2V0IHN0YXR1cyBvZiBQU0UgY29udHJvbFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTYyMC0gKiBAcHNlYzogUFNFIGNvbnRyb2wgcG9pbnRlclxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjUtICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNjI2OmludCBwc2VfZXRodG9vbF9nZXRfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjctXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTYyODpcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wc2VfY29udHJvbF9zdGF0dXMgKnN0YXR1cylcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2Mjkte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzMtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTczNDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9nZXRfc3RhdHVzKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzM2OnN0YXRpYyBpbnQgcHNlX2V0aHRvb2xfYzMzX3NldF9jb25maWcoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTczNy1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzcwLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc3MTpzdGF0aWMgaW50IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzcyLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzk1LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc5NjogKiBwc2VfZXRodG9vbF9zZXRfY29uZmlnIC0gc2V0IFBTRSBjb250cm9sIGNvbmZpZ3VyYXRpb25cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3OTctICogQHBzZWM6IFBTRSBjb250cm9sIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODAyLSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgwMzppbnQgcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA0LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA5LVx0aWYgKHBzZV9oYXNfYzMzKHBzZWMpIFx1MDAyNlx1MDAyNiBjb25maWctXHUwMDNlYzMzX2FkbWluX2NvbnRyb2wpIHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4MTA6XHRcdGVyciA9IHBzZV9ldGh0b29sX2MzM19zZXRfY29uZmlnKHBzZWMsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODExLVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTUtXHRpZiAocHNlX2hhc19wb2RsKHBzZWMpIFx1MDAyNlx1MDAyNiBjb25maWctXHUwMDNlcG9kbF9hZG1pbl9jb250cm9sKVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgxNjpcdFx0ZXJyID0gcHNlX2V0aHRvb2xfcG9kbF9zZXRfY29uZmlnKHBzZWMsIGNvbmZpZyk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODE3LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTktfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgyMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9zZXRfY29uZmlnKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MjEtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTgzMj1zdGF0aWMgaW50IHBzZV9waV91cGRhdGVfcHdfYnVkZ2V0KHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg2OC0vKipcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4Njk6ICogcHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0IC0gc2V0IFBTRSBjb250cm9sIHBvd2VyIGxpbWl0XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODcwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg3NS0gKi9cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4NzY6aW50IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODc3LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjUtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTkyNjpFWFBPUlRfU1lNQk9MX0dQTChwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTkyNy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjgtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTI5OiAqIHBzZV9ldGh0b29sX3NldF9wcmlvIC0gU2V0IFBTRSBQSSBwcmlvcml0eSBhY2NvcmRpbmcgdG8gdGhlIGJ1ZGdldFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTkzMC0gKlx0XHRcdCAgZXZhbHVhdGlvbiBzdHJhdGVneVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MzYtICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTM3OmludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM4LVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTk5NS19XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTk2OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9wcmlvKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5OTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQU0UgQ29uZmlndXJhdGlvbiBhbmQgRHJpdmVyIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlOyBpdCBzZWVtcyBJIGNhbiBjb25maWd1cmUgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIHRocm91Z2ggaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSAqdHJpZ2dlciogdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbj8gSXQmIzM5O3MgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIGEgZHJpdmVyIGlzIHVuYm91bmQsIG9yIGEgbW9kdWxlIGlzIHVubG9hZGVkLiBUaGUgcGxhbiB0aGVuIGlzLCBpZiBJIGNhbiBzb21laG93IGJpbmQgYW5kIHVuYmluZCBhIFBTRSBkcml2ZXIg4oCTIHNvbWV0aGluZyBsaWtlIGBwZDY5MngwYCBvciBgdHBzMjM4ODFgIOKAkyBJICpzaG91bGQqIGJlIGFibGUgdG8gZ2V0IGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCB0byBmaXJlLiBUaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIGRvbmUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIGFueSB2aXJ0dWFsIG9yIG1vY2sgUFNFIGRyaXZlcnMgSSBjYW4gbGV2ZXJhZ2UgZm9yIHRoaXMgdGVzdGluZz8gSSBuZWVkIHRvIGNoZWNrIGFuZCBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE3NTY9c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTgzOC1cdHByaXYtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTgzOTpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg0MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAzMz1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU0LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA1NTogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU2LSAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsaXplZCBQU0UgY29udHJvbGxlciBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU5LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2MDppbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDYxLXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTI5LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExMzA6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEzMS1cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTU0PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTU5LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2MDogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYxLSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYzLSAqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY0OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY1LSAqIHRoaXMgZnVuY3Rpb24sIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvblxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NjogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjctICpcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY5LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3MDppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTcxLVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODAtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOlx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4Mi1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkxLX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTI6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkzLVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI2LVx0cHJpdi1cdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjEyNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0Mi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfU1RBVElDO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkgc2VlIGEgZmlsZSBjYWxsZWQgYHBzZV9yZWd1bGF0b3IuY2AuIEZyb20gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCYjMzk7cyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBwb3dlciBzdXBwbHkgZWxlbWVudHMgcmVsYXRlZCB0byBzb21ldGhpbmcgdGhhdCBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gJiMzNDtQU0UsJiMzNDsgd2hpY2ggY291bGQgbWVhbiBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIG9yIHBlcmhhcHMgYSBjb21wb25lbnQgd2l0aCBhIHNpbWlsYXIgbmFtZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgd2l0aGluIGBwc2VfcmVndWxhdG9yLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9yZWd1bGF0b3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqUmVmbGVjdGluZyBvbiB0aGUgTWV0aG9kKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB1c2luZyBgcHNlX3JlZ3VsYXRvcmAgZm9yIHRoaXMgdGFzay4gQnV0IGxldCYjMzk7cyB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcmVseWluZyBvbiB0aGF0LCBwZXJoYXBzIEkgc2hvdWxkIGp1c3QgZ28gc3RyYWlnaHQgdG8gcmVhZGluZyB0aGUgZGF0YSBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAsIGFuZCBpdCBtaWdodCByZXZlYWwgZXZlcnl0aGluZyBJIG5lZWQgd2l0aG91dCBuZWVkaW5nIGEgbW9yZSBlbGFib3JhdGUgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlIGJlZm9yZSBJIGdldCBhaGVhZCBvZiBteXNlbGYuIEVmZmljaWVuY3kgaXMga2V5LCByaWdodD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvL1xuICAgMzpcdC8vIERyaXZlciBmb3IgdGhlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHdpdGhvdXRcbiAgIDQ6XHQvLyBhdXRvIGNsYXNzaWZpY2F0aW9uIHN1cHBvcnQuXG4gICA1Olx0Ly9cbiAgIDY6XHQvLyBDb3B5cmlnaHQgKGMpIDIwMjIgUGVuZ3V0cm9uaXgsIE9sZWtzaWogUmVtcGVsIFx1MDAzY2tlcm5lbEBwZW5ndXRyb25peC5kZVx1MDAzZVxuICAgNzpcdC8vXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuICAxNDpcdFxuICAxNTpcdHN0cnVjdCBwc2VfcmVnX3ByaXYge1xuICAxNjpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcbiAgMTc6XHRcdHN0cnVjdCByZWd1bGF0b3IgKnBzOyAvKnBvd2VyIHNvdXJjZSAqL1xuICAxODpcdFx0ZW51bSBldGh0b29sX3BvZGxfcHNlX2FkbWluX3N0YXRlIGFkbWluX3N0YXRlO1xuICAxOTpcdH07XG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIHN0cnVjdCBwc2VfcmVnX3ByaXYgKnRvX3BzZV9yZWcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gIDIyOlx0e1xuICAyMzpcdFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY2Rldiwgc3RydWN0IHBzZV9yZWdfcHJpdiwgcGNkZXYpO1xuICAyNDpcdH1cbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50XG4gIDI3Olx0cHNlX3JlZ19waV9lbmFibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiAgMjg6XHR7XG4gIDI5Olx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDMwOlx0XHRpbnQgcmV0O1xuICAzMTpcdFxuICAzMjpcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXBzKTtcbiAgMzM6XHRcdGlmIChyZXQpXG4gIDM0Olx0XHRcdHJldHVybiByZXQ7XG4gIDM1Olx0XG4gIDM2Olx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xuICAzNzpcdFx0cmV0dXJuIDA7XG4gIDM4Olx0fVxuICAzOTpcdFxuICA0MDpcdHN0YXRpYyBpbnRcbiAgNDE6XHRwc2VfcmVnX3BpX2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcbiAgNDI6XHR7XG4gIDQzOlx0XHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XG4gIDQ0Olx0XHRpbnQgcmV0O1xuICA0NTpcdFxuICA0NjpcdFx0cmV0ID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2Vwcyk7XG4gIDQ3Olx0XHRpZiAocmV0KVxuICA0ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA0OTpcdFxuICA1MDpcdFx0cHJpdi1cdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XG4gIDUxOlx0XHRyZXR1cm4gMDtcbiAgNTI6XHR9XG4gIDUzOlx0XG4gIDU0Olx0c3RhdGljIGludFxuICA1NTpcdHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4gIDU2Olx0XHRcdFx0ICAgc3RydWN0IHBzZV9hZG1pbl9zdGF0ZSAqYWRtaW5fc3RhdGUpXG4gIDU3Olx0e1xuICA1ODpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xuICA1OTpcdFxuICA2MDpcdFx0YWRtaW5fc3RhdGUtXHUwMDNlcG9kbF9hZG1pbl9zdGF0ZSA9IHByaXYtXHUwMDNlYWRtaW5fc3RhdGU7XG4gIDYxOlx0XG4gIDYyOlx0XHRyZXR1cm4gMDtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludFxuICA2NjpcdHBzZV9yZWdfcGlfZ2V0X3B3X3N0YXR1cyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkLFxuICA2NzpcdFx0XHRcdCBzdHJ1Y3QgcHNlX3B3X3N0YXR1cyAqcHdfc3RhdHVzKVxuICA2ODpcdHtcbiAgNjk6XHRcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcbiAgNzA6XHRcdGludCByZXQ7XG4gIDcxOlx0XG4gIDcyOlx0XHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVx1MDAzZXBzKTtcbiAgNzM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDc0Olx0XHRcdHJldHVybiByZXQ7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoIXJldClcbiAgNzc6XHRcdFx0cHdfc3RhdHVzLVx1MDAzZXBvZGxfcHdfc3RhdHVzID1cbiAgNzg6XHRcdFx0XHRFVEhUT09MX1BPRExfUFNFX1BXX0RfU1RBVFVTX0RJU0FCTEVEO1xuICA3OTpcdFx0ZWxzZVxuICA4MDpcdFx0XHRwd19zdGF0dXMtXHUwMDNlcG9kbF9wd19zdGF0dXMgPVxuICA4MTpcdFx0XHRcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcbiAgODI6XHRcbiAgODM6XHRcdHJldHVybiAwO1xuICA4NDpcdH1cbiAgODU6XHRcbiAgODY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sbGVyX29wcyBwc2VfcmVnX29wcyA9IHtcbiAgODc6XHRcdC5waV9nZXRfYWRtaW5fc3RhdGUgPSBwc2VfcmVnX3BpX2dldF9hZG1pbl9zdGF0ZSxcbiAgODg6XHRcdC5waV9nZXRfcHdfc3RhdHVzID0gcHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzLFxuICA4OTpcdFx0LnBpX2VuYWJsZSA9IHBzZV9yZWdfcGlfZW5hYmxlLFxuICA5MDpcdFx0LnBpX2Rpc2FibGUgPSBwc2VfcmVnX3BpX2Rpc2FibGUsXG4gIDkxOlx0fTtcbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW50XG4gIDk0Olx0cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuICA5NTpcdHtcbiAgOTY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuICA5NzpcdFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdjtcbiAgOTg6XHRcdGludCByZXQ7XG4gIDk5Olx0XG4gMTAwOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MzYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwc2VfcmVndWxhdG9yYCBEcml2ZXIgYW5kIFN5emthbGxlciYjMzk7cyBQb3RlbnRpYWwgSW50ZXJhY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHBzZV9yZWd1bGF0b3JgIGRyaXZlci4gUmlnaHQsIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0JiMzOTtzIGtleS4gUGxhdGZvcm0gZHJpdmVycyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbiB0aGVpciBkZXZpY2UgbWF0Y2hpbmc7IHRoZXkgcmVseSBvbiBkZXZpY2UgdHJlZSBub2RlcyBvciwgaW4gc29tZSBjYXNlcywgZGlyZWN0IGRldmljZSBjcmVhdGlvbiB2aWEgb3RoZXIgbWVjaGFuaXNtcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgd2l0aCBTeXprYWxsZXIuIEkga25vdyBTeXprYWxsZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNwaW4gdXAgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAg4oCTIHdoaWNoIEkgYmVsaWV2ZSBkaXJlY3RseSBjYWxscyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIEFQSSB0byBjcmVhdGUgYSBkZXZpY2Ug4oCTIG9yLCBtb3JlIHN1YnRseSwgYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBJdCBjYW4gYmUgYSBwcmV0dHkgdmVyc2F0aWxlIHRvb2wuCgpXYWl0IGEgc2Vjb25k4oCmIHNpbmNlIGBwc2VfcmVndWxhdG9yYCBpcyBhICpwbGF0Zm9ybSogZHJpdmVyLCB0aGUgbW9zdCBsaWtlbHkgYXZlbnVlIGZvciBTeXprYWxsZXIgdG8gdHJpZ2dlciBhIHByb2JlIHdvdWxkIGJlIHRocm91Z2ggYSBtYXRjaGluZyBjb21wYXRpYmxlIHN0cmluZyBpbiBhIGRldmljZSB0cmVlIG5vZGUuIEl0IG1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBmb3IgcGxhdGZvcm0gZHJpdmVycy4gSWYgU3l6a2FsbGVyIGNyYWZ0cyBhIGRldmljZSB0cmVlIGVudHJ5IHdpdGggdGhlIGNvcnJlY3QgY29tcGF0aWJsZSBzdHJpbmcsIHRoZSBrZXJuZWwgc2hvdWxkIHByb2JlIHRoZSBgcHNlX3JlZ3VsYXRvcmAgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgaXMsIGlmIEkgd2FudCB0byB0YXJnZXQgdGhpcyBkcml2ZXIgd2l0aCBTeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0aWYgKCFwcml2KVxuIDEwMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMDM6XHRcbiAxMDQ6XHRcdGlmICghcGRldi1cdTAwM2VkZXYub2Zfbm9kZSlcbiAxMDU6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTA2Olx0XG4gMTA3Olx0XHRwcml2LVx1MDAzZXBzID0gZGV2bV9yZWd1bGF0b3JfZ2V0X2V4Y2x1c2l2ZShkZXYsIFwmIzM0O3BzZVwmIzM0Oyk7XG4gMTA4Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcHMpKVxuIDEwOTpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2VwcyksXG4gMTEwOlx0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIHJlZ3VsYXRvci5cXG5cJiMzNDspO1xuIDExMTpcdFxuIDExMjpcdFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gMTEzOlx0XG4gMTE0Olx0XHRyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChwcml2LVx1MDAzZXBzKTtcbiAxMTU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTE2Olx0XHRcdHJldHVybiByZXQ7XG4gMTE3Olx0XG4gMTE4Olx0XHRpZiAocmV0KVxuIDExOTpcdFx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xuIDEyMDpcdFx0ZWxzZVxuIDEyMTpcdFx0XHRwcml2LVx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9ESVNBQkxFRDtcbiAxMjI6XHRcbiAxMjM6XHRcdHByaXYtXHUwMDNlcGNkZXYub3duZXIgPSBUSElTX01PRFVMRTtcbiAxMjQ6XHRcdHByaXYtXHUwMDNlcGNkZXYub3BzID0gXHUwMDI2cHNlX3JlZ19vcHM7XG4gMTI1Olx0XHRwcml2LVx1MDAzZXBjZGV2LmRldiA9IGRldjtcbiAxMjY6XHRcdHByaXYtXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xuIDEyNzpcdFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuIDEyODpcdFx0aWYgKHJldCkge1xuIDEyOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIFBTRSBjb250cm9sbGVyICglcGUpXFxuXCYjMzQ7LFxuIDEzMDpcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4gMTMxOlx0XHRcdHJldHVybiByZXQ7XG4gMTMyOlx0XHR9XG4gMTMzOlx0XG4gMTM0Olx0XHRyZXR1cm4gMDtcbiAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGNvbnN0IF9fbWF5YmVfdW51c2VkIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHNlX3JlZ19vZl9tYXRjaFtdID0ge1xuIDEzODpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3BvZGwtcHNlLXJlZ3VsYXRvclwmIzM0OywgfSxcbiAxMzk6XHRcdHsgfSxcbiAxNDA6XHR9O1xuIDE0MTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBzZV9yZWdfb2ZfbWF0Y2gpO1xuIDE0MjpcdFxuIDE0MzpcdHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBzZV9yZWdfZHJpdmVyID0ge1xuIDE0NDpcdFx0LnByb2JlXHRcdD0gcHNlX3JlZ19wcm9iZSxcbiAxNDU6XHRcdC5kcml2ZXJcdFx0PSB7XG4gMTQ2Olx0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7UFNFIHJlZ3VsYXRvclwmIzM0OyxcbiAxNDc6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHBzZV9yZWdfb2ZfbWF0Y2gpLFxuIDE0ODpcdFx0fSxcbiAxNDk6XHR9O1xuIDE1MDpcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocHNlX3JlZ19kcml2ZXIpO1xuIDE1MTpcdFxuIDE1MjpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7T2xla3NpaiBSZW1wZWwgXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXHUwMDNlXCYjMzQ7KTtcbiAxNTM6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7cmVndWxhdG9yIGJhc2VkIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudFwmIzM0Oyk7XG4gMTU0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiAxNTU6XHRNT0RVTEVfQUxJQVMoXCYjMzQ7cGxhdGZvcm06cHNlLXJlZ3VsYXRvclwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIGEgd2F5IHRvIHRyaWdnZXIgdGhlIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgZnVuY3Rpb24uIFRoZSBrZXkgc3RyaW5nIGhlcmUgc2VlbXMgdG8gYmUgYHBvZGwtcHNlLXJlZ3VsYXRvcmAuIEkgd29uZGVyIGlmIFN5emthbGxlciBjYW4gaW5qZWN0IHRoaXMgZGlyZWN0bHk/IEluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBNYXliZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24gd291bGQgYmUgcG9zc2liaWxpdGllcy4gQnV0IFN5emthbGxlciBpcyB1c3VhbGx5IGxpbWl0ZWQgaW4gZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSBkZXZpY2UgdHJlZSB1bmxlc3MgaXQmIzM5O3MgZXhwbGljaXRseSBzZXQgdXAuIEFuZCwgd2hpbGUgYHN5el9tb3VudF9pbWFnZWAgYW5kIHNpbWlsYXIgY2FsbHMgZXhpc3QsIGluamVjdGluZyBkZXZpY2UgdHJlZSBub2RlcyB0aGF0IHdheSBpcyB1c3VhbGx5IGRpZmZpY3VsdC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIGFsdGVybmF0aXZlIG1ldGhvZHMgdG8gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlPyBJIHNlZSBhIGZldyBJMkMgZHJpdmVycyBsaXN0ZWQ6IGBwZDY5MngwLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIHRocm91Z2ggYC9kZXYvaTJjLSpgIG9yIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIGRldmljZXMgdXNpbmcgYGkyYy1zdHViYCBvciBzaW1pbGFyIHRvb2xzLCBidXQgdXN1YWxseSBJIG5lZWQgdG8gZ2V0IHRoZSBkcml2ZXIgcmVnaXN0ZXJlZC4gSXQgY2FuIG9mdGVuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHZpYSBgaW9jdGwoSTJDX1JEV1IpYCBvciBuZXRsaW5rLCBidXQgdG8gdHJ1bHkgKnByb2JlKiBhIGRyaXZlciwgaXQgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBmaXJzdC4KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciBkb2VzIGhhdmUgY2FsbHMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el84MDIxMV9pbmplY3RfZnJhbWVgLiBGb3IgSTJDIHNwZWNpZmljYWxseSwgaXQgY2FuIGxpa2VseSB1c2UgYGlvY3RsKEkyQ19TTEFWRSlgIG9yIGV2ZW4gdGhlIHN5c2ZzIGludGVyZmFjZSBgbmV3X2RldmljZWAgdG8gaW5zdGFudGlhdGUgdGhlc2UgSTJDIGRldmljZXMuIFllcywgdGhhdCYjMzk7cyBpdCEgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0lZC9uZXdfZGV2aWNlYCBpcyB0aGUga2V5LiBJIGNhbiB1c2UgdGhpcyB0byBpbnN0YW50aWF0ZSBhbiBJMkMgZGV2aWNlIGFuZCwgY3J1Y2lhbGx5LCBiaW5kIGl0IHRvIGEgZHJpdmVyIQoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIEkyQyBkcml2ZXJzLCBsaWtlIGBwZDY5MngwYCwgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpMmNfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE4NzQ9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGQ2OTJ4MF9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4NzY6c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBkNjkyeDBfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODc3LVx0LnByb2JlXHRcdD0gcGQ2OTJ4MF9pMmNfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg0LX07XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4ODU6bW9kdWxlX2kyY19kcml2ZXIocGQ2OTJ4MF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg2LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz01NjQ9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2kzNDc0X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NjUtXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmM6NTY2OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaTM0NzRfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU2Ny1cdC5wcm9iZSA9IHNpMzQ3NF9pMmNfcHJvYmUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU3My19O1xuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU3NDptb2R1bGVfaTJjX2RyaXZlcihzaTM0NzRfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NzUtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTU0OD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cHMyMzg4MV9vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTQ5LVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTU1MDpzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBzMjM4ODFfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1MS1cdC5wcm9iZVx0XHQ9IHRwczIzODgxX2kyY19wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTU3LX07XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTU4Om1vZHVsZV9pMmNfZHJpdmVyKHRwczIzODgxX2RyaXZlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTU5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMzNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJMkMgRHJpdmVyIEluc3RhbnRpYXRpb24gYW5kIFBvdGVudGlhbCBGaXJtd2FyZSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJMkMgZHJpdmVycyBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IFN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlc2UuIFJpZ2h0LCBpdCYjMzk7cyB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWAsIGdvdCBpdC4gVGhhdCBtZWFucyBJIGNhbiB0cmlnZ2VyIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgc3BlY2lmaWMgZGV2aWNlLCBsaWtlIGBwZDY5MngwYCwgYnkgd3JpdGluZyBzb21ldGhpbmcgbGlrZSBgcGQ2OTJ4MCAweDEwYCB0byBgbmV3X2RldmljZWAuIFRoYXQgc2hvdWxkIHByb2JlIHRoZSBkcml2ZXIsIHRoZW9yZXRpY2FsbHkuCgpCdXQgaGFuZyBvbi4uLiBhIHJlZCBmbGFnIGlzIGdvaW5nIHVwLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgcGQ2OTJ4MGAgbWlnaHQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB0aGFuIGEgc2ltcGxlIGluc3RhbnRpYXRpb24gYW5kIHByb2JlLiBJdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlIHRoZXJlJiMzOTtzIHNvbWUgZmlybXdhcmUgaW50ZXJhY3Rpb24gaW52b2x2ZWQsIG9yIG1heWJlIGl0IGV4cGVjdHMgY2VydGFpbiBJMkMgcmVzcG9uc2VzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZS4gVGhpcyBpc24mIzM5O3QgYWx3YXlzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIHlvdSBrbm93IHRoYXQuCgpCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBpbW1lZGlhdGVseSBsb29rIGF0IGBwZDY5MngwX2kyY19wcm9iZWAgYW5kIGNvbmZpcm0gdGhvc2UgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGl0IGhhcyBhbnkgcHJlcmVxdWlzaXRlIGZpcm13YXJlIG9yIGNvbW11bmljYXRpb24gZGVwZW5kZW5jaWVzIGJlZm9yZSByZWx5aW5nIG9uIFN5emthbGxlciYjMzk7cyBpbnN0YW50aWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzU2Olx0c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuMTc1NzpcdHtcbjE3NTg6XHRcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yc1tdID0geyBcJiMzNDt2ZGRcJiMzNDssIFwmIzM0O3ZkZGFcJiMzNDsgfTtcbjE3NTk6XHRcdHN0cnVjdCBwZDY5MngwX21zZyBtc2csIGJ1ZiA9IHswfSwgemVybyA9IHswfTtcbjE3NjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNmNsaWVudC1cdTAwM2VkZXY7XG4xNzYxOlx0XHRzdHJ1Y3QgZ3Bpb19kZXNjICpkaXNhYmxlX3BvcnRzO1xuMTc2MjpcdFx0c3RydWN0IHBkNjkyeDBfbXNnX3ZlciB2ZXI7XG4xNzYzOlx0XHRzdHJ1Y3QgcGQ2OTJ4MF9wcml2ICpwcml2O1xuMTc2NDpcdFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xuMTc2NTpcdFx0aW50IHJldDtcbjE3NjY6XHRcbjE3Njc6XHRcdHJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0X2VuYWJsZShkZXYsIEFSUkFZX1NJWkUocmVndWxhdG9ycyksXG4xNzY4Olx0XHRcdFx0XHRcdCAgICAgcmVndWxhdG9ycyk7XG4xNzY5Olx0XHRpZiAocmV0KVxuMTc3MDpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbjE3NzE6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXFxuXCYjMzQ7KTtcbjE3NzI6XHRcbjE3NzM6XHRcdGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LVx1MDAzZWFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHtcbjE3NzQ6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2kyYyBjaGVjayBmdW5jdGlvbmFsaXR5IGZhaWxlZFxcblwmIzM0Oyk7XG4xNzc1Olx0XHRcdHJldHVybiAtRU5YSU87XG4xNzc2Olx0XHR9XG4xNzc3Olx0XG4xNzc4Olx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4xNzc5Olx0XHRpZiAoIXByaXYpXG4xNzgwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTc4MTpcdFxuMTc4MjpcdFx0cHJpdi1cdTAwM2VjbGllbnQgPSBjbGllbnQ7XG4xNzgzOlx0XHRpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwcml2KTtcbjE3ODQ6XHRcbjE3ODU6XHRcdGRpc2FibGVfcG9ydHMgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFwmIzM0O2Rpc2FibGUtcG9ydHNcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuMTc4NjpcdFx0aWYgKElTX0VSUihkaXNhYmxlX3BvcnRzKSlcbjE3ODc6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgUFRSX0VSUihkaXNhYmxlX3BvcnRzKSxcbjE3ODg6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGdldCBkaXNhYmxlIHBvcnRzIEdQSU9cXG5cJiMzNDspO1xuMTc4OTpcdFxuMTc5MDpcdFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopXHUwMDI2YnVmLCBzaXplb2YoYnVmKSk7XG4xNzkxOlx0XHRpZiAocmV0ICE9IHNpemVvZihidWYpKSB7XG4xNzkyOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXG5cJiMzNDspO1xuMTc5MzpcdFx0XHRyZXR1cm4gLUVJTztcbjE3OTQ6XHRcdH1cbjE3OTU6XHRcbjE3OTY6XHRcdC8qIFByb2JlIGhhcyBiZWVuIGFscmVhZHkgcnVuIGFuZCB0aGUgc3RhdHVzIGR1bXBlZCAqL1xuMTc5NzpcdFx0aWYgKCFtZW1jbXAoXHUwMDI2YnVmLCBcdTAwMjZ6ZXJvLCBzaXplb2YoYnVmKSkpIHtcbjE3OTg6XHRcdFx0LyogQXNrIGFnYWluIHRoZSBjb250cm9sbGVyIHN0YXR1cyAqL1xuMTc5OTpcdFx0XHRtc2cgPSBwZDY5MngwX21zZ190ZW1wbGF0ZV9saXN0W1BENjkyWDBfTVNHX0dFVF9TWVNfU1RBVFVTXTtcbjE4MDA6XHRcdFx0cmV0ID0gcGQ2OTJ4MF9zZW5kcmVjdl9tc2cocHJpdiwgXHUwMDI2bXNnLCBcdTAwMjZidWYpO1xuMTgwMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4xODAyOlx0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcblwmIzM0Oyk7XG4xODAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE4MDQ6XHRcdFx0fVxuMTgwNTpcdFx0fVxuMTgwNjpcdFxuMTgwNzpcdFx0aWYgKGJ1Zi5rZXkgIT0gMHgwMyB8fCBidWYuc3ViWzBdIFx1MDAyNiAweDAxKSB7XG4xODA4Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtQU0UgY29udHJvbGxlciBlcnJvclxcblwmIzM0Oyk7XG4xODA5Olx0XHRcdHJldHVybiAtRUlPO1xuMTgxMDpcdFx0fVxuMTgxMTpcdFx0aWYgKGJ1Zi5zdWJbMF0gXHUwMDI2IDB4MDIpIHtcbjE4MTI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1BTRSBmaXJtd2FyZSBlcnJvci4gUGxlYXNlIHVwZGF0ZSBpdC5cXG5cJiMzNDspO1xuMTgxMzpcdFx0XHRwcml2LVx1MDAzZWZ3X3N0YXRlID0gUEQ2OTJYMF9GV19CUk9LRU47XG4xODE0Olx0XHR9IGVsc2Uge1xuMTgxNTpcdFx0XHR2ZXIgPSBwZDY5MngwX2dldF9zd192ZXJzaW9uKHByaXYpO1xuMTgxNjpcdFx0XHRkZXZfaW5mbyhcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBcJiMzNDtTb2Z0d2FyZSB2ZXJzaW9uICVkLiUwMmQuJWQuJWRcXG5cJiMzNDssXG4xODE3Olx0XHRcdFx0IHZlci5wcm9kLCB2ZXIubWFqX3N3X3ZlciwgdmVyLm1pbl9zd192ZXIsXG4xODE4Olx0XHRcdFx0IHZlci5wYV9zd192ZXIpO1xuMTgxOTpcdFxuMTgyMDpcdFx0XHRpZiAodmVyLm1hal9zd192ZXIgXHUwMDNjIFBENjkyWDBfRldfTUFKX1ZFUikge1xuMTgyMTpcdFx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUb28gb2xkIGZpcm13YXJlIHZlcnNpb24uIFBsZWFzZSB1cGRhdGUgaXRcXG5cJiMzNDspO1xuMTgyMjpcdFx0XHRcdHByaXYtXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX05FRURfVVBEQVRFO1xuMTgyMzpcdFx0XHR9IGVsc2Uge1xuMTgyNDpcdFx0XHRcdHByaXYtXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX09LO1xuMTgyNTpcdFx0XHR9XG4xODI2Olx0XHR9XG4xODI3Olx0XG4xODI4Olx0XHRpZiAoYnVmLmRhdGFbMl0gPT0gUEQ2OTJYMF9VU0VSX0JZVEUpXG4xODI5Olx0XHRcdHByaXYtXHUwMDNlY2ZnX3NhdmVkID0gdHJ1ZTtcbjE4MzA6XHRcbjE4MzE6XHRcdHByaXYtXHUwMDNlbnAgPSBkZXYtXHUwMDNlb2Zfbm9kZTtcbjE4MzI6XHRcdHByaXYtXHUwMDNlcGNkZXYubnJfbGluZXMgPSBQRDY5MlgwX01BWF9QSVM7XG4xODMzOlx0XHRwcml2LVx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XG4xODM0Olx0XHRwcml2LVx1MDAzZXBjZGV2Lm9wcyA9IFx1MDAyNnBkNjkyeDBfb3BzO1xuMTgzNTpcdFx0cHJpdi1cdTAwM2VwY2Rldi5kZXYgPSBkZXY7XG4xODM2Olx0XHRwcml2LVx1MDAzZXBjZGV2LnR5cGVzID0gRVRIVE9PTF9QU0VfQzMzO1xuMTgzNzpcdFx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQztcbjE4Mzg6XHRcdHByaXYtXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcbjE4Mzk6XHRcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbjE4NDA6XHRcdGlmIChyZXQpXG4xODQxOlx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuMTg0MjpcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUFNFIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTg0MzpcdFxuMTg0NDpcdFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBkZXYsIGRldl9uYW1lKGRldiksXG4xODQ1Olx0XHRcdFx0XHQgICAgICAgXHUwMDI2cGQ2OTJ4MF9md19vcHMsIHByaXYpO1xuMTg0NjpcdFx0aWYgKElTX0VSUihmd2wpKVxuMTg0NzpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZndsKSxcbjE4NDg6XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIHRoZSBGaXJtd2FyZSBVcGxvYWQgQVBJXFxuXCYjMzQ7KTtcbjE4NDk6XHRcdHByaXYtXHUwMDNlZndsID0gZndsO1xuMTg1MDpcdFxuMTg1MTpcdFx0cmV0dXJuIDA7XG4xODUyOlx0fVxuMTg1MzpcdFxuMTg1NDpcdHN0YXRpYyB2b2lkIHBkNjkyeDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuMTg1NTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MjkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEkyQyBEcml2ZXIgYW5kIFN5emthbGxlciYjMzk7cyBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGUgZHJpdmVyJiMzOTtzIGV4cGVjdGluZyBzcGVjaWZpYyBJMkMgdmFsdWVzLiBTcGVjaWZpY2FsbHksIGlmIGBidWYua2V5YCBpc24mIzM5O3QgYDB4MDNgICpvciogaWYgdGhlIGZpcnN0IGJ5dGUgb2YgYGJ1Zi5zdWJgIGhhcyBpdHMgTFNCIHNldCwgaXQgcmV0dXJucyBgLUVJT2AuICBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbSBmb3IgZnV6emluZywgcmlnaHQ/IFN5emthbGxlciYjMzk7cyBgc3l6X2kyY19zZXR1cGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuLi4gd2VsbCwgaXQgcHJvYmFibHkgd29uJiMzOTt0IGVhc2lseSBoYW5kbGUgc3VjaCBhIHByZWNpc2UgbW9ja2luZyB1bmxlc3MgdGhlcmUmIzM5O3MgZGVkaWNhdGVkIHN1cHBvcnQuIFdlJiMzOTt2ZSBnb3QgYHZoY2lgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLCBidXQgSSBkb24mIzM5O3QgcmVjYWxsIGEgZ2VuZXJpYyBJMkMgbW9jayBpbiBTeXprYWxsZXIgdGhhdCBhbGxvd3MgYXJiaXRyYXJ5IGRhdGEgcmVzcG9uc2VzLgoKSG9sZCBvbi4uLiBgaTJjLXN0dWJgPyBObywgdGhhdCYjMzk7cyBub3QgZmxleGlibGUgZW5vdWdoIGZvciBkeW5hbWljIHJlcGxpZXMuCgpXYWl0IGEgc2Vjb25kLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBwc2VfY29yZS5jYCDigJMgdGhhdCYjMzk7cyB0aGUgKmNvcmUqIGZyYW1ld29yay4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gQWgsIHJpZ2h0LiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgd2hlcmUgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQsIGJ1dCB0aGVuIGxhdGVyIGFjY2Vzc2VkIGJ5IHJlZ3VsYXRvciBvcGVyYXRpb25zLCBvciBldmVuIHRoZSBJUlEgb3Igbm90aWZpY2F0aW9uIHdvcmtlcnMuIERlZmluaXRlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uCgpUaGUgYnVnIHdhcyBmb3VuZCBieSBgc3l6LWNsdXN0ZXJgLi4uIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgY29uZmlybXMgaXQ6ICYjMzQ7QXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7JiMzNDsuIEFuZCBldmVuIGJldHRlciwgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OyEgRGFtbiwgU3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWchCgpTbywgaG93IGRpZCBTeXprYWxsZXIgdHJpZ2dlciB0aGlzIHVzZS1hZnRlci1mcmVlPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRocm91Z2ggYHBzZV9yZWd1bGF0b3JgLiBTaW5jZSBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciwgU3l6a2FsbGVyIGNvdWxkIGJlIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzLiBJdCYjMzk7cyBub3QgYG5sODAyMTFgLi4uIHByb2JhYmx5IGBzeXpfZGV2X2NyZWF0ZWAsIG9yIG1heWJlIHNvbWV0aGluZyBlbHNlPwoKQWhhISBUaGVyZSYjMzk7cyBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaW4gYHBzZV9yZWd1bGF0b3IuY2AuIElzIHRoZXJlIGFueSBvdGhlciBwYXRoIHRvIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXI/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyByZWxhdGVkIHRvIHRoaXMuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIHdheSB0aGlzIGNvdWxkIGhhdmUgYmVlbiB0cmlnZ2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTc1Nj1zdGF0aWMgaW50IHBkNjkyeDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODM4LVx0cHJpdi1cdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSAyO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODM5Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODQwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDMzPXN0YXRpYyB2b2lkIHBzZV9zZW5kX250Zl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTQtLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDU1OiAqIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBQU0UgY29udHJvbGxlciBkZXZpY2VcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTYtICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTktICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDYwOmludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjEte1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMjktfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTEzMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTMxLVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNTQ9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNTktLyoqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTYwOiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjEtICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQU0UgY29udHJvbGxlclxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjMtICpcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNjQ6ICogTWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpLiBGb3IgUFNFIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgYnlcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjUtICogdGhpcyBmdW5jdGlvbiwgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY2OiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2Ny0gKlxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjktICovXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTcwOmludCBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzEtXHRcdFx0XHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExODE6XHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgyLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTEtfVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE5MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTMtXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjYtXHRwcml2LVx1MDAzZXBjZGV2LnR5cGVzID0gRVRIVE9PTF9QU0VfUE9ETDtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTI3Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQyLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTQzMD1zdGF0aWMgaW50IHRwczIzODgxX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXHRwcml2LVx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9TVEFUSUM7XG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3Olx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFx1MDAyNnByaXYtXHUwMDNlcGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTUxOC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gaW5qZWN0IEkyQyBkZXZpY2VzPyBJJiMzOTttIGRyYXdpbmcgYSBibGFuayBvbiB0aGUgc3BlY2lmaWMgc3lzY2FsbCAtIGlzIGl0IGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgdGhpbmsgaXQmIzM5O3MgYHN5el9pMmNfZGV2YC4gUmlnaHQsIHRoYXQmIzM5O3MgaXQuIFdhaXQsIEkgc2VlICYjMzQ7cmVndWxhdG9yJiMzNDsgbWVudGlvbmVkLiBBaGEsICp0aGF0KiBwaXF1ZXMgbXkgaW50ZXJlc3QuIElmIHN5emthbGxlciBoYXMgYSBob29rIGludG8gdGhlIHJlZ3VsYXRvciBzdWJzeXN0ZW0sIHRoaXMgaXMgKmFic29sdXRlbHkqIHdvcnRoIGEgZGVlcGVyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLgoKVGhlIHBhdGNoIGl0c2VsZiBwb2ludHMgdG8gYSBVc2VyLUFmdGVyLUZyZWUvTlVMTC1kZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQgaW4gYHBzZV9yZWxlYXNlX3Bpc2AsIGJ1dCBzdWJzZXF1ZW50IHJlZ3VsYXRvciBvcGVyYXRpb25zIGNhbiBzdGlsbCBiZSBpbnZva2VkIG9uIGl0LiBTbyBiYXNpY2FsbHkgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhleSYjMzk7cmUgYWRkaW5nIGBpZiAoIXBjZGV2LSZndDtwaSlgIGNoZWNrcyB0byB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgVUFGLiBQbHVzLCB0aGV5JiMzOTtyZSBzZXR0aW5nIGBwY2Rldi0mZ3Q7cGkgPSBOVUxMYCB1bmRlciBgcGNkZXYtJmd0O2xvY2tgIGZvciBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBGaW5hbGx5LCB0aGUgY29kZSByZW9yZGVycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gc2h1dCBkb3duIHRoZSBJUlEgYW5kIG5vdGlmaWNhdGlvbiB3b3JrZXIgYmVmb3JlIGZyZWVpbmcgYHBjZGV2LSZndDtwaWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIHByZWNpc2VseSB0byBzZWUgaWYgdGhlIGZpeCBpcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzA6XHRFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4xMTMxOlx0XG4xMTMyOlx0LyoqXG4xMTMzOlx0ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBQU0UgY29udHJvbGxlciBkZXZpY2VcbjExMzQ6XHQgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG4xMTM1Olx0ICovXG4xMTM2Olx0dm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuMTEzNzpcdHtcbjExMzg6XHRcdC8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXlcbjExMzk6XHRcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbjExNDA6XHRcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXG4xMTQxOlx0XHQgKi9cbjExNDI6XHRcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG4xMTQzOlx0XHRcdGRpc2FibGVfaXJxKHBjZGV2LVx1MDAzZWlycSk7XG4xMTQ0Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl93b3JrKTtcbjExNDU6XHRcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4xMTQ2Olx0XHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuMTE0NzpcdFx0a2ZpZm9fZnJlZShcdTAwMjZwY2Rldi1cdTAwM2VudGZfZmlmbyk7XG4xMTQ4Olx0XHRtdXRleF9sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbjExNDk6XHRcdGxpc3RfZGVsKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QpO1xuMTE1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbjExNTE6XHR9XG4xMTUyOlx0RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfdW5yZWdpc3Rlcik7XG4xMTUzOlx0XG4xMTU0Olx0c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxuMTE1NTpcdHtcbjExNTY6XHRcdHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqKXJlcyk7XG4xMTU3Olx0fVxuMTE1ODpcdFxuMTE1OTpcdC8qKlxuMTE2MDpcdCAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcbjExNjE6XHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBTRSBjb250cm9sbGVyXG4xMTYyOlx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxuMTE2MzpcdCAqXG4xMTY0Olx0ICogTWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpLiBGb3IgUFNFIGNvbnRyb2xsZXJzIHJlZ2lzdGVyZWQgYnlcbjExNjU6XHQgKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cbjExNjY6XHQgKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbjExNjc6XHQgKlxuMTE2ODpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXG4xMTY5Olx0ICovXG4xMTcwOlx0aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuMTE3MTpcdFx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuMTE3MjpcdHtcbjExNzM6XHRcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKipwY2RldnA7XG4xMTc0Olx0XHRpbnQgcmV0O1xuMTE3NTpcdFxuMTE3NjpcdFx0cGNkZXZwID0gZGV2cmVzX2FsbG9jKGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZSwgc2l6ZW9mKCpwY2RldnApLFxuMTE3NzpcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuMTE3ODpcdFx0aWYgKCFwY2RldnApXG4xMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTE4MDpcdFxuMTE4MTpcdFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuMTE4MjpcdFx0aWYgKHJldCkge1xuMTE4MzpcdFx0XHRkZXZyZXNfZnJlZShwY2RldnApO1xuMTE4NDpcdFx0XHRyZXR1cm4gcmV0O1xuMTE4NTpcdFx0fVxuMTE4NjpcdFxuMTE4NzpcdFx0KnBjZGV2cCA9IHBjZGV2O1xuMTE4ODpcdFx0ZGV2cmVzX2FkZChkZXYsIHBjZGV2cCk7XG4xMTg5Olx0XG4xMTkwOlx0XHRyZXR1cm4gMDtcbjExOTE6XHR9XG4xMTkyOlx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4xMTkzOlx0XG4xMTk0Olx0c3RydWN0IHBzZV9pcnEge1xuMTE5NTpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXY7XG4xMTk2Olx0XHRzdHJ1Y3QgcHNlX2lycV9kZXNjIGRlc2M7XG4xMTk3Olx0XHR1bnNpZ25lZCBsb25nICpub3RpZnM7XG4xMTk4Olx0XHR1bnNpZ25lZCBsb25nICpub3RpZnNfbWFzaztcbjExOTk6XHR9O1xuMTIwMDpcdFxuMTIwMTpcdC8qKlxuMTIwMjpcdCAqIHBzZV90b19yZWd1bGF0b3Jfbm90aWZzIC0gQ29udmVydCBQU0Ugbm90aWZpY2F0aW9ucyB0byBSZWd1bGF0b3JcbjEyMDM6XHQgKlx0XHRcdCAgICAgbm90aWZpY2F0aW9uc1xuMTIwNDpcdCAqIEBub3RpZnM6IFBTRSBub3RpZmljYXRpb25zXG4xMjA1Olx0ICpcbjEyMDY6XHQgKiBSZXR1cm46IFJlZ3VsYXRvciBub3RpZmljYXRpb25zXG4xMjA3Olx0ICovXG4xMjA4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcHNlX3RvX3JlZ3VsYXRvcl9ub3RpZnModW5zaWduZWQgbG9uZyBub3RpZnMpXG4xMjA5Olx0e1xuMTIxMDpcdFx0dW5zaWduZWQgbG9uZyBybm90aWZzID0gMDtcbjEyMTE6XHRcbjEyMTI6XHRcdGlmIChub3RpZnMgXHUwMDI2IEVUSFRPT0xfUFNFX0VWRU5UX09WRVJfQ1VSUkVOVClcbjEyMTM6XHRcdFx0cm5vdGlmcyB8PSBSRUdVTEFUT1JfRVZFTlRfT1ZFUl9DVVJSRU5UO1xuMTIxNDpcdFx0aWYgKG5vdGlmcyBcdTAwMjYgRVRIVE9PTF9QU0VfRVZFTlRfT1ZFUl9URU1QKVxuMTIxNTpcdFx0XHRybm90aWZzIHw9IFJFR1VMQVRPUl9FVkVOVF9PVkVSX1RFTVA7XG4xMjE2Olx0XG4xMjE3Olx0XHRyZXR1cm4gcm5vdGlmcztcbjEyMTg6XHR9XG4xMjE5Olx0XG4xMjIwOlx0LyoqXG4xMjIxOlx0ICogcHNlX3NldF9jb25maWdfaXNyIC0gU2V0IFBTRSBjb250cm9sIGNvbmZpZyBhY2NvcmRpbmcgdG8gdGhlIFBTRVxuMTIyMjpcdCAqXHRcdFx0bm90aWZpY2F0aW9uc1xuMTIyMzpcdCAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0VcbjEyMjQ6XHQgKiBAaWQ6IGluZGV4IG9mIHRoZSBQU0UgY29udHJvbFxuMTIyNTpcdCAqIEBub3RpZnM6IFBTRSBldmVudCBub3RpZmljYXRpb25zXG4xMjI2Olx0ICpcbjEyMjc6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZSBvbiBlcnJvclxuMTIyODpcdCAqL1xuMTIyOTpcdHN0YXRpYyBpbnQgcHNlX3NldF9jb25maWdfaXNyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTgwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIGluIHRoZSBQU0UgQ29udHJvbGxlciBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyBiZXR3ZWVuIHRoZSBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb24gYW5kIHRoZSByZWd1bGF0b3Igb3BlcmF0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIFBzZXVkby1TdGF0aWMgRWxlbWVudCAoUFNFKSBjb250cm9sbGVyLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBsaWVzIGluIHRoZSB0aW1pbmcgb2YgdGhlIGNsZWFudXAuIFdoZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGlzIGNhbGxlZCwgYHBzZV9yZWxlYXNlX3Bpc2AgaXMgaW52b2tlZC4gQW5kICp0aGF0KiBmdW5jdGlvbiBmcmVlcyBgcGNkZXYtJmd0O3BpYCwgd2hpY2ggSSBwcmVzdW1lIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBQcml2YXRlIEludGVyZmFjZSBzdHJ1Y3R1cmUuCgpCdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJiMzOTt0IHRob3NlIHJlZ3VsYXRvciBvcGVyYXRpb25zIOKAkyBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgIOKAkyBwb3RlbnRpYWxseSAqc3RpbGwqIGJlaW5nIGNhbGxlZCBieSB0aGUgcmVndWxhdG9yIGNvcmUgZXZlbiBhZnRlciBgcHNlX3JlbGVhc2VfcGlzYCBoYXMgZnJlZWQgdGhlIG1lbW9yeT8gVGhhdCB3b3VsZCBiZSBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIGFuZCBvYnZpb3VzbHkgcHJvYmxlbWF0aWMuIFRoZSByYWNlLCB0aGVuLCBpcyB0aGF0IHRoZSByZWd1bGF0b3IgZGV2aWNlcyBhcmVuJiMzOTt0IHVucmVnaXN0ZXJlZCB1bnRpbCBsYXRlciwgY3JlYXRpbmcgdGhpcyB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eS4KCkhtbSwgdGhpcyByZW1pbmRzIG1lLi4uYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhdG9ycywgcmlnaHQ/IFNvLCB0aGUgcmVndWxhdG9yIGNvcmUgaXMgcG90ZW50aWFsbHkgaG9sZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQU0UgY29udHJvbGxlciYjMzk7cyByZXNvdXJjZXMgZXZlbiBhcyB0aGUgY29udHJvbGxlciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1bnJlZ2lzdGVyZWQuIEdvdCB0byBjaGVjayBob3cgdGhlIHJlZ3VsYXRvcnMgYXJlIHJlZ2lzdGVyZWQgaW4gbW9yZSBkZXRhaWwgdG8gY29uZmlybSB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSByYWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlZ3VsYXRvciByZWdpc3RyYXRpb24gcHJvY2VzcyB3aXRoaW4gdGhpcyBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIHRoZSB0aW1pbmcgYW5kIHdoYXQgdGhlIGZpeCBpcyBhY3R1YWxseSBhZGRyZXNzaW5nLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlZ3VsYXRvcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg1MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NTE6ZGV2bV9wc2VfcGlfcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODUyLVx0XHRcdCAgICAgICBjaGFyICpuYW1lLCBpbnQgaWQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODg5LVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODkwOlx0cmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKHBjZGV2LVx1MDAzZWRldiwgcmRlc2MsIFx1MDAyNnJjb25maWcpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODkxLVx0aWYgKElTX0VSUihyZGV2KSkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEwNjA9aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTQtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTE1Olx0XHRyZXQgPSBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIocGNkZXYsIHJlZ19uYW1lLCBpKTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTYtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzg4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWd1bGF0b3IgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgIHVzZWQgaGVyZSwgbWVhbmluZyB0aGVzZSByZWd1bGF0b3JzIGFyZSBkaXJlY3RseSBsaW5rZWQgdG8gYHBjZGV2LSZndDtkZXZgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgYmVhdXR5IG9mIGBkZXZyZXNgIGlzIHRoYXQgb24gdW5iaW5kaW5nLCB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uLCBhdXRvbWF0aWNhbGx5IGNsZWFuaW5nIHVwLgoKTm93LCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgY3JlYXRlcyBhIGBkZXZyZXNgIGZvciBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCwgYW5kIHRoZW4gYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBjYWxscyBgZGV2bV9wc2VfcGlfcmVndWxhdG9yX3JlZ2lzdGVyYCB3aGljaCBhbGxvY2F0ZXMgYGRldnJlc2AgZm9yIHRoZSByZWd1bGF0b3JzLiAgU28sIHRoZSByZWd1bGF0b3JzIGFyZSByZWdpc3RlcmVkICphZnRlciogdGhlIGNvbnRyb2xsZXI/ICBXYWl0LCBubywgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGNhbGxzIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgKndoaWNoKiByZWdpc3RlcnMgdGhlIHJlZ3VsYXRvcnMuIEdvdCBpdC4KClNvLCB0aGUgYWxsb2NhdGlvbiBvcmRlciBmb3IgZGV2cmVzIGlzOiAxKSBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCBhbmQgdGhlbiAyKSBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgICh3aGljaCBpcyBpbnNpZGUgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCkuIFRoYXQgY2xhcmlmaWVzIHRoZSBzZXR1cC4KClRoZXJlZm9yZSwgd2hlbiB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIHRoZSByZWxlYXNlIG9yZGVyIGlzIHRoZSByZXZlcnNlOiBmaXJzdCB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkIHZpYSBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAsIGFuZCB0aGVuIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuCgpBaGEhIE5vdyBJIHNlZSB0aGUgcG90ZW50aWFsIGlzc3VlLiBJZiB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkICpiZWZvcmUqIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBpcyBjYWxsZWQsIGhvdyBjYW4gdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zIHBvc3NpYmx5IGJlIGNhbGxlZCAqYWZ0ZXIqIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYD8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgVXNlLUFmdGVyLUZyZWUuCgpIYW5nIG9uLi4uIGFoLCB0aGUgcmVndWxhdG9yIGNvcmUhIEl0IGxpa2VseSBoYXMgZGVmZXJyZWQgd29yaywgbGlrZSBhIGRlZmVycmVkIGRpc2FibGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5cyBvciB0aGUgY29kZSBjb21tZW50LiAgWWVzLCBoZXJlIGl0IGlzOiAgYC8qIFJlYWNoZWQgdmlhIHRoZSByZWd1bGF0b3IgY29yZSYjMzk7cyBkZWZlcnJlZC1kaXNhYmxlIGZsdXNoIGFmdGVyIHBjZGV2LSZndDtwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLiAqL2AgU28sIHRoZSByZWd1bGF0b3IgY29yZSAqZG9lcyogaGF2ZSBhIGRlZmVycmVkIGRpc2FibGUgZmx1c2ghICBUaGlzIHByb2JhYmx5IGV4cGxhaW5zIGl0LgoKT2theSwgc28gd2hlbiByZWd1bGF0b3JzIGFyZSB1bnJlZ2lzdGVyZWQsIGl0IGZsdXNoZXMgdGhlc2UgZGVmZXJyZWQgZGlzYWJsZXMuIE9rYXksIEkmIzM5O20gd2l0aCB5b3Ugc28gZmFyLiBXYWl0LCBidXQgaWYgYHJlZ3VsYXRvcl91bnJlZ2lzdGVyYCBmbHVzaGVzIHRoZSBkZWZlcnJlZCB3b3JrLi4uIHRoZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgICpoYXNuJiMzOTt0KiBiZWVuIGNhbGxlZCB5ZXQhICAKCklmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGBwY2Rldi0mZ3Q7cGlgIGlzbiYjMzk7dCBmcmVlZC4gU28gd2h5IGlzIHRoZXJlIGEgVXNlLUFmdGVyLUZyZWU/IExldCBtZSBjaGVjayB0aGUgb3JkZXIgb2YgZGV2cmVzIGluIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyYC4gVGhlcmUmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O20gbWlzc2luZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNzA6XHRpbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xMTcxOlx0XHRcdFx0XHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4xMTcyOlx0e1xuMTE3MzpcdFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqKnBjZGV2cDtcbjExNzQ6XHRcdGludCByZXQ7XG4xMTc1Olx0XG4xMTc2Olx0XHRwY2RldnAgPSBkZXZyZXNfYWxsb2MoZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlLCBzaXplb2YoKnBjZGV2cCksXG4xMTc3Olx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4xMTc4Olx0XHRpZiAoIXBjZGV2cClcbjExNzk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTgwOlx0XG4xMTgxOlx0XHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XG4xMTgyOlx0XHRpZiAocmV0KSB7XG4xMTgzOlx0XHRcdGRldnJlc19mcmVlKHBjZGV2cCk7XG4xMTg0Olx0XHRcdHJldHVybiByZXQ7XG4xMTg1Olx0XHR9XG4xMTg2Olx0XG4xMTg3Olx0XHQqcGNkZXZwID0gcGNkZXY7XG4xMTg4Olx0XHRkZXZyZXNfYWRkKGRldiwgcGNkZXZwKTtcbjExODk6XHRcbjExOTA6XHRcdHJldHVybiAwO1xuMTE5MTpcdH1cbjExOTI6XHRFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbjExOTM6XHRcbjExOTQ6XHRzdHJ1Y3QgcHNlX2lycSB7XG4xMTk1Olx0XHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldjtcbjExOTY6XHRcdHN0cnVjdCBwc2VfaXJxX2Rlc2MgZGVzYztcbjExOTc6XHRcdHVuc2lnbmVkIGxvbmcgKm5vdGlmcztcbjExOTg6XHRcdHVuc2lnbmVkIGxvbmcgKm5vdGlmc19tYXNrO1xuMTE5OTpcdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZXZyZXMgT3JkZXJpbmcgQnVnIGluIFBTRSBDb250cm9sbGVyIFVuYmluZGluZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24uIEkgc2VlIHRoYXQgdGhlIGBkZXZyZXNfYWRkKGRldiwgcGNkZXZwKWAgY2FsbCBoYXBwZW5zICphZnRlciogYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KWAuIFRoaXMgbWVhbnMgdGhlIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGVzdGFibGlzaGVkICphZnRlciogYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYC4gIFRoZXJlZm9yZSwgb24gZHJpdmVyIHVuYmluZCwgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgZ2V0cyBjYWxsZWQgKmZpcnN0KiwgYW5kIHRoZW4gYGRldm1fcmVndWxhdG9yX3JlbGVhc2VgLgoKVGhlIHByb2JsZW0gaXMgdGhlIHNlcXVlbmNlOiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZ2V0cyBjYWxsZWQsIGZyZWVpbmcgYHBjZGV2LSZndDtwaWAsIGFuZCAqdGhlbiogdGhlIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZC4gIFVucmVnaXN0ZXJpbmcgdGhlIHJlZ3VsYXRvcnMgdHJpZ2dlcnMgZGVmZXJyZWQgZGlzYWJsZXMsIGxlYWRpbmcgdG8gYSBjYWxsIHRvIGBwc2VfcGlfZGlzYWJsZWAsIGJ1dCBub3cgaXQmIzM5O3MgYWNjZXNzaW5nIGBwY2Rldi0mZ3Q7cGlgIGFmdGVyIGl0JiMzOTtzIGJlZW4gZnJlZWQuIENsYXNzaWMgZGV2cmVzIG9yZGVyaW5nIGJ1ZyEKCkNhbiB3ZSB0cmlnZ2VyIHRoaXMgd2l0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBTeXprYWxsZXIgY2FuIHByb2JhYmx5IHJlcHJvZHVjZSB0aGlzLiAgVGhlIHN0ZXBzIHdvdWxkIGJlOgoKMS4gIFJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgKGUuZy4sIHRocm91Z2ggYW4gSTJDIGBuZXdfZGV2aWNlYCBmb3IgYHBkNjkyeDBgKS4KMi4gIEVuYWJsZSB0aGUgcmVndWxhdG9yIChlLmcuLCB0aHJvdWdoIGBldGh0b29sYCBvciByZWd1bGF0b3Igc3lzZnMpLgozLiAgRGlzYWJsZSB0aGUgcmVndWxhdG9yIHdpdGggZGVmZXJyZWQgZGlzYWJsZSAoaWYgdGhhdCYjMzk7cyByZWxldmFudCB0byB0aGUgc3BlY2lmaWMgcmVndWxhdG9yKS4KNC4gIFVuYmluZCB0aGUgZHJpdmVyICh1c2luZyBzeXNmcyBgdW5iaW5kYCBvciBkZWxldGluZyB0aGUgSTJDIGRldmljZSkuCgpUaGF0IHNob3VsZCBuYWlsIHRoZSBkZXZyZXMgcmVsZWFzZSBvcmRlciBidWcgcmlnaHQgb24gdGhlIGhlYWQuCgpCdXQsIGhvdyBsaWtlbHkgaXMgdGhpcyB0byBiZSByZWFjaGFibGU/IExldCYjMzk7cyBmaWd1cmUgb3V0IGlmIGBwZDY5MngwYCBpdHNlbGYgaXMgcmVhY2hhYmxlLiBUaGUgY29kZSBzdWdnZXN0cyBhIHByb2JlIGlzIHBlcmZvcm1lZC4KClRoZSBgcGQ2OTJ4MF9pMmNfcHJvYmVgIGZ1bmN0aW9uIGhhcyB0aGlzIGNoZWNrOgoKYGBgYwpyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAodTggKikmYW1wO2J1Ziwgc2l6ZW9mKGJ1ZikpOwppZiAocmV0ICE9IHNpemVvZihidWYpKSB7CglkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcbiYjMzQ7KTsKCXJldHVybiAtRUlPOwp9CgovKiBQcm9iZSBoYXMgYmVlbiBhbHJlYWR5IHJ1biBhbmQgdGhlIHN0YXR1cyBkdW1wZWQgKi8KaWYgKCFtZW1jbXAoJmFtcDtidWYsICZhbXA7emVybywgc2l6ZW9mKGJ1ZikpKSB7CgkvKiBBc2sgYWdhaW4gdGhlIGNvbnRyb2xsZXIgc3RhdHVzICovCgltc2cgPSBwZDY5MngwX21zZ190ZW1wbGF0ZV9saXN0W1BENjkyWDBfTVNHX0dFVF9TWVNfU1RBVFVTXTsKCXJldCA9IHBkNjkyeDBfc2VuZHJlY3ZfbXNnKHByaXYsICZhbXA7bXNnLCAmYW1wO2J1Zik7CglpZiAocmV0ICZsdDsgMCkgewoJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xuJiMzNDspOwoJCXJldHVybiByZXQ7Cgl9Cn0KCmlmIChidWYua2V5ICE9IDB4MDMgfHwgYnVmLnN1YlswXSAmYW1wOyAweDAxKSB7CglkZXZfZXJyKGRldiwgJiMzNDtQU0UgY29udHJvbGxlciBlcnJvclxuJiMzNDspOwoJcmV0dXJuIC1FSU87Cn0KYGBgCgpTbywgaWYgU3l6a2FsbGVyIHVzZXMgYSBtb2NrIEkyQyBkZXZpY2UsIGl0IHdvdWxkIG5lZWQgdG8gcmVzcG9uZCBjb3JyZWN0bHkgdG8gYnlwYXNzIHRoZXNlIGNoZWNrcy4gIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jayB0aGF0IGNhbiByZXNwb25kIHdpdGggYXJiaXRyYXJ5IGRhdGEsIGJ1dCBpdCAqY2FuKiB1c2UgYGkyYy1zdHViYCEgSG93ZXZlciwgYGkyYy1zdHViYCB3b3JrcyB3aXRoIFNNQnVzIGNvbW1hbmRzIGFuZCBub3QgcmF3IEkyQyB0cmFuc2ZlcnMgbGlrZSB0aGUgY29kZSB1c2VzIHdpdGggYGkyY19tYXN0ZXJfcmVjdmAuIFNvLCBgaTJjLXN0dWJgIG1pZ2h0IG5vdCB3b3JrIGhlcmUuCgpXaGF0IGFib3V0IGBwc2VfcmVndWxhdG9yLmNgPyBBaCwgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXI6CgpgYGBjCnN0YXRpYyBjb25zdCBfX21heWJlX3VudXNlZCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBzZV9yZWdfb2ZfbWF0Y2hbXSA9IHsKCXsgLmNvbXBhdGlibGUgPSAmIzM0O3BvZGwtcHNlLXJlZ3VsYXRvciYjMzQ7LCB9LAoJeyB9LAp9OwpgYGAKCkNhbiBTeXprYWxsZXIgaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCB0aGlzIGNvbXBhdGlibGUgc3RyaW5nPyBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyB1c2luZyBgc3l6X2Rldl9jcmVhdGVgLCBJIHRoaW5rLCBidXQgdXN1YWxseSB0ZXN0cyBwbGF0Zm9ybSBkcml2ZXJzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHRlc3QgVk0mIzM5O3MgZGV2aWNlIHRyZWUuIEJ1dCwgU3l6a2FsbGVyICpjYW4qIGFsc28gdXNlIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgIHNvbWVob3csIHRocm91Z2ggc29tZSBvdGhlciBtZWFucz8KCldhaXQgYSBtaW51dGUsIFN5emthbGxlciAqZGlkKiBmaW5kIHRoaXMhIFRoZSBjb21taXQgbWVzc2FnZSBpcyBmcm9tIHN5ei1jbHVzdGVyISBJdCBzYXlzLCBgQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gVGhpcyBpcyBhIHN5emthbGxlciBkaXNjb3ZlcnksIGFuZCBpdCBnb3QgYXBwbGllZCEKClNvLCBob3cgZGlkIFN5emthbGxlciBnZXQgdGhlcmU/IEl0IG11c3QgYmUgc29tZSB2aXJ0dWFsIFBTRSBkcml2ZXIuIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvcHNlLXBkL2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3BkNjkyeDAuYyYjMzQ7LAogICAgJiMzNDtwc2VfY29yZS5jJiMzNDssCiAgICAmIzM0O3BzZV9yZWd1bGF0b3IuYyYjMzQ7LAogICAgJiMzNDtzaTM0NzQuYyYjMzQ7LAogICAgJiMzNDt0cHMyMzg4MS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBENjkyeDAgRHJpdmVyOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkhKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBhbmQgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGBwZDY5MngwYCBkcml2ZXIgd2FzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJldGhpbmsgdGhpcy4gSXQmIzM5O3Mgbm90IHRoZSBvbmx5IEkyQyBkcml2ZXIgb3V0IHRoZXJlOyB0aGVyZSBhcmUgb3RoZXJzLCBsaWtlIGBzaTM0NzQuY2AgYW5kIGB0cHMyMzg4MS5jYC4gTWF5YmUgc3l6a2FsbGVyIGlzIHVzaW5nIGFuIEkyQyBtb2NrLCBsaWtlIGBpMmMtc3R1YmA/IE9yLCBtYXliZSBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyB0aGUgVVNCIHN1YnN5c3RlbT8gSXQgY291bGQgYmUgdXNpbmcgYHZoY2lgIGZvciBVU0IgYW5kIGEgVVNCLXRvLUkyQyBhZGFwdGVyIGxpa2UgYGkyYy10aW55LXVzYmAuIFllcywgdGhhdCYjMzk7cyBsaWtlbHkhIFN5emthbGxlciBjb3VsZCBtb2NrIGBpMmMtdGlueS11c2JgIHdpdGggYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIGluIHR1cm4gcmVnaXN0ZXJzIGFuIEkyQyBhZGFwdGVyLiBUaGVuLCBpdCBpbnN0YW50aWF0ZXMgYHBkNjkyeDBgIHVzaW5nIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtKi9uZXdfZGV2aWNlYC4gU2luY2Ugc3l6a2FsbGVyIGNvbnRyb2xzIHRoZSBVU0IgcmVzcG9uc2VzLCBpdCBjYW4gZmVlZCBhcmJpdHJhcnkgZGF0YSB0byBgaTJjX21hc3Rlcl9yZWN2YCEgVGhhdCYjMzk7cyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRlY2huaXF1ZSBmb3IgZnV6emluZyBJMkMgYW5kIFNQSSBkcml2ZXJzLgoKU28sIHRoZSBkcml2ZXIgSVMgcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IGZ1enphYmxlIQoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIEkgc2VlIGNoZWNrcyBmb3IgYCFwY2Rldi0mZ3Q7cGlgIGluIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBBbHNvLCB0aGVyZSYjMzk7cyBga2ZyZWUocGNkZXYtJmd0O3BpKTsgcGNkZXYtJmd0O3BpID0gTlVMTDtgIGluIGBwc2VfcmVsZWFzZV9waXNgIGFuZCB0aGUgYHBjZGV2LSZndDtwaWAgaXMgZnJlZWQgaW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmaXggdGhhdCYjMzk7cyB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuCgpOb3csIHdoaWNoIGNvbmZpZ3MgZG8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBhcmUgc2V0PyBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBpcyB0aGUgbWFpbiBvbmUsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQU0VfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjY6bWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7RXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZz0xND1pZiBQU0VfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzoxNjpjb25maWcgUFNFX1JFR1VMQVRPUlxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0yMi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjIzOmNvbmZpZyBQU0VfUEQ2OTJYMFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtQRDY5MlgwIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozNTpjb25maWcgUFNFX1NJMzQ3NFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtTaTM0NzQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnOjQ2OmNvbmZpZyBQU0VfVFBTMjM4ODFcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7VFBTMjM4ODEgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcywgZGlzdGlsbGVkIGludG8gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgUG9FIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZW5hYmxlIHRob3NlIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCAoUFNFKSBkcml2ZXJzIOKAkyBgUFNFX0NPTlRST0xMRVJgLCBgUFNFX1JFR1VMQVRPUmAsIGBQU0VfUEQ2OTJYMGAsIGBQU0VfU0kzNDc0YCwgYW5kIGBQU0VfVFBTMjM4ODFgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHNldCBvZiBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFBvRSBzZXR1cC4gSG9sZCBvbiBhIHNlY29uZCwgc29tZXRoaW5nJiMzOTtzIHBpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4uLiBXYXNuJiMzOTt0IHRoZXJlIGEgcmVjZW50IGJ1ZyByZXBvcnQgcmVsYXRlZCB0byBQU0UgZnVuY3Rpb25hbGl0eT8gQWgsIHllcywgdGhlIGNvcmUgaXNzdWUgd2FzIHRyYWNlZCBiYWNrIHRvIGBwc2VfY29yZS5jYC4gQW5kIHRoYXQgc3BlY2lmaWMgZmlsZSBnZXRzIGNvbXBpbGVkICpvbmx5KiB3aGVuIGBQU0VfQ09OVFJPTExFUmAgaXMgYWN0aXZlLiBTbywgdGhlcmUmIzM5O3MgYSBkaXJlY3QgY29ubmVjdGlvbiB0aGVyZS4gTm93LCBsZXQgbWUganVzdCBjcm9zcy1yZWZlcmVuY2UgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgTWFrZWZpbGUgdGhhdCBnb3Zlcm5zIHRoZSBQb0UgUEQgZHJpdmVycy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBteSBwbGFubmVkIGNvbmZpZ3VyYXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSBidWlsZCB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgb2J2aW91cyBpbiB0aGUgYnVpbGQgcHJvY2VzcyB0aGF0IG1pZ2h0IGluYWR2ZXJ0ZW50bHkgY29udHJpYnV0ZSB0byB0aGUgcHJvYmxlbSBvciBjYXVzZSBhbiB1bmludGVuZGVkIGNvbnNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCMgTWFrZWZpbGUgZm9yIExpbnV4IFBTRSBkcml2ZXJzXG4gICAzOlx0XG4gICA0Olx0b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSAmIzQzOz0gcHNlX2NvcmUub1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSAmIzQzOz0gcHNlX3JlZ3VsYXRvci5vXG4gICA3Olx0b2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSAmIzQzOz0gcGQ2OTJ4MC5vXG4gICA4Olx0b2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuICAgOTpcdG9iai0kKENPTkZJR19QU0VfVFBTMjM4ODEpICYjNDM7PSB0cHMyMzg4MS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBQU0UgQ29udHJvbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyBgUFNFX0NPTlRST0xMRVJgIOKAkyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiBpdCBhbGwuIFRvIHJlYWxseSBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcyB3aXRoIHN5emthbGxlciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRyaXZlcnMgYXJlIGVuYWJsZWQsIHNvIHRoYXQgdG9vbCBjYW4gdHJpZ2dlciB0aGUgY29yZSBjb2RlLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0OgoKKiAgIGBQU0VfQ09OVFJPTExFUmAKKiAgIGBQU0VfUkVHVUxBVE9SYAoqICAgYFBTRV9QRDY5MlgwYAoqICAgYFBTRV9TSTM0NzRgCiogICBgUFNFX1RQUzIzODgxYAoKTm93LCB3aGVyZSYjMzk7cyB0aGUgbW9zdCBpbXBhY3RmdWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCB0aGUgY29kZT8gSSBzZWUgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgcHNlX3JlbGVhc2VfcGlzYCwgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgLCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBFeGNlbGxlbnQuIFRoZXNlIGFyZW4mIzM5O3QgZnVuY3Rpb25zIHRoYXQgZ2V0IGNhbGxlZCBhIHRob3VzYW5kIHRpbWVzIGEgc2Vjb25kLiBUaGV5JiMzOTtyZSBjb250cm9sLXBhdGggZnVuY3Rpb25zIGZvciBzZXR1cCwgdGVhcmRvd24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBTbywgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggaG90LXBhdGggY29kZSB0aGF0IG1pZ2h0IGJlIHVuZGVyIGludGVuc2UgcGVyZm9ybWFuY2UgcHJlc3N1cmUuIFRoZXkgYXJlIG1vcmUgbGlrZWx5IHRvIHJldmVhbCBpbnRlcmVzdGluZyBsb2dpYyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIGl0LiBJJiMzOTtsbCBzdGFydCB3aXRoIGBwc2VfcmVsZWFzZV9waXNgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIG9idmlvdXMgaXMgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2VfcmVsZWFzZV9waXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDA9c3RhdGljIGludCBvZl9sb2FkX3BzZV9waV9wYWlyc2V0cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM3LVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTM4OnN0YXRpYyB2b2lkIHBzZV9yZWxlYXNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEzOS17XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTYyPXN0YXRpYyBpbnQgb2ZfbG9hZF9wc2VfcGlzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTIzNS1vdXQ6XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoyMzY6XHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMjM3LVx0b2Zfbm9kZV9wdXQobm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTEzNj12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0NS1cdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTQ2Olx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNDctXHRrZmlmb19mcmVlKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl9maWZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFBTRSBSZWxlYXNlIFBJUyBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGBwc2VfcmVsZWFzZV9waXNgIOKAkyB0aGF0JiMzOTtzIGEgc29saWQgZm9jdXMgc3ltYm9sLiBHb29kIGNob2ljZS4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBvcmdhbml6ZWQ6CgoqICAgYHBzZV9yZWxlYXNlX3Bpc2AKKiAgIGBwc2VfcGlfaXNfZW5hYmxlZGAKKiAgIGBwc2VfcGlfZW5hYmxlYAoqICAgYHBzZV9waV9kaXNhYmxlYAoqICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgCgpSaWdodCwgdGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIGluIHRoaXMgYXJlYT8gTm8sIGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCB0aG9zZSBmaXZlLiBHb29kLgoKTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIExldCBtZSBjaGVjazogYFBTRV9DT05UUk9MTEVSYCBkZXBlbmRzIG9uIGBORVRgIGFuZCBgUEhZTElCYCwgY29ycmVjdD8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMuIE9rYXksIGJhY2sgdG8gYGRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnYCBmb3IgYW5vdGhlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IGRyaXZlcnNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBQU0VfQ09OVFJPTExFUlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB1bnN1cmUsIHNheSBuby5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBQU0VfQ09OVFJPTExFUlxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBQU0VfUkVHVUxBVE9SXG4gIDE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWd1bGF0b3IgYmFzZWQgUFNFIGNvbnRyb2xsZXJcJiMzNDtcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxuICAyMDpcdFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXG4gIDIxOlx0XHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFBTRV9QRDY5MlgwXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQRDY5MlgwIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICAyNjpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAyNzpcdFx0c2VsZWN0IEZXX1VQTE9BRFxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxuICAzMDpcdFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAzMzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGQ2OTJ4MC5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgUFNFX1NJMzQ3NFxuICAzNjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2kzNDc0IFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBTaTM0NzQgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XG4gIDQwOlx0XHQgIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudC5cbiAgNDE6XHRcdCAgT25seSA0LXBhaXIgUFNFIGNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICA0NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2kzNDc0LlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBQU0VfVFBTMjM4ODFcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RQUzIzODgxIFBTRSBjb250cm9sbGVyXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEkyQ1xuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBUUFMyMzg4MSByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMjkKCQkJCQkJCW91dHB1dDogMjU0CgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQU0UgQ29udHJvbGxlciBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCB0aGUgYFBTRV9DT05UUk9MTEVSYCByZWxpZXMgaGVhdmlseSBvbiBgUkVHVUxBVE9SYC4gIE9mIGNvdXJzZSwgdGhlIHNwZWNpZmljIGRyaXZlcnMgYWxzbyBkZXBlbmQgb24gYEkyQ2Ag4oCTIHN0YW5kYXJkIHN0dWZmIGZvciBzeXprYWxsZXIsIHVzdWFsbHkgYWxyZWFkeSBlbmFibGVkLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSwgc28gSSYjMzk7bGwgbGlzdCBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDoKCiogICBgUFNFX0NPTlRST0xMRVJgCiogICBgUFNFX1JFR1VMQVRPUmAKKiAgIGBQU0VfUEQ2OTJYMGAKKiAgIGBQU0VfU0kzNDc0YAoqICAgYFBTRV9UUFMyMzg4MWAKClRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlIGluIHRoZSBQU0UgY29udHJvbGxlciBmcmFtZXdvcmsuIEl0JiMzOTtzIHRoYXQgY2xhc3NpYyByYWNlIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yJiMzOTtzIGRlZmVycmVkIGRpc2FibGUgZmx1c2hpbmcgcHJvY2Vzcy4gVGhlIGZsdXNoIGlzIHRyeWluZyB0byBhY2Nlc3MgYHBjZGV2LSZndDtwaWAgYWZ0ZXIgaXQmIzM5O3MgYmVlbiBmcmVlZC4gVGhlIHBhdGNoJiMzOTtzIGZpeCBpbnZvbHZlcyBudWxsIGNoZWNrcyBhbmQgcmVvcmRlcmluZyB0aGUgdGVhcmRvd24gdG8gcHJldmVudCB0aGlzLgoKVGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgdGhlIFBTRSBjb3JlIGFuZCBkcml2ZXJzLCBsaWtlIHRoZSBJMkMtYmFzZWQgUEQ2OTJ4MCwgYXJlIGFjY2Vzc2libGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgV2UgY2FuIGZ1enogdGhlbSBieSBjcmVhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgZnVuY3Rpb25zIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAuIFRoZXkgYXJlIHN0YXRpYyB0byBgcHNlX2NvcmUuY2AuIFRoaXMgaXMgcGVyZmVjdCBiZWNhdXNlIGlmIFN5emthbGxlciB0cmlnZ2VycyB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMsIGl0JiMzOTtsbCBjb3ZlciB0aG9zZSBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gV2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGNvdmVyYWdlIHRvIHZhbGlkYXRlIHRoaXMgZml4LgoKSSYjMzk7bSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BTRV9QRDY5MlgwJiMzNDssCiAgICAmIzM0O1BTRV9TSTM0NzQmIzM0OywKICAgICYjMzQ7UFNFX1RQUzIzODgxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNlX3JlbGVhc2VfcGlzJiMzNDssCiAgICAmIzM0O3BzZV9waV9pc19lbmFibGVkJiMzNDssCiAgICAmIzM0O3BzZV9waV9lbmFibGUmIzM0OywKICAgICYjMzQ7cHNlX3BpX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXIgY29yZSBmcmFtZXdvcmsuIFRoZSBidWcgb2NjdXJzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGFuZCB0aGUgcmVndWxhdG9yIGNvcmUmIzM5O3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cdTAwM2VwaWAgYXJyYXkuIFRoZSBwYXRjaCBhZGRzIE5VTEwgY2hlY2tzIGFuZCByZW9yZGVycyB0ZWFyZG93biBzdGVwcyB0byBwcmV2ZW50IHRoaXMuIFRoZSBQU0UgY29yZSBhbmQgaXRzIGRyaXZlcnMgKGUuZy4sIEkyQy1iYXNlZCBQRDY5MngwKSBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBpbnN0YW50aWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlbSB2aWEgdGhlIHJlZ3VsYXRvciBvciBldGh0b29sIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtQU0VfUEQ2OTJYMCYjMzQ7LAogICAgJiMzNDtQU0VfU0kzNDc0JiMzNDssCiAgICAmIzM0O1BTRV9UUFMyMzg4MSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BzZV9yZWxlYXNlX3BpcyYjMzQ7LAogICAgJiMzNDtwc2VfcGlfaXNfZW5hYmxlZCYjMzQ7LAogICAgJiMzNDtwc2VfcGlfZW5hYmxlJiMzNDssCiAgICAmIzM0O3BzZV9waV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sbGVyX3VucmVnaXN0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJiMzOTtzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS4xOTk0ODk5NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzODMxNDQwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlBTRV9QRDY5MlgwXCIsXG4gICAgXCJQU0VfU0kzNDc0XCIsXG4gICAgXCJQU0VfVFBTMjM4ODFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgICBcInBzZV9waV9pc19lbmFibGVkXCIsXG4gICAgXCJwc2VfcGlfZW5hYmxlXCIsXG4gICAgXCJwc2VfcGlfZGlzYWJsZVwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSdzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXFx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS4xOTk0OTU0MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjc5OTAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhZmUxNTA0ZTE2ZmI3NzA0NmM3YTkzNGFhOGM0ZTMwNjc0YzMwY2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTIgMDQ6NTk6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbmluZGV4IGE1ZTZkN2IyNmI5ZmQ3Li4yMWNjYjUxNDY2MTYwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXFxuQEAgLTE0NCw3ICsxNDQsMTMgQEAgc3RhdGljIHZvaWQgcHNlX3JlbGVhc2VfcGlzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiBcXHRcXHRvZl9ub2RlX3B1dChwY2Rldi1cXHUwMDNlcGlbaV0ucGFpcnNldFsxXS5ucCk7XFxuIFxcdFxcdG9mX25vZGVfcHV0KHBjZGV2LVxcdTAwM2VwaVtpXS5ucCk7XFxuIFxcdH1cXG4rXFx0LyogRnJlZSB1bmRlciB0aGUgbG9jayBzbyB0aGUgTlVMTCBzdG9yZSBpcyBhdXRob3JpdGF0aXZlIGFnYWluc3RcXG4rXFx0ICogdGhlIHJlZ3VsYXRvciBvcHMgdGhhdCByZWFkIHBjZGV2LVxcdTAwM2VwaSB1bmRlciBwY2Rldi1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4gXFx0a2ZyZWUocGNkZXYtXFx1MDAzZXBpKTtcXG4rXFx0cGNkZXYtXFx1MDAzZXBpID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2Rldi1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00MjEsNiArNDI3LDExIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXFxuIFxcbiBcXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZwY2Rldi1cXHUwMDNlbG9jayk7XFxuK1xcdC8qIENvbnRyb2xsZXIgbWF5IGJlIHVucmVnaXN0ZXJlZCAocGNkZXYtXFx1MDAzZXBpIGZyZWVkKSBtaWQtdGVhcmRvd24uICovXFxuK1xcdGlmICghcGNkZXYtXFx1MDAzZXBpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cXHUwMDNlcGlbaWRdLnB3X2QpKSB7XFxuIFxcdFxcdHJldCA9IHBjZGV2LVxcdTAwM2VwaVtpZF0uYWRtaW5fc3RhdGVfZW5hYmxlZDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTY3NCw2ICs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbiBcXG4gXFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbitcXHQvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LVxcdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xcbitcXHRpZiAoIXBjZGV2LVxcdTAwM2VwaSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4gXFx0aWYgKHBzZV9wd19kX2lzX3N3X3B3X2NvbnRyb2wocGNkZXYsIHBjZGV2LVxcdTAwM2VwaVtpZF0ucHdfZCkpIHtcXG4gXFx0XFx0LyogTWFuYWdlIGVuYWJsZWQgc3RhdHVzIGJ5IHNvZnR3YXJlLlxcbiBcXHRcXHQgKiBSZWFsIGVuYWJsZSBwcm9jZXNzIHdpbGwgaGFwcGVuIGlmIGEgcG9ydCBpcyBjb25uZWN0ZWQuXFxuQEAgLTcwMiwxNSArNzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcXG4gc3RhdGljIGludCBwc2VfcGlfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7XFxuLVxcdHN0cnVjdCBwc2VfcGkgKnBpO1xcbiBcXHRpbnQgaWQsIHJldDtcXG4gXFxuIFxcdGlkID0gcmRldl9nZXRfaWQocmRldik7XFxuLVxcdHBpID0gXFx1MDAyNnBjZGV2LVxcdTAwM2VwaVtpZF07XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnBjZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0LyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlclxcbitcXHQgKiBwY2Rldi1cXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cXG4rXFx0ICovXFxuK1xcdGlmICghcGNkZXYtXFx1MDAzZXBpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHBpLVxcdTAwM2VhZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcXG4rXFx0XFx0cGNkZXYtXFx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcXG4gXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGNkZXYtXFx1MDAzZWxvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTExNCwxMSArMTEzNSwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuIHtcXG4tXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4tXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4rXFx0LyogU3RvcCB0aGUgSVJRIGFuZCBub3RpZmljYXRpb24gd29ya2VyIGJlZm9yZSBmcmVlaW5nIHdoYXQgdGhleVxcbitcXHQgKiByZWFjaDogYm90aCB0b3VjaCBwY2Rldi1cXHUwMDNlcGksIGFuZCB0aGUgSVJRIGFsc28gdXNlcyBwd19kLVxcdTAwM2VzdXBwbHlcXG4rXFx0ICogdGhhdCBwc2VfZmx1c2hfcHdfZHMoKSBkcm9wcy5cXG4rXFx0ICovXFxuIFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbiBcXHRcXHRkaXNhYmxlX2lycShwY2Rldi1cXHUwMDNlaXJxKTtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl93b3JrKTtcXG4rXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4rXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4gXFx0a2ZpZm9fZnJlZShcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl9maWZvKTtcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cGNkZXYtXFx1MDAzZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToxOS44MTI5NDc0NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDc2OTY3MjU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUFNFX1BENjkyWDBcIixcbiAgICBcIlBTRV9TSTM0NzRcIixcbiAgICBcIlBTRV9UUFMyMzg4MVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBzZV9yZWxlYXNlX3Bpc1wiLFxuICAgIFwicHNlX3BpX2lzX2VuYWJsZWRcIixcbiAgICBcInBzZV9waV9lbmFibGVcIixcbiAgICBcInBzZV9waV9kaXNhYmxlXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FmZTE1MDRlMTZmYjc3MDQ2YzdhOTM0YWE4YzRlMzA2NzRjMzBjY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDEyIDA0OjU5OjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuaW5kZXggYTVlNmQ3YjI2YjlmZDcuLjIxY2NiNTE0NjYxNjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG5AQCAtMTQ0LDcgKzE0NCwxMyBAQCBzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gXHRcdG9mX25vZGVfcHV0KHBjZGV2LVx1MDAzZXBpW2ldLnBhaXJzZXRbMV0ubnApO1xuIFx0XHRvZl9ub2RlX3B1dChwY2Rldi1cdTAwM2VwaVtpXS5ucCk7XG4gXHR9XG4rXHQvKiBGcmVlIHVuZGVyIHRoZSBsb2NrIHNvIHRoZSBOVUxMIHN0b3JlIGlzIGF1dGhvcml0YXRpdmUgYWdhaW5zdFxuK1x0ICogdGhlIHJlZ3VsYXRvciBvcHMgdGhhdCByZWFkIHBjZGV2LVx1MDAzZXBpIHVuZGVyIHBjZGV2LVx1MDAzZWxvY2suXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwY2Rldi1cdTAwM2VwaSk7XG4rXHRwY2Rldi1cdTAwM2VwaSA9IE5VTEw7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQyMSw2ICs0MjcsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBcbiBcdGlkID0gcmRldl9nZXRfaWQocmRldik7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuK1x0LyogQ29udHJvbGxlciBtYXkgYmUgdW5yZWdpc3RlcmVkIChwY2Rldi1cdTAwM2VwaSBmcmVlZCkgbWlkLXRlYXJkb3duLiAqL1xuK1x0aWYgKCFwY2Rldi1cdTAwM2VwaSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbiBcdGlmIChwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHBjZGV2LCBwY2Rldi1cdTAwM2VwaVtpZF0ucHdfZCkpIHtcbiBcdFx0cmV0ID0gcGNkZXYtXHUwMDNlcGlbaWRdLmFkbWluX3N0YXRlX2VuYWJsZWQ7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTY3NCw2ICs2ODUsMTEgQEAgc3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIFxuIFx0aWQgPSByZGV2X2dldF9pZChyZGV2KTtcbiBcdG11dGV4X2xvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4rXHQvKiBDb250cm9sbGVyIG1heSBiZSB1bnJlZ2lzdGVyZWQgKHBjZGV2LVx1MDAzZXBpIGZyZWVkKSBtaWQtdGVhcmRvd24uICovXG4rXHRpZiAoIXBjZGV2LVx1MDAzZXBpKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4gXHRpZiAocHNlX3B3X2RfaXNfc3dfcHdfY29udHJvbChwY2RldiwgcGNkZXYtXHUwMDNlcGlbaWRdLnB3X2QpKSB7XG4gXHRcdC8qIE1hbmFnZSBlbmFibGVkIHN0YXR1cyBieSBzb2Z0d2FyZS5cbiBcdFx0ICogUmVhbCBlbmFibGUgcHJvY2VzcyB3aWxsIGhhcHBlbiBpZiBhIHBvcnQgaXMgY29ubmVjdGVkLlxuQEAgLTcwMiwxNSArNzE4LDIwIEBAIHN0YXRpYyBpbnQgcHNlX3BpX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldilcbiBzdGF0aWMgaW50IHBzZV9waV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxuIHtcbiBcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTtcbi1cdHN0cnVjdCBwc2VfcGkgKnBpO1xuIFx0aW50IGlkLCByZXQ7XG4gXG4gXHRpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpO1xuLVx0cGkgPSBcdTAwMjZwY2Rldi1cdTAwM2VwaVtpZF07XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBjZGV2LVx1MDAzZWxvY2spO1xuK1x0LyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlclxuK1x0ICogcGNkZXYtXHUwMDNlcGkgaXMgZnJlZWQgb24gdW5yZWdpc3Rlci5cbitcdCAqL1xuK1x0aWYgKCFwY2Rldi1cdTAwM2VwaSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cGNkZXYtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFx0cmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7XG4gXHRpZiAoIXJldClcbi1cdFx0cGktXHUwMDNlYWRtaW5fc3RhdGVfZW5hYmxlZCA9IDA7XG4rXHRcdHBjZGV2LVx1MDAzZXBpW2lkXS5hZG1pbl9zdGF0ZV9lbmFibGVkID0gMDtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2Rldi1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTExMTQsMTEgKzExMzUsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiB7XG4tXHRwc2VfZmx1c2hfcHdfZHMocGNkZXYpO1xuLVx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcbitcdC8qIFN0b3AgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyB3aGF0IHRoZXlcbitcdCAqIHJlYWNoOiBib3RoIHRvdWNoIHBjZGV2LVx1MDAzZXBpLCBhbmQgdGhlIElSUSBhbHNvIHVzZXMgcHdfZC1cdTAwM2VzdXBwbHlcbitcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXG4rXHQgKi9cbiBcdGlmIChwY2Rldi1cdTAwM2VpcnEpXG4gXHRcdGRpc2FibGVfaXJxKHBjZGV2LVx1MDAzZWlycSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnBjZGV2LVx1MDAzZW50Zl93b3JrKTtcbitcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4rXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0a2ZpZm9fZnJlZShcdTAwMjZwY2Rldi1cdTAwM2VudGZfZmlmbyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcdGxpc3RfZGVsKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6MTkuODEyOTQ4NzMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzMTg5ODg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQU0UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY2AuIExvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBOVUxMIGNoZWNrcyBhcm91bmQgYHBjZGV2LVx1MDAzZXBpYCB3aXRoaW4gYSBmZXcgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBUaGF0J3MgYSBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBwcmFjdGljZSwgSSBhbHdheXMgYXBwcmVjaWF0ZSB0aGF0LiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGBwc2VfcmVsZWFzZV9waXNgIHRvIHNldCBgcGNkZXYtXHUwMDNlcGlgIHRvIE5VTEwsIGFsbCB3aXRoaW4gdGhlIHByb3RlY3Rpb24gb2YgYHBjZGV2LVx1MDAzZWxvY2tgLiBUaGF0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGlzc3VlIHdhcyBpZGVudGlmaWVkIGFuZCB0aGUgbG9jayBhZGRlZCB0byBwcm90ZWN0IGl0LiBHb29kIGNhdGNoIHRoZXJlLiBGaW5hbGx5LCBJIHNlZSBzb21lIHJlb3JkZXJpbmcgaGFwcGVuaW5nIGluIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHdoYXQgZXhhY3RseSBpcyB0aGlzIFwiUFNFXCIgdGhpbmc/IExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeS4gQWgsIHJpZ2h0LCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHRoZSBQb3dlciBvdmVyIEV0aGVybmV0IHNpZGUgb2YgdGhpbmdzLiBPa2F5LCBub3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBJdCBsb29rcyBsaWtlIGl0J3MgYSBzdWJzeXN0ZW0gZm9yIFBTRSBjb250cm9sbGVycywgd2hpY2ggKmNvdWxkKiBiZSBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXR0YWNrIHN1cmZhY2VzIGhlcmUuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBnaXZlIHVzIGEgZ29vZCBpZGVhIG9mIHdoYXQncyBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzc3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6MjQuNjQ0ODUwNTUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjkzMjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFNFX0NPTlRST0xMRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzo2Om1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OToyNC43NDc3OTAwNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg5MDk5MDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERyaXZlciBMYW5kc2NhcGUgZm9yIFBTRSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgcHJhY3RpY2FsaXRpZXMuIFRoZSBjb3JlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgc3VwcG9ydCwgb3IgcmF0aGVyIHRoZSBsYWNrIHRoZXJlb2YsIGluIHRoZSBjb250ZXh0IG9mIFBTRSAoUG93ZXIgU3lzdGVtIEVuZ2luZWVyaW5nKSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCBleGlzdGluZyBkcml2ZXJzLCBsaWJyYXJpZXMsIG9yIEFQSXMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoZXJlIHRoZSBnYXBzIGFyZS5cblxuV2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBhIGZldyBhbmdsZXMgaGVyZS4gRmlyc3QsIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgbWF5YmUgc3BlY2lmaWMgY2hpcHNldHMgb3IgaW50ZXJmYWNlcy4gVGhlbiwgbW9yZSBhYnN0cmFjdCBsZXZlbHMg4oCTIHBvd2VyIG1hbmFnZW1lbnQgZnJhbWV3b3JrcyBvciBzdGFuZGFyZCBwcm90b2NvbHMgd2UgY2FuIGxldmVyYWdlLiBBcmUgdGhlcmUgcHJlLWJ1aWx0IGRyaXZlcnMgZm9yIHRoZSBwYXJ0aWN1bGFyIGhhcmR3YXJlLCBvciBhcmUgd2Ugc3RhcmluZyBkb3duIGEgY3VzdG9tIGRyaXZlciBkZXZlbG9wbWVudCBwcm9qZWN0PyBBbmQgd2hhdCBhYm91dCB0aGUgc29mdHdhcmUgc2lkZT8gQXJlIHRoZSBkcml2ZXJzIGRlc2lnbmVkIHdlbGwgdG8gaGFuZGxlIGNvbXBsZXggY2FsY3VsYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zP1xuXG5UaGlzIGFsc28gdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFdpbGwgdGhlIGRyaXZlcnMgYmUgaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHRoZSBPUywgb3IgYmUgaGFuZGxlZCB0aHJvdWdoIGEgZGVkaWNhdGVkIGNvbnRyb2xsZXI/IEhvdyBkbyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSBjb250cm9sIHN5c3RlbT8gSXMgdGhlcmUgYSBuZWVkIGZvciBzb21lIHNvcnQgb2YgbWlkZGxlLXdhcmUsIHNvIHRoZSBkcml2ZXJzIGFyZSBwb3J0YWJsZT8gVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYW4gaW5mb3JtZWQgcGxhbiBmb3IgZGV2ZWxvcG1lbnQuIFRoaXMgaW5mb3JtYXRpb24gb24gdGhlIGRyaXZlcnMgd2lsbCBkaXJlY3RseSBpbmZsdWVuY2UgbXkgZGVzaWduIGNob2ljZXMgZm9yIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoZSBvcHRpb25zIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjM1LjYzODc4Mzk5NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9wc2UtcGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwicGQ2OTJ4MC5jXCIsXG4gICAgXCJwc2VfY29yZS5jXCIsXG4gICAgXCJwc2VfcmVndWxhdG9yLmNcIixcbiAgICBcInNpMzQ3NC5jXCIsXG4gICAgXCJ0cHMyMzg4MS5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjM1LjYzODg1NjE1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzA4NDQ1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgSGFyZHdhcmUgRHJpdmVyIFN1YnN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMuLi4gaXQncyBjbGVhcmx5IGEgaGFyZHdhcmUgZHJpdmVyIHN1YnN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMsIFwiQ2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoaXMgZnJvbSB1c2VyIHNwYWNlP1wiIEl0J3MgY3J1Y2lhbCBmb3IgbW9zdCBvZiB3aGF0IEkgZG8uIE5vdywgdG8gZmlndXJlIHRoYXQgb3V0LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgcHNlX2NvcmUuY2AgZmlsZS4gVGhhdCdzIHRoZSB1c3VhbCBwbGFjZSB0byBmaW5kIHRoZSB1c2VyIHNwYWNlIGludGVyZmFjZXMsIGlmIGFueSBleGlzdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjQzLjMwOTcwMjk5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4MjA1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBzZV9waV9pc19lbmFibGVkfHBzZV9waV9lbmFibGV8cHNlX3BpX2Rpc2FibGUpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTQwMz1zdGF0aWMgYm9vbCBwc2VfcHdfZF9pc19zd19wd19jb250cm9sKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDE3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQxODpzdGF0aWMgaW50IHBzZV9waV9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz00NTI9c3RhdGljIHZvaWQgcHNlX3BpX2RlYWxsb2NhdGVfcHdfYnVkZ2V0KHN0cnVjdCBwc2VfcGkgKnBpKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDYxLS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjQ2MjogKiBfcHNlX3BpX2Rpc2FibGUgLSBDYWxsIGRpc2FibGUgb3BlcmF0aW9uLiBBc3N1bWVzIHRoZSBQU0UgbG9jayBoYXMgYmVlblxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTQ2My0gKlxcdFxcdCAgICAgYWNxdWlyZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy00NjgtICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NDY5OnN0YXRpYyBpbnQgX3BzZV9waV9kaXNhYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNDcwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTQ5Nj1zdGF0aWMgaW50IHBzZV9kaXNhYmxlX3BpX3BvbChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiwgaW50IGlkKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNTAzLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjUwNDpcXHRyZXQgPSBfcHNlX3BpX2Rpc2FibGUocGNkZXYsIGlkKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy01MDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTYyND1zdGF0aWMgaW50IF9wc2VfcGlfZGVsaXZlcnlfcG93ZXJfc3dfcHdfY3RybChzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3NS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo2NzY6c3RhdGljIGludCBwc2VfcGlfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy03MTctXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NzE4OnN0YXRpYyBpbnQgcHNlX3BpX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtNzE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMS1cXHR9XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6NzMyOlxcdHJldCA9IF9wc2VfcGlfZGlzYWJsZShwY2RldiwgaWQpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTczMy1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTg0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9vcHMgcHNlX3BpX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDI6XFx0LmlzX2VuYWJsZWQgPSBwc2VfcGlfaXNfZW5hYmxlZCxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzo4NDM6XFx0LmVuYWJsZSA9IHBzZV9waV9lbmFibGUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODQ0OlxcdC5kaXNhYmxlID0gcHNlX3BpX2Rpc2FibGUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODQ1LVxcdC5nZXRfdm9sdGFnZSA9IHBzZV9waV9nZXRfdm9sdGFnZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEyMjk9c3RhdGljIGludCBwc2Vfc2V0X2NvbmZpZ19pc3Ioc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEyNTgtXFx0XFx0ICAgIHBjZGV2LVxcdTAwM2VwaVtpZF0uaXNyX3BkX2RldGVjdGVkKVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEyNTk6XFx0XFx0XFx0cmV0ID0gX3BzZV9waV9kaXNhYmxlKHBjZGV2LCBpZCk7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTI2MC1cXHRcXHRwY2Rldi1cXHUwMDNlcGlbaWRdLmlzcl9wZF9kZXRlY3RlZCA9IGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OTo0My40MjM1Mjg1MDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTcxMzM3NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFJlZ3VsYXRvciBPcGVyYXRpb25zIGFuZCBQb3RlbnRpYWwgVHJpZ2dlciBNZWNoYW5pc21zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBGcm9tIHRoZSBjb2RlLCB0aGV5J3JlIGNsZWFybHkgcmVndWxhdG9yIG9wZXJhdGlvbnMuIFRoZSByZWd1bGF0b3Igc3Vic3lzdGVtIGlzIHRoZSBjb25zdW1lciBoZXJlLCBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB0byBtYW5hZ2Ugc29tZXRoaW5nLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBjYW4gd2UgaW50ZXJhY3Qgd2l0aCB0aGVzZSByZWd1bGF0b3JzPyBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb250cm9sIHBhdGhzLiBDYW4gd2UgaW50ZXJmYWNlIHZpYSBzeXNmcz8gVGhhdCdzIGFsd2F5cyB0aGUgZmlyc3QgcG9ydCBvZiBjYWxsIGZvciBsb3dlci1sZXZlbCBkZXZpY2UgY29udHJvbC4gT3IsIHBlcmhhcHMsIGlzIHRoZXJlIGEgTmV0bGluayBpbnRlcmZhY2UgaW52b2x2ZWQ/IExvb2tpbmcgYXQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbSwgdGhlIFBTRSBzdWJzeXN0ZW0gKmRvZXMqIGV4cG9zZSBOZXRsaW5rIGludGVyZmFjZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGV0aHRvb2wuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwb2ludHMgdG93YXJkcyB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgZXRodG9vbCBjb21tYW5kcyB0byB0cmlnZ2VyIHJlZ3VsYXRvciBhY3Rpb25zIGluZGlyZWN0bHkuIFdlIG1heSBiZSBhYmxlIHRvIGxldmVyYWdlIGV4aXN0aW5nIFBTRSBuZXRsaW5rIGluZnJhc3RydWN0dXJlIHRvIGNvbnRyb2wgdGhpcyByZWd1bGF0b3IgaW5kaXJlY3RseS4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBhdmVudWUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjQ2Ljk5NDg2OTEyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTM2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtOC0jaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTE1OTU9c3RhdGljIHZvaWQgcHNlX2dldF9zd19hZG1pbl9zdGF0ZShzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjE4LS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2MTk6ICogcHNlX2V0aHRvb2xfZ2V0X3N0YXR1cyAtIGdldCBzdGF0dXMgb2YgUFNFIGNvbnRyb2xcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjIwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNjI1LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2MjY6aW50IHBzZV9ldGh0b29sX2dldF9zdGF0dXMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE2MjctXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE2Mjg6XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcHNlX2NvbnRyb2xfc3RhdHVzICpzdGF0dXMpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTYyOS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzMzLX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzM0OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX2dldF9zdGF0dXMpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3MzUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTczNjpzdGF0aWMgaW50IHBzZV9ldGh0b29sX2MzM19zZXRfY29uZmlnKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xNzM3LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBwc2VfY29udHJvbF9jb25maWcgKmNvbmZpZylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3NzAtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTc3MTpzdGF0aWMgaW50IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTc3Mi1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHBzZV9jb250cm9sX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTc5NS0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxNzk2OiAqIHBzZV9ldGh0b29sX3NldF9jb25maWcgLSBzZXQgUFNFIGNvbnRyb2wgY29uZmlndXJhdGlvblxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE3OTctICogQHBzZWM6IFBTRSBjb250cm9sIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MDItICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgwMzppbnQgcHNlX2V0aHRvb2xfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTgwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODA5LVxcdGlmIChwc2VfaGFzX2MzMyhwc2VjKSBcXHUwMDI2XFx1MDAyNiBjb25maWctXFx1MDAzZWMzM19hZG1pbl9jb250cm9sKSB7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTgxMDpcXHRcXHRlcnIgPSBwc2VfZXRodG9vbF9jMzNfc2V0X2NvbmZpZyhwc2VjLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTUtXFx0aWYgKHBzZV9oYXNfcG9kbChwc2VjKSBcXHUwMDI2XFx1MDAyNiBjb25maWctXFx1MDAzZXBvZGxfYWRtaW5fY29udHJvbClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxODE2OlxcdFxcdGVyciA9IHBzZV9ldGh0b29sX3BvZGxfc2V0X2NvbmZpZyhwc2VjLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MTctXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODE5LX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxODIwOkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9jb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4MjEtXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xODMyPXN0YXRpYyBpbnQgcHNlX3BpX3VwZGF0ZV9wd19idWRnZXQoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE4NjgtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTg2OTogKiBwc2VfZXRodG9vbF9zZXRfcHdfbGltaXQgLSBzZXQgUFNFIGNvbnRyb2wgcG93ZXIgbGltaXRcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODcwLSAqIEBwc2VjOiBQU0UgY29udHJvbCBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xODc1LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE4NzY6aW50IHBzZV9ldGh0b29sX3NldF9wd19saW1pdChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTg3Ny1cXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjUtfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE5MjY6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2V0aHRvb2xfc2V0X3B3X2xpbWl0KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTI3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTE5MjgtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTkyOTogKiBwc2VfZXRodG9vbF9zZXRfcHJpbyAtIFNldCBQU0UgUEkgcHJpb3JpdHkgYWNjb3JkaW5nIHRvIHRoZSBidWRnZXRcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTMwLSAqXFx0XFx0XFx0ICBldmFsdWF0aW9uIHN0cmF0ZWd5XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM2LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjE5Mzc6aW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTM4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTk1LX1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxOTk2OkVYUE9SVF9TWU1CT0xfR1BMKHBzZV9ldGh0b29sX3NldF9wcmlvKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xOTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNDo1OTo0Ny4xMjI4MTE4NzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NjMwOTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBTRSBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGV0aHRvb2xgIG5ldGxpbmsgaW50ZXJmYWNlOyBpdCBzZWVtcyBJIGNhbiBjb25maWd1cmUgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50IChQU0UpIHRocm91Z2ggaXQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSAqdHJpZ2dlciogdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbj8gSXQncyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gYSBkcml2ZXIgaXMgdW5ib3VuZCwgb3IgYSBtb2R1bGUgaXMgdW5sb2FkZWQuIFRoZSBwbGFuIHRoZW4gaXMsIGlmIEkgY2FuIHNvbWVob3cgYmluZCBhbmQgdW5iaW5kIGEgUFNFIGRyaXZlciDigJMgc29tZXRoaW5nIGxpa2UgYHBkNjkyeDBgIG9yIGB0cHMyMzg4MWAg4oCTIEkgKnNob3VsZCogYmUgYWJsZSB0byBnZXQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIHRvIGZpcmUuIFRoZSBuZXh0IHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgZG9uZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBcmUgdGhlcmUgYW55IHZpcnR1YWwgb3IgbW9jayBQU0UgZHJpdmVycyBJIGNhbiBsZXZlcmFnZSBmb3IgdGhpcyB0ZXN0aW5nPyBJIG5lZWQgdG8gY2hlY2sgYW5kIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlnIGludG8gdGhlIHN5c3RlbSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA0OjU5OjU0LjE2OTEyMzg1NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MTQyMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYz0xNzU2PXN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTgzOC1cXHRwcml2LVxcdTAwM2VwY2Rldi5waXNfcHJpb19tYXggPSAyO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTgzOTpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NDAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTEwMzM9c3RhdGljIHZvaWQgcHNlX3NlbmRfbnRmX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU0LS8qKlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNTU6ICogcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIGRldmljZVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTYtICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA1OS0gKi9cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMDYwOmludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMjktfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExMzA6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTU0PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNTktLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2MDogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2MS0gKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBTRSBjb250cm9sbGVyXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYzLSAqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NDogKiBNYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkuIEZvciBQU0UgY29udHJvbGxlcnMgcmVnaXN0ZXJlZCBieVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjUtICogdGhpcyBmdW5jdGlvbiwgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE2NjogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY3LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTY5LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNzA6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzEtXFx0XFx0XFx0XFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOlxcdHJldCA9IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTEtfVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTI6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5My1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjYtXFx0cHJpdi1cXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTI3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQyLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0NC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYz0xNDMwPXN0YXRpYyBpbnQgdHBzMjM4ODFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVxcdHByaXYtXFx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9TVEFUSUM7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE4LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDQ6NTk6NTQuMzE0Mjc1NTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDkzMzQwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGZpbGUgY2FsbGVkIGBwc2VfcmVndWxhdG9yLmNgLiBGcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLiBJdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN1cHBseSBlbGVtZW50cyByZWxhdGVkIHRvIHNvbWV0aGluZyB0aGF0IGFwcGVhcnMgdG8gYmUgcmVsYXRlZCB0byBcIlBTRSxcIiB3aGljaCBjb3VsZCBtZWFuIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCwgb3IgcGVyaGFwcyBhIGNvbXBvbmVudCB3aXRoIGEgc2ltaWxhciBuYW1lLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgd2l0aGluIGBwc2VfcmVndWxhdG9yLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MDIuMDIzNjEyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNDMyODgxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2VfcmVndWxhdG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjAyLjEyNTA1NDI0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjI1NjY4MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlJlZmxlY3Rpbmcgb24gdGhlIE1ldGhvZCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB1c2luZyBgcHNlX3JlZ3VsYXRvcmAgZm9yIHRoaXMgdGFzay4gQnV0IGxldCdzIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLiBJbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHJlbHlpbmcgb24gdGhhdCwgcGVyaGFwcyBJIHNob3VsZCBqdXN0IGdvIHN0cmFpZ2h0IHRvIHJlYWRpbmcgdGhlIGRhdGEgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAsIGFuZCBpdCBtaWdodCByZXZlYWwgZXZlcnl0aGluZyBJIG5lZWQgd2l0aG91dCBuZWVkaW5nIGEgbW9yZSBlbGFib3JhdGUgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZSBiZWZvcmUgSSBnZXQgYWhlYWQgb2YgbXlzZWxmLiBFZmZpY2llbmN5IGlzIGtleSwgcmlnaHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoxMS43NTA3MjU3MjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Ly9cXG4gICAzOlxcdC8vIERyaXZlciBmb3IgdGhlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQsIHdpdGhvdXRcXG4gICA0OlxcdC8vIGF1dG8gY2xhc3NpZmljYXRpb24gc3VwcG9ydC5cXG4gICA1OlxcdC8vXFxuICAgNjpcXHQvLyBDb3B5cmlnaHQgKGMpIDIwMjIgUGVuZ3V0cm9uaXgsIE9sZWtzaWogUmVtcGVsIFxcdTAwM2NrZXJuZWxAcGVuZ3V0cm9uaXguZGVcXHUwMDNlXFxuICAgNzpcXHQvL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdHN0cnVjdCBwc2VfcmVnX3ByaXYge1xcbiAgMTY6XFx0XFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiBwY2RldjtcXG4gIDE3OlxcdFxcdHN0cnVjdCByZWd1bGF0b3IgKnBzOyAvKnBvd2VyIHNvdXJjZSAqL1xcbiAgMTg6XFx0XFx0ZW51bSBldGh0b29sX3BvZGxfcHNlX2FkbWluX3N0YXRlIGFkbWluX3N0YXRlO1xcbiAgMTk6XFx0fTtcXG4gIDIwOlxcdFxcbiAgMjE6XFx0c3RhdGljIHN0cnVjdCBwc2VfcmVnX3ByaXYgKnRvX3BzZV9yZWcoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuICAyMjpcXHR7XFxuICAyMzpcXHRcXHRyZXR1cm4gY29udGFpbmVyX29mKHBjZGV2LCBzdHJ1Y3QgcHNlX3JlZ19wcml2LCBwY2Rldik7XFxuICAyNDpcXHR9XFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBpbnRcXG4gIDI3OlxcdHBzZV9yZWdfcGlfZW5hYmxlKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQpXFxuICAyODpcXHR7XFxuICAyOTpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2ID0gdG9fcHNlX3JlZyhwY2Rldik7XFxuICAzMDpcXHRcXHRpbnQgcmV0O1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXFx1MDAzZXBzKTtcXG4gIDMzOlxcdFxcdGlmIChyZXQpXFxuICAzNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHRwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRU5BQkxFRDtcXG4gIDM3OlxcdFxcdHJldHVybiAwO1xcbiAgMzg6XFx0fVxcbiAgMzk6XFx0XFxuICA0MDpcXHRzdGF0aWMgaW50XFxuICA0MTpcXHRwc2VfcmVnX3BpX2Rpc2FibGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZClcXG4gIDQyOlxcdHtcXG4gIDQzOlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXFx1MDAzZXBzKTtcXG4gIDQ3OlxcdFxcdGlmIChyZXQpXFxuICA0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRwcml2LVxcdTAwM2VhZG1pbl9zdGF0ZSA9IEVUSFRPT0xfUE9ETF9QU0VfQURNSU5fU1RBVEVfRElTQUJMRUQ7XFxuICA1MTpcXHRcXHRyZXR1cm4gMDtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIGludFxcbiAgNTU6XFx0cHNlX3JlZ19waV9nZXRfYWRtaW5fc3RhdGUoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsIGludCBpZCxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwc2VfYWRtaW5fc3RhdGUgKmFkbWluX3N0YXRlKVxcbiAgNTc6XFx0e1xcbiAgNTg6XFx0XFx0c3RydWN0IHBzZV9yZWdfcHJpdiAqcHJpdiA9IHRvX3BzZV9yZWcocGNkZXYpO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRhZG1pbl9zdGF0ZS1cXHUwMDNlcG9kbF9hZG1pbl9zdGF0ZSA9IHByaXYtXFx1MDAzZWFkbWluX3N0YXRlO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRyZXR1cm4gMDtcXG4gIDYzOlxcdH1cXG4gIDY0OlxcdFxcbiAgNjU6XFx0c3RhdGljIGludFxcbiAgNjY6XFx0cHNlX3JlZ19waV9nZXRfcHdfc3RhdHVzKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuICA2NzpcXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9wd19zdGF0dXMgKnB3X3N0YXR1cylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCBwc2VfcmVnX3ByaXYgKnByaXYgPSB0b19wc2VfcmVnKHBjZGV2KTtcXG4gIDcwOlxcdFxcdGludCByZXQ7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKHByaXYtXFx1MDAzZXBzKTtcXG4gIDczOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0aWYgKCFyZXQpXFxuICA3NzpcXHRcXHRcXHRwd19zdGF0dXMtXFx1MDAzZXBvZGxfcHdfc3RhdHVzID1cXG4gIDc4OlxcdFxcdFxcdFxcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfRElTQUJMRUQ7XFxuICA3OTpcXHRcXHRlbHNlXFxuICA4MDpcXHRcXHRcXHRwd19zdGF0dXMtXFx1MDAzZXBvZGxfcHdfc3RhdHVzID1cXG4gIDgxOlxcdFxcdFxcdFxcdEVUSFRPT0xfUE9ETF9QU0VfUFdfRF9TVEFUVVNfREVMSVZFUklORztcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0cmV0dXJuIDA7XFxuICA4NDpcXHR9XFxuICA4NTpcXHRcXG4gIDg2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfb3BzIHBzZV9yZWdfb3BzID0ge1xcbiAgODc6XFx0XFx0LnBpX2dldF9hZG1pbl9zdGF0ZSA9IHBzZV9yZWdfcGlfZ2V0X2FkbWluX3N0YXRlLFxcbiAgODg6XFx0XFx0LnBpX2dldF9wd19zdGF0dXMgPSBwc2VfcmVnX3BpX2dldF9wd19zdGF0dXMsXFxuICA4OTpcXHRcXHQucGlfZW5hYmxlID0gcHNlX3JlZ19waV9lbmFibGUsXFxuICA5MDpcXHRcXHQucGlfZGlzYWJsZSA9IHBzZV9yZWdfcGlfZGlzYWJsZSxcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0YXRpYyBpbnRcXG4gIDk0OlxcdHBzZV9yZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgcHNlX3JlZ19wcml2ICpwcml2O1xcbiAgOTg6XFx0XFx0aW50IHJldDtcXG4gIDk5OlxcdFxcbiAxMDA6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MTEuNzUwODQ3NzE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc5NjU0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcHNlX3JlZ3VsYXRvcmAgRHJpdmVyIGFuZCBTeXprYWxsZXIncyBQb3RlbnRpYWwgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwc2VfcmVndWxhdG9yYCBkcml2ZXIuIFJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0J3Mga2V5LiBQbGF0Zm9ybSBkcml2ZXJzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluIHRoZWlyIGRldmljZSBtYXRjaGluZzsgdGhleSByZWx5IG9uIGRldmljZSB0cmVlIG5vZGVzIG9yLCBpbiBzb21lIGNhc2VzLCBkaXJlY3QgZGV2aWNlIGNyZWF0aW9uIHZpYSBvdGhlciBtZWNoYW5pc21zLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgd2l0aCBTeXprYWxsZXIuIEkga25vdyBTeXprYWxsZXIgaGFzIHRoZSBhYmlsaXR5IHRvIHNwaW4gdXAgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWAg4oCTIHdoaWNoIEkgYmVsaWV2ZSBkaXJlY3RseSBjYWxscyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIEFQSSB0byBjcmVhdGUgYSBkZXZpY2Ug4oCTIG9yLCBtb3JlIHN1YnRseSwgYnkgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzLiBJdCBjYW4gYmUgYSBwcmV0dHkgdmVyc2F0aWxlIHRvb2wuXG5cbldhaXQgYSBzZWNvbmTigKYgc2luY2UgYHBzZV9yZWd1bGF0b3JgIGlzIGEgKnBsYXRmb3JtKiBkcml2ZXIsIHRoZSBtb3N0IGxpa2VseSBhdmVudWUgZm9yIFN5emthbGxlciB0byB0cmlnZ2VyIGEgcHJvYmUgd291bGQgYmUgdGhyb3VnaCBhIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nIGluIGEgZGV2aWNlIHRyZWUgbm9kZS4gSXQgbWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgc3RhbmRhcmQgZm9yIHBsYXRmb3JtIGRyaXZlcnMuIElmIFN5emthbGxlciBjcmFmdHMgYSBkZXZpY2UgdHJlZSBlbnRyeSB3aXRoIHRoZSBjb3JyZWN0IGNvbXBhdGlibGUgc3RyaW5nLCB0aGUga2VybmVsIHNob3VsZCBwcm9iZSB0aGUgYHBzZV9yZWd1bGF0b3JgIGRyaXZlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgY29tcGF0aWJsZSBzdHJpbmcgaXMsIGlmIEkgd2FudCB0byB0YXJnZXQgdGhpcyBkcml2ZXIgd2l0aCBTeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTM2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoxNS40NDg4MTU2MTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHRpZiAoIXByaXYpXFxuIDEwMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0aWYgKCFwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSlcXG4gMTA1OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMDY6XFx0XFxuIDEwNzpcXHRcXHRwcml2LVxcdTAwM2VwcyA9IGRldm1fcmVndWxhdG9yX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicHNlXFxcIik7XFxuIDEwODpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXBzKSlcXG4gMTA5OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVxcdTAwM2VwcyksXFxuIDExMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IFBTRSByZWd1bGF0b3IuXFxcXG5cXFwiKTtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdHJldCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKHByaXYtXFx1MDAzZXBzKTtcXG4gMTE1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0aWYgKHJldClcXG4gMTE5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWFkbWluX3N0YXRlID0gRVRIVE9PTF9QT0RMX1BTRV9BRE1JTl9TVEFURV9FTkFCTEVEO1xcbiAxMjA6XFx0XFx0ZWxzZVxcbiAxMjE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlYWRtaW5fc3RhdGUgPSBFVEhUT09MX1BPRExfUFNFX0FETUlOX1NUQVRFX0RJU0FCTEVEO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5vd25lciA9IFRISVNfTU9EVUxFO1xcbiAxMjQ6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYub3BzID0gXFx1MDAyNnBzZV9yZWdfb3BzO1xcbiAxMjU6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYuZGV2ID0gZGV2O1xcbiAxMjY6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYudHlwZXMgPSBFVEhUT09MX1BTRV9QT0RMO1xcbiAxMjc6XFx0XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuIDEyODpcXHRcXHRpZiAocmV0KSB7XFxuIDEyOTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBQU0UgY29udHJvbGxlciAoJXBlKVxcXFxuXFxcIixcXG4gMTMwOlxcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuIDEzMTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzI6XFx0XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRyZXR1cm4gMDtcXG4gMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGNvbnN0IF9fbWF5YmVfdW51c2VkIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHNlX3JlZ19vZl9tYXRjaFtdID0ge1xcbiAxMzg6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJwb2RsLXBzZS1yZWd1bGF0b3JcXFwiLCB9LFxcbiAxMzk6XFx0XFx0eyB9LFxcbiAxNDA6XFx0fTtcXG4gMTQxOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBzZV9yZWdfb2ZfbWF0Y2gpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcXG4gMTQ0OlxcdFxcdC5wcm9iZVxcdFxcdD0gcHNlX3JlZ19wcm9iZSxcXG4gMTQ1OlxcdFxcdC5kcml2ZXJcXHRcXHQ9IHtcXG4gMTQ2OlxcdFxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUFNFIHJlZ3VsYXRvclxcXCIsXFxuIDE0NzpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocHNlX3JlZ19vZl9tYXRjaCksXFxuIDE0ODpcXHRcXHR9LFxcbiAxNDk6XFx0fTtcXG4gMTUwOlxcdG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocHNlX3JlZ19kcml2ZXIpO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJPbGVrc2lqIFJlbXBlbCBcXHUwMDNja2VybmVsQHBlbmd1dHJvbml4LmRlXFx1MDAzZVxcXCIpO1xcbiAxNTM6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJyZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXQgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50XFxcIik7XFxuIDE1NDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuIDE1NTpcXHRNT0RVTEVfQUxJQVMoXFxcInBsYXRmb3JtOnBzZS1yZWd1bGF0b3JcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MTUuNDQ4OTI1NDcyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzgzNDg5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBhIHdheSB0byB0cmlnZ2VyIHRoZSBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGZ1bmN0aW9uLiBUaGUga2V5IHN0cmluZyBoZXJlIHNlZW1zIHRvIGJlIGBwb2RsLXBzZS1yZWd1bGF0b3JgLiBJIHdvbmRlciBpZiBTeXprYWxsZXIgY2FuIGluamVjdCB0aGlzIGRpcmVjdGx5PyBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHJpZ2h0LiBNYXliZSBgc3l6X2Rldl9jcmVhdGVgIG9yIGV2ZW4gZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24gd291bGQgYmUgcG9zc2liaWxpdGllcy4gQnV0IFN5emthbGxlciBpcyB1c3VhbGx5IGxpbWl0ZWQgaW4gZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSBkZXZpY2UgdHJlZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHNldCB1cC4gQW5kLCB3aGlsZSBgc3l6X21vdW50X2ltYWdlYCBhbmQgc2ltaWxhciBjYWxscyBleGlzdCwgaW5qZWN0aW5nIGRldmljZSB0cmVlIG5vZGVzIHRoYXQgd2F5IGlzIHVzdWFsbHkgZGlmZmljdWx0LlxuXG5Pa2F5LCBsZXQncyBleHBsb3JlIGFsdGVybmF0aXZlIG1ldGhvZHMgdG8gdHJpZ2dlciBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBBcmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlPyBJIHNlZSBhIGZldyBJMkMgZHJpdmVycyBsaXN0ZWQ6IGBwZDY5MngwLmNgLCBgc2kzNDc0LmNgLCBhbmQgYHRwczIzODgxLmNgLiBTeXprYWxsZXIgY2FuIGZ1enogSTJDIGRldmljZXMsIHJpZ2h0PyBUeXBpY2FsbHksIHRocm91Z2ggYC9kZXYvaTJjLSpgIG9yIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIGRldmljZXMgdXNpbmcgYGkyYy1zdHViYCBvciBzaW1pbGFyIHRvb2xzLCBidXQgdXN1YWxseSBJIG5lZWQgdG8gZ2V0IHRoZSBkcml2ZXIgcmVnaXN0ZXJlZC4gSXQgY2FuIG9mdGVuIGluc3RhbnRpYXRlIEkyQyBkZXZpY2VzIHZpYSBgaW9jdGwoSTJDX1JEV1IpYCBvciBuZXRsaW5rLCBidXQgdG8gdHJ1bHkgKnByb2JlKiBhIGRyaXZlciwgaXQgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCBmaXJzdC5cblxuV2FpdCBhIG1pbnV0ZSwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBjYWxscyBsaWtlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6XzgwMjExX2luamVjdF9mcmFtZWAuIEZvciBJMkMgc3BlY2lmaWNhbGx5LCBpdCBjYW4gbGlrZWx5IHVzZSBgaW9jdGwoSTJDX1NMQVZFKWAgb3IgZXZlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGBuZXdfZGV2aWNlYCB0byBpbnN0YW50aWF0ZSB0aGVzZSBJMkMgZGV2aWNlcy4gWWVzLCB0aGF0J3MgaXQhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtJWQvbmV3X2RldmljZWAgaXMgdGhlIGtleS4gSSBjYW4gdXNlIHRoaXMgdG8gaW5zdGFudGlhdGUgYW4gSTJDIGRldmljZSBhbmQsIGNydWNpYWxseSwgYmluZCBpdCB0byBhIGRyaXZlciFcblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIEkyQyBkcml2ZXJzLCBsaWtlIGBwZDY5MngwYCwgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjIuNzg3Mjc3MjA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyMDUxMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaTJjX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTg3ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwZDY5MngwX29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODc2OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwZDY5MngwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NzctXFx0LnByb2JlXFx0XFx0PSBwZDY5MngwX2kyY19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg4NC19O1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM6MTg4NTptb2R1bGVfaTJjX2RyaXZlcihwZDY5MngwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODg2LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTU2ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaTM0NzRfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NjUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU2NjpzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2kzNDc0X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTY3LVxcdC5wcm9iZSA9IHNpMzQ3NF9pMmNfcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTczLX07XFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU3NDptb2R1bGVfaTJjX2RyaXZlcihzaTM0NzRfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTc1LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM9MTU0OD1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cHMyMzg4MV9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU0OS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTUwOnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0cHMyMzg4MV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1MS1cXHQucHJvYmVcXHRcXHQ9IHRwczIzODgxX2kyY19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1NTctfTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTU4Om1vZHVsZV9pMmNfZHJpdmVyKHRwczIzODgxX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmMtMTU1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjMuMDEzNDg4MzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDQwMDM3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSTJDIERyaXZlciBJbnN0YW50aWF0aW9uIGFuZCBQb3RlbnRpYWwgRmlybXdhcmUgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIEkyQyBkcml2ZXJzIGhlcmUsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBpcyBob3cgU3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSB0aGVzZS4gUmlnaHQsIGl0J3MgdXNpbmcgYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy1YL25ld19kZXZpY2VgLCBnb3QgaXQuIFRoYXQgbWVhbnMgSSBjYW4gdHJpZ2dlciB0aGUgaW5zdGFudGlhdGlvbiBvZiBhIHNwZWNpZmljIGRldmljZSwgbGlrZSBgcGQ2OTJ4MGAsIGJ5IHdyaXRpbmcgc29tZXRoaW5nIGxpa2UgYHBkNjkyeDAgMHgxMGAgdG8gYG5ld19kZXZpY2VgLiBUaGF0IHNob3VsZCBwcm9iZSB0aGUgZHJpdmVyLCB0aGVvcmV0aWNhbGx5LlxuXG5CdXQgaGFuZyBvbi4uLiBhIHJlZCBmbGFnIGlzIGdvaW5nIHVwLiBJIG5lZWQgdG8gY29uc2lkZXIgdGhhdCBgcGQ2OTJ4MGAgbWlnaHQgYmUgYSBiaXQgbW9yZSBpbnZvbHZlZCB0aGFuIGEgc2ltcGxlIGluc3RhbnRpYXRpb24gYW5kIHByb2JlLiBJdCdzIHZlcnkgcG9zc2libGUgdGhlcmUncyBzb21lIGZpcm13YXJlIGludGVyYWN0aW9uIGludm9sdmVkLCBvciBtYXliZSBpdCBleHBlY3RzIGNlcnRhaW4gSTJDIHJlc3BvbnNlcyB0byBzdWNjZXNzZnVsbHkgcHJvYmUuIFRoaXMgaXNuJ3QgYWx3YXlzIGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MsIHlvdSBrbm93IHRoYXQuXG5cbkJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYHBkNjkyeDBfaTJjX3Byb2JlYCBhbmQgY29uZmlybSB0aG9zZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaGFzIGFueSBwcmVyZXF1aXNpdGUgZmlybXdhcmUgb3IgY29tbXVuaWNhdGlvbiBkZXBlbmRlbmNpZXMgYmVmb3JlIHJlbHlpbmcgb24gU3l6a2FsbGVyJ3MgaW5zdGFudGlhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMzcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6MjkuODE3NDk0MzgyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzU2OlxcdHN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4xNzU3OlxcdHtcXG4xNzU4OlxcdFxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yc1tdID0geyBcXFwidmRkXFxcIiwgXFxcInZkZGFcXFwiIH07XFxuMTc1OTpcXHRcXHRzdHJ1Y3QgcGQ2OTJ4MF9tc2cgbXNnLCBidWYgPSB7MH0sIHplcm8gPSB7MH07XFxuMTc2MDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXY7XFxuMTc2MTpcXHRcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpkaXNhYmxlX3BvcnRzO1xcbjE3NjI6XFx0XFx0c3RydWN0IHBkNjkyeDBfbXNnX3ZlciB2ZXI7XFxuMTc2MzpcXHRcXHRzdHJ1Y3QgcGQ2OTJ4MF9wcml2ICpwcml2O1xcbjE3NjQ6XFx0XFx0c3RydWN0IGZ3X3VwbG9hZCAqZndsO1xcbjE3NjU6XFx0XFx0aW50IHJldDtcXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0cmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXRfZW5hYmxlKGRldiwgQVJSQVlfU0laRShyZWd1bGF0b3JzKSxcXG4xNzY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgcmVndWxhdG9ycyk7XFxuMTc2OTpcXHRcXHRpZiAocmV0KVxcbjE3NzA6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuMTc3MTpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcXFxcblxcXCIpO1xcbjE3NzI6XFx0XFxuMTc3MzpcXHRcXHRpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC1cXHUwMDNlYWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkge1xcbjE3NzQ6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpMmMgY2hlY2sgZnVuY3Rpb25hbGl0eSBmYWlsZWRcXFxcblxcXCIpO1xcbjE3NzU6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4xNzc2OlxcdFxcdH1cXG4xNzc3OlxcdFxcbjE3Nzg6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjE3Nzk6XFx0XFx0aWYgKCFwcml2KVxcbjE3ODA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc4MTpcXHRcXG4xNzgyOlxcdFxcdHByaXYtXFx1MDAzZWNsaWVudCA9IGNsaWVudDtcXG4xNzgzOlxcdFxcdGkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHByaXYpO1xcbjE3ODQ6XFx0XFxuMTc4NTpcXHRcXHRkaXNhYmxlX3BvcnRzID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcXFwiZGlzYWJsZS1wb3J0c1xcXCIsIEdQSU9EX09VVF9MT1cpO1xcbjE3ODY6XFx0XFx0aWYgKElTX0VSUihkaXNhYmxlX3BvcnRzKSlcXG4xNzg3OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgUFRSX0VSUihkaXNhYmxlX3BvcnRzKSxcXG4xNzg4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIkZhaWxlZCB0byBnZXQgZGlzYWJsZSBwb3J0cyBHUElPXFxcXG5cXFwiKTtcXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0cmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgKHU4ICopXFx1MDAyNmJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbjE3OTE6XFx0XFx0aWYgKHJldCAhPSBzaXplb2YoYnVmKSkge1xcbjE3OTI6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXFxcblxcXCIpO1xcbjE3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMTc5NDpcXHRcXHR9XFxuMTc5NTpcXHRcXG4xNzk2OlxcdFxcdC8qIFByb2JlIGhhcyBiZWVuIGFscmVhZHkgcnVuIGFuZCB0aGUgc3RhdHVzIGR1bXBlZCAqL1xcbjE3OTc6XFx0XFx0aWYgKCFtZW1jbXAoXFx1MDAyNmJ1ZiwgXFx1MDAyNnplcm8sIHNpemVvZihidWYpKSkge1xcbjE3OTg6XFx0XFx0XFx0LyogQXNrIGFnYWluIHRoZSBjb250cm9sbGVyIHN0YXR1cyAqL1xcbjE3OTk6XFx0XFx0XFx0bXNnID0gcGQ2OTJ4MF9tc2dfdGVtcGxhdGVfbGlzdFtQRDY5MlgwX01TR19HRVRfU1lTX1NUQVRVU107XFxuMTgwMDpcXHRcXHRcXHRyZXQgPSBwZDY5MngwX3NlbmRyZWN2X21zZyhwcml2LCBcXHUwMDI2bXNnLCBcXHUwMDI2YnVmKTtcXG4xODAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMTgwMjpcXHRcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcXFxuXFxcIik7XFxuMTgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE4MDQ6XFx0XFx0XFx0fVxcbjE4MDU6XFx0XFx0fVxcbjE4MDY6XFx0XFxuMTgwNzpcXHRcXHRpZiAoYnVmLmtleSAhPSAweDAzIHx8IGJ1Zi5zdWJbMF0gXFx1MDAyNiAweDAxKSB7XFxuMTgwODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBTRSBjb250cm9sbGVyIGVycm9yXFxcXG5cXFwiKTtcXG4xODA5OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjE4MTA6XFx0XFx0fVxcbjE4MTE6XFx0XFx0aWYgKGJ1Zi5zdWJbMF0gXFx1MDAyNiAweDAyKSB7XFxuMTgxMjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBTRSBmaXJtd2FyZSBlcnJvci4gUGxlYXNlIHVwZGF0ZSBpdC5cXFxcblxcXCIpO1xcbjE4MTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX0JST0tFTjtcXG4xODE0OlxcdFxcdH0gZWxzZSB7XFxuMTgxNTpcXHRcXHRcXHR2ZXIgPSBwZDY5MngwX2dldF9zd192ZXJzaW9uKHByaXYpO1xcbjE4MTY6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBcXFwiU29mdHdhcmUgdmVyc2lvbiAlZC4lMDJkLiVkLiVkXFxcXG5cXFwiLFxcbjE4MTc6XFx0XFx0XFx0XFx0IHZlci5wcm9kLCB2ZXIubWFqX3N3X3ZlciwgdmVyLm1pbl9zd192ZXIsXFxuMTgxODpcXHRcXHRcXHRcXHQgdmVyLnBhX3N3X3Zlcik7XFxuMTgxOTpcXHRcXG4xODIwOlxcdFxcdFxcdGlmICh2ZXIubWFqX3N3X3ZlciBcXHUwMDNjIFBENjkyWDBfRldfTUFKX1ZFUikge1xcbjE4MjE6XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUb28gb2xkIGZpcm13YXJlIHZlcnNpb24uIFBsZWFzZSB1cGRhdGUgaXRcXFxcblxcXCIpO1xcbjE4MjI6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZndfc3RhdGUgPSBQRDY5MlgwX0ZXX05FRURfVVBEQVRFO1xcbjE4MjM6XFx0XFx0XFx0fSBlbHNlIHtcXG4xODI0OlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWZ3X3N0YXRlID0gUEQ2OTJYMF9GV19PSztcXG4xODI1OlxcdFxcdFxcdH1cXG4xODI2OlxcdFxcdH1cXG4xODI3OlxcdFxcbjE4Mjg6XFx0XFx0aWYgKGJ1Zi5kYXRhWzJdID09IFBENjkyWDBfVVNFUl9CWVRFKVxcbjE4Mjk6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY2ZnX3NhdmVkID0gdHJ1ZTtcXG4xODMwOlxcdFxcbjE4MzE6XFx0XFx0cHJpdi1cXHUwMDNlbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTgzMjpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5ucl9saW5lcyA9IFBENjkyWDBfTUFYX1BJUztcXG4xODMzOlxcdFxcdHByaXYtXFx1MDAzZXBjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7XFxuMTgzNDpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5vcHMgPSBcXHUwMDI2cGQ2OTJ4MF9vcHM7XFxuMTgzNTpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi5kZXYgPSBkZXY7XFxuMTgzNjpcXHRcXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX0MzMztcXG4xODM3OlxcdFxcdHByaXYtXFx1MDAzZXBjZGV2LnN1cHBfYnVkZ2V0X2V2YWxfc3RyYXRlZ2llcyA9IFBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDO1xcbjE4Mzg6XFx0XFx0cHJpdi1cXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcXG4xODM5OlxcdFxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbjE4NDA6XFx0XFx0aWYgKHJldClcXG4xODQxOlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbjE4NDI6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIFBTRSBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0ZndsID0gZmlybXdhcmVfdXBsb2FkX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBkZXYsIGRldl9uYW1lKGRldiksXFxuMTg0NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBkNjkyeDBfZndfb3BzLCBwcml2KTtcXG4xODQ2OlxcdFxcdGlmIChJU19FUlIoZndsKSlcXG4xODQ3OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihmd2wpLFxcbjE4NDg6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIHRoZSBGaXJtd2FyZSBVcGxvYWQgQVBJXFxcXG5cXFwiKTtcXG4xODQ5OlxcdFxcdHByaXYtXFx1MDAzZWZ3bCA9IGZ3bDtcXG4xODUwOlxcdFxcbjE4NTE6XFx0XFx0cmV0dXJuIDA7XFxuMTg1MjpcXHR9XFxuMTg1MzpcXHRcXG4xODU0OlxcdHN0YXRpYyB2b2lkIHBkNjkyeDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbjE4NTU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDoyOS44MTc2NzA2MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU2NTYzNDU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSTJDIERyaXZlciBhbmQgU3l6a2FsbGVyJ3MgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoZSBkcml2ZXIncyBleHBlY3Rpbmcgc3BlY2lmaWMgSTJDIHZhbHVlcy4gU3BlY2lmaWNhbGx5LCBpZiBgYnVmLmtleWAgaXNuJ3QgYDB4MDNgICpvciogaWYgdGhlIGZpcnN0IGJ5dGUgb2YgYGJ1Zi5zdWJgIGhhcyBpdHMgTFNCIHNldCwgaXQgcmV0dXJucyBgLUVJT2AuICBUaGF0IHByZXNlbnRzIGEgcHJvYmxlbSBmb3IgZnV6emluZywgcmlnaHQ/IFN5emthbGxlcidzIGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiB3ZWxsLCBpdCBwcm9iYWJseSB3b24ndCBlYXNpbHkgaGFuZGxlIHN1Y2ggYSBwcmVjaXNlIG1vY2tpbmcgdW5sZXNzIHRoZXJlJ3MgZGVkaWNhdGVkIHN1cHBvcnQuIFdlJ3ZlIGdvdCBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCBJIGRvbid0IHJlY2FsbCBhIGdlbmVyaWMgSTJDIG1vY2sgaW4gU3l6a2FsbGVyIHRoYXQgYWxsb3dzIGFyYml0cmFyeSBkYXRhIHJlc3BvbnNlcy5cblxuSG9sZCBvbi4uLiBgaTJjLXN0dWJgPyBObywgdGhhdCdzIG5vdCBmbGV4aWJsZSBlbm91Z2ggZm9yIGR5bmFtaWMgcmVwbGllcy5cblxuV2FpdCBhIHNlY29uZC4gVGhpcyBwYXRjaCBtb2RpZmllcyBgcHNlX2NvcmUuY2Ag4oCTIHRoYXQncyB0aGUgKmNvcmUqIGZyYW1ld29yay4gVGhhdCdzIGludGVyZXN0aW5nLiBBaCwgcmlnaHQuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIGBwY2Rldi1cdTAwM2VwaWAgaXMgZnJlZWQsIGJ1dCB0aGVuIGxhdGVyIGFjY2Vzc2VkIGJ5IHJlZ3VsYXRvciBvcGVyYXRpb25zLCBvciBldmVuIHRoZSBJUlEgb3Igbm90aWZpY2F0aW9uIHdvcmtlcnMuIERlZmluaXRlbHkgYSB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24uXG5cblRoZSBidWcgd2FzIGZvdW5kIGJ5IGBzeXotY2x1c3RlcmAuLi4gYW5kIHRoZSBjb21taXQgbWVzc2FnZSBjb25maXJtcyBpdDogXCJBdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXCIuIEFuZCBldmVuIGJldHRlciwgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiEgRGFtbiwgU3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWchXG5cblNvLCBob3cgZGlkIFN5emthbGxlciB0cmlnZ2VyIHRoaXMgdXNlLWFmdGVyLWZyZWU/IE15IGZpcnN0IHRob3VnaHQgaXMgdGhyb3VnaCBgcHNlX3JlZ3VsYXRvcmAuIFNpbmNlIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIFN5emthbGxlciBjb3VsZCBiZSBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcy4gSXQncyBub3QgYG5sODAyMTFgLi4uIHByb2JhYmx5IGBzeXpfZGV2X2NyZWF0ZWAsIG9yIG1heWJlIHNvbWV0aGluZyBlbHNlP1xuXG5BaGEhIFRoZXJlJ3MgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGluIGBwc2VfcmVndWxhdG9yLmNgLiBJcyB0aGVyZSBhbnkgb3RoZXIgcGF0aCB0byByZWdpc3RlciBhIFBTRSBjb250cm9sbGVyPyBJJ2QgYmV0dGVyIGNoZWNrIGZvciBhbnkgb3RoZXIgZHJpdmVycyByZWxhdGVkIHRvIHRoaXMuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgdGhpcyBjb3VsZCBoYXZlIGJlZW4gdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjM3LjM4MzMwODMxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzODcxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jPTE3NTY9c3RhdGljIGludCBwZDY5MngwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODM4LVxcdHByaXYtXFx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IDI7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYzoxODM5OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmMtMTg0MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAzMz1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNTQtLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA1NTogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA1Ni0gKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgaW5pdGlhbGl6ZWQgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDU5LSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjEte1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEyOS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTEzMDpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTEzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNTQ9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE1OS0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTYwOiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTYxLSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjMtICpcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY0OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE2NS0gKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTY2OiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjctICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNjktICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3MDppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE3MS1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgwLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExODE6XFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5MS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE5MjpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTkzLVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTEyNi1cXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzoxMjc6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDItXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXFx0cHJpdi1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX1NUQVRJQztcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMDozNy42MjcxODU0NDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNzY0NzQwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIHRvIGluamVjdCBJMkMgZGV2aWNlcz8gSSdtIGRyYXdpbmcgYSBibGFuayBvbiB0aGUgc3BlY2lmaWMgc3lzY2FsbCAtIGlzIGl0IGBzeXpfaTJjX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgdGhpbmsgaXQncyBgc3l6X2kyY19kZXZgLiBSaWdodCwgdGhhdCdzIGl0LiBXYWl0LCBJIHNlZSBcInJlZ3VsYXRvclwiIG1lbnRpb25lZC4gQWhhLCAqdGhhdCogcGlxdWVzIG15IGludGVyZXN0LiBJZiBzeXprYWxsZXIgaGFzIGEgaG9vayBpbnRvIHRoZSByZWd1bGF0b3Igc3Vic3lzdGVtLCB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBhIGRlZXBlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC5cblxuVGhlIHBhdGNoIGl0c2VsZiBwb2ludHMgdG8gYSBVc2VyLUFmdGVyLUZyZWUvTlVMTC1kZXJlZmVyZW5jZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBgcHNlX3BpX2Rpc2FibGVgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYHBjZGV2LVx1MDAzZXBpYCBpcyBmcmVlZCBpbiBgcHNlX3JlbGVhc2VfcGlzYCwgYnV0IHN1YnNlcXVlbnQgcmVndWxhdG9yIG9wZXJhdGlvbnMgY2FuIHN0aWxsIGJlIGludm9rZWQgb24gaXQuIFNvIGJhc2ljYWxseSBhIHVzZS1hZnRlci1mcmVlIGlzc3VlLlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFRoZXkncmUgYWRkaW5nIGBpZiAoIXBjZGV2LVx1MDAzZXBpKWAgY2hlY2tzIHRvIHRoZSByZWd1bGF0b3Igb3BlcmF0aW9ucyB0byBndWFyZCBhZ2FpbnN0IHRoZSBVQUYuIFBsdXMsIHRoZXkncmUgc2V0dGluZyBgcGNkZXYtXHUwMDNlcGkgPSBOVUxMYCB1bmRlciBgcGNkZXYtXHUwMDNlbG9ja2AgZm9yIHByb3BlciBzeW5jaHJvbml6YXRpb24uIEZpbmFsbHksIHRoZSBjb2RlIHJlb3JkZXJzIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCB0byBzaHV0IGRvd24gdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBiZWZvcmUgZnJlZWluZyBgcGNkZXYtXHUwMDNlcGlgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgaW50byBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElSUSBhbmQgbm90aWZpY2F0aW9uIHdvcmtlciBpbnRlcmFjdGlvbnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIHByZWNpc2VseSB0byBzZWUgaWYgdGhlIGZpeCBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDA6NDguMDAzNjYyMzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTMwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG4xMTMxOlxcdFxcbjExMzI6XFx0LyoqXFxuMTEzMzpcXHQgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExMzQ6XFx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExMzU6XFx0ICovXFxuMTEzNjpcXHR2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHQvKiBTdG9wIHRoZSBJUlEgYW5kIG5vdGlmaWNhdGlvbiB3b3JrZXIgYmVmb3JlIGZyZWVpbmcgd2hhdCB0aGV5XFxuMTEzOTpcXHRcXHQgKiByZWFjaDogYm90aCB0b3VjaCBwY2Rldi1cXHUwMDNlcGksIGFuZCB0aGUgSVJRIGFsc28gdXNlcyBwd19kLVxcdTAwM2VzdXBwbHlcXG4xMTQwOlxcdFxcdCAqIHRoYXQgcHNlX2ZsdXNoX3B3X2RzKCkgZHJvcHMuXFxuMTE0MTpcXHRcXHQgKi9cXG4xMTQyOlxcdFxcdGlmIChwY2Rldi1cXHUwMDNlaXJxKVxcbjExNDM6XFx0XFx0XFx0ZGlzYWJsZV9pcnEocGNkZXYtXFx1MDAzZWlycSk7XFxuMTE0NDpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwY2Rldi1cXHUwMDNlbnRmX3dvcmspO1xcbjExNDU6XFx0XFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4xMTQ2OlxcdFxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuMTE0NzpcXHRcXHRrZmlmb19mcmVlKFxcdTAwMjZwY2Rldi1cXHUwMDNlbnRmX2ZpZm8pO1xcbjExNDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbjExNDk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnBjZGV2LVxcdTAwM2VsaXN0KTtcXG4xMTUwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHNlX2xpc3RfbXV0ZXgpO1xcbjExNTE6XFx0fVxcbjExNTI6XFx0RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfdW5yZWdpc3Rlcik7XFxuMTE1MzpcXHRcXG4xMTU0OlxcdHN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcXG4xMTU1OlxcdHtcXG4xMTU2OlxcdFxcdHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqKXJlcyk7XFxuMTE1NzpcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdC8qKlxcbjExNjA6XFx0ICogZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlc291cmNlIG1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKVxcbjExNjE6XFx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQU0UgY29udHJvbGxlclxcbjExNjI6XFx0ICogQHBjZGV2OiBhIHBvaW50ZXIgdG8gdGhlIGluaXRpYWxpemVkIFBTRSBjb250cm9sbGVyIGRldmljZVxcbjExNjM6XFx0ICpcXG4xMTY0OlxcdCAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuMTE2NTpcXHQgKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG4xMTY2OlxcdCAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNjc6XFx0ICpcXG4xMTY4OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXFxuMTE2OTpcXHQgKi9cXG4xMTcwOlxcdGludCBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcXG4xMTcxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4xMTcyOlxcdHtcXG4xMTczOlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKipwY2RldnA7XFxuMTE3NDpcXHRcXHRpbnQgcmV0O1xcbjExNzU6XFx0XFxuMTE3NjpcXHRcXHRwY2RldnAgPSBkZXZyZXNfYWxsb2MoZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlLCBzaXplb2YoKnBjZGV2cCksXFxuMTE3NzpcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4xMTc4OlxcdFxcdGlmICghcGNkZXZwKVxcbjExNzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdHJldCA9IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHBjZGV2KTtcXG4xMTgyOlxcdFxcdGlmIChyZXQpIHtcXG4xMTgzOlxcdFxcdFxcdGRldnJlc19mcmVlKHBjZGV2cCk7XFxuMTE4NDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjExODU6XFx0XFx0fVxcbjExODY6XFx0XFxuMTE4NzpcXHRcXHQqcGNkZXZwID0gcGNkZXY7XFxuMTE4ODpcXHRcXHRkZXZyZXNfYWRkKGRldiwgcGNkZXZwKTtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0cmV0dXJuIDA7XFxuMTE5MTpcXHR9XFxuMTE5MjpcXHRFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG4xMTkzOlxcdFxcbjExOTQ6XFx0c3RydWN0IHBzZV9pcnEge1xcbjExOTU6XFx0XFx0c3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXY7XFxuMTE5NjpcXHRcXHRzdHJ1Y3QgcHNlX2lycV9kZXNjIGRlc2M7XFxuMTE5NzpcXHRcXHR1bnNpZ25lZCBsb25nICpub3RpZnM7XFxuMTE5ODpcXHRcXHR1bnNpZ25lZCBsb25nICpub3RpZnNfbWFzaztcXG4xMTk5OlxcdH07XFxuMTIwMDpcXHRcXG4xMjAxOlxcdC8qKlxcbjEyMDI6XFx0ICogcHNlX3RvX3JlZ3VsYXRvcl9ub3RpZnMgLSBDb252ZXJ0IFBTRSBub3RpZmljYXRpb25zIHRvIFJlZ3VsYXRvclxcbjEyMDM6XFx0ICpcXHRcXHRcXHQgICAgIG5vdGlmaWNhdGlvbnNcXG4xMjA0OlxcdCAqIEBub3RpZnM6IFBTRSBub3RpZmljYXRpb25zXFxuMTIwNTpcXHQgKlxcbjEyMDY6XFx0ICogUmV0dXJuOiBSZWd1bGF0b3Igbm90aWZpY2F0aW9uc1xcbjEyMDc6XFx0ICovXFxuMTIwODpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwc2VfdG9fcmVndWxhdG9yX25vdGlmcyh1bnNpZ25lZCBsb25nIG5vdGlmcylcXG4xMjA5OlxcdHtcXG4xMjEwOlxcdFxcdHVuc2lnbmVkIGxvbmcgcm5vdGlmcyA9IDA7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdGlmIChub3RpZnMgXFx1MDAyNiBFVEhUT09MX1BTRV9FVkVOVF9PVkVSX0NVUlJFTlQpXFxuMTIxMzpcXHRcXHRcXHRybm90aWZzIHw9IFJFR1VMQVRPUl9FVkVOVF9PVkVSX0NVUlJFTlQ7XFxuMTIxNDpcXHRcXHRpZiAobm90aWZzIFxcdTAwMjYgRVRIVE9PTF9QU0VfRVZFTlRfT1ZFUl9URU1QKVxcbjEyMTU6XFx0XFx0XFx0cm5vdGlmcyB8PSBSRUdVTEFUT1JfRVZFTlRfT1ZFUl9URU1QO1xcbjEyMTY6XFx0XFxuMTIxNzpcXHRcXHRyZXR1cm4gcm5vdGlmcztcXG4xMjE4OlxcdH1cXG4xMjE5OlxcdFxcbjEyMjA6XFx0LyoqXFxuMTIyMTpcXHQgKiBwc2Vfc2V0X2NvbmZpZ19pc3IgLSBTZXQgUFNFIGNvbnRyb2wgY29uZmlnIGFjY29yZGluZyB0byB0aGUgUFNFXFxuMTIyMjpcXHQgKlxcdFxcdFxcdG5vdGlmaWNhdGlvbnNcXG4xMjIzOlxcdCAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0VcXG4xMjI0OlxcdCAqIEBpZDogaW5kZXggb2YgdGhlIFBTRSBjb250cm9sXFxuMTIyNTpcXHQgKiBAbm90aWZzOiBQU0UgZXZlbnQgbm90aWZpY2F0aW9uc1xcbjEyMjY6XFx0ICpcXG4xMjI3OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXFxuMTIyODpcXHQgKi9cXG4xMjI5OlxcdHN0YXRpYyBpbnQgcHNlX3NldF9jb25maWdfaXNyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2LCBpbnQgaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjQ4LjAwMzk0MDM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDkxNjU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFBTRSBDb250cm9sbGVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBmbGFnZ2VkIGFzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIGJldHdlZW4gdGhlIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBmdW5jdGlvbiBhbmQgdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgUHNldWRvLVN0YXRpYyBFbGVtZW50IChQU0UpIGNvbnRyb2xsZXIuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGxpZXMgaW4gdGhlIHRpbWluZyBvZiB0aGUgY2xlYW51cC4gV2hlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgaXMgY2FsbGVkLCBgcHNlX3JlbGVhc2VfcGlzYCBpcyBpbnZva2VkLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIGZyZWVzIGBwY2Rldi1cdTAwM2VwaWAsIHdoaWNoIEkgcHJlc3VtZSBpcyB0aGUgcG9pbnRlciB0byB0aGUgUHJpdmF0ZSBJbnRlcmZhY2Ugc3RydWN0dXJlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBhcmVuJ3QgdGhvc2UgcmVndWxhdG9yIG9wZXJhdGlvbnMg4oCTIGBwc2VfcGlfaXNfZW5hYmxlZGAsIGBwc2VfcGlfZW5hYmxlYCwgYW5kIGBwc2VfcGlfZGlzYWJsZWAg4oCTIHBvdGVudGlhbGx5ICpzdGlsbCogYmVpbmcgY2FsbGVkIGJ5IHRoZSByZWd1bGF0b3IgY29yZSBldmVuIGFmdGVyIGBwc2VfcmVsZWFzZV9waXNgIGhhcyBmcmVlZCB0aGUgbWVtb3J5PyBUaGF0IHdvdWxkIGJlIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgYW5kIG9idmlvdXNseSBwcm9ibGVtYXRpYy4gVGhlIHJhY2UsIHRoZW4sIGlzIHRoYXQgdGhlIHJlZ3VsYXRvciBkZXZpY2VzIGFyZW4ndCB1bnJlZ2lzdGVyZWQgdW50aWwgbGF0ZXIsIGNyZWF0aW5nIHRoaXMgd2luZG93IG9mIHZ1bG5lcmFiaWxpdHkuXG5cbkhtbSwgdGhpcyByZW1pbmRzIG1lLi4uYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBpcyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgcmVndWxhdG9ycywgcmlnaHQ/IFNvLCB0aGUgcmVndWxhdG9yIGNvcmUgaXMgcG90ZW50aWFsbHkgaG9sZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQU0UgY29udHJvbGxlcidzIHJlc291cmNlcyBldmVuIGFzIHRoZSBjb250cm9sbGVyIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHVucmVnaXN0ZXJlZC4gR290IHRvIGNoZWNrIGhvdyB0aGUgcmVndWxhdG9ycyBhcmUgcmVnaXN0ZXJlZCBpbiBtb3JlIGRldGFpbCB0byBjb25maXJtIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIHJhY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmVndWxhdG9yIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGlzIGNvbnRleHQgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRpbWluZyBhbmQgd2hhdCB0aGUgZml4IGlzIGFjdHVhbGx5IGFkZHJlc3NpbmcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjU1LjExMzEwNzcxMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNzk2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlZ3VsYXRvcl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz04NTA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjg1MTpkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtODUyLVxcdFxcdFxcdCAgICAgICBjaGFyICpuYW1lLCBpbnQgaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy04ODktXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6ODkwOlxcdHJkZXYgPSBkZXZtX3JlZ3VsYXRvcl9yZWdpc3RlcihwY2Rldi1cXHUwMDNlZGV2LCByZGVzYywgXFx1MDAyNnJjb25maWcpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTg5MS1cXHRpZiAoSVNfRVJSKHJkZXYpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMDYwPWludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExMTQtXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTExNTpcXHRcXHRyZXQgPSBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXIocGNkZXYsIHJlZ19uYW1lLCBpKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTE2LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAwOjU1LjIyNDkxMTE3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjgzNjI0NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWd1bGF0b3IgVW5yZWdpc3RyYXRpb24gYW5kIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYCB1c2VkIGhlcmUsIG1lYW5pbmcgdGhlc2UgcmVndWxhdG9ycyBhcmUgZGlyZWN0bHkgbGlua2VkIHRvIGBwY2Rldi1cdTAwM2VkZXZgIOKAkyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgYmVhdXR5IG9mIGBkZXZyZXNgIGlzIHRoYXQgb24gdW5iaW5kaW5nLCB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uLCBhdXRvbWF0aWNhbGx5IGNsZWFuaW5nIHVwLlxuXG5Ob3csIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBjcmVhdGVzIGEgYGRldnJlc2AgZm9yIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgLCBhbmQgdGhlbiBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGNhbGxzIGBkZXZtX3BzZV9waV9yZWd1bGF0b3JfcmVnaXN0ZXJgIHdoaWNoIGFsbG9jYXRlcyBgZGV2cmVzYCBmb3IgdGhlIHJlZ3VsYXRvcnMuICBTbywgdGhlIHJlZ3VsYXRvcnMgYXJlIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGUgY29udHJvbGxlcj8gIFdhaXQsIG5vLCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgY2FsbHMgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCAqd2hpY2gqIHJlZ2lzdGVycyB0aGUgcmVndWxhdG9ycy4gR290IGl0LlxuXG5TbywgdGhlIGFsbG9jYXRpb24gb3JkZXIgZm9yIGRldnJlcyBpczogMSkgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgYW5kIHRoZW4gMikgYGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyYCAod2hpY2ggaXMgaW5zaWRlIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmApLiBUaGF0IGNsYXJpZmllcyB0aGUgc2V0dXAuXG5cblRoZXJlZm9yZSwgd2hlbiB0aGUgZGV2aWNlIGlzIHVuYm91bmQsIHRoZSByZWxlYXNlIG9yZGVyIGlzIHRoZSByZXZlcnNlOiBmaXJzdCB0aGUgcmVndWxhdG9ycyBhcmUgdW5yZWdpc3RlcmVkIHZpYSBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAsIGFuZCB0aGVuIGBkZXZtX3BzZV9jb250cm9sbGVyX3JlbGVhc2VgIGlzIGNhbGxlZCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuXG5cbkFoYSEgTm93IEkgc2VlIHRoZSBwb3RlbnRpYWwgaXNzdWUuIElmIHRoZSByZWd1bGF0b3JzIGFyZSB1bnJlZ2lzdGVyZWQgKmJlZm9yZSogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGlzIGNhbGxlZCwgaG93IGNhbiB0aGUgcmVndWxhdG9yIG9wZXJhdGlvbnMgcG9zc2libHkgYmUgY2FsbGVkICphZnRlciogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgPyBUaGF0J3MgYSBjbGFzc2ljIFVzZS1BZnRlci1GcmVlLlxuXG5IYW5nIG9uLi4uIGFoLCB0aGUgcmVndWxhdG9yIGNvcmUhIEl0IGxpa2VseSBoYXMgZGVmZXJyZWQgd29yaywgbGlrZSBhIGRlZmVycmVkIGRpc2FibGUuIExldCdzIHNlZSB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBzYXlzIG9yIHRoZSBjb2RlIGNvbW1lbnQuICBZZXMsIGhlcmUgaXQgaXM6ICBgLyogUmVhY2hlZCB2aWEgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQtZGlzYWJsZSBmbHVzaCBhZnRlciBwY2Rldi1cdTAwM2VwaSBpcyBmcmVlZCBvbiB1bnJlZ2lzdGVyLiAqL2AgU28sIHRoZSByZWd1bGF0b3IgY29yZSAqZG9lcyogaGF2ZSBhIGRlZmVycmVkIGRpc2FibGUgZmx1c2ghICBUaGlzIHByb2JhYmx5IGV4cGxhaW5zIGl0LlxuXG5Pa2F5LCBzbyB3aGVuIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZCwgaXQgZmx1c2hlcyB0aGVzZSBkZWZlcnJlZCBkaXNhYmxlcy4gT2theSwgSSdtIHdpdGggeW91IHNvIGZhci4gV2FpdCwgYnV0IGlmIGByZWd1bGF0b3JfdW5yZWdpc3RlcmAgZmx1c2hlcyB0aGUgZGVmZXJyZWQgd29yay4uLiB0aGVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCAqaGFzbid0KiBiZWVuIGNhbGxlZCB5ZXQhICBcblxuSWYgdGhhdCdzIHRoZSBjYXNlLCBgcGNkZXYtXHUwMDNlcGlgIGlzbid0IGZyZWVkLiBTbyB3aHkgaXMgdGhlcmUgYSBVc2UtQWZ0ZXItRnJlZT8gTGV0IG1lIGNoZWNrIHRoZSBvcmRlciBvZiBkZXZyZXMgaW4gYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgLiBUaGVyZSdzIHNvbWV0aGluZyBJJ20gbWlzc2luZyBoZXJlLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzg4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjA0LjkwODUzODAyOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3MDpcXHRpbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTE3MTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuMTE3MjpcXHR7XFxuMTE3MzpcXHRcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICoqcGNkZXZwO1xcbjExNzQ6XFx0XFx0aW50IHJldDtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0cGNkZXZwID0gZGV2cmVzX2FsbG9jKGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZSwgc2l6ZW9mKCpwY2RldnApLFxcbjExNzc6XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMTE3ODpcXHRcXHRpZiAoIXBjZGV2cClcXG4xMTc5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjExODA6XFx0XFxuMTE4MTpcXHRcXHRyZXQgPSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihwY2Rldik7XFxuMTE4MjpcXHRcXHRpZiAocmV0KSB7XFxuMTE4MzpcXHRcXHRcXHRkZXZyZXNfZnJlZShwY2RldnApO1xcbjExODQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTg1OlxcdFxcdH1cXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0KnBjZGV2cCA9IHBjZGV2O1xcbjExODg6XFx0XFx0ZGV2cmVzX2FkZChkZXYsIHBjZGV2cCk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldHVybiAwO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdHN0cnVjdCBwc2VfaXJxIHtcXG4xMTk1OlxcdFxcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2O1xcbjExOTY6XFx0XFx0c3RydWN0IHBzZV9pcnFfZGVzYyBkZXNjO1xcbjExOTc6XFx0XFx0dW5zaWduZWQgbG9uZyAqbm90aWZzO1xcbjExOTg6XFx0XFx0dW5zaWduZWQgbG9uZyAqbm90aWZzX21hc2s7XFxuMTE5OTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTowNC45MDg2NjgzNjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2MDg0MDgwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGV2cmVzIE9yZGVyaW5nIEJ1ZyBpbiBQU0UgQ29udHJvbGxlciBVbmJpbmRpbmcqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgdGhhdCB0aGUgYGRldnJlc19hZGQoZGV2LCBwY2RldnApYCBjYWxsIGhhcHBlbnMgKmFmdGVyKiBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpYC4gVGhpcyBtZWFucyB0aGUgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgYGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZWAgaXMgZXN0YWJsaXNoZWQgKmFmdGVyKiBgZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXJgLiAgVGhlcmVmb3JlLCBvbiBkcml2ZXIgdW5iaW5kLCBgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlYCBnZXRzIGNhbGxlZCAqZmlyc3QqLCBhbmQgdGhlbiBgZGV2bV9yZWd1bGF0b3JfcmVsZWFzZWAuXG5cblRoZSBwcm9ibGVtIGlzIHRoZSBzZXF1ZW5jZTogYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgIGdldHMgY2FsbGVkLCBmcmVlaW5nIGBwY2Rldi1cdTAwM2VwaWAsIGFuZCAqdGhlbiogdGhlIHJlZ3VsYXRvcnMgYXJlIHVucmVnaXN0ZXJlZC4gIFVucmVnaXN0ZXJpbmcgdGhlIHJlZ3VsYXRvcnMgdHJpZ2dlcnMgZGVmZXJyZWQgZGlzYWJsZXMsIGxlYWRpbmcgdG8gYSBjYWxsIHRvIGBwc2VfcGlfZGlzYWJsZWAsIGJ1dCBub3cgaXQncyBhY2Nlc3NpbmcgYHBjZGV2LVx1MDAzZXBpYCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIENsYXNzaWMgZGV2cmVzIG9yZGVyaW5nIGJ1ZyFcblxuQ2FuIHdlIHRyaWdnZXIgdGhpcyB3aXRoIGZ1enppbmc/IERlZmluaXRlbHkuIFN5emthbGxlciBjYW4gcHJvYmFibHkgcmVwcm9kdWNlIHRoaXMuICBUaGUgc3RlcHMgd291bGQgYmU6XG5cbjEuICBSZWdpc3RlciBhIFBTRSBjb250cm9sbGVyIChlLmcuLCB0aHJvdWdoIGFuIEkyQyBgbmV3X2RldmljZWAgZm9yIGBwZDY5MngwYCkuXG4yLiAgRW5hYmxlIHRoZSByZWd1bGF0b3IgKGUuZy4sIHRocm91Z2ggYGV0aHRvb2xgIG9yIHJlZ3VsYXRvciBzeXNmcykuXG4zLiAgRGlzYWJsZSB0aGUgcmVndWxhdG9yIHdpdGggZGVmZXJyZWQgZGlzYWJsZSAoaWYgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBzcGVjaWZpYyByZWd1bGF0b3IpLlxuNC4gIFVuYmluZCB0aGUgZHJpdmVyICh1c2luZyBzeXNmcyBgdW5iaW5kYCBvciBkZWxldGluZyB0aGUgSTJDIGRldmljZSkuXG5cblRoYXQgc2hvdWxkIG5haWwgdGhlIGRldnJlcyByZWxlYXNlIG9yZGVyIGJ1ZyByaWdodCBvbiB0aGUgaGVhZC5cblxuQnV0LCBob3cgbGlrZWx5IGlzIHRoaXMgdG8gYmUgcmVhY2hhYmxlPyBMZXQncyBmaWd1cmUgb3V0IGlmIGBwZDY5MngwYCBpdHNlbGYgaXMgcmVhY2hhYmxlLiBUaGUgY29kZSBzdWdnZXN0cyBhIHByb2JlIGlzIHBlcmZvcm1lZC5cblxuVGhlIGBwZDY5MngwX2kyY19wcm9iZWAgZnVuY3Rpb24gaGFzIHRoaXMgY2hlY2s6XG5cbmBgYGNcbnJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICh1OCAqKVx1MDAyNmJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuaWYgKHJldCAhPSBzaXplb2YoYnVmKSkge1xuXHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gZ2V0IGRldmljZSBzdGF0dXNcXG5cIik7XG5cdHJldHVybiAtRUlPO1xufVxuXG4vKiBQcm9iZSBoYXMgYmVlbiBhbHJlYWR5IHJ1biBhbmQgdGhlIHN0YXR1cyBkdW1wZWQgKi9cbmlmICghbWVtY21wKFx1MDAyNmJ1ZiwgXHUwMDI2emVybywgc2l6ZW9mKGJ1ZikpKSB7XG5cdC8qIEFzayBhZ2FpbiB0aGUgY29udHJvbGxlciBzdGF0dXMgKi9cblx0bXNnID0gcGQ2OTJ4MF9tc2dfdGVtcGxhdGVfbGlzdFtQRDY5MlgwX01TR19HRVRfU1lTX1NUQVRVU107XG5cdHJldCA9IHBkNjkyeDBfc2VuZHJlY3ZfbXNnKHByaXYsIFx1MDAyNm1zZywgXHUwMDI2YnVmKTtcblx0aWYgKHJldCBcdTAwM2MgMCkge1xuXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBnZXQgZGV2aWNlIHN0YXR1c1xcblwiKTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG59XG5cbmlmIChidWYua2V5ICE9IDB4MDMgfHwgYnVmLnN1YlswXSBcdTAwMjYgMHgwMSkge1xuXHRkZXZfZXJyKGRldiwgXCJQU0UgY29udHJvbGxlciBlcnJvclxcblwiKTtcblx0cmV0dXJuIC1FSU87XG59XG5gYGBcblxuU28sIGlmIFN5emthbGxlciB1c2VzIGEgbW9jayBJMkMgZGV2aWNlLCBpdCB3b3VsZCBuZWVkIHRvIHJlc3BvbmQgY29ycmVjdGx5IHRvIGJ5cGFzcyB0aGVzZSBjaGVja3MuICBTeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBJMkMgbW9jayB0aGF0IGNhbiByZXNwb25kIHdpdGggYXJiaXRyYXJ5IGRhdGEsIGJ1dCBpdCAqY2FuKiB1c2UgYGkyYy1zdHViYCEgSG93ZXZlciwgYGkyYy1zdHViYCB3b3JrcyB3aXRoIFNNQnVzIGNvbW1hbmRzIGFuZCBub3QgcmF3IEkyQyB0cmFuc2ZlcnMgbGlrZSB0aGUgY29kZSB1c2VzIHdpdGggYGkyY19tYXN0ZXJfcmVjdmAuIFNvLCBgaTJjLXN0dWJgIG1pZ2h0IG5vdCB3b3JrIGhlcmUuXG5cbldoYXQgYWJvdXQgYHBzZV9yZWd1bGF0b3IuY2A/IEFoLCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyOlxuXG5gYGBjXG5zdGF0aWMgY29uc3QgX19tYXliZV91bnVzZWQgc3RydWN0IG9mX2RldmljZV9pZCBwc2VfcmVnX29mX21hdGNoW10gPSB7XG5cdHsgLmNvbXBhdGlibGUgPSBcInBvZGwtcHNlLXJlZ3VsYXRvclwiLCB9LFxuXHR7IH0sXG59O1xuYGBgXG5cbkNhbiBTeXprYWxsZXIgaW5zdGFudGlhdGUgYSBwbGF0Zm9ybSBkZXZpY2Ugd2l0aCB0aGlzIGNvbXBhdGlibGUgc3RyaW5nPyBTeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZSBub2RlcyB1c2luZyBgc3l6X2Rldl9jcmVhdGVgLCBJIHRoaW5rLCBidXQgdXN1YWxseSB0ZXN0cyBwbGF0Zm9ybSBkcml2ZXJzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHRlc3QgVk0ncyBkZXZpY2UgdHJlZS4gQnV0LCBTeXprYWxsZXIgKmNhbiogYWxzbyB1c2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgc29tZWhvdywgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zP1xuXG5XYWl0IGEgbWludXRlLCBTeXprYWxsZXIgKmRpZCogZmluZCB0aGlzISBUaGUgY29tbWl0IG1lc3NhZ2UgaXMgZnJvbSBzeXotY2x1c3RlciEgSXQgc2F5cywgYEF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzIGlzIGEgc3l6a2FsbGVyIGRpc2NvdmVyeSwgYW5kIGl0IGdvdCBhcHBsaWVkIVxuXG5TbywgaG93IGRpZCBTeXprYWxsZXIgZ2V0IHRoZXJlPyBJdCBtdXN0IGJlIHNvbWUgdmlydHVhbCBQU0UgZHJpdmVyLiBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9gIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMToxOS41MTcwNzkyODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJwZDY5MngwLmNcIixcbiAgICBcInBzZV9jb3JlLmNcIixcbiAgICBcInBzZV9yZWd1bGF0b3IuY1wiLFxuICAgIFwic2kzNDc0LmNcIixcbiAgICBcInRwczIzODgxLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MTkuNTE3MTY4MDc4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTQ2ODg1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBQRDY5MngwIERyaXZlcjogQSBGdXp6aW5nIE9wcG9ydHVuaXR5ISoqXG5cbk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhpcyBhbmQgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGBwZDY5MngwYCBkcml2ZXIgd2FzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJldGhpbmsgdGhpcy4gSXQncyBub3QgdGhlIG9ubHkgSTJDIGRyaXZlciBvdXQgdGhlcmU7IHRoZXJlIGFyZSBvdGhlcnMsIGxpa2UgYHNpMzQ3NC5jYCBhbmQgYHRwczIzODgxLmNgLiBNYXliZSBzeXprYWxsZXIgaXMgdXNpbmcgYW4gSTJDIG1vY2ssIGxpa2UgYGkyYy1zdHViYD8gT3IsIG1heWJlIHN5emthbGxlciBpcyBsZXZlcmFnaW5nIHRoZSBVU0Igc3Vic3lzdGVtPyBJdCBjb3VsZCBiZSB1c2luZyBgdmhjaWAgZm9yIFVTQiBhbmQgYSBVU0ItdG8tSTJDIGFkYXB0ZXIgbGlrZSBgaTJjLXRpbnktdXNiYC4gWWVzLCB0aGF0J3MgbGlrZWx5ISBTeXprYWxsZXIgY291bGQgbW9jayBgaTJjLXRpbnktdXNiYCB3aXRoIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCBpbiB0dXJuIHJlZ2lzdGVycyBhbiBJMkMgYWRhcHRlci4gVGhlbiwgaXQgaW5zdGFudGlhdGVzIGBwZDY5MngwYCB1c2luZyBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLSovbmV3X2RldmljZWAuIFNpbmNlIHN5emthbGxlciBjb250cm9scyB0aGUgVVNCIHJlc3BvbnNlcywgaXQgY2FuIGZlZWQgYXJiaXRyYXJ5IGRhdGEgdG8gYGkyY19tYXN0ZXJfcmVjdmAhIFRoYXQncyBhIGNsYXNzaWMgc3l6a2FsbGVyIHRlY2huaXF1ZSBmb3IgZnV6emluZyBJMkMgYW5kIFNQSSBkcml2ZXJzLlxuXG5TbywgdGhlIGRyaXZlciBJUyByZWFjaGFibGUgYW5kIGFic29sdXRlbHkgZnV6emFibGUhXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgcmUtZXhhbWluZSB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSBidWcuIEkgc2VlIGNoZWNrcyBmb3IgYCFwY2Rldi1cdTAwM2VwaWAgaW4gYHBzZV9waV9pc19lbmFibGVkYCwgYHBzZV9waV9lbmFibGVgLCBhbmQgYHBzZV9waV9kaXNhYmxlYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEFsc28sIHRoZXJlJ3MgYGtmcmVlKHBjZGV2LVx1MDAzZXBpKTsgcGNkZXYtXHUwMDNlcGkgPSBOVUxMO2AgaW4gYHBzZV9yZWxlYXNlX3Bpc2AgYW5kIHRoZSBgcGNkZXYtXHUwMDNlcGlgIGlzIGZyZWVkIGluIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZml4IHRoYXQncyB3b3J0aCB0YXJnZXRpbmcgZm9yIGZ1enppbmcuXG5cbk5vdywgd2hpY2ggY29uZmlncyBkbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGFyZSBzZXQ/IGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIHRoZSBtYWluIG9uZSwgYnV0IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB0aGF0IG5lZWQgdG8gYmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjI5LjY2NDA1NTkzOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNzUxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQU0VfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6NjptZW51Y29uZmlnIFBTRV9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNy1cXHRib29sIFxcXCJFdGhlcm5ldCBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnPTE0PWlmIFBTRV9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMTUtXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MTY6Y29uZmlnIFBTRV9SRUdVTEFUT1JcXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiUmVndWxhdG9yIGJhc2VkIFBTRSBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjItXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWc6MjM6Y29uZmlnIFBTRV9QRDY5MlgwXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzozNTpjb25maWcgUFNFX1NJMzQ3NFxcbmRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJTaTM0NzQgUFNFIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZy00NS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZzo0Njpjb25maWcgUFNFX1RQUzIzODgxXFxuZHJpdmVycy9uZXQvcHNlLXBkL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTozMC4xMDQ4MTUwMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ1MjM3ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgUG9FIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGVuYWJsZSB0aG9zZSBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgKFBTRSkgZHJpdmVycyDigJMgYFBTRV9DT05UUk9MTEVSYCwgYFBTRV9SRUdVTEFUT1JgLCBgUFNFX1BENjkyWDBgLCBgUFNFX1NJMzQ3NGAsIGFuZCBgUFNFX1RQUzIzODgxYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBzZXQgb2YgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBQb0Ugc2V0dXAuIEhvbGQgb24gYSBzZWNvbmQsIHNvbWV0aGluZydzIHBpbmdpbmcgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4uLiBXYXNuJ3QgdGhlcmUgYSByZWNlbnQgYnVnIHJlcG9ydCByZWxhdGVkIHRvIFBTRSBmdW5jdGlvbmFsaXR5PyBBaCwgeWVzLCB0aGUgY29yZSBpc3N1ZSB3YXMgdHJhY2VkIGJhY2sgdG8gYHBzZV9jb3JlLmNgLiBBbmQgdGhhdCBzcGVjaWZpYyBmaWxlIGdldHMgY29tcGlsZWQgKm9ubHkqIHdoZW4gYFBTRV9DT05UUk9MTEVSYCBpcyBhY3RpdmUuIFNvLCB0aGVyZSdzIGEgZGlyZWN0IGNvbm5lY3Rpb24gdGhlcmUuIE5vdywgbGV0IG1lIGp1c3QgY3Jvc3MtcmVmZXJlbmNlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIE1ha2VmaWxlIHRoYXQgZ292ZXJucyB0aGUgUG9FIFBEIGRyaXZlcnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgcGxhbm5lZCBjb25maWd1cmF0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYnVpbGQgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCBsZXQncyBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBvYnZpb3VzIGluIHRoZSBidWlsZCBwcm9jZXNzIHRoYXQgbWlnaHQgaW5hZHZlcnRlbnRseSBjb250cmlidXRlIHRvIHRoZSBwcm9ibGVtIG9yIGNhdXNlIGFuIHVuaW50ZW5kZWQgY29uc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MzcuMTUwMDU3MzA2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBNYWtlZmlsZSBmb3IgTGludXggUFNFIGRyaXZlcnNcXG4gICAzOlxcdFxcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19QU0VfUkVHVUxBVE9SKSArPSBwc2VfcmVndWxhdG9yLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgKz0gcGQ2OTJ4MC5vXFxuICAgODpcXHRvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19QU0VfVFBTMjM4ODEpICs9IHRwczIzODgxLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6MzcuMTUwMTU5NjE2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTEyOTkwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFBTRSBDb250cm9sbGVyKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgUFNFX0NPTlRST0xMRVJgIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIGl0IGFsbC4gVG8gcmVhbGx5IHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzIHdpdGggc3l6a2FsbGVyLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVycyBhcmUgZW5hYmxlZCwgc28gdGhhdCB0b29sIGNhbiB0cmlnZ2VyIHRoZSBjb3JlIGNvZGUuIFRoYXQgbWVhbnMgd2UncmUgbG9va2luZyBhdDpcblxuKiAgIGBQU0VfQ09OVFJPTExFUmBcbiogICBgUFNFX1JFR1VMQVRPUmBcbiogICBgUFNFX1BENjkyWDBgXG4qICAgYFBTRV9TSTM0NzRgXG4qICAgYFBTRV9UUFMyMzg4MWBcblxuTm93LCB3aGVyZSdzIHRoZSBtb3N0IGltcGFjdGZ1bCBwbGFjZSB0byBzdGFydCBsb29raW5nIGF0IHRoZSBjb2RlPyBJIHNlZSB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBwc2VfcmVsZWFzZV9waXNgLCBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGBwc2VfcGlfZGlzYWJsZWAsIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIEV4Y2VsbGVudC4gVGhlc2UgYXJlbid0IGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgYSB0aG91c2FuZCB0aW1lcyBhIHNlY29uZC4gVGhleSdyZSBjb250cm9sLXBhdGggZnVuY3Rpb25zIGZvciBzZXR1cCwgdGVhcmRvd24sIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBTbywgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBob3QtcGF0aCBjb2RlIHRoYXQgbWlnaHQgYmUgdW5kZXIgaW50ZW5zZSBwZXJmb3JtYW5jZSBwcmVzc3VyZS4gVGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gcmV2ZWFsIGludGVyZXN0aW5nIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoaW4gaXQuIEknbGwgc3RhcnQgd2l0aCBgcHNlX3JlbGVhc2VfcGlzYCB0byBtYWtlIHN1cmUgbm90aGluZyBvYnZpb3VzIGlzIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzMTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwNTowMTo0Mi4xMDE0NjEyMzVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzc0MTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTAwPXN0YXRpYyBpbnQgb2ZfbG9hZF9wc2VfcGlfcGFpcnNldHMoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM3LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEzODpzdGF0aWMgdm9pZCBwc2VfcmVsZWFzZV9waXMoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTE2Mj1zdGF0aWMgaW50IG9mX2xvYWRfcHNlX3BpcyhzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTIzNS1vdXQ6XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MjM2OlxcdHBzZV9yZWxlYXNlX3BpcyhwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMjM3LVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTEzNj12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTQ1LVxcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE0NjpcXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNDctXFx0a2ZpZm9fZnJlZShcXHUwMDI2cGNkZXYtXFx1MDAzZW50Zl9maWZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NDIuMjI1MjA3MjE0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODExNDQzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIFBTRSBSZWxlYXNlIFBJUyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgYHBzZV9yZWxlYXNlX3Bpc2Ag4oCTIHRoYXQncyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gR29vZCBjaG9pY2UuIE5vdywgbGV0J3MganVzdCBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBvcmdhbml6ZWQ6XG5cbiogICBgcHNlX3JlbGVhc2VfcGlzYFxuKiAgIGBwc2VfcGlfaXNfZW5hYmxlZGBcbiogICBgcHNlX3BpX2VuYWJsZWBcbiogICBgcHNlX3BpX2Rpc2FibGVgXG4qICAgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgXG5cblJpZ2h0LCB0aG9zZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIOKAkyBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiB0aGlzIGFyZWE/IE5vLCBsb29rcyBsaWtlIGl0J3MganVzdCB0aG9zZSBmaXZlLiBHb29kLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgY292ZXJlZCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBMZXQgbWUgY2hlY2s6IGBQU0VfQ09OVFJPTExFUmAgZGVwZW5kcyBvbiBgTkVUYCBhbmQgYFBIWUxJQmAsIGNvcnJlY3Q/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCB2ZXJpZnkgdGhvc2UgZGVwZW5kZW5jaWVzLiBPa2F5LCBiYWNrIHRvIGBkcml2ZXJzL25ldC9wc2UtcGQvS2NvbmZpZ2AgZm9yIGFub3RoZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NDYuMzA2MzU0Mzk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBkcml2ZXJzXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgUFNFX0NPTlRST0xMRVJcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkV0aGVybmV0IFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBTdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgR2VuZXJpYyBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgQ29udHJvbGxlciBzdXBwb3J0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IG5vLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRpZiBQU0VfQ09OVFJPTExFUlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgUFNFX1JFR1VMQVRPUlxcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZ3VsYXRvciBiYXNlZCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3Igc2ltcGxlIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldCBQb3dlclxcbiAgMjA6XFx0XFx0ICBTb3VyY2luZyBFcXVpcG1lbnQgd2l0aG91dCBhdXRvbWF0aWMgY2xhc3NpZmljYXRpb24gc3VwcG9ydC4gRm9yXFxuICAyMTpcXHRcXHQgIGV4YW1wbGUgZm9yIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIFBvREwgKDgwMi4zYnUpIHNwZWNpZmljYXRpb24uXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBQU0VfUEQ2OTJYMFxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlBENjkyWDAgUFNFIGNvbnRyb2xsZXJcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIEkyQ1xcbiAgMjY6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjc6XFx0XFx0c2VsZWN0IEZXX1VQTE9BRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBQRDY5MngwIHJlZ3VsYXRvciBiYXNlZCBFdGhlcm5ldFxcbiAgMzA6XFx0XFx0ICBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQuXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZDY5MngwLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgUFNFX1NJMzQ3NFxcbiAgMzY6XFx0XFx0dHJpc3RhdGUgXFxcIlNpMzQ3NCBQU0UgY29udHJvbGxlclxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gSTJDXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFNpMzQ3NCByZWd1bGF0b3IgYmFzZWQgRXRoZXJuZXRcXG4gIDQwOlxcdFxcdCAgUG93ZXIgU291cmNpbmcgRXF1aXBtZW50LlxcbiAgNDE6XFx0XFx0ICBPbmx5IDQtcGFpciBQU0UgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZC5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDQ0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNpMzQ3NC5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIFBTRV9UUFMyMzg4MVxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRQUzIzODgxIFBTRSBjb250cm9sbGVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBJMkNcXG4gIDQ5OlxcdFxcdGhlbHBcXG4gIDUwOlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgVFBTMjM4ODEgcmVndWxhdG9yIGJhc2VkIEV0aGVybmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA1OjAxOjQ2LjMwNjQyOTU5OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTIwNTEyNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQU0UgQ29udHJvbGxlciBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgdGhlIGBQU0VfQ09OVFJPTExFUmAgcmVsaWVzIGhlYXZpbHkgb24gYFJFR1VMQVRPUmAuICBPZiBjb3Vyc2UsIHRoZSBzcGVjaWZpYyBkcml2ZXJzIGFsc28gZGVwZW5kIG9uIGBJMkNgIOKAkyBzdGFuZGFyZCBzdHVmZiBmb3Igc3l6a2FsbGVyLCB1c3VhbGx5IGFscmVhZHkgZW5hYmxlZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNsZWFyIHBpY3R1cmUsIHNvIEknbGwgbGlzdCBvdXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZDpcblxuKiAgIGBQU0VfQ09OVFJPTExFUmBcbiogICBgUFNFX1JFR1VMQVRPUmBcbiogICBgUFNFX1BENjkyWDBgXG4qICAgYFBTRV9TSTM0NzRgXG4qICAgYFBTRV9UUFMyMzg4MWBcblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGEgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIFBTRSBjb250cm9sbGVyIGZyYW1ld29yay4gSXQncyB0aGF0IGNsYXNzaWMgcmFjZSBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvcidzIGRlZmVycmVkIGRpc2FibGUgZmx1c2hpbmcgcHJvY2Vzcy4gVGhlIGZsdXNoIGlzIHRyeWluZyB0byBhY2Nlc3MgYHBjZGV2LVx1MDAzZXBpYCBhZnRlciBpdCdzIGJlZW4gZnJlZWQuIFRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyBudWxsIGNoZWNrcyBhbmQgcmVvcmRlcmluZyB0aGUgdGVhcmRvd24gdG8gcHJldmVudCB0aGlzLlxuXG5UaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCB0aGUgUFNFIGNvcmUgYW5kIGRyaXZlcnMsIGxpa2UgdGhlIEkyQy1iYXNlZCBQRDY5MngwLCBhcmUgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBXZSBjYW4gZnV6eiB0aGVtIGJ5IGNyZWF0aW5nIHZpcnR1YWwgSTJDIG9yIHBsYXRmb3JtIGRldmljZXMgYW5kIGludGVyYWN0aW5nIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZ1bmN0aW9ucyBgcHNlX3BpX2lzX2VuYWJsZWRgLCBgcHNlX3BpX2VuYWJsZWAsIGFuZCBgcHNlX3BpX2Rpc2FibGVgLiBUaGV5IGFyZSBzdGF0aWMgdG8gYHBzZV9jb3JlLmNgLiBUaGlzIGlzIHBlcmZlY3QgYmVjYXVzZSBpZiBTeXprYWxsZXIgdHJpZ2dlcnMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpb25zLCBpdCdsbCBjb3ZlciB0aG9zZSBmdW5jdGlvbnMuIFRoZXkncmUgZ29vZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLiBXZSBoYXZlIHRoZSBuZWNlc3NhcnkgY292ZXJhZ2UgdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cbkknbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMjksIk91dHB1dFRva2VucyI6MjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDU6MDE6NTQuNDI2OTQ1OTU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjY3OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUFNFX1BENjkyWDBcIixcbiAgICBcIlBTRV9TSTM0NzRcIixcbiAgICBcIlBTRV9UUFMyMzg4MVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBzZV9yZWxlYXNlX3Bpc1wiLFxuICAgIFwicHNlX3BpX2lzX2VuYWJsZWRcIixcbiAgICBcInBzZV9waV9lbmFibGVcIixcbiAgICBcInBzZV9waV9kaXNhYmxlXCIsXG4gICAgXCJwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVyIGNvcmUgZnJhbWV3b3JrLiBUaGUgYnVnIG9jY3VycyBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyYCBhbmQgdGhlIHJlZ3VsYXRvciBjb3JlJ3MgZGVmZXJyZWQgZGlzYWJsZSBmbHVzaCwgd2hpY2ggYWNjZXNzZXMgdGhlIGZyZWVkIGBwY2Rldi1cXHUwMDNlcGlgIGFycmF5LiBUaGUgcGF0Y2ggYWRkcyBOVUxMIGNoZWNrcyBhbmQgcmVvcmRlcnMgdGVhcmRvd24gc3RlcHMgdG8gcHJldmVudCB0aGlzLiBUaGUgUFNFIGNvcmUgYW5kIGl0cyBkcml2ZXJzIChlLmcuLCBJMkMtYmFzZWQgUEQ2OTJ4MCkgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgaW5zdGFudGlhdGluZyB2aXJ0dWFsIEkyQyBvciBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZW0gdmlhIHRoZSByZWd1bGF0b3Igb3IgZXRodG9vbCBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFNFX0NPTlRST0xMRVJcIixcbiAgICBcIlBTRV9SRUdVTEFUT1JcIixcbiAgICBcIlBTRV9QRDY5MlgwXCIsXG4gICAgXCJQU0VfU0kzNDc0XCIsXG4gICAgXCJQU0VfVFBTMjM4ODFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2VfcmVsZWFzZV9waXNcIixcbiAgICBcInBzZV9waV9pc19lbmFibGVkXCIsXG4gICAgXCJwc2VfcGlfZW5hYmxlXCIsXG4gICAgXCJwc2VfcGlfZGlzYWJsZVwiLFxuICAgIFwicHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlciBjb3JlIGZyYW1ld29yay4gVGhlIGJ1ZyBvY2N1cnMgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAgYW5kIHRoZSByZWd1bGF0b3IgY29yZSdzIGRlZmVycmVkIGRpc2FibGUgZmx1c2gsIHdoaWNoIGFjY2Vzc2VzIHRoZSBmcmVlZCBgcGNkZXYtXFx1MDAzZXBpYCBhcnJheS4gVGhlIHBhdGNoIGFkZHMgTlVMTCBjaGVja3MgYW5kIHJlb3JkZXJzIHRlYXJkb3duIHN0ZXBzIHRvIHByZXZlbnQgdGhpcy4gVGhlIFBTRSBjb3JlIGFuZCBpdHMgZHJpdmVycyAoZS5nLiwgSTJDLWJhc2VkIFBENjkyeDApIGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGluc3RhbnRpYXRpbmcgdmlydHVhbCBJMkMgb3IgcGxhdGZvcm0gZGV2aWNlcyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGVtIHZpYSB0aGUgcmVndWxhdG9yIG9yIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[1] Phase: Succeeded StartedAt: 2026-07-12 05:02:07 +0000 UTC FinishedAt: 2026-07-12 05:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 05:02:07 +0000 UTC FinishedAt: 2026-07-12 05:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2] Phase: Succeeded StartedAt: 2026-07-12 05:02:07 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 05:02:08 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 05:02:08 +0000 UTC FinishedAt: 2026-07-12 05:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 05:02:08 +0000 UTC FinishedAt: 2026-07-12 05:02:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3338566228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 05:02:20 +0000 UTC FinishedAt: 2026-07-12 05:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 05:02:20 +0000 UTC FinishedAt: 2026-07-12 05:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6b594e1f-841e-48aa-8881-0870bb478eb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3338566228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2bd22b7a-fd42-4332-9964-85dabbf301a7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-1195816402/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 05:02:20 +0000 UTC FinishedAt: 2026-07-12 05:51:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6b594e1f-841e-48aa-8881-0870bb478eb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3338566228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2bd22b7a-fd42-4332-9964-85dabbf301a7", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-1195816402/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 05:51:14 +0000 UTC FinishedAt: 2026-07-12 05:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 05:51:14 +0000 UTC FinishedAt: 2026-07-12 05:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 05:51:14 +0000 UTC FinishedAt: 2026-07-12 05:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 05:51:14 +0000 UTC FinishedAt: 2026-07-12 05:51:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3817351443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 05:51:40 +0000 UTC FinishedAt: 2026-07-12 05:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 05:51:40 +0000 UTC FinishedAt: 2026-07-12 05:53:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2bd22b7a-fd42-4332-9964-85dabbf301a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-1195816402/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 05:53:44 +0000 UTC FinishedAt: 2026-07-12 05:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 05:53:44 +0000 UTC FinishedAt: 2026-07-12 05:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 05:53:44 +0000 UTC FinishedAt: 2026-07-12 06:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 05:53:44 +0000 UTC FinishedAt: 2026-07-12 06:45:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6b594e1f-841e-48aa-8881-0870bb478eb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3817351443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "aad61378-0c34-469e-b3bd-74d85aae7bdd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-3177643847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 05:53:44 +0000 UTC FinishedAt: 2026-07-12 06:45:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6b594e1f-841e-48aa-8881-0870bb478eb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3817351443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "aad61378-0c34-469e-b3bd-74d85aae7bdd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-3177643847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 06:45:55 +0000 UTC FinishedAt: 2026-07-12 06:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 06:45:55 +0000 UTC FinishedAt: 2026-07-12 06:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 06:45:55 +0000 UTC FinishedAt: 2026-07-12 06:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 06:45:55 +0000 UTC FinishedAt: 2026-07-12 06:47:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aad61378-0c34-469e-b3bd-74d85aae7bdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-3177643847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2bd22b7a-fd42-4332-9964-85dabbf301a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aad61378-0c34-469e-b3bd-74d85aae7bdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-1195816402/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-3177643847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 06:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 06:48:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3665864332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 06:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 06:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 06:48:00 +0000 UTC FinishedAt: 2026-07-12 06:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 06:48:10 +0000 UTC FinishedAt: 2026-07-12 07:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcxfbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pse_release_pis","pse_pi_is_enabled","pse_pi_enable","pse_pi_disable","pse_controller_unregister"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PSE_PD692X0","PSE_SI3474","PSE_TPS23881"],"series_id":"e561a5b0-3b82-4610-ad7d-227cf37459ed","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 06:48:10 +0000 UTC FinishedAt: 2026-07-12 07:42:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2bd22b7a-fd42-4332-9964-85dabbf301a7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aad61378-0c34-469e-b3bd-74d85aae7bdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-1195816402/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-build-action-3177643847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcxfbq/series-workflowcxfbq-convert-artifact-3665864332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}