Name: series-workflowqrqnk Phase: Succeeded StartedAt: 2026-08-31 20:06:49 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[0] Phase: Succeeded StartedAt: 2026-08-31 20:06:49 +0000 UTC FinishedAt: 2026-08-31 20:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 20:06:49 +0000 UTC FinishedAt: 2026-08-31 20:29:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IEEE802154" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IEEE802154" ], "series_id": "d00af930-1768-4a84-99fe-3250e98f56c0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCA1MjJlYWIwNjBmOWVkLi5jNzE2MzM2YzUxNzIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTE4OTQsOSAmIzQzOzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbiBcdGludCByZXMgPSAwLCBpO1xuIFxuLVx0aWYgKHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuJiM0MztcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuJiM0MztcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4gXHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4tXHRcdFx0ICAgIFwmIzM0O0NBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICBcJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTM1OWY2NTgzOTY0YWExNmM2MjE2Njc3YzJjMTA1NjE4MzlkNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDoyNjo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTg5NCw5ICYjNDM7MTg5NCwxMSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKIAlpbnQgcmVzID0gMCwgaTsKIAotCWlmIChzbGF2ZV9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0NBTikgewomIzQzOwlpZiAoc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4gfHwKJiM0MzsJICAgIHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAomIzQzOwkgICAgc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHsKIAkJQk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjaywKLQkJCSAgICAmIzM0O0NBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZCYjMzQ7KTsKJiM0MzsJCQkgICAgJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWQmIzM0Oyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcGF0Y2ggdG8gdGhlIGJvbmRpbmcgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlJiMzOTtzIGltcGxpY2F0aW9ucyBhbmQgdmVyaWZ5IHRoYXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXQgaXMgc291bmQuCgpUaGUgYGRpZmZgIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBib25kX2Vuc2xhdmVgIGluIGBib25kX21haW4uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgIGRldmljZSB0eXBlcyBpbiBhZGRpdGlvbiB0byBgQVJQSFJEX0NBTmAgYmVmb3JlIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJlIGVuc2xhdmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHJlc3RyaWN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgc3BlY2lmaWMgaGFyZHdhcmUgdHlwZXMgZnJvbSBiZWluZyBib25kZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmF0aW9uYWxlIGhlcmUuIFdoeSBhcmUgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYmVpbmcgZXhjbHVkZWQ/IElzIGl0IGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgYSBwcm90b2NvbCBpbmNvbXBhdGliaWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGhvcGVmdWxseSBjbGFyaWZ5IHRoZSByZWFzb25zLgoKSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX21haW4uY2AgYXJvdW5kIGBib25kX2Vuc2xhdmVgIHRvIGdyYXNwIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYGJvbmRfZW5zbGF2ZWAgYW5kIHRoZSBvdGhlciBjaGVja3MgcGVyZm9ybWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBkZXZpY2UgdHlwZXMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgdGhlc2UgZGV2aWNlIHR5cGVzIGhhdmUgYW55IHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBuZXR3b3JraW5nLCBhbmQgd2h5IGJvbmRpbmcgdGhlbSBtaWdodCBicmVhayB0aGVzZSByZXF1aXJlbWVudHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQgYm9uZGluZyB0aGVzZSBkZXZpY2UgdHlwZXMgZWl0aGVyIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2Ugb3Igd2lsbCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkuCgpMZXQgbWUgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGdldCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGV0ZXJtaW5lIHdoeSB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGJlaW5nIGFkZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTg5MjpcdFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpzbGF2ZV9vcHMgPSBzbGF2ZV9kZXYtXHUwMDNlbmV0ZGV2X29wcztcbjE4OTM6XHRcdHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlID0gTlVMTCwgKnByZXZfc2xhdmU7XG4xODk0Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbjE4OTU6XHRcdGludCByZXMgPSAwLCBpO1xuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcbjE4OTg6XHRcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuMTg5OTpcdFx0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcbjE5MDA6XHRcdFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcbjE5MDE6XHRcdFx0XHQgICAgXCYjMzQ7Q0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2Fubm90IGJlIGVuc2xhdmVkXCYjMzQ7KTtcbjE5MDI6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjE5MDM6XHRcdH1cbjE5MDQ6XHRcbjE5MDU6XHRcdGlmIChzbGF2ZV9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9NQVNURVIgXHUwMDI2XHUwMDI2XG4xOTA2Olx0XHQgICAgIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpIHtcbjE5MDc6XHRcdFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcbjE5MDg6XHRcdFx0XHQgICAgXCYjMzQ7RGV2aWNlIHR5cGUgKG1hc3RlciBkZXZpY2UpIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTA5Olx0XHRcdHJldHVybiAtRVBFUk07XG4xOTEwOlx0XHR9XG4xOTExOlx0XG4xOTEyOlx0XHQvKiBhbHJlYWR5IGluLXVzZT8gKi9cbjE5MTM6XHRcdGlmIChuZXRkZXZfaXNfcnhfaGFuZGxlcl9idXN5KHNsYXZlX2RldikpIHtcbjE5MTQ6XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjE5MTU6XHRcdFx0XHQgICAgIFwmIzM0O0RldmljZSBpcyBpbiB1c2UgYW5kIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTE2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xOTE3Olx0XHR9XG4xOTE4Olx0XG4xOTE5Olx0XHRpZiAoYm9uZF9kZXYgPT0gc2xhdmVfZGV2KSB7XG4xOTIwOlx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssIFwmIzM0O0Nhbm5vdCBlbnNsYXZlIGJvbmQgdG8gaXRzZWxmLlwmIzM0Oyk7XG4xOTIxOlx0XHRcdHJldHVybiAtRVBFUk07XG4xOTIyOlx0XHR9XG4xOTIzOlx0XG4xOTI0Olx0XHQvKiB2bGFuIGNoYWxsZW5nZWQgbXV0dWFsIGV4Y2x1c2lvbiAqL1xuMTkyNTpcdFx0Lyogbm8gbmVlZCB0byBsb2NrIHNpbmNlIHdlJiMzOTtyZSBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrICovXG4xOTI2Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkge1xuMTkyNzpcdFx0XHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7aXMgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcXG5cJiMzNDspO1xuMTkyODpcdFx0XHRpZiAodmxhbl91c2VzX2Rldihib25kX2RldikpIHtcbjE5Mjk6XHRcdFx0XHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6CgoqKktjb25maWcgRGl2ZSBpbnRvIE5ldHdvcmsgQm9uZGluZywgSUVFRSA4MDIuMTUuNCBhbmQgQ0FOIERyaXZlcnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBkcml2ZXJzIC0gc3BlY2lmaWNhbGx5LCB0aGUgb25lcyB1bmRlciBgZHJpdmVycy9uZXQvYm9uZGluZy9gLCBhbmQgdGhlbiBhbHNvIHRoZSBJRUVFIDgwMi4xNS40IGFuZCBDQU4gZHJpdmVycy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBpdHNlbGYuIEkgc3VzcGVjdCBlaXRoZXIgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2Agb3IgbWF5YmUgZXZlbiBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgd2lsbCBwcm92aWRlIHRoZSBjbHVlcyBJIG5lZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIEV0aGVybmV0IEJvbmRpbmcgZHJpdmVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CT05ESU5HKSAmIzQzOz0gYm9uZGluZy5vXG4gICA3Olx0XG4gICA4Olx0Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXG4gICA5Olx0XG4gIDEwOlx0cHJvYy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gYm9uZF9wcm9jZnMub1xuICAxMTpcdGJvbmRpbmctb2JqcyAmIzQzOz0gJChwcm9jLXkpXG4gIDEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYENPTkZJR19CT05ESU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBHaXZlbiB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5LCBkcml2ZXItbGV2ZWwgY29uZmlndXJhdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSBmb3IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyB0byByZXNpZGUuIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnksIG9yIHBvdGVudGlhbGx5IGEgc3ViLWRpcmVjdG9yeSYjMzk7cyBLY29uZmlnIGZpbGUgaWYgYm9uZGluZyBoYXMgbW9yZSBzcGVjaWFsaXplZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhlIGRlZmluaXRpdmUgbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXQgRHJpdmVycyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgbGluZSA0MCB3aWxsIGNvbnRhaW4gYSBrZXkgZWxlbWVudCDigJMgcGVyaGFwcyBhIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24uIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd29yayB1bmRlciB0aGUgaG9vZCB3aWxsIGhlbHAgbWUgZGVidWcgYSByZWNlbnQgbmV0d29ya2luZyBwcm9ibGVtIEkmIzM5O3ZlIGJlZW4gc2VlaW5nLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgd2VsbC1zdHJ1Y3R1cmVkLCBzbyBJIGNhbiBmaW5kIHdoYXQgSSBuZWVkIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4gIDUxOlx0XHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFJlZmVyIHRvIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XHUwMDNlIGZvciBtb3JlXG4gIDU0Olx0XHQgIGluZm9ybWF0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDU3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXG4gIDU4Olx0XG4gIDU5Olx0Y29uZmlnIERVTU1ZXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cbiAgNjM6XHRcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcbiAgNjQ6XHRcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgdGltZSB0byBhc3Nlc3MgdGhpcy4gSXMgdGhpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIHZhbGlkYXRpb24gd2l0aGluIGBib25kX2Vuc2xhdmVgLCBzcGVjaWZpY2FsbHkgcHJldmVudGluZyBJRUVFIDgwMi4xNS40IGFuZCBJRUVFIDgwMi4xNS40IG1vbml0b3IgZGV2aWNlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIHdpdGhpbiBhIGJvbmRpbmcgaW50ZXJmYWNlLiBOb3csIEkga25vdyB0aGF0IGVuc2xhdmluZyBuZXQgZGV2aWNlcyB0byBhIGJvbmRpbmcgaW50ZXJmYWNlIHZpYSBuZXRsaW5rIG9wZXJhdGlvbnMgbGlrZSBgSUZMQV9NQVNURVJgIG9yIGBSVE1fTkVXTElOS2AsIG9yIGV2ZW4gdGhyb3VnaCBzeXNmcy9pb2N0bCwgaXMgYSBwcmV0dHkgc3RhbmRhcmQgb3BlcmF0aW9uIHRoYXQgc3l6a2FsbGVyIGZyZXF1ZW50bHkgdGFyZ2V0cy4gVGhpcyBpcyBjb3JlIG5ldCBkcml2ZXIgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYm9uZGluZyBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGludGVyZXN0aW5nLgoKVGhlIG5leHQgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQ29uc2lkZXJpbmcgdGhpcyB0b3VjaGVzIG9uIHNvZnR3YXJlIGJvbmRpbmcgaW50ZXJmYWNlcyBhbmQgc29mdHdhcmUgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGxpa2UgYGZha2VsYmAsIGBtYWM4MDIxNTRfaHdzaW1gLCBvciBkdW1teS92aXJ0dWFsIDgwMjE1NCBkZXZpY2VzLCBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZS4gV2UgY2FuIGNyZWF0ZSB0aGVzZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkbHkgYW5kIGVuc2xhdmUgdGhlbS4gVGhlIG1vZGlmaWNhdGlvbiAqZG9lcyogYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBib25kX2Vuc2xhdmVgLiBUaGF0IGluY3JlYXNlcyBpdHMgYXBwZWFsIGFzIGEgdGFyZ2V0LgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBCT05ESU5HYCBkZXBlbmRzIG9uIGBJTkVUYCwgYW5kIGBORVRfQ09SRWAgaXMgcGFydCBvZiBhIG1lbnUgY29uZmlnLiBTbyB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgYnVnIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBpbmNsdWRpbmcgSUVFRTgwMjE1NCBzdXBwb3J0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBJRUVFIDgwMi4xNS40LCBwcm9iYWJseSBpbiBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Agb3IgbWF5YmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIExvb2tzIGxpa2UgdGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCB1c2Ugb2YgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElFRUU4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnOjI6Y29uZmlnIElFRUU4MDIxNTRfNkxPV1BBTlxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDs2bG93cGFuIHN1cHBvcnQgb3ZlciBJRUVFIDgwMi4xNS40XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGBuZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhlcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIGZlYXR1cmVzLCBkcml2ZXJzLCBhbmQgY29uZmlndXJhdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgcmVxdWlyZSBvdGhlcnMgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGtub3cgd2hhdCBvcHRpb25zIGNhbiBiZSBzZXQgaW5kZXBlbmRlbnRseSBhbmQgd2hpY2ggcmVseSBvbiBvdGhlcnMuIEFueSBjb25mbGljdHMgb3IgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIG11c3QgYmUgZnVsbHkgdW5kZXJzdG9vZCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcbiAgIDY6XHRcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcbiAgIDc6XHRcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXG4gICA4Olx0XHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcbiAgIDk6XHRcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXG4gIDEwOlx0XG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDEyOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJRUVFODAyMTU0XG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG4gIDE3Olx0XHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGlkaW5nIGZvciB0aGlzIDgwMi4xNS40IHN0dWZmPyBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIGFuZCB0aGUgdHlwaWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZHJpdmVycy4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcCBmb3IgZ2VuZXJhbCA4MDIuMTUuNCBkcml2ZXIgY29uZmlndXJhdGlvbi4KCkJ1dCB3YWl0LCB0aGVyZSBtaWdodCBiZSBzb21lIGxlc3Mgb2J2aW91cyBwbGFjZXMgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGV4aXN0LCBwYXJ0aWN1bGFybHkgaWYgSSYjMzk7bSBkZWFsaW5nIHdpdGggc2ltdWxhdGVkIGhhcmR3YXJlIG9yIGEgdGVzdCBlbnZpcm9ubWVudC4gU28sIGxldCBtZSBjaGVjayB0aGUgYG1hYzgwMjE1NF9od3NpbWAgZGlyZWN0b3J5LiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgYXJlIHNlcGFyYXRlLCBvciBtaWdodCBpbmZsdWVuY2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgYW0gc2VhcmNoaW5nIGZvci4KCkFuZCBmaW5hbGx5LCBkb24mIzM5O3QgZm9yZ2V0IHRoZSBmYWtlbGIgZGlyZWN0b3J5LiBJdHMgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGRyaXZlcnMuCgpJdCYjMzk7cyBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gYW5kIGRlZHVjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXNlIGZpbGVzIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTRfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBEcml2ZXIgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbG9jYXRlIHRob3NlIElFRUUgODAyLjE1LjQgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCwgYW5kIHdoZXJlIEkmIzM5O2QgKmV4cGVjdCogdG8gZmluZCB0aGVtIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBvcmdhbml6YXRpb24sIGlzIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0YC4gSXQmIzM5O3MgbG9naWNhbCwgcmVhbGx5OyB0aGUgJiMzNDtkcml2ZXJzJiMzNDsgZGlyZWN0b3J5IGlzIHRoZSBvYnZpb3VzIHJvb3QuICYjMzQ7bmV0JiMzNDsgc3BlY2lmaWVzIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGBpZWVlODAyMTU0YCBpcyB0aGUgcHJlY2lzZSBwcm90b2NvbCBmYW1pbHkgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gT2YgY291cnNlLCB0aGlzIGFzc3VtZXMgYSB3ZWxsLXN0cnVjdHVyZWQga2VybmVsLCBidXQgaXQmIzM5O3MgdGhlIG1vc3QgcHJvYmFibGUgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGF0JiMzOTtzIHRoZSBlZmZpY2llbnQgYXBwcm9hY2guIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1YmRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgYW5kIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthZGY3MjQyLmMmIzM0OywKICAgICYjMzQ7YXQ4NnJmMjMwLmMmIzM0OywKICAgICYjMzQ7YXQ4NnJmMjMwLmgmIzM0OywKICAgICYjMzQ7YXR1c2IuYyYjMzQ7LAogICAgJiMzNDthdHVzYi5oJiMzNDssCiAgICAmIzM0O2NhODIxMC5jJiMzNDssCiAgICAmIzM0O2NjMjUyMC5jJiMzNDssCiAgICAmIzM0O2Zha2VsYi5jJiMzNDssCiAgICAmIzM0O21hYzgwMjE1NF9od3NpbS5jJiMzNDssCiAgICAmIzM0O21hYzgwMjE1NF9od3NpbS5oJiMzNDssCiAgICAmIzM0O21jcjIwYS5jJiMzNDssCiAgICAmIzM0O21jcjIwYS5oJiMzNDssCiAgICAmIzM0O21yZjI0ajQwLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIElFRUUgODAyLjE1LjQgRmFrZSBMaW5rIEJ1ZmZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgSUVFRSA4MDIuMTUuNCBmYWtlIGxpbmsgYnVmZmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxldmFudCBkcml2ZXJzLiBTbywgSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZGlyZWN0b3J5IOKAkyBvciB3aGVyZXZlciB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb3RvY29sIGxpdmVzLiBJIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZSBsb2NhdGlvbiBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgd3JvbmcsIGJ1dCB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LgoKT25jZSBJJiMzOTttIGluIHRoZSByaWdodCBLY29uZmlnIGZpbGUsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYElFRUU4MDIxNTRfRkFLRUxCYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBBIHF1aWNrIGdyZXAgZm9yIGBJRUVFODAyMTU0X0ZBS0VMQmAgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIGl0cyBwcmVzZW5jZSwgYWxvbmcgd2l0aCBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIG9yIGRlZmF1bHQgdmFsdWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBncmFzcCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIGRyaXZlcnMuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IGNvZGUgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRUVFODAyMTU0X0ZBS0VMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZz0yPW1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE0OmNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSAmIzQzOz0gZmFrZWxiLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICYjNDM7PSBhdDg2cmYyMzAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXImIzM5O3MgRW5zbGF2ZW1lbnQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGV2aWNlcyBhcmUgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZSwgc28gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBib25kX2Vuc2xhdmVgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYC4gSXQmIzM5O3MgZ29vZCB0aGF0IGl0JiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGNsZWFybHkgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBrbm93IGlmIGVuc2xhdmVtZW50IGlzIGluaXRpYXRlZCB0aHJvdWdoIG5ldGxpbmsgbWVzc2FnZXMgb3Igc3lzZnMgaW50ZXJhY3Rpb25zLiBUaGF0IHdvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZ3JlcCBmb3IgYGJvbmRfZW5zbGF2ZWAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQgcG9wcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NjU9dm9pZCBib25kX3hkcF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4Ny0vKiBlbnNsYXZlIGRldmljZSBcdTAwM2NzbGF2ZVx1MDAzZSB0byBib25kIGRldmljZSBcdTAwM2NtYXN0ZXJcdTAwM2UgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTg4ODppbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4OS1cdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ1ODc9c3RhdGljIGludCBib25kX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQyLVx0Y2FzZSBTSU9DQk9OREVOU0xBVkU6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ2NDM6XHRcdHJlcyA9IGJvbmRfZW5zbGF2ZShib25kX2Rldiwgc2xhdmVfZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDY0NC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk3NC0jZW5kaWZcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk3NTpcdC5uZG9fYWRkX3NsYXZlXHRcdD0gYm9uZF9lbnNsYXZlLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTc2LVx0Lm5kb19kZWxfc2xhdmVcdFx0PSBib25kX3JlbGVhc2UsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNzg2PXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fc2xhdmVzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE4MTEtXHRcdHNsYXZlX2RiZyhib25kLVx1MDAzZWRldiwgZGV2LCBcJiMzNDtFbnNsYXZpbmcgaW50ZXJmYWNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTgxMjpcdFx0cmV0ID0gYm9uZF9lbnNsYXZlKGJvbmQtXHUwMDNlZGV2LCBkZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xODEzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJvbmQgRW5zbGF2ZW1lbnQgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBib25kX2Vuc2xhdmVgIGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgYm9uZCBpbnRlcmZhY2UmIzM5O3Mgc2xhdmUgYWRkaXRpb24gcHJvY2VzcywgYSBrZXkgcGllY2UgcmVsYXRlZCB0byBgbmRvX2FkZF9zbGF2ZWAuIFJpZ2h0LCBgbmRvX2FkZF9zbGF2ZWAgaXMgdGhlIE5ldCBEZXZpY2UgT3BlcmF0b3IgKE5ETykgbWV0aG9kIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNsYXZlIGludGVyZmFjZSB0byBhIGJvbmQgaW50ZXJmYWNlLiBBbmQgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmPyBgYm9uZF9lbnNsYXZlYC4uLnRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBnb29kIGRlc2NyaXB0aXZlIG5hbWUsIGNsZWFybHkgaW5kaWNhdGluZyBpdHMgcHVycG9zZSBvZiBpbmNvcnBvcmF0aW5nIGEgbmV0d29yayBpbnRlcmZhY2UgYXMgYSAmIzM0O3NsYXZlJiMzNDsgd2l0aGluIGEgYm9uZGVkIGludGVyZmFjZSBzZXR1cC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRldGFpbHMgb2YgYm90aCB0aGUgYFNJT0NCT05ERU5TTEFWRWAgaW9jdGwgY2FsbCAqYW5kKiB0aG9zZSBzeXNmcy9uZXRsaW5rIHNsYXZlIGFkZGl0aW9uIG9wdGlvbnMsIHNvIGl0IGlzIGxpa2VseSBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgYSBzbGF2ZSBpbnRlcmZhY2UgYnkgZGlmZmVyZW50IG1lYW5zLiBJdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBpdCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBpbiBgYm9uZF9tYWluLmNgLCBtZWFuaW5nIGl0IGlzIGFjY2Vzc2libGUgYmV5b25kIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpdHMgYXJndW1lbnRzLCByZXR1cm4gdHlwZSwgYW5kIG90aGVyIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGhlYWRlciBmaWxlIChgYm9uZGluZy5oYCkgYW5kIHF1aWNrbHkgcmV2aWV3IHRoYXQuIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIHRoZSByZWxldmFudCBmdW5jdGlvbiBwcm90b3R5cGUgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZW51bXMgSSBtaWdodCBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipGaW5kaW5nIHRoZSBEZWNsYXJhdGlvbiBvZiBgYm9uZF9lbnNsYXZlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBgYm9uZF9lbnNsYXZlYC4gSXTigJlzIGEgY29yZSBmdW5jdGlvbiwgc28gaXTigJlzIGxpa2VseSBpbiBhIHN5c3RlbS1sZXZlbCBvciBwcm9qZWN0LXNwZWNpZmljIGluY2x1ZGUuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGZpcnN0IHN1c3BlY3QgYSBmaWxlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBzZWN1cml0eS1yZWxhdGVkIGxpYnJhcnkgaWYg4oCcZW5zbGF2ZeKAnSBpbXBsaWVzIGNvbnRyb2xsZWQgYWNjZXNzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgc3RhbmRhcmQgaW5jbHVkZSBwYXRocywgbG9va2luZyBmb3IgaXQuIElmIHRoYXQgeWllbGRzIG5vdGhpbmcsIEkmIzM5O2xsIG1vdmUgb24gdG8gcHJvamVjdC1zcGVjaWZpYyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBJIG1pZ2h0IGhhdmUgdG8gZ3JlcCB0aHJvdWdoIGEga25vd24gbGlzdCBvZiBsaWtlbHkgaGVhZGVyIGZpbGVzIGluIG15IHByb2plY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24sIHNpbmNlIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoZXJlIGl0IGJlbG9uZ3MuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBoZWFkZXIgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHNpZ25hdHVyZSwgaXRzIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBjb25zdGFudHMuIE9uY2UgSSBmaW5kIGl0LCBJJiMzOTtsbCBjYXJlZnVsbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBjbHVlcyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBwb3NzaWJsZSBjb25zdHJhaW50cy4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gYmVzdCBpbnRlcmZhY2Ugd2l0aCBpdCBhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaD02ODY9dm9pZCBib25kX3hkcF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo2ODc6aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNjg4LVx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMgoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBib25kX2Vuc2xhdmUqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgcnVuZG93bi4gSSYjMzk7dmUgZ290IGBib25kX2Vuc2xhdmVgLCBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIHByZXNlbnQuIEZpcnN0LCBgQk9ORElOR2Ag4oCTIGRlcGVuZHMgb24gYElORVRgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gVGhlbiwgd2UgbmVlZCB0byBjb25zaWRlciBgSUVFRTgwMjE1NGAsIGp1c3QgaW4gY2FzZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElFRUU4MDIxNTQgbmV0ZGV2aWNlcy4KCk5vdyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFllcCwgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGdvb2QuIGBGb2N1c1N5bWJvbHNgIGlzIGNvcnJlY3RseSBzZXQgd2l0aCBbJiMzNDtib25kX2Vuc2xhdmUmIzM0O10uIFdlJiMzOTtyZSBhbHNvIGVuYWJsaW5nIGBCT05ESU5HYCwgYElORVRgLCBhbmQgYElFRUU4MDIxNTRgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggd2hhdCB3ZSBuZWVkIHRvIHRlc3QuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgY2xlYXIsIHdoaWNoIGlzIGFsd2F5cyBhcHByZWNpYXRlZC4gVG9vbHMgY29uZmlybSBldmVyeXRoaW5nLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBJRUVFIDgwMi4xNS40IGFuZCBJRUVFIDgwMi4xNS40IG1vbml0b3IgZGV2aWNlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIGludG8gYSBib25kaW5nIG1hc3RlciBkZXZpY2UgYnkgY2hlY2tpbmcgZGV2aWNlIHR5cGUgaW4gYm9uZF9lbnNsYXZlKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBib25kaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2UgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB0byByZWplY3QgZW5zbGF2ZW1lbnQgb2YgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGRldmljZXMgKGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCkgYWxvbmdzaWRlIENBTiBkZXZpY2VzIGJ5IHJldHVybmluZyBgLUVQRVJNYC5cblxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSB2YWxpZGF0aW9uIGNoZWNrIG9uIGBzbGF2ZV9kZXYtXHUwMDNldHlwZWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDUzNTlmNjU4Mzk2NGFhMTZjNjIxNjY3N2MyYzEwNTYxODM5ZDU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjA6MjY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA1MjJlYWIwNjBmOWVkLi5jNzE2MzM2YzUxNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTE4OTQsOSAmIzQzOzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CiAJaW50IHJlcyA9IDAsIGk7CiAKLQlpZiAoc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4pIHsKJiM0MzsJaWYgKHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfQ0FOIHx8CiYjNDM7CSAgICBzbGF2ZV9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHwKJiM0MzsJICAgIHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7CiAJCUJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssCi0JCQkgICAgJiMzNDtDQU4gZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWQmIzM0Oyk7CiYjNDM7CQkJICAgICYjMzQ7Q0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2Fubm90IGJlIGVuc2xhdmVkJiMzNDspOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLCBvciBpbmNyZWFzZXMgdGhlIGV4aXN0aW5nIGF0dGFjayBzdXJmYWNlLiBJIHNlZSB0aGUgZGlmZi4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkaXNhbGxvd2luZyBjZXJ0YWluIGRldmljZSB0eXBlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIHRvIGEgYm9uZGluZyBpbnRlcmZhY2UuIFByZXZpb3VzbHksIG9ubHkgQ0FOIGRldmljZXMgd2VyZSByZWplY3RlZCwgYW5kIG5vdyBJRUVFIDgwMi4xNS40IGFuZCBtb25pdG9yIG1vZGVzIGFyZSBleGNsdWRlZCBhcyB3ZWxsLiBUaGUgY2hlY2sgaW52b2x2ZXMgYHNsYXZlX2Rldi0mZ3Q7dHlwZWAsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBlcnJvcnMgYXJpc2UgaW4gZGV2aWNlIGRyaXZlcnMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbmV0d29ya2luZywgdGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiB3ZWlyZCBpbnRlcmFjdGlvbnMsIGVzcGVjaWFsbHkgd2l0aCBwb3RlbnRpYWxseSBsZXNzIGNvbW1vbiBvciBuZXdlciBkZXZpY2UgdHlwZXMuIFdoaWxlIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgY2hlY2sg4oCTIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiBgYm9uZF9tYWluLmNgLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyZWFzIGluIHRoZSBmaWxlIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBkZXZpY2UgdHlwZXM/IEFyZSB3ZSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBib25kaW5nIGRyaXZlciB3aGVyZSB0aGlzIGNoZWNrIGlzIG5lZWRlZD8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGEgbG93LXJpc2sgY2hhbmdlLCBnaXZlbiB0aGUgbGltaXRlZCBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hlY2ssIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gYmVmb3JlIG1ha2luZyBhIGZpbmFsIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTA6XHR7XG4xODkxOlx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE4OTI6XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4xODkzOlx0XHRzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSA9IE5VTEwsICpwcmV2X3NsYXZlO1xuMTg5NDpcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4xODk1Olx0XHRpbnQgcmVzID0gMCwgaTtcbjE4OTY6XHRcbjE4OTc6XHRcdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4xODk4Olx0XHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbjE4OTk6XHRcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4xOTAwOlx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4xOTAxOlx0XHRcdFx0ICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTAyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xOTAzOlx0XHR9XG4xOTA0Olx0XG4xOTA1Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTUFTVEVSIFx1MDAyNlx1MDAyNlxuMTkwNjpcdFx0ICAgICFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKSB7XG4xOTA3Olx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4xOTA4Olx0XHRcdFx0ICAgIFwmIzM0O0RldmljZSB0eXBlIChtYXN0ZXIgZGV2aWNlKSBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuMTkwOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTkxMDpcdFx0fVxuMTkxMTpcdFxuMTkxMjpcdFx0LyogYWxyZWFkeSBpbi11c2U/ICovXG4xOTEzOlx0XHRpZiAobmV0ZGV2X2lzX3J4X2hhbmRsZXJfYnVzeShzbGF2ZV9kZXYpKSB7XG4xOTE0Olx0XHRcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXG4xOTE1Olx0XHRcdFx0ICAgICBcJiMzNDtEZXZpY2UgaXMgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuMTkxNjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMTkxNzpcdFx0fVxuMTkxODpcdFxuMTkxOTpcdFx0aWYgKGJvbmRfZGV2ID09IHNsYXZlX2Rldikge1xuMTkyMDpcdFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5zbGF2ZSBib25kIHRvIGl0c2VsZi5cJiMzNDspO1xuMTkyMTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTkyMjpcdFx0fVxuMTkyMzpcdFxuMTkyNDpcdFx0LyogdmxhbiBjaGFsbGVuZ2VkIG11dHVhbCBleGNsdXNpb24gKi9cbjE5MjU6XHRcdC8qIG5vIG5lZWQgdG8gbG9jayBzaW5jZSB3ZSYjMzk7cmUgcHJvdGVjdGVkIGJ5IHJ0bmxfbG9jayAqL1xuMTkyNjpcdFx0aWYgKHNsYXZlX2Rldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpIHtcbjE5Mjc6XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O2lzIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEXFxuXCYjMzQ7KTtcbjE5Mjg6XHRcdFx0aWYgKHZsYW5fdXNlc19kZXYoYm9uZF9kZXYpKSB7XG4xOTI5Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjE5MzA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7Q2FuIG5vdCBlbnNsYXZlIFZMQU4gY2hhbGxlbmdlZCBkZXZpY2UgdG8gVkxBTiBlbmFibGVkIGJvbmRcJiMzNDspO1xuMTkzMTpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4xOTMyOlx0XHRcdH0gZWxzZSB7XG4xOTMzOlx0XHRcdFx0c2xhdmVfd2Fybihib25kX2Rldiwgc2xhdmVfZGV2LCBcJiMzNDtlbnNsYXZlZCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUuIEFkZGluZyBWTEFOcyB3aWxsIGJlIGJsb2NrZWQgYXMgbG9uZyBhcyBpdCBpcyBwYXJ0IG9mIGJvbmQuXFxuXCYjMzQ7KTtcbjE5MzQ6XHRcdFx0fVxuMTkzNTpcdFx0fSBlbHNlIHtcbjE5MzY6XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O2lzICFORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcblwmIzM0Oyk7XG4xOTM3Olx0XHR9XG4xOTM4Olx0XG4xOTM5Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4NAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvbmUg4oCTIGl0JiMzOTtzIGJhc2ljYWxseSBhIGd1YXJkcmFpbC4gSXQmIzM5O3MgYWRkaW5nIGEgY2hlY2sgaW4gdGhlIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uIHRvIHByZXZlbnQgSUVFRSA4MDIuMTUuNCBhbmQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBib25kaW5nIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2dvb2QsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBzb2x2ZXMgYSBsZWdpdGltYXRlIHByb2JsZW0uJiMzNDsgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGFkZGluZyB0aGVzZSBkZXZpY2UgdHlwZXMgdG8gYSBib25kaW5nIGludGVyZmFjZSBpcyBhIGJhZCBpZGVhIGR1ZSB0byBoZWFkZXIgcGFyc2luZyBpc3N1ZXMgYW5kIHBvdGVudGlhbCBjcmFzaGVzLCBiZWNhdXNlIHRoZSBib25kaW5nIGRyaXZlciBpcyBhcmNoaXRlY3RlZCBmb3IgRXRoZXJuZXQtbGlrZSBkZXZpY2VzLCBub3QgSUVFRSA4MDIuMTUuNCBmcmFtZXMuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QsIGVuc3VyaW5nIHRoaXMgd29uJiMzOTt0IGludHJvZHVjZSBpdHMgb3duIHByb2JsZW1zLgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZSwgbm8gY2hhbmdlIHRoZXJlLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZC4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOYWgsIGBzbGF2ZV9kZXYtJmd0O3R5cGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGEgbmV0IGRldmljZSBpcyByZWdpc3RlcmVkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm90IGludm9sdmVkIGluIHRoaXMgcGF0Y2guCjQuICBCb3VuZHMgY2hlY2tzIG9yIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vcGUsIGl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgZWFybHkgcmV0dXJuIG9uIHRoZSBlcnJvciBwYXRoLgoKQmFzZWQgb24gdGhhdCwgaXTigJlzIGEgcHJldHR5IHNpbXBsZSB0eXBlIHJlamVjdGlvbiBjaGVjay4gV2UmIzM5O3JlIHJlamVjdGluZyBgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmAgZHVyaW5nIHRoZSBlbnNsYXZlbWVudCBwcm9jZXNzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnb2luZyBhbnl3aGVyZSBuZWFyIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHN5emthbGxlciB0ZXN0aW5nIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgaGVyZS4KClRoZXJlZm9yZSwgSSB0aGluayB3ZSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBgc2V0LXJlc3VsdHNgLCBhbG9uZyB3aXRoIHRoZSByZWFzb25pbmcgSSBqdXN0IHdlbnQgdGhyb3VnaC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBzYWZlIGZpeCwgYW5kIEnigJltIHJlYWR5IHRvIG1vdmUgaXQgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxuXG5UaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGRldmljZSB0eXBlIHZhbGlkYXRpb24gY2hlY2sgb24gYHNsYXZlX2Rldi1cdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI2OjU4LjU4MTk1OTM3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU5NDkwOTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJRUVFODAyMTU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB0byByZWplY3QgZW5zbGF2ZW1lbnQgb2YgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGRldmljZXMgKGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCkgYWxvbmdzaWRlIENBTiBkZXZpY2VzIGJ5IHJldHVybmluZyBgLUVQRVJNYC5cXG5cXG5UaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGRldmljZSB0eXBlIHZhbGlkYXRpb24gY2hlY2sgb24gYHNsYXZlX2Rldi1cXHUwMDNldHlwZWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MjY6NTguNTgxOTYzNTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwODA0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZDUzNTlmNjU4Mzk2NGFhMTZjNjIxNjY3N2MyYzEwNTYxODM5ZDU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuaW5kZXggNTIyZWFiMDYwZjllZC4uYzcxNjMzNmM1MTcyMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xcbkBAIC0xODk0LDkgKzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuIFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbiBcXHRpbnQgcmVzID0gMCwgaTtcXG4gXFxuLVxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTikge1xcbitcXHRpZiAoc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcXG4rXFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbitcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcXG4gXFx0XFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcXG4tXFx0XFx0XFx0ICAgIFxcXCJDQU4gZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4rXFx0XFx0XFx0ICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MjY6NTkuMDI5NjUxMDg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzI0ODAyNzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSUVFRTgwMjE1NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMTg5NCw5ICsxODk0LDExIEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4gXHRpbnQgcmVzID0gMCwgaTtcbiBcbi1cdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuK1x0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuIFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxuLVx0XHRcdCAgICBcIkNBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwiKTtcbitcdFx0XHQgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcIik7XG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNjo1OS4wMjk2NTIzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDI5MTg4MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMgYW5kIHZlcmlmeSB0aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IGlzIHNvdW5kLlxuXG5UaGUgYGRpZmZgIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBib25kX2Vuc2xhdmVgIGluIGBib25kX21haW4uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgIGRldmljZSB0eXBlcyBpbiBhZGRpdGlvbiB0byBgQVJQSFJEX0NBTmAgYmVmb3JlIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJlIGVuc2xhdmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHJlc3RyaWN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgc3BlY2lmaWMgaGFyZHdhcmUgdHlwZXMgZnJvbSBiZWluZyBib25kZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByYXRpb25hbGUgaGVyZS4gV2h5IGFyZSBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBiZWluZyBleGNsdWRlZD8gSXMgaXQgYSBoYXJkd2FyZSBsaW1pdGF0aW9uLCBhIHByb3RvY29sIGluY29tcGF0aWJpbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgaG9wZWZ1bGx5IGNsYXJpZnkgdGhlIHJlYXNvbnMuXG5cbkknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX21haW4uY2AgYXJvdW5kIGBib25kX2Vuc2xhdmVgIHRvIGdyYXNwIHRoZSBmdWxsIGNvbnRleHQuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBgYm9uZF9lbnNsYXZlYCBhbmQgdGhlIG90aGVyIGNoZWNrcyBwZXJmb3JtZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGRldmljZSB0eXBlcyBhcmUgaGFuZGxlZC4gSSdsbCBhbHNvIGNoZWNrIGlmIHRoZXNlIGRldmljZSB0eXBlcyBoYXZlIGFueSBzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3IgbmV0d29ya2luZywgYW5kIHdoeSBib25kaW5nIHRoZW0gbWlnaHQgYnJlYWsgdGhlc2UgcmVxdWlyZW1lbnRzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGJvbmRpbmcgdGhlc2UgZGV2aWNlIHR5cGVzIGVpdGhlciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb3Igd2lsbCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkuXG5cbkxldCBtZSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkZXRlcm1pbmUgd2h5IHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgYmVpbmcgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzowNy4wNTg4NDI4NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODkwOlxcdHtcXG4xODkxOlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xcbjE4OTI6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpzbGF2ZV9vcHMgPSBzbGF2ZV9kZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuMTg5MzpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSA9IE5VTEwsICpwcmV2X3NsYXZlO1xcbjE4OTQ6XFx0XFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XFxuMTg5NTpcXHRcXHRpbnQgcmVzID0gMCwgaTtcXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XFxuMTg5ODpcXHRcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxuMTg5OTpcXHRcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcXG4xOTAwOlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXFxuMTkwMTpcXHRcXHRcXHRcXHQgICAgXFxcIkNBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFxcXCIpO1xcbjE5MDI6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTAzOlxcdFxcdH1cXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTUFTVEVSIFxcdTAwMjZcXHUwMDI2XFxuMTkwNjpcXHRcXHQgICAgIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpIHtcXG4xOTA3OlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXFxuMTkwODpcXHRcXHRcXHRcXHQgICAgXFxcIkRldmljZSB0eXBlIChtYXN0ZXIgZGV2aWNlKSBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTA5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkxMDpcXHRcXHR9XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qIGFscmVhZHkgaW4tdXNlPyAqL1xcbjE5MTM6XFx0XFx0aWYgKG5ldGRldl9pc19yeF9oYW5kbGVyX2J1c3koc2xhdmVfZGV2KSkge1xcbjE5MTQ6XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4xOTE1OlxcdFxcdFxcdFxcdCAgICAgXFxcIkRldmljZSBpcyBpbiB1c2UgYW5kIGNhbm5vdCBiZSBlbnNsYXZlZFxcXCIpO1xcbjE5MTY6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xOTE3OlxcdFxcdH1cXG4xOTE4OlxcdFxcbjE5MTk6XFx0XFx0aWYgKGJvbmRfZGV2ID09IHNsYXZlX2Rldikge1xcbjE5MjA6XFx0XFx0XFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjaywgXFxcIkNhbm5vdCBlbnNsYXZlIGJvbmQgdG8gaXRzZWxmLlxcXCIpO1xcbjE5MjE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTIyOlxcdFxcdH1cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0LyogdmxhbiBjaGFsbGVuZ2VkIG11dHVhbCBleGNsdXNpb24gKi9cXG4xOTI1OlxcdFxcdC8qIG5vIG5lZWQgdG8gbG9jayBzaW5jZSB3ZSdyZSBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrICovXFxuMTkyNjpcXHRcXHRpZiAoc2xhdmVfZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEKSB7XFxuMTkyNzpcXHRcXHRcXHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXFxcImlzIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEXFxcXG5cXFwiKTtcXG4xOTI4OlxcdFxcdFxcdGlmICh2bGFuX3VzZXNfZGV2KGJvbmRfZGV2KSkge1xcbjE5Mjk6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6MDcuMDU5MTI2NDQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExMzM0MTYxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6XG5cbioqS2NvbmZpZyBEaXZlIGludG8gTmV0d29yayBCb25kaW5nLCBJRUVFIDgwMi4xNS40IGFuZCBDQU4gRHJpdmVycyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBkcml2ZXJzIC0gc3BlY2lmaWNhbGx5LCB0aGUgb25lcyB1bmRlciBgZHJpdmVycy9uZXQvYm9uZGluZy9gLCBhbmQgdGhlbiBhbHNvIHRoZSBJRUVFIDgwMi4xNS40IGFuZCBDQU4gZHJpdmVycy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBpdHNlbGYuIEkgc3VzcGVjdCBlaXRoZXIgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2Agb3IgbWF5YmUgZXZlbiBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgd2lsbCBwcm92aWRlIHRoZSBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzozOC4xOTI1NDQ2MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgRXRoZXJuZXQgQm9uZGluZyBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbiAgIDc6XFx0XFxuICAgODpcXHRib25kaW5nLW9ianMgOj0gYm9uZF9tYWluLm8gYm9uZF8zYWQubyBib25kX2FsYi5vIGJvbmRfc3lzZnMubyBib25kX3N5c2ZzX3NsYXZlLm8gYm9uZF9kZWJ1Z2ZzLm8gYm9uZF9uZXRsaW5rLm8gYm9uZF9vcHRpb25zLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0cHJvYy0kKENPTkZJR19QUk9DX0ZTKSArPSBib25kX3Byb2Nmcy5vXFxuICAxMTpcXHRib25kaW5nLW9ianMgKz0gJChwcm9jLXkpXFxuICAxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6MzguMTkyNTk5MTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM0NTE0NTIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfQk9ORElOR2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsIHNvdXJjZS4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5LCBkcml2ZXItbGV2ZWwgY29uZmlndXJhdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSBmb3IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyB0byByZXNpZGUuIEknbGwganVtcCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSwgb3IgcG90ZW50aWFsbHkgYSBzdWItZGlyZWN0b3J5J3MgS2NvbmZpZyBmaWxlIGlmIGJvbmRpbmcgaGFzIG1vcmUgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRoZSBkZWZpbml0aXZlIGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzo0Ny41Mzc3NDY0NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzMyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzo0Ny42OTAwODI4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjI4NjgwOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXQgRHJpdmVycyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSA0MCB3aWxsIGNvbnRhaW4gYSBrZXkgZWxlbWVudCDigJMgcGVyaGFwcyBhIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24uIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyB3b3JrIHVuZGVyIHRoZSBob29kIHdpbGwgaGVscCBtZSBkZWJ1ZyBhIHJlY2VudCBuZXR3b3JraW5nIHByb2JsZW0gSSd2ZSBiZWVuIHNlZWluZy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHdlbGwtc3RydWN0dXJlZCwgc28gSSBjYW4gZmluZCB3aGF0IEkgbmVlZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6NTkuOTc2ODk0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6NTkuOTc2OTcyNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzczNjAzODczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGFzc2VzcyB0aGlzLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIGJyZWFrIGl0IGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGFkZGluZyB2YWxpZGF0aW9uIHdpdGhpbiBgYm9uZF9lbnNsYXZlYCwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCB3aXRoaW4gYSBib25kaW5nIGludGVyZmFjZS4gTm93LCBJIGtub3cgdGhhdCBlbnNsYXZpbmcgbmV0IGRldmljZXMgdG8gYSBib25kaW5nIGludGVyZmFjZSB2aWEgbmV0bGluayBvcGVyYXRpb25zIGxpa2UgYElGTEFfTUFTVEVSYCBvciBgUlRNX05FV0xJTktgLCBvciBldmVuIHRocm91Z2ggc3lzZnMvaW9jdGwsIGlzIGEgcHJldHR5IHN0YW5kYXJkIG9wZXJhdGlvbiB0aGF0IHN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMuIFRoaXMgaXMgY29yZSBuZXQgZHJpdmVyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGJvbmRpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQncyB1c3VhbGx5IGludGVyZXN0aW5nLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgZWFzaWx5IHJlcHJvZHVjZWQgaW4gYSBRRU1VIGVudmlyb25tZW50PyBDb25zaWRlcmluZyB0aGlzIHRvdWNoZXMgb24gc29mdHdhcmUgYm9uZGluZyBpbnRlcmZhY2VzIGFuZCBzb2Z0d2FyZSBJRUVFIDgwMi4xNS40IGRldmljZXMgbGlrZSBgZmFrZWxiYCwgYG1hYzgwMjE1NF9od3NpbWAsIG9yIGR1bW15L3ZpcnR1YWwgODAyMTU0IGRldmljZXMsIGl0IHNob3VsZCBiZSBlYXNpbHkgcmVhY2hhYmxlLiBXZSBjYW4gY3JlYXRlIHRoZXNlIHByZXR0eSBzdHJhaWdodGZvcndhcmRseSBhbmQgZW5zbGF2ZSB0aGVtLiBUaGUgbW9kaWZpY2F0aW9uICpkb2VzKiBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGJvbmRfZW5zbGF2ZWAuIFRoYXQgaW5jcmVhc2VzIGl0cyBhcHBlYWwgYXMgYSB0YXJnZXQuXG5cbkFscmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBCT05ESU5HYCBkZXBlbmRzIG9uIGBJTkVUYCwgYW5kIGBORVRfQ09SRWAgaXMgcGFydCBvZiBhIG1lbnUgY29uZmlnLiBTbyB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgYnVnIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGluY2x1ZGluZyBJRUVFODAyMTU0IHN1cHBvcnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgSUVFRSA4MDIuMTUuNCwgcHJvYmFibHkgaW4gYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIG9yIG1heWJlIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIHRoaXMgY291bGQgYmUgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhIGdvb2QgdXNlIG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODowMy43MTMwMTM3NjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjQ5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnOjI6Y29uZmlnIElFRUU4MDIxNTRfNkxPV1BBTlxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCI2bG93cGFuIHN1cHBvcnQgb3ZlciBJRUVFIDgwMi4xNS40XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjAzLjc4MTI2Nzg5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3MzE3MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcywgZHJpdmVycywgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG9yIHJlcXVpcmUgb3RoZXJzIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byBrbm93IHdoYXQgb3B0aW9ucyBjYW4gYmUgc2V0IGluZGVwZW5kZW50bHkgYW5kIHdoaWNoIHJlbHkgb24gb3RoZXJzLiBBbnkgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBtdXN0IGJlIGZ1bGx5IHVuZGVyc3Rvb2QgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjA2LjM5ODU4ODEwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xcbiAgIDY6XFx0XFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xcbiAgIDc6XFx0XFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cXG4gICA4OlxcdFxcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxcbiAgIDk6XFx0XFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTFItV1BBTiBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xcbiAgMTI6XFx0XFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIElFRUU4MDIxNTRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXFxuICAxNzpcXHRcXHRib29sIFxcXCJJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODowNi4zOTg2NTE1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNzg1MTA3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZywgd2hlcmUgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhpZGluZyBmb3IgdGhpcyA4MDIuMTUuNCBzdHVmZj8gSSBrbm93IEkndmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIGFuZCB0aGUgdHlwaWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZHJpdmVycy4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Ag4oCTIHRoYXQncyB0aGUgb2J2aW91cyBmaXJzdCBzdG9wIGZvciBnZW5lcmFsIDgwMi4xNS40IGRyaXZlciBjb25maWd1cmF0aW9uLlxuXG5CdXQgd2FpdCwgdGhlcmUgbWlnaHQgYmUgc29tZSBsZXNzIG9idmlvdXMgcGxhY2VzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBleGlzdCwgcGFydGljdWxhcmx5IGlmIEknbSBkZWFsaW5nIHdpdGggc2ltdWxhdGVkIGhhcmR3YXJlIG9yIGEgdGVzdCBlbnZpcm9ubWVudC4gU28sIGxldCBtZSBjaGVjayB0aGUgYG1hYzgwMjE1NF9od3NpbWAgZGlyZWN0b3J5LiBJdCdzIHBvc3NpYmxlIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0eXBlIG9mIHNpbXVsYXRlZCBoYXJkd2FyZSBhcmUgc2VwYXJhdGUsIG9yIG1pZ2h0IGluZmx1ZW5jZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBhbSBzZWFyY2hpbmcgZm9yLlxuXG5BbmQgZmluYWxseSwgZG9uJ3QgZm9yZ2V0IHRoZSBmYWtlbGIgZGlyZWN0b3J5LiBJdHMgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGRyaXZlcnMuXG5cbkl0J3MgYSBwcm9jZXNzIG9mIGVsaW1pbmF0aW9uIGFuZCBkZWR1Y3Rpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlc2UgZmlsZXMgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjI1LjQ3NzE2NTMxOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMDU0NTQ1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0X0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODoyNi4yMTcyMjc4MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU4MDUyMTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElFRUUgODAyLjE1LjQgRHJpdmVyIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gVGltZSB0byBsb2NhdGUgdGhvc2UgSUVFRSA4MDIuMTUuNCBkcml2ZXJzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBhbmQgd2hlcmUgSSdkICpleHBlY3QqIHRvIGZpbmQgdGhlbSBiYXNlZCBvbiBzdGFuZGFyZCBrZXJuZWwgb3JnYW5pemF0aW9uLCBpcyBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NGAuIEl0J3MgbG9naWNhbCwgcmVhbGx5OyB0aGUgXCJkcml2ZXJzXCIgZGlyZWN0b3J5IGlzIHRoZSBvYnZpb3VzIHJvb3QuIFwibmV0XCIgc3BlY2lmaWVzIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGBpZWVlODAyMTU0YCBpcyB0aGUgcHJlY2lzZSBwcm90b2NvbCBmYW1pbHkgd2UncmUgaW50ZXJlc3RlZCBpbi4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gT2YgY291cnNlLCB0aGlzIGFzc3VtZXMgYSB3ZWxsLXN0cnVjdHVyZWQga2VybmVsLCBidXQgaXQncyB0aGUgbW9zdCBwcm9iYWJsZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQncyB0aGUgZWZmaWNpZW50IGFwcHJvYWNoLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1YmRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgYW5kIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODozNC43OTc3NTE4OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWRmNzI0Mi5jXCIsXG4gICAgXCJhdDg2cmYyMzAuY1wiLFxuICAgIFwiYXQ4NnJmMjMwLmhcIixcbiAgICBcImF0dXNiLmNcIixcbiAgICBcImF0dXNiLmhcIixcbiAgICBcImNhODIxMC5jXCIsXG4gICAgXCJjYzI1MjAuY1wiLFxuICAgIFwiZmFrZWxiLmNcIixcbiAgICBcIm1hYzgwMjE1NF9od3NpbS5jXCIsXG4gICAgXCJtYWM4MDIxNTRfaHdzaW0uaFwiLFxuICAgIFwibWNyMjBhLmNcIixcbiAgICBcIm1jcjIwYS5oXCIsXG4gICAgXCJtcmYyNGo0MC5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjM0Ljc5NzgwODA1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA1Mjg1OTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBGYWtlIExpbmsgQnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIElFRUUgODAyLjE1LjQgZmFrZSBsaW5rIGJ1ZmZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCwgYmFzZWQgb24gZXhwZXJpZW5jZSwgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsZXZhbnQgZHJpdmVycy4gU28sIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZGlyZWN0b3J5IOKAkyBvciB3aGVyZXZlciB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb3RvY29sIGxpdmVzLiBJIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZSBsb2NhdGlvbiBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgd3JvbmcsIGJ1dCB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuXG5cbk9uY2UgSSdtIGluIHRoZSByaWdodCBLY29uZmlnIGZpbGUsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgSUVFRTgwMjE1NF9GQUtFTEJgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEEgcXVpY2sgZ3JlcCBmb3IgYElFRUU4MDIxNTRfRkFLRUxCYCB3aWxsIGhvcGVmdWxseSByZXZlYWwgaXRzIHByZXNlbmNlLCBhbG9uZyB3aXRoIGFueSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgb3IgZGVmYXVsdCB2YWx1ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgZHJpdmVycy4gVGhpcyBzaG91bGQgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgY29kZSBhbmQgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjg6NDQuODUwNjY5ODY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk1MzU3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTI9bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSArPSBmYWtlbGIub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICs9IGF0ODZyZjIzMC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ1LjgyMDIxMDEzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjIzNjQ3MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIncyBFbnNsYXZlbWVudCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGV2aWNlcyBhcmUgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZSwgc28gSSdtIHN0YXJ0aW5nIHdpdGggYGJvbmRfZW5zbGF2ZWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCdzIGdvb2QgdGhhdCBpdCdzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24sIHNvIGl0J3MgY2xlYXJseSBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIE15IG5leHQgdGhvdWdodCBpcywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgZW5zbGF2ZW1lbnQgaXMgaW5pdGlhdGVkIHRocm91Z2ggbmV0bGluayBtZXNzYWdlcyBvciBzeXNmcyBpbnRlcmFjdGlvbnMuIFRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGltZSB0byBydW4gYSBxdWljayBncmVwIGZvciBgYm9uZF9lbnNsYXZlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCBwb3BzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ4LjA0Mzg2MDMxNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5OTkxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9lbnNsYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODY1PXZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4Ny0vKiBlbnNsYXZlIGRldmljZSBcXHUwMDNjc2xhdmVcXHUwMDNlIHRvIGJvbmQgZGV2aWNlIFxcdTAwM2NtYXN0ZXJcXHUwMDNlICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODg4OmludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4OS1cXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTg3PXN0YXRpYyBpbnQgYm9uZF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQyLVxcdGNhc2UgU0lPQ0JPTkRFTlNMQVZFOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDY0MzpcXHRcXHRyZXMgPSBib25kX2Vuc2xhdmUoYm9uZF9kZXYsIHNsYXZlX2RldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTc0LSNlbmRpZlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk3NTpcXHQubmRvX2FkZF9zbGF2ZVxcdFxcdD0gYm9uZF9lbnNsYXZlLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk3Ni1cXHQubmRvX2RlbF9zbGF2ZVxcdFxcdD0gYm9uZF9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNzg2PXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fc2xhdmVzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTgxMS1cXHRcXHRzbGF2ZV9kYmcoYm9uZC1cXHUwMDNlZGV2LCBkZXYsIFxcXCJFbnNsYXZpbmcgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjE4MTI6XFx0XFx0cmV0ID0gYm9uZF9lbnNsYXZlKGJvbmQtXFx1MDAzZWRldiwgZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE4MTMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ4LjExMTg2NDI5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzQyMDU4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJvbmQgRW5zbGF2ZW1lbnQgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgYm9uZF9lbnNsYXZlYCBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhlIGJvbmQgaW50ZXJmYWNlJ3Mgc2xhdmUgYWRkaXRpb24gcHJvY2VzcywgYSBrZXkgcGllY2UgcmVsYXRlZCB0byBgbmRvX2FkZF9zbGF2ZWAuIFJpZ2h0LCBgbmRvX2FkZF9zbGF2ZWAgaXMgdGhlIE5ldCBEZXZpY2UgT3BlcmF0b3IgKE5ETykgbWV0aG9kIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNsYXZlIGludGVyZmFjZSB0byBhIGJvbmQgaW50ZXJmYWNlLiBBbmQgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmPyBgYm9uZF9lbnNsYXZlYC4uLnRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQncyBhIGdvb2QgZGVzY3JpcHRpdmUgbmFtZSwgY2xlYXJseSBpbmRpY2F0aW5nIGl0cyBwdXJwb3NlIG9mIGluY29ycG9yYXRpbmcgYSBuZXR3b3JrIGludGVyZmFjZSBhcyBhIFwic2xhdmVcIiB3aXRoaW4gYSBib25kZWQgaW50ZXJmYWNlIHNldHVwLiBJdCdzIGhhbmRsaW5nIHRoZSBkZXRhaWxzIG9mIGJvdGggdGhlIGBTSU9DQk9OREVOU0xBVkVgIGlvY3RsIGNhbGwgKmFuZCogdGhvc2Ugc3lzZnMvbmV0bGluayBzbGF2ZSBhZGRpdGlvbiBvcHRpb25zLCBzbyBpdCBpcyBsaWtlbHkgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc2xhdmUgaW50ZXJmYWNlIGJ5IGRpZmZlcmVudCBtZWFucy4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpdCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBpbiBgYm9uZF9tYWluLmNgLCBtZWFuaW5nIGl0IGlzIGFjY2Vzc2libGUgYmV5b25kIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpdHMgYXJndW1lbnRzLCByZXR1cm4gdHlwZSwgYW5kIG90aGVyIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTGV0J3MgcHVsbCB1cCB0aGUgaGVhZGVyIGZpbGUgKGBib25kaW5nLmhgKSBhbmQgcXVpY2tseSByZXZpZXcgdGhhdC4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gcHJvdG90eXBlIGFuZCBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGVudW1zIEkgbWlnaHQgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjU2Ljg1MzkyNTY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI0MzcxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9lbnNsYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODo1Ni45MTYxNzUyMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5NDA5NDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkZpbmRpbmcgdGhlIERlY2xhcmF0aW9uIG9mIGBib25kX2Vuc2xhdmVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGhlYWRlciBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZnVuY3Rpb24gYGJvbmRfZW5zbGF2ZWAuIEl04oCZcyBhIGNvcmUgZnVuY3Rpb24sIHNvIGl04oCZcyBsaWtlbHkgaW4gYSBzeXN0ZW0tbGV2ZWwgb3IgcHJvamVjdC1zcGVjaWZpYyBpbmNsdWRlLiBHaXZlbiB0aGUgbmFtZSwgSSdkIGZpcnN0IHN1c3BlY3QgYSBmaWxlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBzZWN1cml0eS1yZWxhdGVkIGxpYnJhcnkgaWYg4oCcZW5zbGF2ZeKAnSBpbXBsaWVzIGNvbnRyb2xsZWQgYWNjZXNzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGhzLCBsb29raW5nIGZvciBpdC4gSWYgdGhhdCB5aWVsZHMgbm90aGluZywgSSdsbCBtb3ZlIG9uIHRvIHByb2plY3Qtc3BlY2lmaWMgaW5jbHVkZSBkaXJlY3Rvcmllcy4gSSBtaWdodCBoYXZlIHRvIGdyZXAgdGhyb3VnaCBhIGtub3duIGxpc3Qgb2YgbGlrZWx5IGhlYWRlciBmaWxlcyBpbiBteSBwcm9qZWN0IHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9uLCBzaW5jZSBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoZXJlIGl0IGJlbG9uZ3MuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBoZWFkZXIgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHNpZ25hdHVyZSwgaXRzIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBjb25zdGFudHMuIE9uY2UgSSBmaW5kIGl0LCBJJ2xsIGNhcmVmdWxseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHBvc3NpYmxlIGNvbnN0cmFpbnRzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBiZXN0IGludGVyZmFjZSB3aXRoIGl0IGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjU5LjcxMDI3MTk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMTk2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfZW5zbGF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmg9Njg2PXZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjY4NzppbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNjg4LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODo1OS45OTE0NzQ5MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MDAwNTU1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBib25kX2Vuc2xhdmUqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIHJ1bmRvd24uIEkndmUgZ290IGBib25kX2Vuc2xhdmVgLCBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgcHJlc2VudC4gRmlyc3QsIGBCT05ESU5HYCDigJMgZGVwZW5kcyBvbiBgSU5FVGAsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuIFRoZW4sIHdlIG5lZWQgdG8gY29uc2lkZXIgYElFRUU4MDIxNTRgLCBqdXN0IGluIGNhc2Ugd2UncmUgZGVhbGluZyB3aXRoIElFRUU4MDIxNTQgbmV0ZGV2aWNlcy5cblxuTm93IGZvciBhIHF1aWNrIHNjYW4gb2YgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gWWVwLCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gYEZvY3VzU3ltYm9sc2AgaXMgY29ycmVjdGx5IHNldCB3aXRoIFtcImJvbmRfZW5zbGF2ZVwiXS4gV2UncmUgYWxzbyBlbmFibGluZyBgQk9ORElOR2AsIGBJTkVUYCwgYW5kIGBJRUVFODAyMTU0YCwgd2hpY2ggYWxpZ25zIHBlcmZlY3RseSB3aXRoIHdoYXQgd2UgbmVlZCB0byB0ZXN0LiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGNsZWFyLCB3aGljaCBpcyBhbHdheXMgYXBwcmVjaWF0ZWQuIFRvb2xzIGNvbmZpcm0gZXZlcnl0aGluZy4gQWxyaWdodCwgbG9va3MgbGlrZSB3ZSdyZSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGlzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI5OjExLjM5MTUzMzQ3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM5MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSUVFRTgwMjE1NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJRUVFODAyMTU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxMS41MDk5MjkzOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjY2OTE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjk6MTEuNTEwMzMxMjU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI2NjY1MTE3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxcblxcblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVxcdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMTg5NCw5ICsxODk0LDExIEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4gXHRpbnQgcmVzID0gMCwgaTtcbiBcbi1cdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuK1x0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuIFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxuLVx0XHRcdCAgICBcIkNBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwiKTtcbitcdFx0XHQgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcIik7XG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxMS41MTAzMzIyMzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM0MjkyOTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIHRvIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgb3IgaW5jcmVhc2VzIHRoZSBleGlzdGluZyBhdHRhY2sgc3VyZmFjZS4gSSBzZWUgdGhlIGRpZmYuIEl0J3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpc2FsbG93aW5nIGNlcnRhaW4gZGV2aWNlIHR5cGVzIGZyb20gYmVpbmcgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZS4gUHJldmlvdXNseSwgb25seSBDQU4gZGV2aWNlcyB3ZXJlIHJlamVjdGVkLCBhbmQgbm93IElFRUUgODAyLjE1LjQgYW5kIG1vbml0b3IgbW9kZXMgYXJlIGV4Y2x1ZGVkIGFzIHdlbGwuIFRoZSBjaGVjayBpbnZvbHZlcyBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBlcnJvcnMgYXJpc2UgaW4gZGV2aWNlIGRyaXZlcnMuIEdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBuZXR3b3JraW5nLCB0aGVyZSdzIGFsd2F5cyB0aGUgcG9zc2liaWxpdHkgb2Ygd2VpcmQgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGggcG90ZW50aWFsbHkgbGVzcyBjb21tb24gb3IgbmV3ZXIgZGV2aWNlIHR5cGVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYWRkaW5nIHRvIGFuIGV4aXN0aW5nIGNoZWNrIOKAkyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gYGJvbmRfbWFpbi5jYC4gQXJlIHRoZXJlIGFueSBvdGhlciBhcmVhcyBpbiB0aGUgZmlsZSB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlc2UgZGV2aWNlIHR5cGVzPyBBcmUgd2UgY29uZmlkZW50IHRoYXQgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgYm9uZGluZyBkcml2ZXIgd2hlcmUgdGhpcyBjaGVjayBpcyBuZWVkZWQ/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGEgbG93LXJpc2sgY2hhbmdlLCBnaXZlbiB0aGUgbGltaXRlZCBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hlY2ssIGJ1dCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBiZWZvcmUgbWFraW5nIGEgZmluYWwgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxNi44NTMyNjY1MTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg5MDpcXHR7XFxuMTg5MTpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xODkyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbjE4OTM6XFx0XFx0c3RydWN0IHNsYXZlICpuZXdfc2xhdmUgPSBOVUxMLCAqcHJldl9zbGF2ZTtcXG4xODk0OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbjE4OTU6XFx0XFx0aW50IHJlcyA9IDAsIGk7XFxuMTg5NjpcXHRcXG4xODk3OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxcbjE4OTg6XFx0XFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbjE4OTk6XFx0XFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XFxuMTkwMDpcXHRcXHRcXHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxcbjE5MDE6XFx0XFx0XFx0XFx0ICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTAyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkwMzpcXHRcXHR9XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbjE5MDY6XFx0XFx0ICAgICFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKSB7XFxuMTkwNzpcXHRcXHRcXHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxcbjE5MDg6XFx0XFx0XFx0XFx0ICAgIFxcXCJEZXZpY2UgdHlwZSAobWFzdGVyIGRldmljZSkgY2Fubm90IGJlIGVuc2xhdmVkXFxcIik7XFxuMTkwOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE5MTA6XFx0XFx0fVxcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHQvKiBhbHJlYWR5IGluLXVzZT8gKi9cXG4xOTEzOlxcdFxcdGlmIChuZXRkZXZfaXNfcnhfaGFuZGxlcl9idXN5KHNsYXZlX2RldikpIHtcXG4xOTE0OlxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMTkxNTpcXHRcXHRcXHRcXHQgICAgIFxcXCJEZXZpY2UgaXMgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTE2OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTkxNzpcXHRcXHR9XFxuMTkxODpcXHRcXG4xOTE5OlxcdFxcdGlmIChib25kX2RldiA9PSBzbGF2ZV9kZXYpIHtcXG4xOTIwOlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssIFxcXCJDYW5ub3QgZW5zbGF2ZSBib25kIHRvIGl0c2VsZi5cXFwiKTtcXG4xOTIxOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkyMjpcXHRcXHR9XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdC8qIHZsYW4gY2hhbGxlbmdlZCBtdXR1YWwgZXhjbHVzaW9uICovXFxuMTkyNTpcXHRcXHQvKiBubyBuZWVkIHRvIGxvY2sgc2luY2Ugd2UncmUgcHJvdGVjdGVkIGJ5IHJ0bmxfbG9jayAqL1xcbjE5MjY6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkge1xcbjE5Mjc6XFx0XFx0XFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJpcyBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcXFxuXFxcIik7XFxuMTkyODpcXHRcXHRcXHRpZiAodmxhbl91c2VzX2Rldihib25kX2RldikpIHtcXG4xOTI5OlxcdFxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMTkzMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJDYW4gbm90IGVuc2xhdmUgVkxBTiBjaGFsbGVuZ2VkIGRldmljZSB0byBWTEFOIGVuYWJsZWQgYm9uZFxcXCIpO1xcbjE5MzE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTMyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRzbGF2ZV93YXJuKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJlbnNsYXZlZCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUuIEFkZGluZyBWTEFOcyB3aWxsIGJlIGJsb2NrZWQgYXMgbG9uZyBhcyBpdCBpcyBwYXJ0IG9mIGJvbmQuXFxcXG5cXFwiKTtcXG4xOTM0OlxcdFxcdFxcdH1cXG4xOTM1OlxcdFxcdH0gZWxzZSB7XFxuMTkzNjpcXHRcXHRcXHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXFxcImlzICFORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcXFxuXFxcIik7XFxuMTkzNzpcXHRcXHR9XFxuMTkzODpcXHRcXG4xOTM5OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1ApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI5OjE2Ljg1MzgxOTczOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyMzAwMDYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgb25lIOKAkyBpdCdzIGJhc2ljYWxseSBhIGd1YXJkcmFpbC4gSXQncyBhZGRpbmcgYSBjaGVjayBpbiB0aGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gdG8gcHJldmVudCBJRUVFIDgwMi4xNS40IGFuZCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBhZGRlZCB0byBhIGJvbmRpbmcgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiZ29vZCwgbGV0J3MgbWFrZSBzdXJlIHRoaXMgc29sdmVzIGEgbGVnaXRpbWF0ZSBwcm9ibGVtLlwiIFRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBhZGRpbmcgdGhlc2UgZGV2aWNlIHR5cGVzIHRvIGEgYm9uZGluZyBpbnRlcmZhY2UgaXMgYSBiYWQgaWRlYSBkdWUgdG8gaGVhZGVyIHBhcnNpbmcgaXNzdWVzIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcywgYmVjYXVzZSB0aGUgYm9uZGluZyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgZm9yIEV0aGVybmV0LWxpa2UgZGV2aWNlcywgbm90IElFRUUgODAyLjE1LjQgZnJhbWVzLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCwgZW5zdXJpbmcgdGhpcyB3b24ndCBpbnRyb2R1Y2UgaXRzIG93biBwcm9ibGVtcy5cblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZSwgbm8gY2hhbmdlIHRoZXJlLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZC5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTmFoLCBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGEgbmV0IGRldmljZSBpcyByZWdpc3RlcmVkLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/IE5vdCBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLlxuNC4gIEJvdW5kcyBjaGVja3Mgb3IgdW5pbml0aWFsaXplZCBieXRlcz8gTm9wZSwgaXQncyBqdXN0IGEgc2ltcGxlIGVhcmx5IHJldHVybiBvbiB0aGUgZXJyb3IgcGF0aC5cblxuQmFzZWQgb24gdGhhdCwgaXTigJlzIGEgcHJldHR5IHNpbXBsZSB0eXBlIHJlamVjdGlvbiBjaGVjay4gV2UncmUgcmVqZWN0aW5nIGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCBkdXJpbmcgdGhlIGVuc2xhdmVtZW50IHByb2Nlc3MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGdvaW5nIGFueXdoZXJlIG5lYXIgdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3l6a2FsbGVyIHRlc3Rpbmcgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCBoZXJlLlxuXG5UaGVyZWZvcmUsIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZSBmb3IgdGhpcyBjaGFuZ2UuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBgc2V0LXJlc3VsdHNgLCBhbG9uZyB3aXRoIHRoZSByZWFzb25pbmcgSSBqdXN0IHdlbnQgdGhyb3VnaC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBzYWZlIGZpeCwgYW5kIEnigJltIHJlYWR5IHRvIG1vdmUgaXQgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4NCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOTozNC4xNzY4MjI3NTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxcblxcblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVxcdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXFxuXFxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSB2YWxpZGF0aW9uIGNoZWNrIG9uIGBzbGF2ZV9kZXYtXFx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqrqnk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 20:06:49 +0000 UTC FinishedAt: 2026-08-31 20:29:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IEEE802154" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET", "IEEE802154" ], "series_id": "d00af930-1768-4a84-99fe-3250e98f56c0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_enslave" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5pbmRleCA1MjJlYWIwNjBmOWVkLi5jNzE2MzM2YzUxNzIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xuQEAgLTE4OTQsOSAmIzQzOzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbiBcdGludCByZXMgPSAwLCBpO1xuIFxuLVx0aWYgKHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuJiM0MztcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuJiM0MztcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4gXHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4tXHRcdFx0ICAgIFwmIzM0O0NBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICBcJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJRUVFODAyMTU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkNTM1OWY2NTgzOTY0YWExNmM2MjE2Njc3YzJjMTA1NjE4MzlkNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDoyNjo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMTg5NCw5ICYjNDM7MTg5NCwxMSBAQCBpbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKIAlpbnQgcmVzID0gMCwgaTsKIAotCWlmIChzbGF2ZV9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0NBTikgewomIzQzOwlpZiAoc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4gfHwKJiM0MzsJICAgIHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAomIzQzOwkgICAgc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHsKIAkJQk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjaywKLQkJCSAgICAmIzM0O0NBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZCYjMzQ7KTsKJiM0MzsJCQkgICAgJiMzNDtDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWQmIzM0Oyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgcGF0Y2ggdG8gdGhlIGJvbmRpbmcgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlJiMzOTtzIGltcGxpY2F0aW9ucyBhbmQgdmVyaWZ5IHRoYXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXQgaXMgc291bmQuCgpUaGUgYGRpZmZgIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBib25kX2Vuc2xhdmVgIGluIGBib25kX21haW4uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgIGRldmljZSB0eXBlcyBpbiBhZGRpdGlvbiB0byBgQVJQSFJEX0NBTmAgYmVmb3JlIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJlIGVuc2xhdmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHJlc3RyaWN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgc3BlY2lmaWMgaGFyZHdhcmUgdHlwZXMgZnJvbSBiZWluZyBib25kZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmF0aW9uYWxlIGhlcmUuIFdoeSBhcmUgQ0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgYmVpbmcgZXhjbHVkZWQ/IElzIGl0IGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgYSBwcm90b2NvbCBpbmNvbXBhdGliaWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGhvcGVmdWxseSBjbGFyaWZ5IHRoZSByZWFzb25zLgoKSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX21haW4uY2AgYXJvdW5kIGBib25kX2Vuc2xhdmVgIHRvIGdyYXNwIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb24gb2YgYGJvbmRfZW5zbGF2ZWAgYW5kIHRoZSBvdGhlciBjaGVja3MgcGVyZm9ybWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBkZXZpY2UgdHlwZXMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgdGhlc2UgZGV2aWNlIHR5cGVzIGhhdmUgYW55IHNwZWNpYWwgcmVxdWlyZW1lbnRzIGZvciBuZXR3b3JraW5nLCBhbmQgd2h5IGJvbmRpbmcgdGhlbSBtaWdodCBicmVhayB0aGVzZSByZXF1aXJlbWVudHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQgYm9uZGluZyB0aGVzZSBkZXZpY2UgdHlwZXMgZWl0aGVyIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2Ugb3Igd2lsbCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkuCgpMZXQgbWUgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGdldCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZGV0ZXJtaW5lIHdoeSB0aGlzIHNwZWNpZmljIGNoZWNrIGlzIGJlaW5nIGFkZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTg5MjpcdFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpzbGF2ZV9vcHMgPSBzbGF2ZV9kZXYtXHUwMDNlbmV0ZGV2X29wcztcbjE4OTM6XHRcdHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlID0gTlVMTCwgKnByZXZfc2xhdmU7XG4xODk0Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbjE4OTU6XHRcdGludCByZXMgPSAwLCBpO1xuMTg5NjpcdFxuMTg5NzpcdFx0aWYgKHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcbjE4OTg6XHRcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxuMTg5OTpcdFx0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcbjE5MDA6XHRcdFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcbjE5MDE6XHRcdFx0XHQgICAgXCYjMzQ7Q0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2Fubm90IGJlIGVuc2xhdmVkXCYjMzQ7KTtcbjE5MDI6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjE5MDM6XHRcdH1cbjE5MDQ6XHRcbjE5MDU6XHRcdGlmIChzbGF2ZV9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9NQVNURVIgXHUwMDI2XHUwMDI2XG4xOTA2Olx0XHQgICAgIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpIHtcbjE5MDc6XHRcdFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcbjE5MDg6XHRcdFx0XHQgICAgXCYjMzQ7RGV2aWNlIHR5cGUgKG1hc3RlciBkZXZpY2UpIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTA5Olx0XHRcdHJldHVybiAtRVBFUk07XG4xOTEwOlx0XHR9XG4xOTExOlx0XG4xOTEyOlx0XHQvKiBhbHJlYWR5IGluLXVzZT8gKi9cbjE5MTM6XHRcdGlmIChuZXRkZXZfaXNfcnhfaGFuZGxlcl9idXN5KHNsYXZlX2RldikpIHtcbjE5MTQ6XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjE5MTU6XHRcdFx0XHQgICAgIFwmIzM0O0RldmljZSBpcyBpbiB1c2UgYW5kIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTE2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xOTE3Olx0XHR9XG4xOTE4Olx0XG4xOTE5Olx0XHRpZiAoYm9uZF9kZXYgPT0gc2xhdmVfZGV2KSB7XG4xOTIwOlx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssIFwmIzM0O0Nhbm5vdCBlbnNsYXZlIGJvbmQgdG8gaXRzZWxmLlwmIzM0Oyk7XG4xOTIxOlx0XHRcdHJldHVybiAtRVBFUk07XG4xOTIyOlx0XHR9XG4xOTIzOlx0XG4xOTI0Olx0XHQvKiB2bGFuIGNoYWxsZW5nZWQgbXV0dWFsIGV4Y2x1c2lvbiAqL1xuMTkyNTpcdFx0Lyogbm8gbmVlZCB0byBsb2NrIHNpbmNlIHdlJiMzOTtyZSBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrICovXG4xOTI2Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkge1xuMTkyNzpcdFx0XHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXCYjMzQ7aXMgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcXG5cJiMzNDspO1xuMTkyODpcdFx0XHRpZiAodmxhbl91c2VzX2Rldihib25kX2RldikpIHtcbjE5Mjk6XHRcdFx0XHRTTEFWRV9OTF9FUlIoYm9uZF9kZXYsIHNsYXZlX2RldiwgZXh0YWNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6CgoqKktjb25maWcgRGl2ZSBpbnRvIE5ldHdvcmsgQm9uZGluZywgSUVFRSA4MDIuMTUuNCBhbmQgQ0FOIERyaXZlcnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBkcml2ZXJzIC0gc3BlY2lmaWNhbGx5LCB0aGUgb25lcyB1bmRlciBgZHJpdmVycy9uZXQvYm9uZGluZy9gLCBhbmQgdGhlbiBhbHNvIHRoZSBJRUVFIDgwMi4xNS40IGFuZCBDQU4gZHJpdmVycy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBpdHNlbGYuIEkgc3VzcGVjdCBlaXRoZXIgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2Agb3IgbWF5YmUgZXZlbiBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgd2lsbCBwcm92aWRlIHRoZSBjbHVlcyBJIG5lZWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIEV0aGVybmV0IEJvbmRpbmcgZHJpdmVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CT05ESU5HKSAmIzQzOz0gYm9uZGluZy5vXG4gICA3Olx0XG4gICA4Olx0Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXG4gICA5Olx0XG4gIDEwOlx0cHJvYy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gYm9uZF9wcm9jZnMub1xuICAxMTpcdGJvbmRpbmctb2JqcyAmIzQzOz0gJChwcm9jLXkpXG4gIDEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYENPTkZJR19CT05ESU5HYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBHaXZlbiB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5LCBkcml2ZXItbGV2ZWwgY29uZmlndXJhdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSBmb3IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyB0byByZXNpZGUuIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnksIG9yIHBvdGVudGlhbGx5IGEgc3ViLWRpcmVjdG9yeSYjMzk7cyBLY29uZmlnIGZpbGUgaWYgYm9uZGluZyBoYXMgbW9yZSBzcGVjaWFsaXplZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgdGhlIGRlZmluaXRpdmUgbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXQgRHJpdmVycyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgbGluZSA0MCB3aWxsIGNvbnRhaW4gYSBrZXkgZWxlbWVudCDigJMgcGVyaGFwcyBhIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24uIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgd29yayB1bmRlciB0aGUgaG9vZCB3aWxsIGhlbHAgbWUgZGVidWcgYSByZWNlbnQgbmV0d29ya2luZyBwcm9ibGVtIEkmIzM5O3ZlIGJlZW4gc2VlaW5nLiBIb3BlZnVsbHksIHRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgd2VsbC1zdHJ1Y3R1cmVkLCBzbyBJIGNhbiBmaW5kIHdoYXQgSSBuZWVkIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXG4gIDM3Olx0XHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxuICAzODpcdFxuICAzOTpcdGlmIE5FVF9DT1JFXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJPTkRJTkdcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNDM6XHRcdGRlcGVuZHMgb24gSU5FVFxuICA0NDpcdFx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG4gIDQ1Olx0XHRoZWxwXG4gIDQ2Olx0XHQgIFNheSAmIzM5O1kmIzM5OyBvciAmIzM5O00mIzM5OyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICYjMzk7Ym9uZCYjMzk7IG11bHRpcGxlIEV0aGVybmV0XG4gIDQ3Olx0XHQgIENoYW5uZWxzIHRvZ2V0aGVyLiBUaGlzIGlzIGNhbGxlZCAmIzM5O0V0aGVyY2hhbm5lbCYjMzk7IGJ5IENpc2NvLFxuICA0ODpcdFx0ICAmIzM5O1RydW5raW5nJiMzOTsgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJiMzOTtCb25kaW5nJiMzOTsgaW4gTGludXguXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXG4gIDUxOlx0XHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXG4gIDUyOlx0XG4gIDUzOlx0XHQgIFJlZmVyIHRvIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XHUwMDNlIGZvciBtb3JlXG4gIDU0Olx0XHQgIGluZm9ybWF0aW9uLlxuICA1NTpcdFxuICA1NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDU3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXG4gIDU4Olx0XG4gIDU5Olx0Y29uZmlnIERVTU1ZXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAgNjE6XHRcdGhlbHBcbiAgNjI6XHRcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cbiAgNjM6XHRcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcbiAgNjQ6XHRcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgdGltZSB0byBhc3Nlc3MgdGhpcy4gSXMgdGhpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIHZhbGlkYXRpb24gd2l0aGluIGBib25kX2Vuc2xhdmVgLCBzcGVjaWZpY2FsbHkgcHJldmVudGluZyBJRUVFIDgwMi4xNS40IGFuZCBJRUVFIDgwMi4xNS40IG1vbml0b3IgZGV2aWNlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIHdpdGhpbiBhIGJvbmRpbmcgaW50ZXJmYWNlLiBOb3csIEkga25vdyB0aGF0IGVuc2xhdmluZyBuZXQgZGV2aWNlcyB0byBhIGJvbmRpbmcgaW50ZXJmYWNlIHZpYSBuZXRsaW5rIG9wZXJhdGlvbnMgbGlrZSBgSUZMQV9NQVNURVJgIG9yIGBSVE1fTkVXTElOS2AsIG9yIGV2ZW4gdGhyb3VnaCBzeXNmcy9pb2N0bCwgaXMgYSBwcmV0dHkgc3RhbmRhcmQgb3BlcmF0aW9uIHRoYXQgc3l6a2FsbGVyIGZyZXF1ZW50bHkgdGFyZ2V0cy4gVGhpcyBpcyBjb3JlIG5ldCBkcml2ZXIgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgYm9uZGluZyBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IGludGVyZXN0aW5nLgoKVGhlIG5leHQgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGJlIGVhc2lseSByZXByb2R1Y2VkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQ29uc2lkZXJpbmcgdGhpcyB0b3VjaGVzIG9uIHNvZnR3YXJlIGJvbmRpbmcgaW50ZXJmYWNlcyBhbmQgc29mdHdhcmUgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGxpa2UgYGZha2VsYmAsIGBtYWM4MDIxNTRfaHdzaW1gLCBvciBkdW1teS92aXJ0dWFsIDgwMjE1NCBkZXZpY2VzLCBpdCBzaG91bGQgYmUgZWFzaWx5IHJlYWNoYWJsZS4gV2UgY2FuIGNyZWF0ZSB0aGVzZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkbHkgYW5kIGVuc2xhdmUgdGhlbS4gVGhlIG1vZGlmaWNhdGlvbiAqZG9lcyogYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBib25kX2Vuc2xhdmVgLiBUaGF0IGluY3JlYXNlcyBpdHMgYXBwZWFsIGFzIGEgdGFyZ2V0LgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBCT05ESU5HYCBkZXBlbmRzIG9uIGBJTkVUYCwgYW5kIGBORVRfQ09SRWAgaXMgcGFydCBvZiBhIG1lbnUgY29uZmlnLiBTbyB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgYnVnIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBpbmNsdWRpbmcgSUVFRTgwMjE1NCBzdXBwb3J0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBJRUVFIDgwMi4xNS40LCBwcm9iYWJseSBpbiBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Agb3IgbWF5YmUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIExvb2tzIGxpa2UgdGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGEgZ29vZCB1c2Ugb2YgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElFRUU4MDIxNTQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnOjI6Y29uZmlnIElFRUU4MDIxNTRfNkxPV1BBTlxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDs2bG93cGFuIHN1cHBvcnQgb3ZlciBJRUVFIDgwMi4xNS40XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyOm1lbnVjb25maWcgSUVFRTgwMjE1NFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SUVFRSBTdGQgODAyLjE1LjQgTG93LVJhdGUgV2lyZWxlc3MgUGVyc29uYWwgQXJlYSBOZXR3b3JrcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZz0xND1pZiBJRUVFODAyMTU0XG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTctXHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjIxOmNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O0lFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBJRUVFIDgwMi4xNS40IEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGBuZXQvaWVlZTgwMjE1NC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCByZWxhdGlvbnNoaXBzIGRlZmluZWQgdGhlcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIGZlYXR1cmVzLCBkcml2ZXJzLCBhbmQgY29uZmlndXJhdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgcmVxdWlyZSBvdGhlcnMgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGtub3cgd2hhdCBvcHRpb25zIGNhbiBiZSBzZXQgaW5kZXBlbmRlbnRseSBhbmQgd2hpY2ggcmVseSBvbiBvdGhlcnMuIEFueSBjb25mbGljdHMgb3IgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIG11c3QgYmUgZnVsbHkgdW5kZXJzdG9vZCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pZWVlODAyMTU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElFRUU4MDIxNTRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0lFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3dcbiAgIDY6XHRcdCAgY29tcGxleGl0eSBzaG9ydCByYW5nZSB3aXJlbGVzcyBwZXJzb25hbCBhcmVhIG5ldHdvcmtzLiBJdCB3YXNcbiAgIDc6XHRcdCAgZGVzaWduZWQgdG8gb3JnYW5pc2UgbmV0d29ya3Mgb2Ygc2Vuc29ycywgc3dpdGNoZXMsIGV0YyBhdXRvbWF0aW9uXG4gICA4Olx0XHQgIGRldmljZXMuIE1heGltdW0gYWxsb3dlZCBkYXRhIHJhdGUgaXMgMjUwIGtiL3MgYW5kIHR5cGljYWwgcGVyc29uYWxcbiAgIDk6XHRcdCAgb3BlcmF0aW5nIHNwYWNlIGFyb3VuZCAxMG0uXG4gIDEwOlx0XG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBMUi1XUEFOIHN1cHBvcnQgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvXG4gIDEyOlx0XHQgIGNvbXBpbGUgaXQgYXMgbW9kdWxlcy5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBJRUVFODAyMTU0XG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXG4gIDE3Olx0XHRib29sIFwmIzM0O0lFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFwmIzM0O1xuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBBZGRzIGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnQgZm9yIG5sODAyMTU0LlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7SUVFRSA4MDIuMTUuNCBzb2NrZXQgaW50ZXJmYWNlXCYjMzQ7XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgU29ja2V0IGludGVyZmFjZSBmb3IgSUVFRSA4MDIuMTUuNC4gQ29udGFpbnMgREdSQU0gc29ja2V0cyBpbnRlcmZhY2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGlkaW5nIGZvciB0aGlzIDgwMi4xNS40IHN0dWZmPyBJIGtub3cgSSYjMzk7dmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIGFuZCB0aGUgdHlwaWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZHJpdmVycy4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcCBmb3IgZ2VuZXJhbCA4MDIuMTUuNCBkcml2ZXIgY29uZmlndXJhdGlvbi4KCkJ1dCB3YWl0LCB0aGVyZSBtaWdodCBiZSBzb21lIGxlc3Mgb2J2aW91cyBwbGFjZXMgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGV4aXN0LCBwYXJ0aWN1bGFybHkgaWYgSSYjMzk7bSBkZWFsaW5nIHdpdGggc2ltdWxhdGVkIGhhcmR3YXJlIG9yIGEgdGVzdCBlbnZpcm9ubWVudC4gU28sIGxldCBtZSBjaGVjayB0aGUgYG1hYzgwMjE1NF9od3NpbWAgZGlyZWN0b3J5LiBJdCYjMzk7cyBwb3NzaWJsZSB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBzaW11bGF0ZWQgaGFyZHdhcmUgYXJlIHNlcGFyYXRlLCBvciBtaWdodCBpbmZsdWVuY2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgYW0gc2VhcmNoaW5nIGZvci4KCkFuZCBmaW5hbGx5LCBkb24mIzM5O3QgZm9yZ2V0IHRoZSBmYWtlbGIgZGlyZWN0b3J5LiBJdHMgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGRyaXZlcnMuCgpJdCYjMzk7cyBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gYW5kIGRlZHVjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXNlIGZpbGVzIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxNTRfSFdTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBEcml2ZXIgTGFuZHNjYXBlKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIFRpbWUgdG8gbG9jYXRlIHRob3NlIElFRUUgODAyLjE1LjQgZHJpdmVycyB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCwgYW5kIHdoZXJlIEkmIzM5O2QgKmV4cGVjdCogdG8gZmluZCB0aGVtIGJhc2VkIG9uIHN0YW5kYXJkIGtlcm5lbCBvcmdhbml6YXRpb24sIGlzIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0YC4gSXQmIzM5O3MgbG9naWNhbCwgcmVhbGx5OyB0aGUgJiMzNDtkcml2ZXJzJiMzNDsgZGlyZWN0b3J5IGlzIHRoZSBvYnZpb3VzIHJvb3QuICYjMzQ7bmV0JiMzNDsgc3BlY2lmaWVzIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGBpZWVlODAyMTU0YCBpcyB0aGUgcHJlY2lzZSBwcm90b2NvbCBmYW1pbHkgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gT2YgY291cnNlLCB0aGlzIGFzc3VtZXMgYSB3ZWxsLXN0cnVjdHVyZWQga2VybmVsLCBidXQgaXQmIzM5O3MgdGhlIG1vc3QgcHJvYmFibGUgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGF0JiMzOTtzIHRoZSBlZmZpY2llbnQgYXBwcm9hY2guIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1YmRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgYW5kIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthZGY3MjQyLmMmIzM0OywKICAgICYjMzQ7YXQ4NnJmMjMwLmMmIzM0OywKICAgICYjMzQ7YXQ4NnJmMjMwLmgmIzM0OywKICAgICYjMzQ7YXR1c2IuYyYjMzQ7LAogICAgJiMzNDthdHVzYi5oJiMzNDssCiAgICAmIzM0O2NhODIxMC5jJiMzNDssCiAgICAmIzM0O2NjMjUyMC5jJiMzNDssCiAgICAmIzM0O2Zha2VsYi5jJiMzNDssCiAgICAmIzM0O21hYzgwMjE1NF9od3NpbS5jJiMzNDssCiAgICAmIzM0O21hYzgwMjE1NF9od3NpbS5oJiMzNDssCiAgICAmIzM0O21jcjIwYS5jJiMzNDssCiAgICAmIzM0O21jcjIwYS5oJiMzNDssCiAgICAmIzM0O21yZjI0ajQwLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIElFRUUgODAyLjE1LjQgRmFrZSBMaW5rIEJ1ZmZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgSUVFRSA4MDIuMTUuNCBmYWtlIGxpbmsgYnVmZmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0LCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzdWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxldmFudCBkcml2ZXJzLiBTbywgSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZGlyZWN0b3J5IOKAkyBvciB3aGVyZXZlciB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb3RvY29sIGxpdmVzLiBJIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZSBsb2NhdGlvbiBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgd3JvbmcsIGJ1dCB0aGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LgoKT25jZSBJJiMzOTttIGluIHRoZSByaWdodCBLY29uZmlnIGZpbGUsIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYElFRUU4MDIxNTRfRkFLRUxCYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBBIHF1aWNrIGdyZXAgZm9yIGBJRUVFODAyMTU0X0ZBS0VMQmAgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIGl0cyBwcmVzZW5jZSwgYWxvbmcgd2l0aCBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIG9yIGRlZmF1bHQgdmFsdWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBncmFzcCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHN5c3RlbSBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIGRyaXZlcnMuIFRoaXMgc2hvdWxkIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IGNvZGUgYW5kIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgc2lnbmlmaWNhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRUVFODAyMTU0X0ZBS0VMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZz0yPW1lbnVjb25maWcgSUVFRTgwMjE1NF9EUklWRVJTXG4tLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnOjE0OmNvbmZpZyBJRUVFODAyMTU0X0ZBS0VMQlxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVx0ZGVwZW5kcyBvbiBJRUVFODAyMTU0X0RSSVZFUlMgXHUwMDI2XHUwMDI2IE1BQzgwMjE1NFxuLS1cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSAmIzQzOz0gZmFrZWxiLm9cbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICYjNDM7PSBhdDg2cmYyMzAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTM4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXImIzM5O3MgRW5zbGF2ZW1lbnQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGV2aWNlcyBhcmUgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZSwgc28gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBib25kX2Vuc2xhdmVgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYC4gSXQmIzM5O3MgZ29vZCB0aGF0IGl0JiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGNsZWFybHkgZGVzaWduZWQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLiBNeSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqPyBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBrbm93IGlmIGVuc2xhdmVtZW50IGlzIGluaXRpYXRlZCB0aHJvdWdoIG5ldGxpbmsgbWVzc2FnZXMgb3Igc3lzZnMgaW50ZXJhY3Rpb25zLiBUaGF0IHdvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgdXNlci1zcGFjZSBpbnRlcmZhY2UuIFRpbWUgdG8gcnVuIGEgcXVpY2sgZ3JlcCBmb3IgYGJvbmRfZW5zbGF2ZWAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQgcG9wcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9lbnNsYXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4NjU9dm9pZCBib25kX3hkcF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4Ny0vKiBlbnNsYXZlIGRldmljZSBcdTAwM2NzbGF2ZVx1MDAzZSB0byBib25kIGRldmljZSBcdTAwM2NtYXN0ZXJcdTAwM2UgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTg4ODppbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4OS1cdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ1ODc9c3RhdGljIGludCBib25kX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQyLVx0Y2FzZSBTSU9DQk9OREVOU0xBVkU6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ2NDM6XHRcdHJlcyA9IGJvbmRfZW5zbGF2ZShib25kX2Rldiwgc2xhdmVfZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDY0NC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk3NC0jZW5kaWZcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk3NTpcdC5uZG9fYWRkX3NsYXZlXHRcdD0gYm9uZF9lbnNsYXZlLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTc2LVx0Lm5kb19kZWxfc2xhdmVcdFx0PSBib25kX3JlbGVhc2UsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNzg2PXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fc2xhdmVzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE4MTEtXHRcdHNsYXZlX2RiZyhib25kLVx1MDAzZWRldiwgZGV2LCBcJiMzNDtFbnNsYXZpbmcgaW50ZXJmYWNlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTgxMjpcdFx0cmV0ID0gYm9uZF9lbnNsYXZlKGJvbmQtXHUwMDNlZGV2LCBkZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xODEzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEJvbmQgRW5zbGF2ZW1lbnQgTG9naWMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBib25kX2Vuc2xhdmVgIGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgYm9uZCBpbnRlcmZhY2UmIzM5O3Mgc2xhdmUgYWRkaXRpb24gcHJvY2VzcywgYSBrZXkgcGllY2UgcmVsYXRlZCB0byBgbmRvX2FkZF9zbGF2ZWAuIFJpZ2h0LCBgbmRvX2FkZF9zbGF2ZWAgaXMgdGhlIE5ldCBEZXZpY2UgT3BlcmF0b3IgKE5ETykgbWV0aG9kIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNsYXZlIGludGVyZmFjZSB0byBhIGJvbmQgaW50ZXJmYWNlLiBBbmQgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmPyBgYm9uZF9lbnNsYXZlYC4uLnRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQmIzM5O3MgYSBnb29kIGRlc2NyaXB0aXZlIG5hbWUsIGNsZWFybHkgaW5kaWNhdGluZyBpdHMgcHVycG9zZSBvZiBpbmNvcnBvcmF0aW5nIGEgbmV0d29yayBpbnRlcmZhY2UgYXMgYSAmIzM0O3NsYXZlJiMzNDsgd2l0aGluIGEgYm9uZGVkIGludGVyZmFjZSBzZXR1cC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRldGFpbHMgb2YgYm90aCB0aGUgYFNJT0NCT05ERU5TTEFWRWAgaW9jdGwgY2FsbCAqYW5kKiB0aG9zZSBzeXNmcy9uZXRsaW5rIHNsYXZlIGFkZGl0aW9uIG9wdGlvbnMsIHNvIGl0IGlzIGxpa2VseSBoYW5kbGluZyB0aGUgYWRkaXRpb24gb2YgYSBzbGF2ZSBpbnRlcmZhY2UgYnkgZGlmZmVyZW50IG1lYW5zLiBJdCYjMzk7cyB3b3J0aCBub3RpbmcgdGhhdCBpdCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBpbiBgYm9uZF9tYWluLmNgLCBtZWFuaW5nIGl0IGlzIGFjY2Vzc2libGUgYmV5b25kIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpdHMgYXJndW1lbnRzLCByZXR1cm4gdHlwZSwgYW5kIG90aGVyIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGhlYWRlciBmaWxlIChgYm9uZGluZy5oYCkgYW5kIHF1aWNrbHkgcmV2aWV3IHRoYXQuIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIHRoZSByZWxldmFudCBmdW5jdGlvbiBwcm90b3R5cGUgYW5kIGFueSByZWxhdGVkIHN0cnVjdHVyZXMgb3IgZW51bXMgSSBtaWdodCBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipGaW5kaW5nIHRoZSBEZWNsYXJhdGlvbiBvZiBgYm9uZF9lbnNsYXZlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBmdW5jdGlvbiBgYm9uZF9lbnNsYXZlYC4gSXTigJlzIGEgY29yZSBmdW5jdGlvbiwgc28gaXTigJlzIGxpa2VseSBpbiBhIHN5c3RlbS1sZXZlbCBvciBwcm9qZWN0LXNwZWNpZmljIGluY2x1ZGUuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGZpcnN0IHN1c3BlY3QgYSBmaWxlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBzZWN1cml0eS1yZWxhdGVkIGxpYnJhcnkgaWYg4oCcZW5zbGF2ZeKAnSBpbXBsaWVzIGNvbnRyb2xsZWQgYWNjZXNzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgc3RhbmRhcmQgaW5jbHVkZSBwYXRocywgbG9va2luZyBmb3IgaXQuIElmIHRoYXQgeWllbGRzIG5vdGhpbmcsIEkmIzM5O2xsIG1vdmUgb24gdG8gcHJvamVjdC1zcGVjaWZpYyBpbmNsdWRlIGRpcmVjdG9yaWVzLiBJIG1pZ2h0IGhhdmUgdG8gZ3JlcCB0aHJvdWdoIGEga25vd24gbGlzdCBvZiBsaWtlbHkgaGVhZGVyIGZpbGVzIGluIG15IHByb2plY3QgdG8gZmluZCB0aGUgZGVjbGFyYXRpb24sIHNpbmNlIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoZXJlIGl0IGJlbG9uZ3MuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBoZWFkZXIgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHNpZ25hdHVyZSwgaXRzIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBjb25zdGFudHMuIE9uY2UgSSBmaW5kIGl0LCBJJiMzOTtsbCBjYXJlZnVsbHkgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGFueSBjbHVlcyBhYm91dCBpdHMgaW50ZW5kZWQgdXNlIGFuZCBwb3NzaWJsZSBjb25zdHJhaW50cy4gVGhpcyB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdG8gYmVzdCBpbnRlcmZhY2Ugd2l0aCBpdCBhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaD02ODY9dm9pZCBib25kX3hkcF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KTtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDo2ODc6aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNjg4LVx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMgoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBib25kX2Vuc2xhdmUqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgcnVuZG93bi4gSSYjMzk7dmUgZ290IGBib25kX2Vuc2xhdmVgLCBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIHByZXNlbnQuIEZpcnN0LCBgQk9ORElOR2Ag4oCTIGRlcGVuZHMgb24gYElORVRgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gVGhlbiwgd2UgbmVlZCB0byBjb25zaWRlciBgSUVFRTgwMjE1NGAsIGp1c3QgaW4gY2FzZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElFRUU4MDIxNTQgbmV0ZGV2aWNlcy4KCk5vdyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFllcCwgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGdvb2QuIGBGb2N1c1N5bWJvbHNgIGlzIGNvcnJlY3RseSBzZXQgd2l0aCBbJiMzNDtib25kX2Vuc2xhdmUmIzM0O10uIFdlJiMzOTtyZSBhbHNvIGVuYWJsaW5nIGBCT05ESU5HYCwgYElORVRgLCBhbmQgYElFRUU4MDIxNTRgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggd2hhdCB3ZSBuZWVkIHRvIHRlc3QuIFRoZSByZWFzb25pbmcgaXMgY29uY2lzZSBhbmQgY2xlYXIsIHdoaWNoIGlzIGFsd2F5cyBhcHByZWNpYXRlZC4gVG9vbHMgY29uZmlybSBldmVyeXRoaW5nLiBBbHJpZ2h0LCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lFRUU4MDIxNTQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2Vuc2xhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SUVFRTgwMjE1NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfZW5zbGF2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmV2ZW50cyBJRUVFIDgwMi4xNS40IGFuZCBJRUVFIDgwMi4xNS40IG1vbml0b3IgZGV2aWNlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIGludG8gYSBib25kaW5nIG1hc3RlciBkZXZpY2UgYnkgY2hlY2tpbmcgZGV2aWNlIHR5cGUgaW4gYm9uZF9lbnNsYXZlKCkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29yayBib25kaW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHN0YW5kYXJkIG5ldGxpbmsvcnRubCBpbnRlcmZhY2UgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB0byByZWplY3QgZW5zbGF2ZW1lbnQgb2YgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGRldmljZXMgKGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCkgYWxvbmdzaWRlIENBTiBkZXZpY2VzIGJ5IHJldHVybmluZyBgLUVQRVJNYC5cblxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSB2YWxpZGF0aW9uIGNoZWNrIG9uIGBzbGF2ZV9kZXYtXHUwMDNldHlwZWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDUzNTlmNjU4Mzk2NGFhMTZjNjIxNjY3N2MyYzEwNTYxODM5ZDU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMjA6MjY6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA1MjJlYWIwNjBmOWVkLi5jNzE2MzM2YzUxNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTE4OTQsOSAmIzQzOzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsCiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CiAJaW50IHJlcyA9IDAsIGk7CiAKLQlpZiAoc2xhdmVfZGV2LSZndDt0eXBlID09IEFSUEhSRF9DQU4pIHsKJiM0MzsJaWYgKHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfQ0FOIHx8CiYjNDM7CSAgICBzbGF2ZV9kZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHwKJiM0MzsJICAgIHNsYXZlX2Rldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7CiAJCUJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssCi0JCQkgICAgJiMzNDtDQU4gZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWQmIzM0Oyk7CiYjNDM7CQkJICAgICYjMzQ7Q0FOIGFuZCBJRUVFIDgwMi4xNS40IGRldmljZXMgY2Fubm90IGJlIGVuc2xhdmVkJiMzNDspOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IG5ldyBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLCBvciBpbmNyZWFzZXMgdGhlIGV4aXN0aW5nIGF0dGFjayBzdXJmYWNlLiBJIHNlZSB0aGUgZGlmZi4gSXQmIzM5O3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkaXNhbGxvd2luZyBjZXJ0YWluIGRldmljZSB0eXBlcyBmcm9tIGJlaW5nIGVuc2xhdmVkIHRvIGEgYm9uZGluZyBpbnRlcmZhY2UuIFByZXZpb3VzbHksIG9ubHkgQ0FOIGRldmljZXMgd2VyZSByZWplY3RlZCwgYW5kIG5vdyBJRUVFIDgwMi4xNS40IGFuZCBtb25pdG9yIG1vZGVzIGFyZSBleGNsdWRlZCBhcyB3ZWxsLiBUaGUgY2hlY2sgaW52b2x2ZXMgYHNsYXZlX2Rldi0mZ3Q7dHlwZWAsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBlcnJvcnMgYXJpc2UgaW4gZGV2aWNlIGRyaXZlcnMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbmV0d29ya2luZywgdGhlcmUmIzM5O3MgYWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiB3ZWlyZCBpbnRlcmFjdGlvbnMsIGVzcGVjaWFsbHkgd2l0aCBwb3RlbnRpYWxseSBsZXNzIGNvbW1vbiBvciBuZXdlciBkZXZpY2UgdHlwZXMuIFdoaWxlIHRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBhZGRpbmcgdG8gYW4gZXhpc3RpbmcgY2hlY2sg4oCTIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IHdpdGhpbiBgYm9uZF9tYWluLmNgLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyZWFzIGluIHRoZSBmaWxlIHRoYXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBkZXZpY2UgdHlwZXM/IEFyZSB3ZSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBib25kaW5nIGRyaXZlciB3aGVyZSB0aGlzIGNoZWNrIGlzIG5lZWRlZD8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGEgbG93LXJpc2sgY2hhbmdlLCBnaXZlbiB0aGUgbGltaXRlZCBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hlY2ssIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4gYmVmb3JlIG1ha2luZyBhIGZpbmFsIGRlY2lzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTA6XHR7XG4xODkxOlx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE4OTI6XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4xODkzOlx0XHRzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSA9IE5VTEwsICpwcmV2X3NsYXZlO1xuMTg5NDpcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4xODk1Olx0XHRpbnQgcmVzID0gMCwgaTtcbjE4OTY6XHRcbjE4OTc6XHRcdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XG4xODk4Olx0XHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTQgfHxcbjE4OTk6XHRcdCAgICBzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XG4xOTAwOlx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4xOTAxOlx0XHRcdFx0ICAgIFwmIzM0O0NBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwmIzM0Oyk7XG4xOTAyOlx0XHRcdHJldHVybiAtRVBFUk07XG4xOTAzOlx0XHR9XG4xOTA0Olx0XG4xOTA1Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTUFTVEVSIFx1MDAyNlx1MDAyNlxuMTkwNjpcdFx0ICAgICFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKSB7XG4xOTA3Olx0XHRcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXG4xOTA4Olx0XHRcdFx0ICAgIFwmIzM0O0RldmljZSB0eXBlIChtYXN0ZXIgZGV2aWNlKSBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuMTkwOTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTkxMDpcdFx0fVxuMTkxMTpcdFxuMTkxMjpcdFx0LyogYWxyZWFkeSBpbi11c2U/ICovXG4xOTEzOlx0XHRpZiAobmV0ZGV2X2lzX3J4X2hhbmRsZXJfYnVzeShzbGF2ZV9kZXYpKSB7XG4xOTE0Olx0XHRcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXG4xOTE1Olx0XHRcdFx0ICAgICBcJiMzNDtEZXZpY2UgaXMgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZW5zbGF2ZWRcJiMzNDspO1xuMTkxNjpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuMTkxNzpcdFx0fVxuMTkxODpcdFxuMTkxOTpcdFx0aWYgKGJvbmRfZGV2ID09IHNsYXZlX2Rldikge1xuMTkyMDpcdFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLCBcJiMzNDtDYW5ub3QgZW5zbGF2ZSBib25kIHRvIGl0c2VsZi5cJiMzNDspO1xuMTkyMTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTkyMjpcdFx0fVxuMTkyMzpcdFxuMTkyNDpcdFx0LyogdmxhbiBjaGFsbGVuZ2VkIG11dHVhbCBleGNsdXNpb24gKi9cbjE5MjU6XHRcdC8qIG5vIG5lZWQgdG8gbG9jayBzaW5jZSB3ZSYjMzk7cmUgcHJvdGVjdGVkIGJ5IHJ0bmxfbG9jayAqL1xuMTkyNjpcdFx0aWYgKHNsYXZlX2Rldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpIHtcbjE5Mjc6XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O2lzIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEXFxuXCYjMzQ7KTtcbjE5Mjg6XHRcdFx0aWYgKHZsYW5fdXNlc19kZXYoYm9uZF9kZXYpKSB7XG4xOTI5Olx0XHRcdFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcbjE5MzA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7Q2FuIG5vdCBlbnNsYXZlIFZMQU4gY2hhbGxlbmdlZCBkZXZpY2UgdG8gVkxBTiBlbmFibGVkIGJvbmRcJiMzNDspO1xuMTkzMTpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4xOTMyOlx0XHRcdH0gZWxzZSB7XG4xOTMzOlx0XHRcdFx0c2xhdmVfd2Fybihib25kX2Rldiwgc2xhdmVfZGV2LCBcJiMzNDtlbnNsYXZlZCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUuIEFkZGluZyBWTEFOcyB3aWxsIGJlIGJsb2NrZWQgYXMgbG9uZyBhcyBpdCBpcyBwYXJ0IG9mIGJvbmQuXFxuXCYjMzQ7KTtcbjE5MzQ6XHRcdFx0fVxuMTkzNTpcdFx0fSBlbHNlIHtcbjE5MzY6XHRcdFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFwmIzM0O2lzICFORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcblwmIzM0Oyk7XG4xOTM3Olx0XHR9XG4xOTM4Olx0XG4xOTM5Olx0XHRpZiAoc2xhdmVfZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4NAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvbmUg4oCTIGl0JiMzOTtzIGJhc2ljYWxseSBhIGd1YXJkcmFpbC4gSXQmIzM5O3MgYWRkaW5nIGEgY2hlY2sgaW4gdGhlIGBib25kX2Vuc2xhdmVgIGZ1bmN0aW9uIHRvIHByZXZlbnQgSUVFRSA4MDIuMTUuNCBhbmQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgYWRkZWQgdG8gYSBib25kaW5nIGludGVyZmFjZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2dvb2QsIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhpcyBzb2x2ZXMgYSBsZWdpdGltYXRlIHByb2JsZW0uJiMzNDsgVGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IGFkZGluZyB0aGVzZSBkZXZpY2UgdHlwZXMgdG8gYSBib25kaW5nIGludGVyZmFjZSBpcyBhIGJhZCBpZGVhIGR1ZSB0byBoZWFkZXIgcGFyc2luZyBpc3N1ZXMgYW5kIHBvdGVudGlhbCBjcmFzaGVzLCBiZWNhdXNlIHRoZSBib25kaW5nIGRyaXZlciBpcyBhcmNoaXRlY3RlZCBmb3IgRXRoZXJuZXQtbGlrZSBkZXZpY2VzLCBub3QgSUVFRSA4MDIuMTUuNCBmcmFtZXMuCgpOb3csIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QsIGVuc3VyaW5nIHRoaXMgd29uJiMzOTt0IGludHJvZHVjZSBpdHMgb3duIHByb2JsZW1zLgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZSwgbm8gY2hhbmdlIHRoZXJlLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZC4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOYWgsIGBzbGF2ZV9kZXYtJmd0O3R5cGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGEgbmV0IGRldmljZSBpcyByZWdpc3RlcmVkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm90IGludm9sdmVkIGluIHRoaXMgcGF0Y2guCjQuICBCb3VuZHMgY2hlY2tzIG9yIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vcGUsIGl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgZWFybHkgcmV0dXJuIG9uIHRoZSBlcnJvciBwYXRoLgoKQmFzZWQgb24gdGhhdCwgaXTigJlzIGEgcHJldHR5IHNpbXBsZSB0eXBlIHJlamVjdGlvbiBjaGVjay4gV2UmIzM5O3JlIHJlamVjdGluZyBgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmAgZHVyaW5nIHRoZSBlbnNsYXZlbWVudCBwcm9jZXNzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBnb2luZyBhbnl3aGVyZSBuZWFyIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHN5emthbGxlciB0ZXN0aW5nIHNob3VsZCBiZSBjb21wbGV0ZWx5IHN1ZmZpY2llbnQgaGVyZS4KClRoZXJlZm9yZSwgSSB0aGluayB3ZSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBgc2V0LXJlc3VsdHNgLCBhbG9uZyB3aXRoIHRoZSByZWFzb25pbmcgSSBqdXN0IHdlbnQgdGhyb3VnaC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBzYWZlIGZpeCwgYW5kIEnigJltIHJlYWR5IHRvIG1vdmUgaXQgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxuXG5UaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGRldmljZSB0eXBlIHZhbGlkYXRpb24gY2hlY2sgb24gYHNsYXZlX2Rldi1cdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI2OjU4LjU4MTk1OTM3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU5NDkwOTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJRUVFODAyMTU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYm9uZF9lbnNsYXZlKClgIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jYCB0byByZWplY3QgZW5zbGF2ZW1lbnQgb2YgSUVFRSA4MDIuMTUuNCBuZXR3b3JrIGRldmljZXMgKGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCkgYWxvbmdzaWRlIENBTiBkZXZpY2VzIGJ5IHJldHVybmluZyBgLUVQRVJNYC5cXG5cXG5UaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGRldmljZSB0eXBlIHZhbGlkYXRpb24gY2hlY2sgb24gYHNsYXZlX2Rldi1cXHUwMDNldHlwZWAuIEl0IGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MjY6NTguNTgxOTYzNTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcwODA0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZDUzNTlmNjU4Mzk2NGFhMTZjNjIxNjY3N2MyYzEwNTYxODM5ZDU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuaW5kZXggNTIyZWFiMDYwZjllZC4uYzcxNjMzNmM1MTcyMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1xcbkBAIC0xODk0LDkgKzE4OTQsMTEgQEAgaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuIFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbiBcXHRpbnQgcmVzID0gMCwgaTtcXG4gXFxuLVxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTikge1xcbitcXHRpZiAoc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9DQU4gfHxcXG4rXFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbitcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcXG4gXFx0XFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjayxcXG4tXFx0XFx0XFx0ICAgIFxcXCJDQU4gZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4rXFx0XFx0XFx0ICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MjY6NTkuMDI5NjUxMDg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzI0ODAyNzUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSUVFRTgwMjE1NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMTg5NCw5ICsxODk0LDExIEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4gXHRpbnQgcmVzID0gMCwgaTtcbiBcbi1cdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuK1x0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuIFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxuLVx0XHRcdCAgICBcIkNBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwiKTtcbitcdFx0XHQgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcIik7XG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNjo1OS4wMjk2NTIzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDI5MTg4MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMgYW5kIHZlcmlmeSB0aGF0IHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IGlzIHNvdW5kLlxuXG5UaGUgYGRpZmZgIHNob3dzIGEgbW9kaWZpY2F0aW9uIHRvIGBib25kX2Vuc2xhdmVgIGluIGBib25kX21haW4uY2AuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgIGRldmljZSB0eXBlcyBpbiBhZGRpdGlvbiB0byBgQVJQSFJEX0NBTmAgYmVmb3JlIGFsbG93aW5nIGEgZGV2aWNlIHRvIGJlIGVuc2xhdmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgbmV3IHJlc3RyaWN0aW9ucy4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgc3BlY2lmaWMgaGFyZHdhcmUgdHlwZXMgZnJvbSBiZWluZyBib25kZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByYXRpb25hbGUgaGVyZS4gV2h5IGFyZSBDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBiZWluZyBleGNsdWRlZD8gSXMgaXQgYSBoYXJkd2FyZSBsaW1pdGF0aW9uLCBhIHByb3RvY29sIGluY29tcGF0aWJpbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21taXQgbWVzc2FnZSBzaG91bGQgaG9wZWZ1bGx5IGNsYXJpZnkgdGhlIHJlYXNvbnMuXG5cbkknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBib25kX21haW4uY2AgYXJvdW5kIGBib25kX2Vuc2xhdmVgIHRvIGdyYXNwIHRoZSBmdWxsIGNvbnRleHQuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBgYm9uZF9lbnNsYXZlYCBhbmQgdGhlIG90aGVyIGNoZWNrcyBwZXJmb3JtZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGRldmljZSB0eXBlcyBhcmUgaGFuZGxlZC4gSSdsbCBhbHNvIGNoZWNrIGlmIHRoZXNlIGRldmljZSB0eXBlcyBoYXZlIGFueSBzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3IgbmV0d29ya2luZywgYW5kIHdoeSBib25kaW5nIHRoZW0gbWlnaHQgYnJlYWsgdGhlc2UgcmVxdWlyZW1lbnRzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGJvbmRpbmcgdGhlc2UgZGV2aWNlIHR5cGVzIGVpdGhlciBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb3Igd2lsbCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkuXG5cbkxldCBtZSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgZ2V0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkZXRlcm1pbmUgd2h5IHRoaXMgc3BlY2lmaWMgY2hlY2sgaXMgYmVpbmcgYWRkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzowNy4wNTg4NDI4NTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODkwOlxcdHtcXG4xODkxOlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xcbjE4OTI6XFx0XFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpzbGF2ZV9vcHMgPSBzbGF2ZV9kZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuMTg5MzpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSA9IE5VTEwsICpwcmV2X3NsYXZlO1xcbjE4OTQ6XFx0XFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XFxuMTg5NTpcXHRcXHRpbnQgcmVzID0gMCwgaTtcXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOIHx8XFxuMTg5ODpcXHRcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XFxuMTg5OTpcXHRcXHQgICAgc2xhdmVfZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1IpIHtcXG4xOTAwOlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXFxuMTkwMTpcXHRcXHRcXHRcXHQgICAgXFxcIkNBTiBhbmQgSUVFRSA4MDIuMTUuNCBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFxcXCIpO1xcbjE5MDI6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTAzOlxcdFxcdH1cXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTUFTVEVSIFxcdTAwMjZcXHUwMDI2XFxuMTkwNjpcXHRcXHQgICAgIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpIHtcXG4xOTA3OlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssXFxuMTkwODpcXHRcXHRcXHRcXHQgICAgXFxcIkRldmljZSB0eXBlIChtYXN0ZXIgZGV2aWNlKSBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTA5OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkxMDpcXHRcXHR9XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdC8qIGFscmVhZHkgaW4tdXNlPyAqL1xcbjE5MTM6XFx0XFx0aWYgKG5ldGRldl9pc19yeF9oYW5kbGVyX2J1c3koc2xhdmVfZGV2KSkge1xcbjE5MTQ6XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG4xOTE1OlxcdFxcdFxcdFxcdCAgICAgXFxcIkRldmljZSBpcyBpbiB1c2UgYW5kIGNhbm5vdCBiZSBlbnNsYXZlZFxcXCIpO1xcbjE5MTY6XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4xOTE3OlxcdFxcdH1cXG4xOTE4OlxcdFxcbjE5MTk6XFx0XFx0aWYgKGJvbmRfZGV2ID09IHNsYXZlX2Rldikge1xcbjE5MjA6XFx0XFx0XFx0Qk9ORF9OTF9FUlIoYm9uZF9kZXYsIGV4dGFjaywgXFxcIkNhbm5vdCBlbnNsYXZlIGJvbmQgdG8gaXRzZWxmLlxcXCIpO1xcbjE5MjE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTIyOlxcdFxcdH1cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0LyogdmxhbiBjaGFsbGVuZ2VkIG11dHVhbCBleGNsdXNpb24gKi9cXG4xOTI1OlxcdFxcdC8qIG5vIG5lZWQgdG8gbG9jayBzaW5jZSB3ZSdyZSBwcm90ZWN0ZWQgYnkgcnRubF9sb2NrICovXFxuMTkyNjpcXHRcXHRpZiAoc2xhdmVfZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEKSB7XFxuMTkyNzpcXHRcXHRcXHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXFxcImlzIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEXFxcXG5cXFwiKTtcXG4xOTI4OlxcdFxcdFxcdGlmICh2bGFuX3VzZXNfZGV2KGJvbmRfZGV2KSkge1xcbjE5Mjk6XFx0XFx0XFx0XFx0U0xBVkVfTkxfRVJSKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIGV4dGFjayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6MDcuMDU5MTI2NDQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExMzM0MTYxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZmlsZXM6XG5cbioqS2NvbmZpZyBEaXZlIGludG8gTmV0d29yayBCb25kaW5nLCBJRUVFIDgwMi4xNS40IGFuZCBDQU4gRHJpdmVycyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmaWxlcyBhcmUgcmVzcG9uc2libGUgZm9yIGNvbnRyb2xsaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aG9zZSBkcml2ZXJzIC0gc3BlY2lmaWNhbGx5LCB0aGUgb25lcyB1bmRlciBgZHJpdmVycy9uZXQvYm9uZGluZy9gLCBhbmQgdGhlbiBhbHNvIHRoZSBJRUVFIDgwMi4xNS40IGFuZCBDQU4gZHJpdmVycy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeSBpdHNlbGYuIEkgc3VzcGVjdCBlaXRoZXIgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2Agb3IgbWF5YmUgZXZlbiBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgd2lsbCBwcm92aWRlIHRoZSBjbHVlcyBJIG5lZWQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzozOC4xOTI1NDQ2MDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgRXRoZXJuZXQgQm9uZGluZyBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbiAgIDc6XFx0XFxuICAgODpcXHRib25kaW5nLW9ianMgOj0gYm9uZF9tYWluLm8gYm9uZF8zYWQubyBib25kX2FsYi5vIGJvbmRfc3lzZnMubyBib25kX3N5c2ZzX3NsYXZlLm8gYm9uZF9kZWJ1Z2ZzLm8gYm9uZF9uZXRsaW5rLm8gYm9uZF9vcHRpb25zLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0cHJvYy0kKENPTkZJR19QUk9DX0ZTKSArPSBib25kX3Byb2Nmcy5vXFxuICAxMTpcXHRib25kaW5nLW9ianMgKz0gJChwcm9jLXkpXFxuICAxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6MzguMTkyNTk5MTU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM0NTE0NTIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBDT05GSUdfQk9ORElOR2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCBpbiB0aGUga2VybmVsIHNvdXJjZS4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBhbmQgc3BlY2lmaWNhbGx5LCBkcml2ZXItbGV2ZWwgY29uZmlndXJhdGlvbnMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSBmb3IgbmV0d29yayBkcml2ZXIgb3B0aW9ucyB0byByZXNpZGUuIEknbGwganVtcCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSwgb3IgcG90ZW50aWFsbHkgYSBzdWItZGlyZWN0b3J5J3MgS2NvbmZpZyBmaWxlIGlmIGJvbmRpbmcgaGFzIG1vcmUgc3BlY2lhbGl6ZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRoZSBkZWZpbml0aXZlIGxvY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzo0Ny41Mzc3NDY0NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzMyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyNzo0Ny42OTAwODI4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjI4NjgwOTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXQgRHJpdmVycyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQwLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZC4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSA0MCB3aWxsIGNvbnRhaW4gYSBrZXkgZWxlbWVudCDigJMgcGVyaGFwcyBhIG1vZHVsZSBkZWZpbml0aW9uLCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgb3IgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byB0aGUgb3ZlcmFsbCBkZXNpZ24uIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyB3b3JrIHVuZGVyIHRoZSBob29kIHdpbGwgaGVscCBtZSBkZWJ1ZyBhIHJlY2VudCBuZXR3b3JraW5nIHByb2JsZW0gSSd2ZSBiZWVuIHNlZWluZy4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHdlbGwtc3RydWN0dXJlZCwgc28gSSBjYW4gZmluZCB3aGF0IEkgbmVlZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6NTkuOTc2ODk0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjc6NTkuOTc2OTcyNzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzczNjAzODczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGFzc2VzcyB0aGlzLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IExldCdzIGJyZWFrIGl0IGRvd24uIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGFkZGluZyB2YWxpZGF0aW9uIHdpdGhpbiBgYm9uZF9lbnNsYXZlYCwgc3BlY2lmaWNhbGx5IHByZXZlbnRpbmcgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCB3aXRoaW4gYSBib25kaW5nIGludGVyZmFjZS4gTm93LCBJIGtub3cgdGhhdCBlbnNsYXZpbmcgbmV0IGRldmljZXMgdG8gYSBib25kaW5nIGludGVyZmFjZSB2aWEgbmV0bGluayBvcGVyYXRpb25zIGxpa2UgYElGTEFfTUFTVEVSYCBvciBgUlRNX05FV0xJTktgLCBvciBldmVuIHRocm91Z2ggc3lzZnMvaW9jdGwsIGlzIGEgcHJldHR5IHN0YW5kYXJkIG9wZXJhdGlvbiB0aGF0IHN5emthbGxlciBmcmVxdWVudGx5IHRhcmdldHMuIFRoaXMgaXMgY29yZSBuZXQgZHJpdmVyIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGJvbmRpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQncyB1c3VhbGx5IGludGVyZXN0aW5nLlxuXG5UaGUgbmV4dCBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgZWFzaWx5IHJlcHJvZHVjZWQgaW4gYSBRRU1VIGVudmlyb25tZW50PyBDb25zaWRlcmluZyB0aGlzIHRvdWNoZXMgb24gc29mdHdhcmUgYm9uZGluZyBpbnRlcmZhY2VzIGFuZCBzb2Z0d2FyZSBJRUVFIDgwMi4xNS40IGRldmljZXMgbGlrZSBgZmFrZWxiYCwgYG1hYzgwMjE1NF9od3NpbWAsIG9yIGR1bW15L3ZpcnR1YWwgODAyMTU0IGRldmljZXMsIGl0IHNob3VsZCBiZSBlYXNpbHkgcmVhY2hhYmxlLiBXZSBjYW4gY3JlYXRlIHRoZXNlIHByZXR0eSBzdHJhaWdodGZvcndhcmRseSBhbmQgZW5zbGF2ZSB0aGVtLiBUaGUgbW9kaWZpY2F0aW9uICpkb2VzKiBhZmZlY3QgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYGJvbmRfZW5zbGF2ZWAuIFRoYXQgaW5jcmVhc2VzIGl0cyBhcHBlYWwgYXMgYSB0YXJnZXQuXG5cbkFscmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBCT05ESU5HYCBkZXBlbmRzIG9uIGBJTkVUYCwgYW5kIGBORVRfQ09SRWAgaXMgcGFydCBvZiBhIG1lbnUgY29uZmlnLiBTbyB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciB0aGUgYnVnIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIGluY2x1ZGluZyBJRUVFODAyMTU0IHN1cHBvcnQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgSUVFRSA4MDIuMTUuNCwgcHJvYmFibHkgaW4gYG5ldC9pZWVlODAyMTU0L0tjb25maWdgIG9yIG1heWJlIGBkcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBMb29rcyBsaWtlIHRoaXMgY291bGQgYmUgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBhIGdvb2QgdXNlIG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODowMy43MTMwMTM3NjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjQ5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJRUVFODAyMTU0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnOjI6Y29uZmlnIElFRUU4MDIxNTRfNkxPV1BBTlxcbm5ldC9pZWVlODAyMTU0LzZsb3dwYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCI2bG93cGFuIHN1cHBvcnQgb3ZlciBJRUVFIDgwMi4xNS40XFxcIlxcbi0tXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc6MjptZW51Y29uZmlnIElFRUU4MDIxNTRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWc9MTQ9aWYgSUVFRTgwMjE1NFxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMTUtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoxNjpjb25maWcgSUVFRTgwMjE1NF9OTDgwMjE1NF9FWFBFUklNRU5UQUxcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE3LVxcdGJvb2wgXFxcIklFRUUgODAyLjE1LjQgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pZWVlODAyMTU0L0tjb25maWctMjAtXFxubmV0L2llZWU4MDIxNTQvS2NvbmZpZzoyMTpjb25maWcgSUVFRTgwMjE1NF9TT0NLRVRcXG5uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJJRUVFIDgwMi4xNS40IHNvY2tldCBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjAzLjc4MTI2Nzg5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE3MzE3MzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIElFRUUgODAyLjE1LjQgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBgbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcywgZHJpdmVycywgYW5kIGNvbmZpZ3VyYXRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG9yIHJlcXVpcmUgb3RoZXJzIHRvIGJlIGVuYWJsZWQuIEkgbmVlZCB0byBrbm93IHdoYXQgb3B0aW9ucyBjYW4gYmUgc2V0IGluZGVwZW5kZW50bHkgYW5kIHdoaWNoIHJlbHkgb24gb3RoZXJzLiBBbnkgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBtdXN0IGJlIGZ1bGx5IHVuZGVyc3Rvb2QgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjA2LjM5ODU4ODEwMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaWVlZTgwMjE1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElFRUU4MDIxNTRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJRUVFIFN0ZCA4MDIuMTUuNCBMb3ctUmF0ZSBXaXJlbGVzcyBQZXJzb25hbCBBcmVhIE5ldHdvcmtzIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIElFRUUgU3RkIDgwMi4xNS40IGRlZmluZXMgYSBsb3cgZGF0YSByYXRlLCBsb3cgcG93ZXIgYW5kIGxvd1xcbiAgIDY6XFx0XFx0ICBjb21wbGV4aXR5IHNob3J0IHJhbmdlIHdpcmVsZXNzIHBlcnNvbmFsIGFyZWEgbmV0d29ya3MuIEl0IHdhc1xcbiAgIDc6XFx0XFx0ICBkZXNpZ25lZCB0byBvcmdhbmlzZSBuZXR3b3JrcyBvZiBzZW5zb3JzLCBzd2l0Y2hlcywgZXRjIGF1dG9tYXRpb25cXG4gICA4OlxcdFxcdCAgZGV2aWNlcy4gTWF4aW11bSBhbGxvd2VkIGRhdGEgcmF0ZSBpcyAyNTAga2IvcyBhbmQgdHlwaWNhbCBwZXJzb25hbFxcbiAgIDk6XFx0XFx0ICBvcGVyYXRpbmcgc3BhY2UgYXJvdW5kIDEwbS5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTFItV1BBTiBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xcbiAgMTI6XFx0XFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZXMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIElFRUU4MDIxNTRcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElFRUU4MDIxNTRfTkw4MDIxNTRfRVhQRVJJTUVOVEFMXFxuICAxNzpcXHRcXHRib29sIFxcXCJJRUVFIDgwMi4xNS40IGV4cGVyaW1lbnRhbCBuZXRsaW5rIHN1cHBvcnRcXFwiXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIEFkZHMgZXhwZXJpbWVudGFsIG5ldGxpbmsgc3VwcG9ydCBmb3Igbmw4MDIxNTQuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBJRUVFODAyMTU0X1NPQ0tFVFxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZVxcXCJcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBTb2NrZXQgaW50ZXJmYWNlIGZvciBJRUVFIDgwMi4xNS40LiBDb250YWlucyBER1JBTSBzb2NrZXRzIGludGVyZmFjZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODowNi4zOTg2NTE1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNzg1MTA3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZywgd2hlcmUgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhpZGluZyBmb3IgdGhpcyA4MDIuMTUuNCBzdHVmZj8gSSBrbm93IEkndmUgd29ya2VkIHdpdGggdGhpcyBiZWZvcmUsIGFuZCB0aGUgdHlwaWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIHRoZSBLY29uZmlnIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgZHJpdmVycy4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2Ag4oCTIHRoYXQncyB0aGUgb2J2aW91cyBmaXJzdCBzdG9wIGZvciBnZW5lcmFsIDgwMi4xNS40IGRyaXZlciBjb25maWd1cmF0aW9uLlxuXG5CdXQgd2FpdCwgdGhlcmUgbWlnaHQgYmUgc29tZSBsZXNzIG9idmlvdXMgcGxhY2VzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBleGlzdCwgcGFydGljdWxhcmx5IGlmIEknbSBkZWFsaW5nIHdpdGggc2ltdWxhdGVkIGhhcmR3YXJlIG9yIGEgdGVzdCBlbnZpcm9ubWVudC4gU28sIGxldCBtZSBjaGVjayB0aGUgYG1hYzgwMjE1NF9od3NpbWAgZGlyZWN0b3J5LiBJdCdzIHBvc3NpYmxlIHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0eXBlIG9mIHNpbXVsYXRlZCBoYXJkd2FyZSBhcmUgc2VwYXJhdGUsIG9yIG1pZ2h0IGluZmx1ZW5jZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBhbSBzZWFyY2hpbmcgZm9yLlxuXG5BbmQgZmluYWxseSwgZG9uJ3QgZm9yZ2V0IHRoZSBmYWtlbGIgZGlyZWN0b3J5LiBJdHMgc2V0dGluZ3MgbWlnaHQgaW5mbHVlbmNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGRyaXZlcnMuXG5cbkl0J3MgYSBwcm9jZXNzIG9mIGVsaW1pbmF0aW9uIGFuZCBkZWR1Y3Rpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlc2UgZmlsZXMgYW5kIGdvIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjI1LjQ3NzE2NTMxOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMDU0NTQ1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTU0X0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODoyNi4yMTcyMjc4MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODU4MDUyMTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElFRUUgODAyLjE1LjQgRHJpdmVyIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBidXNpbmVzcy4gVGltZSB0byBsb2NhdGUgdGhvc2UgSUVFRSA4MDIuMTUuNCBkcml2ZXJzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBhbmQgd2hlcmUgSSdkICpleHBlY3QqIHRvIGZpbmQgdGhlbSBiYXNlZCBvbiBzdGFuZGFyZCBrZXJuZWwgb3JnYW5pemF0aW9uLCBpcyBgZHJpdmVycy9uZXQvaWVlZTgwMjE1NGAuIEl0J3MgbG9naWNhbCwgcmVhbGx5OyB0aGUgXCJkcml2ZXJzXCIgZGlyZWN0b3J5IGlzIHRoZSBvYnZpb3VzIHJvb3QuIFwibmV0XCIgc3BlY2lmaWVzIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGBpZWVlODAyMTU0YCBpcyB0aGUgcHJlY2lzZSBwcm90b2NvbCBmYW1pbHkgd2UncmUgaW50ZXJlc3RlZCBpbi4gSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gT2YgY291cnNlLCB0aGlzIGFzc3VtZXMgYSB3ZWxsLXN0cnVjdHVyZWQga2VybmVsLCBidXQgaXQncyB0aGUgbW9zdCBwcm9iYWJsZSBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQncyB0aGUgZWZmaWNpZW50IGFwcHJvYWNoLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1YmRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBzdXBwb3J0ZWQgaGFyZHdhcmUgYW5kIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODozNC43OTc3NTE4OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L2llZWU4MDIxNTRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWRmNzI0Mi5jXCIsXG4gICAgXCJhdDg2cmYyMzAuY1wiLFxuICAgIFwiYXQ4NnJmMjMwLmhcIixcbiAgICBcImF0dXNiLmNcIixcbiAgICBcImF0dXNiLmhcIixcbiAgICBcImNhODIxMC5jXCIsXG4gICAgXCJjYzI1MjAuY1wiLFxuICAgIFwiZmFrZWxiLmNcIixcbiAgICBcIm1hYzgwMjE1NF9od3NpbS5jXCIsXG4gICAgXCJtYWM4MDIxNTRfaHdzaW0uaFwiLFxuICAgIFwibWNyMjBhLmNcIixcbiAgICBcIm1jcjIwYS5oXCIsXG4gICAgXCJtcmYyNGo0MC5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjM0Ljc5NzgwODA1NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA1Mjg1OTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUVFRSA4MDIuMTUuNCBGYWtlIExpbmsgQnVmZmVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIElFRUUgODAyLjE1LjQgZmFrZSBsaW5rIGJ1ZmZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCwgYmFzZWQgb24gZXhwZXJpZW5jZSwgaXMgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c3VhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVsZXZhbnQgZHJpdmVycy4gU28sIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZ2AgZGlyZWN0b3J5IOKAkyBvciB3aGVyZXZlciB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb3RvY29sIGxpdmVzLiBJIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZSBsb2NhdGlvbiBpZiBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgd3JvbmcsIGJ1dCB0aGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuXG5cbk9uY2UgSSdtIGluIHRoZSByaWdodCBLY29uZmlnIGZpbGUsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgSUVFRTgwMjE1NF9GQUtFTEJgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEEgcXVpY2sgZ3JlcCBmb3IgYElFRUU4MDIxNTRfRkFLRUxCYCB3aWxsIGhvcGVmdWxseSByZXZlYWwgaXRzIHByZXNlbmNlLCBhbG9uZyB3aXRoIGFueSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgb3IgZGVmYXVsdCB2YWx1ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGdyYXNwIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgZHJpdmVycy4gVGhpcyBzaG91bGQgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgY29kZSBhbmQgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBzaWduaWZpY2FuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjg6NDQuODUwNjY5ODY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Njk1MzU3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUVFRTgwMjE1NF9GQUtFTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnPTI9bWVudWNvbmZpZyBJRUVFODAyMTU0X0RSSVZFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L0tjb25maWc6MTQ6Y29uZmlnIElFRUU4MDIxNTRfRkFLRUxCXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9LY29uZmlnLTE1LVxcdGRlcGVuZHMgb24gSUVFRTgwMjE1NF9EUklWRVJTIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjE1NFxcbi0tXFxuZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC9pZWVlODAyMTU0L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfRkFLRUxCKSArPSBmYWtlbGIub1xcbmRyaXZlcnMvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfSUVFRTgwMjE1NF9BVDg2UkYyMzApICs9IGF0ODZyZjIzMC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ1LjgyMDIxMDEzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjIzNjQ3MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIncyBFbnNsYXZlbWVudCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGV2aWNlcyBhcmUgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZSwgc28gSSdtIHN0YXJ0aW5nIHdpdGggYGJvbmRfZW5zbGF2ZWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCdzIGdvb2QgdGhhdCBpdCdzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb24sIHNvIGl0J3MgY2xlYXJseSBkZXNpZ25lZCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uIE15IG5leHQgdGhvdWdodCBpcywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgZW5zbGF2ZW1lbnQgaXMgaW5pdGlhdGVkIHRocm91Z2ggbmV0bGluayBtZXNzYWdlcyBvciBzeXNmcyBpbnRlcmFjdGlvbnMuIFRoYXQgd291bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGltZSB0byBydW4gYSBxdWljayBncmVwIGZvciBgYm9uZF9lbnNsYXZlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCBwb3BzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTM4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ4LjA0Mzg2MDMxNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5OTkxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9lbnNsYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODY1PXZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4Ny0vKiBlbnNsYXZlIGRldmljZSBcXHUwMDNjc2xhdmVcXHUwMDNlIHRvIGJvbmQgZGV2aWNlIFxcdTAwM2NtYXN0ZXJcXHUwMDNlICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxODg4OmludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTg4OS1cXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTg3PXN0YXRpYyBpbnQgYm9uZF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQyLVxcdGNhc2UgU0lPQ0JPTkRFTlNMQVZFOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDY0MzpcXHRcXHRyZXMgPSBib25kX2Vuc2xhdmUoYm9uZF9kZXYsIHNsYXZlX2RldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NjQ0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTc0LSNlbmRpZlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk3NTpcXHQubmRvX2FkZF9zbGF2ZVxcdFxcdD0gYm9uZF9lbnNsYXZlLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTk3Ni1cXHQubmRvX2RlbF9zbGF2ZVxcdFxcdD0gYm9uZF9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xNzg2PXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fc2xhdmVzX3NldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtMTgxMS1cXHRcXHRzbGF2ZV9kYmcoYm9uZC1cXHUwMDNlZGV2LCBkZXYsIFxcXCJFbnNsYXZpbmcgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjE4MTI6XFx0XFx0cmV0ID0gYm9uZF9lbnNsYXZlKGJvbmQtXFx1MDAzZWRldiwgZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTE4MTMtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjQ4LjExMTg2NDI5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzQyMDU4MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJvbmQgRW5zbGF2ZW1lbnQgTG9naWMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgYm9uZF9lbnNsYXZlYCBoZXJlLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgdGhlIGJvbmQgaW50ZXJmYWNlJ3Mgc2xhdmUgYWRkaXRpb24gcHJvY2VzcywgYSBrZXkgcGllY2UgcmVsYXRlZCB0byBgbmRvX2FkZF9zbGF2ZWAuIFJpZ2h0LCBgbmRvX2FkZF9zbGF2ZWAgaXMgdGhlIE5ldCBEZXZpY2UgT3BlcmF0b3IgKE5ETykgbWV0aG9kIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgdGhlIHNsYXZlIGludGVyZmFjZSB0byBhIGJvbmQgaW50ZXJmYWNlLiBBbmQgdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmPyBgYm9uZF9lbnNsYXZlYC4uLnRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQncyBhIGdvb2QgZGVzY3JpcHRpdmUgbmFtZSwgY2xlYXJseSBpbmRpY2F0aW5nIGl0cyBwdXJwb3NlIG9mIGluY29ycG9yYXRpbmcgYSBuZXR3b3JrIGludGVyZmFjZSBhcyBhIFwic2xhdmVcIiB3aXRoaW4gYSBib25kZWQgaW50ZXJmYWNlIHNldHVwLiBJdCdzIGhhbmRsaW5nIHRoZSBkZXRhaWxzIG9mIGJvdGggdGhlIGBTSU9DQk9OREVOU0xBVkVgIGlvY3RsIGNhbGwgKmFuZCogdGhvc2Ugc3lzZnMvbmV0bGluayBzbGF2ZSBhZGRpdGlvbiBvcHRpb25zLCBzbyBpdCBpcyBsaWtlbHkgaGFuZGxpbmcgdGhlIGFkZGl0aW9uIG9mIGEgc2xhdmUgaW50ZXJmYWNlIGJ5IGRpZmZlcmVudCBtZWFucy4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpdCBpcyBhbiBleHBvcnRlZCBmdW5jdGlvbiBpbiBgYm9uZF9tYWluLmNgLCBtZWFuaW5nIGl0IGlzIGFjY2Vzc2libGUgYmV5b25kIHRoYXQgc3BlY2lmaWMgZmlsZS4gT2theSwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBpdHMgYXJndW1lbnRzLCByZXR1cm4gdHlwZSwgYW5kIG90aGVyIGltcG9ydGFudCBpbmZvcm1hdGlvbi4gTGV0J3MgcHVsbCB1cCB0aGUgaGVhZGVyIGZpbGUgKGBib25kaW5nLmhgKSBhbmQgcXVpY2tseSByZXZpZXcgdGhhdC4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb24gcHJvdG90eXBlIGFuZCBhbnkgcmVsYXRlZCBzdHJ1Y3R1cmVzIG9yIGVudW1zIEkgbWlnaHQgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjU2Ljg1MzkyNTY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI0MzcxNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9lbnNsYXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODo1Ni45MTYxNzUyMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5NDA5NDQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkZpbmRpbmcgdGhlIERlY2xhcmF0aW9uIG9mIGBib25kX2Vuc2xhdmVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGhlYWRlciBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZnVuY3Rpb24gYGJvbmRfZW5zbGF2ZWAuIEl04oCZcyBhIGNvcmUgZnVuY3Rpb24sIHNvIGl04oCZcyBsaWtlbHkgaW4gYSBzeXN0ZW0tbGV2ZWwgb3IgcHJvamVjdC1zcGVjaWZpYyBpbmNsdWRlLiBHaXZlbiB0aGUgbmFtZSwgSSdkIGZpcnN0IHN1c3BlY3QgYSBmaWxlIHJlbGF0ZWQgdG8gcmVzb3VyY2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21ldGhpbmcgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcG90ZW50aWFsbHkgYSBzZWN1cml0eS1yZWxhdGVkIGxpYnJhcnkgaWYg4oCcZW5zbGF2ZeKAnSBpbXBsaWVzIGNvbnRyb2xsZWQgYWNjZXNzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGhzLCBsb29raW5nIGZvciBpdC4gSWYgdGhhdCB5aWVsZHMgbm90aGluZywgSSdsbCBtb3ZlIG9uIHRvIHByb2plY3Qtc3BlY2lmaWMgaW5jbHVkZSBkaXJlY3Rvcmllcy4gSSBtaWdodCBoYXZlIHRvIGdyZXAgdGhyb3VnaCBhIGtub3duIGxpc3Qgb2YgbGlrZWx5IGhlYWRlciBmaWxlcyBpbiBteSBwcm9qZWN0IHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9uLCBzaW5jZSBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoZXJlIGl0IGJlbG9uZ3MuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBoZWFkZXIgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHNpZ25hdHVyZSwgaXRzIGV4cGVjdGVkIGFyZ3VtZW50cywgYW5kIGFueSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBjb25zdGFudHMuIE9uY2UgSSBmaW5kIGl0LCBJJ2xsIGNhcmVmdWxseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgYW55IGNsdWVzIGFib3V0IGl0cyBpbnRlbmRlZCB1c2UgYW5kIHBvc3NpYmxlIGNvbnN0cmFpbnRzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBiZXN0IGludGVyZmFjZSB3aXRoIGl0IGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBhcHBsaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI4OjU5LjcxMDI3MTk4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMTk2ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvbmRfZW5zbGF2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmg9Njg2PXZvaWQgYm9uZF94ZHBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjY4NzppbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtNjg4LVxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyODo1OS45OTE0NzQ5MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE0MDAwNTU1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBib25kX2Vuc2xhdmUqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIHJ1bmRvd24uIEkndmUgZ290IGBib25kX2Vuc2xhdmVgLCBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgcHJlc2VudC4gRmlyc3QsIGBCT05ESU5HYCDigJMgZGVwZW5kcyBvbiBgSU5FVGAsIHNvIHdlJ3JlIGdvb2QgdGhlcmUuIFRoZW4sIHdlIG5lZWQgdG8gY29uc2lkZXIgYElFRUU4MDIxNTRgLCBqdXN0IGluIGNhc2Ugd2UncmUgZGVhbGluZyB3aXRoIElFRUU4MDIxNTQgbmV0ZGV2aWNlcy5cblxuTm93IGZvciBhIHF1aWNrIHNjYW4gb2YgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gWWVwLCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gYEZvY3VzU3ltYm9sc2AgaXMgY29ycmVjdGx5IHNldCB3aXRoIFtcImJvbmRfZW5zbGF2ZVwiXS4gV2UncmUgYWxzbyBlbmFibGluZyBgQk9ORElOR2AsIGBJTkVUYCwgYW5kIGBJRUVFODAyMTU0YCwgd2hpY2ggYWxpZ25zIHBlcmZlY3RseSB3aXRoIHdoYXQgd2UgbmVlZCB0byB0ZXN0LiBUaGUgcmVhc29uaW5nIGlzIGNvbmNpc2UgYW5kIGNsZWFyLCB3aGljaCBpcyBhbHdheXMgYXBwcmVjaWF0ZWQuIFRvb2xzIGNvbmZpcm0gZXZlcnl0aGluZy4gQWxyaWdodCwgbG9va3MgbGlrZSB3ZSdyZSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGlzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MTI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI5OjExLjM5MTUzMzQ3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM5MDE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiSUVFRTgwMjE1NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJvbmRfZW5zbGF2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByZXZlbnRzIElFRUUgODAyLjE1LjQgYW5kIElFRUUgODAyLjE1LjQgbW9uaXRvciBkZXZpY2VzIGZyb20gYmVpbmcgZW5zbGF2ZWQgaW50byBhIGJvbmRpbmcgbWFzdGVyIGRldmljZSBieSBjaGVja2luZyBkZXZpY2UgdHlwZSBpbiBib25kX2Vuc2xhdmUoKS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JrIGJvbmRpbmcgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc3RhbmRhcmQgbmV0bGluay9ydG5sIGludGVyZmFjZSBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJRUVFODAyMTU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9lbnNsYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJldmVudHMgSUVFRSA4MDIuMTUuNCBhbmQgSUVFRSA4MDIuMTUuNCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBlbnNsYXZlZCBpbnRvIGEgYm9uZGluZyBtYXN0ZXIgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZSB0eXBlIGluIGJvbmRfZW5zbGF2ZSgpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgYm9uZGluZyBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzdGFuZGFyZCBuZXRsaW5rL3J0bmwgaW50ZXJmYWNlIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxMS41MDk5MjkzOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjY2OTE3NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mjk6MTEuNTEwMzMxMjU3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI2NjY1MTE3MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxcblxcblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVxcdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ1MzU5ZjY1ODM5NjRhYTE2YzYyMTY2NzdjMmMxMDU2MTgzOWQ1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjI2OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcbmluZGV4IDUyMmVhYjA2MGY5ZWQuLmM3MTYzMzZjNTE3MjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jXG5AQCAtMTg5NCw5ICsxODk0LDExIEBAIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4gXHRpbnQgcmVzID0gMCwgaTtcbiBcbi1cdGlmIChzbGF2ZV9kZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxuK1x0ICAgIHNsYXZlX2Rldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JRUVFODAyMTU0IHx8XG4rXHQgICAgc2xhdmVfZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUikge1xuIFx0XHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxuLVx0XHRcdCAgICBcIkNBTiBkZXZpY2VzIGNhbm5vdCBiZSBlbnNsYXZlZFwiKTtcbitcdFx0XHQgICAgXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcIik7XG4gXHRcdHJldHVybiAtRVBFUk07XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxMS41MTAzMzIyMzdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM0MjkyOTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIHRvIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgb3IgaW5jcmVhc2VzIHRoZSBleGlzdGluZyBhdHRhY2sgc3VyZmFjZS4gSSBzZWUgdGhlIGRpZmYuIEl0J3MgYSByZWxhdGl2ZWx5IHNtYWxsIGNoYW5nZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRpc2FsbG93aW5nIGNlcnRhaW4gZGV2aWNlIHR5cGVzIGZyb20gYmVpbmcgZW5zbGF2ZWQgdG8gYSBib25kaW5nIGludGVyZmFjZS4gUHJldmlvdXNseSwgb25seSBDQU4gZGV2aWNlcyB3ZXJlIHJlamVjdGVkLCBhbmQgbm93IElFRUUgODAyLjE1LjQgYW5kIG1vbml0b3IgbW9kZXMgYXJlIGV4Y2x1ZGVkIGFzIHdlbGwuIFRoZSBjaGVjayBpbnZvbHZlcyBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHN1YnRsZSBlcnJvcnMgYXJpc2UgaW4gZGV2aWNlIGRyaXZlcnMuIEdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBuZXR3b3JraW5nLCB0aGVyZSdzIGFsd2F5cyB0aGUgcG9zc2liaWxpdHkgb2Ygd2VpcmQgaW50ZXJhY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGggcG90ZW50aWFsbHkgbGVzcyBjb21tb24gb3IgbmV3ZXIgZGV2aWNlIHR5cGVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgYWRkaW5nIHRvIGFuIGV4aXN0aW5nIGNoZWNrIOKAkyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gYGJvbmRfbWFpbi5jYC4gQXJlIHRoZXJlIGFueSBvdGhlciBhcmVhcyBpbiB0aGUgZmlsZSB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlc2UgZGV2aWNlIHR5cGVzPyBBcmUgd2UgY29uZmlkZW50IHRoYXQgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgYm9uZGluZyBkcml2ZXIgd2hlcmUgdGhpcyBjaGVjayBpcyBuZWVkZWQ/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGEgbG93LXJpc2sgY2hhbmdlLCBnaXZlbiB0aGUgbGltaXRlZCBzY29wZSBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hlY2ssIGJ1dCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBiZWZvcmUgbWFraW5nIGEgZmluYWwgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOToxNi44NTMyNjY1MTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg5MDpcXHR7XFxuMTg5MTpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xODkyOlxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqc2xhdmVfb3BzID0gc2xhdmVfZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbjE4OTM6XFx0XFx0c3RydWN0IHNsYXZlICpuZXdfc2xhdmUgPSBOVUxMLCAqcHJldl9zbGF2ZTtcXG4xODk0OlxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbjE4OTU6XFx0XFx0aW50IHJlcyA9IDAsIGk7XFxuMTg5NjpcXHRcXG4xODk3OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTiB8fFxcbjE4OTg6XFx0XFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fFxcbjE4OTk6XFx0XFx0ICAgIHNsYXZlX2Rldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SKSB7XFxuMTkwMDpcXHRcXHRcXHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxcbjE5MDE6XFx0XFx0XFx0XFx0ICAgIFxcXCJDQU4gYW5kIElFRUUgODAyLjE1LjQgZGV2aWNlcyBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTAyOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkwMzpcXHRcXHR9XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbjE5MDY6XFx0XFx0ICAgICFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKSB7XFxuMTkwNzpcXHRcXHRcXHRCT05EX05MX0VSUihib25kX2RldiwgZXh0YWNrLFxcbjE5MDg6XFx0XFx0XFx0XFx0ICAgIFxcXCJEZXZpY2UgdHlwZSAobWFzdGVyIGRldmljZSkgY2Fubm90IGJlIGVuc2xhdmVkXFxcIik7XFxuMTkwOTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjE5MTA6XFx0XFx0fVxcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHQvKiBhbHJlYWR5IGluLXVzZT8gKi9cXG4xOTEzOlxcdFxcdGlmIChuZXRkZXZfaXNfcnhfaGFuZGxlcl9idXN5KHNsYXZlX2RldikpIHtcXG4xOTE0OlxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMTkxNTpcXHRcXHRcXHRcXHQgICAgIFxcXCJEZXZpY2UgaXMgaW4gdXNlIGFuZCBjYW5ub3QgYmUgZW5zbGF2ZWRcXFwiKTtcXG4xOTE2OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTkxNzpcXHRcXHR9XFxuMTkxODpcXHRcXG4xOTE5OlxcdFxcdGlmIChib25kX2RldiA9PSBzbGF2ZV9kZXYpIHtcXG4xOTIwOlxcdFxcdFxcdEJPTkRfTkxfRVJSKGJvbmRfZGV2LCBleHRhY2ssIFxcXCJDYW5ub3QgZW5zbGF2ZSBib25kIHRvIGl0c2VsZi5cXFwiKTtcXG4xOTIxOlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTkyMjpcXHRcXHR9XFxuMTkyMzpcXHRcXG4xOTI0OlxcdFxcdC8qIHZsYW4gY2hhbGxlbmdlZCBtdXR1YWwgZXhjbHVzaW9uICovXFxuMTkyNTpcXHRcXHQvKiBubyBuZWVkIHRvIGxvY2sgc2luY2Ugd2UncmUgcHJvdGVjdGVkIGJ5IHJ0bmxfbG9jayAqL1xcbjE5MjY6XFx0XFx0aWYgKHNsYXZlX2Rldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkge1xcbjE5Mjc6XFx0XFx0XFx0c2xhdmVfZGJnKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJpcyBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcXFxuXFxcIik7XFxuMTkyODpcXHRcXHRcXHRpZiAodmxhbl91c2VzX2Rldihib25kX2RldikpIHtcXG4xOTI5OlxcdFxcdFxcdFxcdFNMQVZFX05MX0VSUihib25kX2Rldiwgc2xhdmVfZGV2LCBleHRhY2ssXFxuMTkzMDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJDYW4gbm90IGVuc2xhdmUgVkxBTiBjaGFsbGVuZ2VkIGRldmljZSB0byBWTEFOIGVuYWJsZWQgYm9uZFxcXCIpO1xcbjE5MzE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xOTMyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTkzMzpcXHRcXHRcXHRcXHRzbGF2ZV93YXJuKGJvbmRfZGV2LCBzbGF2ZV9kZXYsIFxcXCJlbnNsYXZlZCBWTEFOIGNoYWxsZW5nZWQgc2xhdmUuIEFkZGluZyBWTEFOcyB3aWxsIGJlIGJsb2NrZWQgYXMgbG9uZyBhcyBpdCBpcyBwYXJ0IG9mIGJvbmQuXFxcXG5cXFwiKTtcXG4xOTM0OlxcdFxcdFxcdH1cXG4xOTM1OlxcdFxcdH0gZWxzZSB7XFxuMTkzNjpcXHRcXHRcXHRzbGF2ZV9kYmcoYm9uZF9kZXYsIHNsYXZlX2RldiwgXFxcImlzICFORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRFxcXFxuXFxcIik7XFxuMTkzNzpcXHRcXHR9XFxuMTkzODpcXHRcXG4xOTM5OlxcdFxcdGlmIChzbGF2ZV9kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1ApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjI5OjE2Ljg1MzgxOTczOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMyMzAwMDYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgb25lIOKAkyBpdCdzIGJhc2ljYWxseSBhIGd1YXJkcmFpbC4gSXQncyBhZGRpbmcgYSBjaGVjayBpbiB0aGUgYGJvbmRfZW5zbGF2ZWAgZnVuY3Rpb24gdG8gcHJldmVudCBJRUVFIDgwMi4xNS40IGFuZCBtb25pdG9yIGRldmljZXMgZnJvbSBiZWluZyBhZGRlZCB0byBhIGJvbmRpbmcgaW50ZXJmYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiZ29vZCwgbGV0J3MgbWFrZSBzdXJlIHRoaXMgc29sdmVzIGEgbGVnaXRpbWF0ZSBwcm9ibGVtLlwiIFRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBhZGRpbmcgdGhlc2UgZGV2aWNlIHR5cGVzIHRvIGEgYm9uZGluZyBpbnRlcmZhY2UgaXMgYSBiYWQgaWRlYSBkdWUgdG8gaGVhZGVyIHBhcnNpbmcgaXNzdWVzIGFuZCBwb3RlbnRpYWwgY3Jhc2hlcywgYmVjYXVzZSB0aGUgYm9uZGluZyBkcml2ZXIgaXMgYXJjaGl0ZWN0ZWQgZm9yIEV0aGVybmV0LWxpa2UgZGV2aWNlcywgbm90IElFRUUgODAyLjE1LjQgZnJhbWVzLlxuXG5Ob3csIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCwgZW5zdXJpbmcgdGhpcyB3b24ndCBpbnRyb2R1Y2UgaXRzIG93biBwcm9ibGVtcy5cblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZSwgbm8gY2hhbmdlIHRoZXJlLiBObyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcG90ZW50aWFsbHkgZXhwb3NlZC5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTmFoLCBgc2xhdmVfZGV2LVx1MDAzZXR5cGVgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB3aGVuIGEgbmV0IGRldmljZSBpcyByZWdpc3RlcmVkLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/IE5vdCBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLlxuNC4gIEJvdW5kcyBjaGVja3Mgb3IgdW5pbml0aWFsaXplZCBieXRlcz8gTm9wZSwgaXQncyBqdXN0IGEgc2ltcGxlIGVhcmx5IHJldHVybiBvbiB0aGUgZXJyb3IgcGF0aC5cblxuQmFzZWQgb24gdGhhdCwgaXTigJlzIGEgcHJldHR5IHNpbXBsZSB0eXBlIHJlamVjdGlvbiBjaGVjay4gV2UncmUgcmVqZWN0aW5nIGBBUlBIUkRfSUVFRTgwMjE1NGAgYW5kIGBBUlBIUkRfSUVFRTgwMjE1NF9NT05JVE9SYCBkdXJpbmcgdGhlIGVuc2xhdmVtZW50IHByb2Nlc3MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGdvaW5nIGFueXdoZXJlIG5lYXIgdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgc3l6a2FsbGVyIHRlc3Rpbmcgc2hvdWxkIGJlIGNvbXBsZXRlbHkgc3VmZmljaWVudCBoZXJlLlxuXG5UaGVyZWZvcmUsIEkgdGhpbmsgd2UgY2FuIGNvbmZpZGVudGx5IHNheSB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZSBmb3IgdGhpcyBjaGFuZ2UuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhhdCBpbiBgc2V0LXJlc3VsdHNgLCBhbG9uZyB3aXRoIHRoZSByZWFzb25pbmcgSSBqdXN0IHdlbnQgdGhyb3VnaC4gSXQgc2VlbXMgbGlrZSBhIGNsZWFuLCBzYWZlIGZpeCwgYW5kIEnigJltIHJlYWR5IHRvIG1vdmUgaXQgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4NCwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDoyOTozNC4xNzY4MjI3NTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBib25kX2Vuc2xhdmUoKWAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIHRvIHJlamVjdCBlbnNsYXZlbWVudCBvZiBJRUVFIDgwMi4xNS40IG5ldHdvcmsgZGV2aWNlcyAoYEFSUEhSRF9JRUVFODAyMTU0YCBhbmQgYEFSUEhSRF9JRUVFODAyMTU0X01PTklUT1JgKSBhbG9uZ3NpZGUgQ0FOIGRldmljZXMgYnkgcmV0dXJuaW5nIGAtRVBFUk1gLlxcblxcblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZGV2aWNlIHR5cGUgdmFsaWRhdGlvbiBjaGVjayBvbiBgc2xhdmVfZGV2LVxcdTAwM2V0eXBlYC4gSXQgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJvbmRfZW5zbGF2ZSgpYCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2AgdG8gcmVqZWN0IGVuc2xhdmVtZW50IG9mIElFRUUgODAyLjE1LjQgbmV0d29yayBkZXZpY2VzIChgQVJQSFJEX0lFRUU4MDIxNTRgIGFuZCBgQVJQSFJEX0lFRUU4MDIxNTRfTU9OSVRPUmApIGFsb25nc2lkZSBDQU4gZGV2aWNlcyBieSByZXR1cm5pbmcgYC1FUEVSTWAuXFxuXFxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBkZXZpY2UgdHlwZSB2YWxpZGF0aW9uIGNoZWNrIG9uIGBzbGF2ZV9kZXYtXFx1MDAzZXR5cGVgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowqrqnk[1] Phase: Succeeded StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-08-31 20:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-08-31 20:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2] Phase: Succeeded StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-08-31 20:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 20:29:45 +0000 UTC FinishedAt: 2026-08-31 20:29:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowqrqnk/series-workflowqrqnk-convert-artifact-2352340645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 20:29:55 +0000 UTC FinishedAt: 2026-08-31 20:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 20:29:55 +0000 UTC FinishedAt: 2026-08-31 20:45:53 +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:*3976f090-e122-4950-9dc4-66738f19c7b6,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-workflowqrqnk/series-workflowqrqnk-convert-artifact-2352340645/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": "460f7aeb-1db7-4179-9f57-331075db46de", "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-workflowqrqnk/series-workflowqrqnk-build-action-2085206731/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 20:29:55 +0000 UTC FinishedAt: 2026-08-31 20:45:43 +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:*3976f090-e122-4950-9dc4-66738f19c7b6,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-workflowqrqnk/series-workflowqrqnk-convert-artifact-2352340645/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": "460f7aeb-1db7-4179-9f57-331075db46de", "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-workflowqrqnk/series-workflowqrqnk-build-action-2085206731/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 20:45:53 +0000 UTC FinishedAt: 2026-08-31 20:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 20:45:53 +0000 UTC FinishedAt: 2026-08-31 20:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 20:45:53 +0000 UTC FinishedAt: 2026-08-31 20:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 20:45:53 +0000 UTC FinishedAt: 2026-08-31 20:45:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowqrqnk/series-workflowqrqnk-convert-artifact-3479941248/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 20:46:03 +0000 UTC FinishedAt: 2026-08-31 20:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 20:46:03 +0000 UTC FinishedAt: 2026-08-31 20:47:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*460f7aeb-1db7-4179-9f57-331075db46de,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-workflowqrqnk/series-workflowqrqnk-build-action-2085206731/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-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 20:48:07 +0000 UTC FinishedAt: 2026-08-31 20:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 20:48:07 +0000 UTC FinishedAt: 2026-08-31 20:48:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 20:48:07 +0000 UTC FinishedAt: 2026-08-31 21:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 20:48:07 +0000 UTC FinishedAt: 2026-08-31 21:03:47 +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:*3976f090-e122-4950-9dc4-66738f19c7b6,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-workflowqrqnk/series-workflowqrqnk-convert-artifact-3479941248/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": "9b3b46d9-cd85-429b-a081-cdff06764319", "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-workflowqrqnk/series-workflowqrqnk-build-action-1230609980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 20:48:07 +0000 UTC FinishedAt: 2026-08-31 21:03:37 +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:*3976f090-e122-4950-9dc4-66738f19c7b6,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-workflowqrqnk/series-workflowqrqnk-convert-artifact-3479941248/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": "9b3b46d9-cd85-429b-a081-cdff06764319", "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-workflowqrqnk/series-workflowqrqnk-build-action-1230609980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 21:03:47 +0000 UTC FinishedAt: 2026-08-31 21:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 21:03:47 +0000 UTC FinishedAt: 2026-08-31 21:03:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 21:03:47 +0000 UTC FinishedAt: 2026-08-31 21:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 21:03:47 +0000 UTC FinishedAt: 2026-08-31 21:05:39 +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:*9b3b46d9-cd85-429b-a081-cdff06764319,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-workflowqrqnk/series-workflowqrqnk-build-action-1230609980/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-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +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":["bond_enslave"],"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:*460f7aeb-1db7-4179-9f57-331075db46de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b3b46d9-cd85-429b-a081-cdff06764319,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-workflowqrqnk/series-workflowqrqnk-build-action-2085206731/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-workflowqrqnk/series-workflowqrqnk-build-action-1230609980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-08-31 21:05:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-08-31 21:05:53 +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":["bond_enslave"],"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-workflowqrqnk/series-workflowqrqnk-convert-artifact-3561671385/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-08-31 21:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-08-31 21:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 21:05:49 +0000 UTC FinishedAt: 2026-08-31 21:05:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 21:05:59 +0000 UTC FinishedAt: 2026-09-01 00:11:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqrqnk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_enslave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET","IEEE802154"],"series_id":"d00af930-1768-4a84-99fe-3250e98f56c0","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 21:05:59 +0000 UTC FinishedAt: 2026-09-01 00:11:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*460f7aeb-1db7-4179-9f57-331075db46de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9b3b46d9-cd85-429b-a081-cdff06764319,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-workflowqrqnk/series-workflowqrqnk-build-action-2085206731/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-workflowqrqnk/series-workflowqrqnk-build-action-1230609980/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-workflowqrqnk/series-workflowqrqnk-convert-artifact-3561671385/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,}