Name: series-workflow7txrd Phase: Succeeded StartedAt: 2026-09-03 10:37:36 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[0] Phase: Succeeded StartedAt: 2026-09-03 10:37:36 +0000 UTC FinishedAt: 2026-09-03 10:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 10:37:36 +0000 UTC FinishedAt: 2026-09-03 10:41:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "NET", "INET" ], "series_id": "f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "wg_peer_create", "wg_peer_remove", "wg_peer_remove_all", "wg_packet_encrypt_worker", "wg_packet_decrypt_worker", "wg_packet_tx_worker", "wg_packet_rx_poll", "wg_set_device_doit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCYjMzk7cyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXG5cblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozODo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuaW5kZXggMWNiNTAyYTkzMmUwNy4uZjdhOWM0MzdiNWI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuQEAgLTQ5LDYgJiM0Mzs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiBcdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuIFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIFx0ICovXG4gXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiBcbi1cdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJiMzOTt0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcbi1cdCAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWxcbi1cdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xuLVx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxuJiM0MztcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbiYjNDM7XHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbiYjNDM7XHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXG4mIzQzO1x0ICogdG8gZmluaXNoIHNjaGVkdWxpbmcgdGhlaXIgc2VyaWFsIFRYIHdvcmsgb3IgUlggTkFQSSBwcm9jZXNzaW5nLlxuIFx0ICovXG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuJiM0MztcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4mIzQzO1x0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4mIzQzO1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4mIzQzO1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbiYjNDM7XHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uZmRkMzRmMGYxNWE2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuJiM0MztcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5AQCAtMTk0LDYgJiM0MzsxOTgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4mIzQzO1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXSVJFR1VBUkQmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF9kZWNyeXB0X3dvcmtlciYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfdHhfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF9yeF9wb2xsJiMzNDssCiAgICAmIzM0O3dnX3NldF9kZXZpY2VfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4MzYzMDAzNjY2ZWVlMDVlOGNhM2U1ODZlMzZmYzU5YTVmZTViZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwppbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbG9ja2RlcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7CiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApOwpAQCAtNDksNiAmIzQzOzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLAogCUlOSVRfV09SSygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDt0eF9xdWV1ZSk7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7cnhfcXVldWUpOwomIzQzOwkvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqLwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpOwogCXJ3bG9ja19pbml0KCZhbXA7cGVlci0mZ3Q7ZW5kcG9pbnRfbG9jayk7CiAJa3JlZl9pbml0KCZhbXA7cGVlci0mZ3Q7cmVmY291bnQpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtwZWVyLSZndDtzdGFnZWRfcGFja2V0X3F1ZXVlKTsKQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKQogCSAqLwogCXdnX3RpbWVyc19zdG9wKHBlZXIpOwogCi0JLyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24mIzM5O3QKLQkgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnkKLQkgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsCi0JICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vCi0JICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLgomIzQzOwkvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlCiYjNDM7CSAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZwomIzQzOwkgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzCiYjNDM7CSAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKQEAgLTE5NCw2ICYjNDM7MTk4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAogCWF0b21pY19zZXRfcmVsZWFzZSgmYW1wO1BBQ0tFVF9DQihza2IpLSZndDtzdGF0ZSwgc3RhdGUpOwogCW5hcGlfc2NoZWR1bGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQl3YWtlX3VwX3ZhcigmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKIAl3Z19wZWVyX3B1dChwZWVyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldpcmVHdWFyZCBQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgV2lyZUd1YXJkIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIHN0YW5kYXJkIGtlcm5lbCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHN5emthbGxlciBmdXp6aW5nLiBBIHF1aWNrIHJpc2sgYW5hbHlzaXMgc2F5cyB0aGlzIGlzIGJlbmlnbiwganVzdCBjb2RlIGV2YWx1YXRpb24gYW5kIG1haW50ZW5hbmNlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIGhhbmRsaW5nIG9mIGB3Z19wZWVyYCB0ZWFyZG93biBhbmQgaG93IGl0IGNvb3JkaW5hdGVzIHdpdGggdGhlIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzLiBQcmV2aW91c2x5LCB3ZSBoYWQgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMsIGJ1dCBub3cgdGhleSYjMzk7cmUgYWRkaW5nIGBhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGluY3JlbWVudGluZywgZGVjcmVtZW50aW5nLCBhbmQgd2FpdGluZy4gVGhleSYjMzk7cmUgYWxzbyBmbHVzaGluZyBpbmRpdmlkdWFsIHdvcmsgaXRlbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzeW5jaHJvbml6YXRpb24gY2hhbmdlLCBkaXJlY3RseSBpbiB0aGUgY29yZSBXaXJlR3VhcmQgZHJpdmVyIGNvZGUuCgpUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgY29yZSBXaXJlR3VhcmQgY29kZSBpcyBpbnRlcmVzdGluZy4gV2lyZUd1YXJkIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgc29mdHdhcmUgVlBOIHR1bm5lbCBuZXR3b3JrIGRldmljZSBkcml2ZXIgYW5kIHJ1bnMgZmluZSBpbiBRRU1VIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIGhhcmR3YXJlLiBXZSBjYW4gZGVmaW5pdGVseSByZWFjaCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZ1enphYmxlLiBXZSBuZWVkIHRvIGdvIGZvciB0aGlzLgoKU28sIG5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIFdpcmVHdWFyZCBhbmQgbmV0d29yayBnZW5lcmFsbHkgdG8gZmluZCB0aG9zZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCwgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBhbmQgYG5ldC9LY29uZmlnYCB0byBkbyBzby4gSSYjMzk7bGwgbmVlZCB0aGVzZSBjb25maWdzIGZvciBzeXprYWxsZXIgdG8gYnVpbGQgYSByZXByb2R1Y2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmaWxlIGRvZXMgbm90IGV4aXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipGaW5kaW5nIHRoZSBXaXJlR3VhcmQgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgYFdpcmVHdWFyZGAgS2NvbmZpZyBmaWxlLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSYjMzk7bGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aXRoaW4gYSBwcm9qZWN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIGtub3cgdGhlIHN0YW5kYXJkIHRvb2xpbmcsIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFdJUkVHVUFSRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTU5PWNvbmZpZyBEVU1NWVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjc0OmNvbmZpZyBXSVJFR1VBUkRcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6OTI6Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuZHJpdmVycy9uZXQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gbGluZSA3My4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGxpbmUgcHJvYmFibHkgaG9sZHMgc29tZSBrZXkgaW5mb3JtYXRpb24g4oCTIHBlcmhhcHMgYSBjb3JlIG5ldHdvcmsgZmVhdHVyZSwgYSB2aXRhbCBkcml2ZXIgb3B0aW9uLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgd2hlcmUgYSBzaWduaWZpY2FudCBuZXR3b3JrIHNldHRpbmcgb3IgY29uZGl0aW9uYWwgZHJpdmVyIGluY2x1c2lvbiBpcyBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XG4gIDcxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZHVtbXkuXG4gIDczOlx0XG4gIDc0Olx0Y29uZmlnIFdJUkVHVUFSRFxuICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgNzc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICA3ODpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxuICA4MDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxuICA4MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXG4gIDg0Olx0XHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0JiMzOTtzXG4gIDg1Olx0XHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxuICA4NjpcdFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cbiAgODc6XHRcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cbiAgODg6XHRcbiAgODk6XHRcdCAgSXQmIzM5O3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcbiAgOTA6XHRcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgV0lSRUdVQVJEX0RFQlVHXG4gIDkzOlx0XHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXG4gIDk3Olx0XHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxuICA5ODpcdFx0ICBleHRyYSB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdW5pdCB0ZXN0cyBhdCB2YXJpb3VzIHBvaW50cy4gVGhpcyBpc1xuICA5OTpcdFx0ICBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuIDEwMDpcdFxuIDEwMTpcdFx0ICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSYjMzk7cmUgZG9pbmcuXG4gMTAyOlx0XG4gMTAzOlx0Y29uZmlnIE9WUE5cbiAxMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiAxMDU6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBJTkVUXG4gMTA2Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMTA3Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAxMDg6XHRcdHNlbGVjdCBDUllQVE9cbiAxMDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGF0IGxlYXN0IGZyb20gYSBidWlsZCBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHNwZWNpZmljIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3MsIG1vZHVsZSBpbnN0YWxsYXRpb24gZGlyZWN0aXZlcywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyB0aGF0JiMzOTtzIHNwZWNpZmljIHRvIFdpcmVHdWFyZC4gSSBzaG91bGQgcXVpY2tseSBzY2FuIGZvciBpbmNsdWRlIGRpcmVjdGl2ZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIHJ1bGVzLCBhbmQgaG93IHRoZSBtb2R1bGUgaXMgdWx0aW1hdGVseSBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9ucyBJJiMzOTttIHBsYW5uaW5nLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgYW55IHBsYXRmb3JtLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgdGhhdCBXaXJlR3VhcmQgbWlnaHQgbGV2ZXJhZ2UuIFVsdGltYXRlbHksIHRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFdpcmVHdWFyZCBkcml2ZXIgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBpdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjY2ZsYWdzLXkgOj0gLUQmIzM5O3ByX2ZtdChmbXQpPUtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdCYjMzk7XG4gICAyOlx0Y2NmbGFncy0kKENPTkZJR19XSVJFR1VBUkRfREVCVUcpICYjNDM7PSAtRERFQlVHXG4gICAzOlx0d2lyZWd1YXJkLXkgOj0gbWFpbi5vXG4gICA0Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IG5vaXNlLm9cbiAgIDU6XHR3aXJlZ3VhcmQteSAmIzQzOz0gZGV2aWNlLm9cbiAgIDY6XHR3aXJlZ3VhcmQteSAmIzQzOz0gcGVlci5vXG4gICA3Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHRpbWVycy5vXG4gICA4Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHF1ZXVlaW5nLm9cbiAgIDk6XHR3aXJlZ3VhcmQteSAmIzQzOz0gc2VuZC5vXG4gIDEwOlx0d2lyZWd1YXJkLXkgJiM0Mzs9IHJlY2VpdmUub1xuICAxMTpcdHdpcmVndWFyZC15ICYjNDM7PSBzb2NrZXQub1xuICAxMjpcdHdpcmVndWFyZC15ICYjNDM7PSBwZWVybG9va3VwLm9cbiAgMTM6XHR3aXJlZ3VhcmQteSAmIzQzOz0gYWxsb3dlZGlwcy5vXG4gIDE0Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHJhdGVsaW1pdGVyLm9cbiAgMTU6XHR3aXJlZ3VhcmQteSAmIzQzOz0gY29va2llLm9cbiAgMTY6XHR3aXJlZ3VhcmQteSAmIzQzOz0gbmV0bGluay5vIGdlbmVyYXRlZC9uZXRsaW5rLm9cbiAgMTc6XHRvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2lyZUd1YXJkIEtlcm5lbCBNb2R1bGUgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFdpcmVHdWFyZCBzdHVmZiBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjb3JlIGNvbmZpZyBmbGFnIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBpcyBgQ09ORklHX1dJUkVHVUFSRGAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIHVzdWFsIHN1c3BlY3RzLCBgTkVUYCBhbmQgYElORVRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdmVyYXJjaGluZyBkZXBlbmRlbmNpZXMsIGJ1dCBgV0lSRUdVQVJEYCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBvbmUgaGVyZS4KCk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cywgdGhlIG5vbi1zdGF0aWMgb25lcyB0aGF0IEkgY2FuIHVzZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gdGhlIHN5bWJvbHMgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCBhbmQgaXRzIHJlbGF0ZWQgZmlsZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhlIGBwZWVyLmNgIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFNvLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGRpc3NlY3QgdGhhdCwgbG9va2luZyBmb3IgdGhlIHJpZ2h0IGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSBpbiBteSBGb2N1c1N5bWJvbHMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIFx1MDAzY0phc29uQHp4MmM0LmNvbVx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcJiMzNDtwZWVyLmhcJiMzNDtcbiAgIDc6XHQjaW5jbHVkZSBcJiMzNDtkZXZpY2UuaFwmIzM0O1xuICAgODpcdCNpbmNsdWRlIFwmIzM0O3F1ZXVlaW5nLmhcJiMzNDtcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDt0aW1lcnMuaFwmIzM0O1xuICAxMDpcdCNpbmNsdWRlIFwmIzM0O3BlZXJsb29rdXAuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O25vaXNlLmhcJiMzNDtcbiAgMTI6XHRcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICAxODpcdFxuICAxOTpcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiAgMjA6XHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiAgMjM6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4gIDI0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xuICAyNzpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gIDI4Olx0XG4gIDI5Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNndnLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAod2ctXHUwMDNlbnVtX3BlZXJzIFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXG4gIDMyOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDMzOlx0XG4gIDM0Olx0XHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gIDM1Olx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuICAzNjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICAzNzpcdFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcbiAgMzg6XHRcdFx0Z290byBlcnI7XG4gIDM5Olx0XG4gIDQwOlx0XHRwZWVyLVx1MDAzZWRldmljZSA9IHdnO1xuICA0MTpcdFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VoYW5kc2hha2UsIFx1MDAyNndnLVx1MDAzZXN0YXRpY19pZGVudGl0eSxcbiAgNDI6XHRcdFx0XHRcdHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXksIHBlZXIpO1xuICA0MzpcdFx0cGVlci1cdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cGVlcl9jb3VudGVyKTtcbiAgNDQ6XHRcdHBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1ID0gbnJfY3B1bWFza19iaXRzO1xuICA0NTpcdFx0d2dfY29va2llX2luaXQoXHUwMDI2cGVlci1cdTAwM2VsYXRlc3RfY29va2llKTtcbiAgNDY6XHRcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xuICA0NzpcdFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XG4gIDQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xuICA0OTpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuICA1MDpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuICA1MTpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuICA1MjpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuICA1MzpcdFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiAgNTQ6XHRcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gIDU1Olx0XHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuICA1NjpcdFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuICA1NzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuICA1ODpcdFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcdTAwMjZwZWVyLVx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xuICA1OTpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgNjA6XHRcdG5ldGlmX25hcGlfYWRkKHdnLVx1MDAzZWRldiwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLCB3Z19wYWNrZXRfcnhfcG9sbCk7XG4gIDYxOlx0XHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuICA2MjpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwZWVyLVx1MDAzZXBlZXJfbGlzdCwgXHUwMDI2d2ctXHUwMDNlcGVlcl9saXN0KTtcbiAgNjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlZXItXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcbiAgNjQ6XHRcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVx1MDAzZXBlZXJfaGFzaHRhYmxlLCBwZWVyKTtcbiAgNjU6XHRcdCYjNDM7JiM0Mzt3Zy1cdTAwM2VudW1fcGVlcnM7XG4gIDY2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogUGVlciAlbGx1IGNyZWF0ZWRcXG5cJiMzNDssIHdnLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBwZWVyLVx1MDAzZWludGVybmFsX2lkKTtcbiAgNjc6XHRcdHJldHVybiBwZWVyO1xuICA2ODpcdFxuICA2OTpcdGVycjpcbiAgNzA6XHRcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcbiAgNzE6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA3NTpcdHtcbiAgNzY6XHRcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpLFxuICA3NzpcdFx0XHRcdCBcJiMzNDtUYWtpbmcgcGVlciByZWZlcmVuY2Ugd2l0aG91dCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrXCYjMzQ7KTtcbiAgNzg6XHRcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCkpKVxuICA3OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODA6XHRcdHJldHVybiBwZWVyO1xuICA4MTpcdH1cbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgODQ6XHR7XG4gIDg1Olx0XHQvKiBSZW1vdmUgZnJvbSBjb25maWd1cmF0aW9uLXRpbWUgbG9va3VwIHN0cnVjdHVyZXMuICovXG4gIDg2Olx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0KTtcbiAgODc6XHRcdHdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoXHUwMDI2cGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGVlcl9hbGxvd2VkaXBzLCBwZWVyLFxuICA4ODpcdFx0XHRcdFx0ICAgICBcdTAwMjZwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuICA4OTpcdFx0d2dfcHVia2V5X2hhc2h0YWJsZV9yZW1vdmUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xuICA5MDpcdFxuICA5MTpcdFx0LyogTWFyayBhcyBkZWFkLCBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBqdW1waW5nIGNvbnRleHRzIGFmdGVyLiAqL1xuICA5MjpcdFx0V1JJVEVfT05DRShwZWVyLVx1MDAzZWlzX2RlYWQsIHRydWUpO1xuICA5MzpcdFxuICA5NDpcdFx0LyogVGhlIGNhbGxlciBtdXN0IG5vdyBzeW5jaHJvbml6ZV9uZXQoKSBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4gKi9cbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgOTg6XHR7XG4gIDk5Olx0XHRXQVJOX09OKCFwZWVyLVx1MDAzZWlzX2RlYWQpO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AqKgoKT2theSwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIFdpcmVHdWFyZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgLiBUaGUgY29yZSBwZWVyIGhhbmRsaW5nIGxvZ2ljIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgcGVlciBzdGF0ZSwgaGFuZGxpbmcga2V5IGV4Y2hhbmdlcyAob3IgbGFjayB0aGVyZW9mLCBpZiB0aGV5JiMzOTtyZSBwcmUtc2hhcmVkIGtleXMpLCBhbmQgZGlyZWN0aW5nIHRyYWZmaWMuIFRoaXMgaXMgd2hlcmUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBjcnlwdG9ncmFwaGljIGhhbmRzaGFrZXMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpbGwgbWFuaWZlc3QuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBhcm91bmQga2V5IHVwZGF0ZXMgYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGV2ZW50cy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhlIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYHdnX3BlZXJgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXkgYXJlIHVzaW5nIGFueSB6ZXJvLWNvcHkgbWVjaGFuaXNtcyBvciBvdGhlciBvcHRpbWl6YXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgYXNwZWN0LiBJJiMzOTttIHJlYWR5IHRvIGZpbmQgb3V0IGhvdyB0aGV5IHB1dCBpdCBhbGwgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0LyogTm8gbW9yZSBrZXlwYWlycyBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBwZWVyLCBzaW5jZSBpc19kZWFkIHByb3RlY3RzXG4gMTAyOlx0XHQgKiBhZGRfbmV3X2tleXBhaXIsIHNvIHdlIGNhbiBub3cgZGVzdHJveSBleGlzdGluZyBvbmVzLlxuIDEwMzpcdFx0ICovXG4gMTA0Olx0XHR3Z19ub2lzZV9rZXlwYWlyc19jbGVhcihcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzKTtcbiAxMDU6XHRcbiAxMDY6XHRcdC8qIERlc3Ryb3kgYWxsIG9uZ29pbmcgdGltZXJzIHRoYXQgd2VyZSBpbi1mbGlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZlxuIDEwNzpcdFx0ICogdGhpcyBmdW5jdGlvbi5cbiAxMDg6XHRcdCAqL1xuIDEwOTpcdFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gMTEwOlx0XG4gMTExOlx0XHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4gMTEyOlx0XHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbiAxMTM6XHRcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcbiAxMTQ6XHRcdCAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy5cbiAxMTU6XHRcdCAqL1xuIDExNjpcdFx0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiAxMTc6XHRcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXG4gMTE4Olx0XHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG4gMTE5Olx0XG4gMTIwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuIDEyMTpcdFxuIDEyMjpcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMTIzOlx0XHQvKiBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbiAxMjQ6XHRcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4gMTI1Olx0XHQgKi9cbiAxMjY6XHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMTI3Olx0XG4gMTI4Olx0XHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcbiAxMjk6XHRcdCAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS5cbiAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiAxMzI6XHRcbiAxMzM6XHRcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gMTM0Olx0XHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuIDEzNTpcdFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxuIDEzNjpcdFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XG4gMTM3Olx0XHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxuIDEzODpcdFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbiYjMzk7dFxuIDEzOTpcdFx0ICogaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMSkgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSYjMzk7cmUgcmVtb3ZlZCBmcm9tXG4gMTQwOlx0XHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxuIDE0MTpcdFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxuIDE0MjpcdFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXdcbiAxNDM6XHRcdCAqIHJlZmVyZW5jZXMgaW4gKDMpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XG4gMTQ0Olx0XHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxuIDE0NTpcdFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXG4gMTQ2Olx0XHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXG4gMTQ3Olx0XHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cbiAxNDg6XHRcdCAqL1xuIDE0OTpcdFxuIDE1MDpcdFx0LS1wZWVyLVx1MDAzZWRldmljZS1cdTAwM2VudW1fcGVlcnM7XG4gMTUxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0LyogV2UgaGF2ZSBhIHNlcGFyYXRlIFwmIzM0O3JlbW92ZVwmIzM0OyBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxuIDE1NTpcdCAqIGEgcGVlciBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIHdpbGwgZXZlbnR1YWxseSBjb21lIHRvIGFuIGVuZCBhbmQgbm90IHBhc3NcbiAxNTY6XHQgKiB0aGVpciByZWZlcmVuY2Ugb250byBhbm90aGVyIGNvbnRleHQuXG4gMTU3Olx0ICovXG4gMTU4Olx0dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAxNTk6XHR7XG4gMTYwOlx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuIDE2MTpcdFx0XHRyZXR1cm47XG4gMTYyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gMTYzOlx0XG4gMTY0Olx0XHRwZWVyX21ha2VfZGVhZChwZWVyKTtcbiAxNjU6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE2NjpcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG4gMTcwOlx0e1xuIDE3MTpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wO1xuIDE3MjpcdFx0TElTVF9IRUFEKGRlYWRfcGVlcnMpO1xuIDE3MzpcdFxuIDE3NDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ3Zy1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuIDE3NTpcdFxuIDE3NjpcdFx0LyogQXZvaWQgaGF2aW5nIHRvIHRyYXZlcnNlIGluZGl2aWR1YWxseSBmb3IgZWFjaCBvbmUuICovXG4gMTc3Olx0XHR3Z19hbGxvd2VkaXBzX2ZyZWUoXHUwMDI2d2ctXHUwMDNlcGVlcl9hbGxvd2VkaXBzLCBcdTAwMjZ3Zy1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuIDE3ODpcdFxuIDE3OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNndnLVx1MDAzZXBlZXJfbGlzdCwgcGVlcl9saXN0KSB7XG4gMTgwOlx0XHRcdHBlZXJfbWFrZV9kZWFkKHBlZXIpO1xuIDE4MTpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0LCBcdTAwMjZkZWFkX3BlZXJzKTtcbiAxODI6XHRcdH1cbiAxODM6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE4NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNmRlYWRfcGVlcnMsIHBlZXJfbGlzdClcbiAxODU6XHRcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxODY6XHR9XG4gMTg3Olx0XG4gMTg4Olx0c3RhdGljIHZvaWQgcmN1X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gMTg5Olx0e1xuIDE5MDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgd2dfcGVlciwgcmN1KTtcbiAxOTE6XHRcbiAxOTI6XHRcdGRzdF9jYWNoZV9kZXN0cm95KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUpO1xuIDE5MzpcdFx0V0FSTl9PTih3Z19wcmV2X3F1ZXVlX3BlZWsoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSkgfHwgd2dfcHJldl9xdWV1ZV9wZWVrKFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdC8qIFRoZSBmaW5hbCB6ZXJvaW5nIHRha2VzIGNhcmUgb2YgY2xlYXJpbmcgYW55IHJlbWFpbmluZyBoYW5kc2hha2Uga2V5XG4gMTk2Olx0XHQgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuIDE5NzpcdFx0ICovXG4gMTk4Olx0XHRtZW16ZXJvX2V4cGxpY2l0KHBlZXIsIHNpemVvZigqcGVlcikpO1xuIDE5OTpcdFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xuIDIwMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhvc2UgYHdnX3F1ZXVlXypgIGZ1bmN0aW9ucywgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFdpcmVHdWFyZCBRdWV1ZSBNYW5hZ2VtZW50KioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgV2lyZUd1YXJkIHF1ZXVlaW5nIHN5c3RlbSBpcyB3b3JraW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHJlbGF0ZWQgdG8gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCwgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVucXVldWUgZnVuY3Rpb25zLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQgaXMgcGFyYW1vdW50LgoKRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhvc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgd2lyZWd1YXJkIGNvZGViYXNlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhleSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gRnJvbSB0YXNrbGV0cz8gRnJvbSB3aXRoaW4gbmV0ZmlsdGVyIGhvb2tzPyBLbm93aW5nIHRoZSAqd2hlcmUqIGlzIGFic29sdXRlbHkgY3JpdGljYWwuCgpCZXlvbmQgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLCBJJiMzOTttIGFsc28gZ29pbmcgdG8gaWRlbnRpZnkgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBlbnF1ZXVlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgY2FsbCBncmFwaCwgc2hvd2luZyBub3Qgb25seSB3aG8gKmNhbGxzKiB0aGVtLCBidXQgYWxzbyB3aG8gKnRvdWNoZXMqIHRoZW0sIGZvciBleGFtcGxlLCBmdW5jdGlvbnMgdGhhdCBwYXNzIGEgZGF0YSBzdHJ1Y3R1cmUgdG8gYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBmdWxsIHNjb3BlIG9mIGZ1bmN0aW9ucyB0aGF0IHJlbHkgb24gYW5kIGluZmx1ZW5jZSB0aGUgcXVldWVpbmcgbG9naWMuIEJ5IG1hcHBpbmcgdGhlIGZ1bGwgcmFuZ2Ugb2YgcmVsYXRlZCBmdW5jdGlvbnMsIEkgY2FuIHVuZGVyc3RhbmQgYWxsIHRoZSBwb2ludHMgaW4gY29kZSB0aGF0IGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBvcGVyYXRpb24gb2YgdGhlIHF1ZXVlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcXVldWVfZW5xdWV1ZV9wZXJfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTUzOnN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE1NC1cdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNzYtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNzc6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNzgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5MS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE5MjpzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00OTM9dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTAyLVx0XHRcdFx0UEFDS0VUX1NUQVRFX0NSWVBURUQgOiBQQUNLRVRfU1RBVEVfREVBRDtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTAzOlx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MDQtXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUwOT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI1LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MjY6XHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXHUwMDI2d2ctXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSwgc2tiLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjctXHRcdFx0XHRcdFx0ICAgd2ctXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI4LVx0aWYgKHVubGlrZWx5KHJldCA9PSAtRVBJUEUpKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1Mjk6XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUzMC1cdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9Mjg3PXZvaWQgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMwNC1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMDU6XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzA2LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMi1cdGlmICh1bmxpa2VseShyZXQgPT0gLUVQSVBFKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6MzIzOlx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KGZpcnN0LCBQQUNLRVRfU1RBVEVfREVBRCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyNC1lcnI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldpcmVHdWFyZCBDb2RlIFJldmlldyBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGdvIHRocm91Z2ggdGhpcyBXaXJlR3VhcmQgY29kZWJhc2UuIEZpcnN0LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY29yZSBwYWNrZXQgaGFuZGxpbmcgcm91dGluZXM6IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgYnVsbGV0cHJvb2YsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG5ldyBhZHZhbmNlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBhbnkgdGhyZWFkaW5nIGlzc3VlcywgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZXJlLgoKVGhlbiwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQgYW5kIHNjYW4gYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIG1vZHVsZS4gTG9vayBmb3IgYW55IGV4cG9zZWQgZnVuY3Rpb25hbGl0eSBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCB0byB1bmRlcnN0YW5kLgoKRmluYWxseSwgSSBhYnNvbHV0ZWx5ICptdXN0KiBjaGVjayB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdXNlcmxhbmQgaW50ZXJmYWNlIGxpdmVzLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBlbnN1cmUgdGhvc2UgaW50ZXJmYWNlcyBhcmUgaGFyZGVuZWQgYW5kIHRoYXQgYW55IHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMgYXJlIGlkZW50aWZpZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjUzLVx0LyogVGhlIGZpbmFsIHJlZmVyZW5jZXMgYXJlIGNsZWFyZWQgaW4gdGhlIGJlbG93IGNhbGxzIHRvIGRlc3Ryb3lfd29ya3F1ZXVlLiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjI1NDpcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjU1LVx0ZGVzdHJveV93b3JrcXVldWUod2ctXHUwMDNlaGFuZHNoYWtlX3JlY2VpdmVfd3EpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9MzQwPXN0YXRpYyBpbnQgc2V0X3BlZXIoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBubGF0dHIgKiphdHRycylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNC1cdGlmIChmbGFncyBcdTAwMjYgV0dQRUVSX0ZfUkVNT1ZFX01FKSB7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjQwNTpcdFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNi1cdFx0Z290byBvdXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz00NzM9aW50IHdnX3NldF9kZXZpY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE3LVx0aWYgKGZsYWdzIFx1MDAyNiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjUxODpcdFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTM5LVx0XHRcdFx0d2dfcGVlcl9wdXQocGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjU0MDpcdFx0XHRcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01NDEtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1Ny0gKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTU4OnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjgtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE2OTp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTcwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTgwPXZvaWQgd2dfcGVlcl9wdXQoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo4MTp2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODI6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC04My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgV2lyZUd1YXJkIENvZGUgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgY29kZWJhc2UgYWdhaW4uIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBgd2dfc2V0X2RldmljZV9kb2l0YCBpcyB0aGF0IEdlbmwgRG9JdCBjYWxsYmFjaywgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgbmV0bGluay1iYXNlZCBXaXJlR3VhcmQgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFkZC91cGRhdGUvcmVtb3ZlIHBlZXIgbWFnaWMgaGFwcGVucyDigJMgSSBuZWVkIHRvIGtlZXAgdGhhdCBmaXJtbHkgaW4gbWluZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGZyb250IGRvb3IgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcmZhY2UmIzM5O3MgcGVlciByZWxhdGlvbnNoaXBzLgoKVGhlbiB0aGVyZSYjMzk7cyBgd2dfeG1pdGAgb3ZlciBpbiBgc2VuZC5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHRyYW5zbWlzc2lvbiBwYXRoOiBxdWV1ZWluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgc3dlZXAgdGhyb3VnaCBgc2VuZC5jYCBhbmQgYHJlY2VpdmUuY2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIHBhY2tldCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBoYW5kb2ZmIHBvaW50cy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldHMgYXJlIGdldHRpbmcgaW4gYW5kIG91dCBhbmQgd2hhdCBlYWNoIHBhcnQgZG9lcyBvbiB0aGUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfdHhfdCB3Z194bWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0xMTU9c3RhdGljIGludCB3Z19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzNi1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoxMzc6c3RhdGljIG5ldGRldl90eF90IHdnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXaXJlR3VhcmQgRnVuY3Rpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGNvZGViYXNlLiBGaXJzdCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIGxpc3QgdGhvc2UgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIG9yIGFyZSBjcml0aWNhbCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYHdnX3NldF9kZXZpY2VfZG9pdGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF90eF93b3JrZXJgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgd2dfcGFja2V0X3R4X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgY29uZmlybSB0aGF0IHRoZXkgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucyDigJMgbWFraW5nIHN1cmUgdGhlc2UgcG90ZW50aWFsbHkgY3JpdGljYWwgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFuZCB0aGVpciBzY29wZSBpcyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIG1vZHVsZS4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZXhwb3J0ZWQgQVBJIHN1cmZhY2UgYW5kLCB1bHRpbWF0ZWx5LCB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBXaXJlR3VhcmQgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy00OS1cdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrLCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6NTA6XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUxLVx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTUwPXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTE6dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01Mi12b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjQyPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YV9kb25lKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yNjEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI2Mjp2b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHdnX3BhY2tldF9yeF9wb2xsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkmIzM5O20gZm9jdXNpbmcgb24gYHdnX3BhY2tldF9yeF9wb2xsYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgY2xlYXIg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBwb2xsaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGNvbnRleHQsIG9idmlvdXNseSBmb3IgcmVjZWl2aW5nIHRyYWZmaWMuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcywgb2YgY291cnNlLCBidXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgY2xlYXIgZnJvbSB0aGUgdGl0bGUuIE5vdywgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGlzIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRoYXQgcG9sbGluZyBsb29wOiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFueSBwb3RlbnRpYWwgbG9ja2luZywgYW5kIGhvdyBpdCBoYW5kbGVzIHBhY2tldCBidWZmZXJpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgaW1wbGVtZW50YXRpb24gaGVyZSBjYW4gaGF2ZSBhIGh1Z2UgaW1wYWN0IG9uIGxhdGVuY3kgYW5kIG92ZXJhbGwgdGhyb3VnaHB1dC4gR290dGEgYmUgdGhvcm91Z2guIFRpbWUgdG8gY3JhY2sgaXQgb3Blbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01OS1cdHNldF9iaXQoTkFQSV9TVEFURV9OT19CVVNZX1BPTEwsIFx1MDAyNnBlZXItXHUwMDNlbmFwaS5zdGF0ZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjYwOlx0bmV0aWZfbmFwaV9hZGQod2ctXHUwMDNlZGV2LCBcdTAwMjZwZWVyLVx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNjEtXHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTMzPXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9yZWNlaXZlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzQtLyogTkFQSSBwb2xsIGZ1bmN0aW9uOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MzU6aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zNi0vKiBXb3JrcXVldWUgd29ya2VyOiAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9MzM1PXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGFfZG9uZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDM4OmludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcmAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBXaXJlR3VhcmQmIzM5O3MgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzIHRoZSB3b3JrZXIgdGhyZWFkIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKnNlbmRpbmcqIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBwYWNrZXRzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBrZXkgcmVzcG9uc2liaWxpdGllczogZ2VuZXJhdGluZyB0aGUgaW5pdGlhbCBlcGhlbWVyYWwga2V5IHBhaXIsIGNvbnN0cnVjdGluZyB0aGUgaGFuZHNoYWtlIG1lc3NhZ2UgaXRzZWxmIChwcm9iYWJseSBpbmNsdWRpbmcgdGhlIHBlZXImIzM5O3Mgc3RhdGljIHB1YmxpYyBrZXksIHRoZSBlcGhlbWVyYWwgcHVibGljIGtleSwgdGhlIE1BQywgYW5kIHRoZSBwcm90b2NvbCB2ZXJzaW9uKSwgYW5kIHRoZW4gYWN0dWFsbHkgcXVldWluZyBpdCBmb3IgdHJhbnNtaXNzaW9uLiBJIHN1c3BlY3QgaXQmIzM5O3Mgd29ya2luZyBjbG9zZWx5IHdpdGggdGhlIGNyeXB0b2dyYXBoeSBwcmltaXRpdmVzLCBsaWtlbHkgdXNpbmcgdGhlIFgyNTUxOSBrZXkgZXhjaGFuZ2UsIGFuZCB0aGVuIHRoZSBBRUFEIGNpcGhlciBmb3IgdGhlIG1lc3NhZ2UuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbG9ja2luZyBzZW1hbnRpY3MgaGVyZS4gRG9lcyBpdCBoYXZlIG11dGV4IHByb3RlY3Rpb24/IFdoYXQgaXMgdGhlIGNvbmN1cnJlbmN5IG1vZGVsPyBBbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBzdWNoIGFzIGJhdGNoaW5nIHRoZXNlIGhhbmRzaGFrZXMgaWYgdGhlcmUmIzM5O3MgYSBmbG9vZCBvZiBuZXcgcGVlcnM/IEkgd2FudCB0byBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzOiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvY2tldCBpcyBmdWxsPyBJcyB0aGVyZSBwcm9wZXIgYmFja29mZiBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcmV0cmFuc21pc3Npb25zIGdyYWNlZnVsbHk/IEVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlLCBlc3BlY2lhbGx5IGZvciBwcmV2ZW50aW5nIHJlc291cmNlIHN0YXJ2YXRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLgoKQmV5b25kIHRoZSBpbW1lZGlhdGUgaGFuZHNoYWtlLCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHRpbWVyIGxvZ2ljLiBJcyB0aGVyZSBhIGRlZmluZWQgdGltZW91dCBmb3IgdGhlIGhhbmRzaGFrZSwgYW5kIGhvdyBpcyBpdCB0cmlnZ2VyZWQ/IFdoYXQgaGFwcGVucyB1cG9uIHRpbWVvdXQ/IEFyZSByZXRyYW5zbWlzc2lvbnMgaGFuZGxlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGluaXRpYWwgYXR0ZW1wdD8gTXkgdGhvdWdodCBpcywgYXJlIHRoZSByZXRyeSBtZWNoYW5pc21zIG9wdGltaXplZCBvciBpcyB0aGVyZSBhIHZ1bG5lcmFiaWxpdHk/IEFuZCBmaW5hbGx5LCB3aGF0IGFib3V0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbmV0d29yayBzdGFjaz8gSSB3b3VsZCBsaWtlIHRvIHNlZSBpZiBhbnkgY29udGV4dC1zd2l0Y2hlcyBhcmUgbmVjZXNzYXJ5IGZvciBpdC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBlZmZpY2llbnQgYW5kIHNlY3VyZSwgZXNwZWNpYWxseSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy00OC1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjQ5Olx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01MC1cdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD00OD12b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTQ5LS8qIFdvcmtxdWV1ZSB3b3JrZXJzOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTA6dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01MS12b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTIxPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9zZW5kX2hhbmRzaGFrZV9pbml0aWF0aW9uKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtNDUtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjQ2OnZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqUGVlciBNYW5hZ2VtZW50IFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIHBlZXIgbWFuYWdlbWVudCByb3V0aW5lcy4gRmlyc3QsIEkmIzM5O2xsIHByaW9yaXRpemUgdmVyaWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9uczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNsZWFuaW5nIHVwIHBlZXJzLCBzbyB0aGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBhZ2FpbnN0IHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgaGVhZGVyIGZpbGUuIEkgd2lsbCBjaGVjayB0aGUgYHBlZXIuaGAgaGVhZGVyIGZpbGUgYW5kIHRoZW4gc3lzdGVtYXRpY2FsbHkgcmV2aWV3IGBwZWVyLmNgLCBmb2N1c2luZyBvbiBldmVyeSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgZmlsZS4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIEkgY292ZXIgdGhlIHB1YmxpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gIDcxOlx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLFxuICA3MjpcdFx0XHRcdCAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSk7XG4gIDczOlx0XG4gIDc0Olx0c3RydWN0IHdnX3BlZXIgKl9fbXVzdF9jaGVjayB3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgNzU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgNzY6XHR7XG4gIDc3Olx0XHRrcmVmX2dldChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiAgNzg6XHRcdHJldHVybiBwZWVyO1xuICA3OTpcdH1cbiAgODA6XHR2b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgODE6XHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgODI6XHR2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zyk7XG4gIDgzOlx0XG4gIDg0Olx0aW50IHdnX3BlZXJfaW5pdCh2b2lkKTtcbiAgODU6XHR2b2lkIHdnX3BlZXJfdW5pbml0KHZvaWQpO1xuICA4NjpcdFxuICA4NzpcdCNlbmRpZiAvKiBfV0dfUEVFUl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI5CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBXaXJlR3VhcmQgUGVlciBUZWFyZG93biBhbmQgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZnV6emluZyBwbGFuIGZvciB0aGlzIFdpcmVHdWFyZCBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGR1cmluZyBwZWVyIHRlYXJkb3duIGFuZCBwYWNrZXQgcXVldWluZyDigJMgc3BlY2lmaWNhbGx5LCByZXBsYWNpbmcgYnJvYWQgd29ya3F1ZXVlIGZsdXNoZXMgd2l0aCB0YXJnZXRlZCBvbmVzIGFuZCBlbXBsb3lpbmcgYXRvbWljIHRyYWNraW5nIChgcGFja2V0X2NyeXB0X3BlbmRpbmdgLCBgd2FpdF92YXJfZXZlbnRgLCBgd2FrZV91cF92YXJgKS4gU2luY2UgV2lyZUd1YXJkIGlzIGEgc29mdHdhcmUgVlBOIGRyaXZlciwgSSBjYW4gdGFyZ2V0IGl0IGluIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFueSBzcGVjaWFsaXplZCBoYXJkd2FyZSBzZXR1cCB3aGljaCBpcyBhIGJpZyB3aW4uCgpUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBuZWVkIGBXSVJFR1VBUkRgIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBjb3JlIGNvbXBvbmVudC4gSSBzZWUgdGhlIHN1Z2dlc3RlZCBjb25maWdzIGluY2x1ZGUgYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBqdXN0IGBXSVJFR1VBUkRgIHRvIG1pbmltaXplIG5vaXNlLCBidXQgSSBjYW4gY2VydGFpbmx5IGtlZXAgdGhlIG9wdGlvbiB0byBhZGQgdGhlIG90aGVycyBsYXRlci4KClRoZSByZWFsbHkgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhvc2UgZnVuY3Rpb25zIGFyZSByaWdodCB3aGVyZSB0aGUgYWN0aW9uIGlzOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCBhcmUgdGhlIG9idmlvdXMgb25lcyBpbnZvbHZlZCBpbiBwZWVyIGxpZmVjeWNsZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwYWNrZXQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGZpbmFsbHkgYHdnX3NldF9kZXZpY2VfZG9pdGAgd2hpY2ggSSBleHBlY3QgY29uZmlndXJlcyB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgc29saWQgc2V0IG9mIHRhcmdldHMgdG8gZ28gYWZ0ZXIuCgpJJiMzOTt2ZSByZXZpZXdlZCBhbGwgdGhlIHBhcmFtZXRlcnMsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gYmVnaW4gdGVzdGluZy4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaW4gV2lyZUd1YXJkJiMzOTtzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCB0byB3YWl0IHNwZWNpZmljYWxseSBmb3IgaW5mbGlnaHQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciB0aGF0IHBlZXIgYmVmb3JlIGZsdXNoaW5nIHBlci1wZWVyIHdvcmsgc3RydWN0dXJlcyBhbmQgZGVsZXRpbmcgTkFQSS5cblxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4MzYzMDAzNjY2ZWVlMDVlOGNhM2U1ODZlMzZmYzU5YTVmZTViZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwppbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbG9ja2RlcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7CiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApOwpAQCAtNDksNiAmIzQzOzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLAogCUlOSVRfV09SSygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDt0eF9xdWV1ZSk7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7cnhfcXVldWUpOwomIzQzOwkvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqLwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpOwogCXJ3bG9ja19pbml0KCZhbXA7cGVlci0mZ3Q7ZW5kcG9pbnRfbG9jayk7CiAJa3JlZl9pbml0KCZhbXA7cGVlci0mZ3Q7cmVmY291bnQpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtwZWVyLSZndDtzdGFnZWRfcGFja2V0X3F1ZXVlKTsKQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKQogCSAqLwogCXdnX3RpbWVyc19zdG9wKHBlZXIpOwogCi0JLyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24mIzM5O3QKLQkgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnkKLQkgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsCi0JICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vCi0JICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLgomIzQzOwkvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlCiYjNDM7CSAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZwomIzQzOwkgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzCiYjNDM7CSAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKQEAgLTE5NCw2ICYjNDM7MTk4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAogCWF0b21pY19zZXRfcmVsZWFzZSgmYW1wO1BBQ0tFVF9DQihza2IpLSZndDtzdGF0ZSwgc3RhdGUpOwogCW5hcGlfc2NoZWR1bGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQl3YWtlX3VwX3ZhcigmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKIAl3Z19wZWVyX3B1dChwZWVyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgV2lyZUd1YXJkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBXaXJlR3VhcmQgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIG1vcmUgZmluZS1ncmFpbmVkIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwZXItcGVlciBjb250ZXh0LiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhgLCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYCwgd2hpY2ggYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhbiBhdG9taWMgY291bnRlciwgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCwgd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBhbGxvd3MgZm9yIHBlci1wZWVyIHRyYWNraW5nIG9mIHBlbmRpbmcgY3J5cHRvIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGlzIGNvdW50ZXIgdG8gMSBpbiBgd2dfcGVlcl9jcmVhdGVgLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGNvdW50ZXIgaXMgdXNlZCBkdXJpbmcgcGVlciByZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBnbG9iYWwgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggYGF0b21pY19kZWNgLCBgd2FpdF92YXJfZXZlbnRgLCBhbmQgYGZsdXNoX3dvcmtgIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGF2b2lkIGZsdXNoaW5nIHRoZSBlbnRpcmUgZGV2aWNlIHdvcmtxdWV1ZSBhbmQgaW5zdGVhZCBzeW5jaHJvbml6ZSBvbiB0aGUgcGVuZGluZyBjcnlwdG8gb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgcGVlci4gVGhpcyBpcyB0aGUgZ29vZCBwYXJ0ISBJdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgYnV0IGl0IGFsc28gYnJpbmdzIHRoZSBzcGVjdGVyIG9mIHN1YnRsZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQgd2FpdCBjb25kaXRpb24uIEkgaG9wZSB0aGV5IGRpZCB0aGlzIGNvcnJlY3RseS4KCkluIGFkZGl0aW9uLCBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgaW4gdGhlIGVucXVldWUgZnVuY3Rpb25zIChgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCwgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLCBhbmQgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgKS4gIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmNyZW1lbnRpbmcgdGhlIGNvdW50ZXIgd2hlbiBhIHBhY2tldCBpcyBxdWV1ZWQgYW5kIGRlY3JlbWVudGluZy93YWtpbmcgdXAgdGhlIHByb2Nlc3Mgd2hlbiBpdCYjMzk7cyBkb25lLgoKTXkgZmlyc3QgY29uY2VybnMgYXJlIGFsbCBhYm91dCB0aGUgcG90ZW50aWFsIHJpc2tzOiByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZGVhZGxvY2tzLCBhbmQgaGFuZ2luZyB0ZWFyZG93bnMsIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiBhbnkgc3luY2hyb25pemF0aW9uLWhlYXZ5IGNvZGUuIEkmIzM5O20gYWxzbyBnb2luZyB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IG9idmlvdXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgdGhvdWdoIGhvcGVmdWxseSBLQVNBTiBhbmQgbG9ja2RlcCB3aWxsIGNhdGNoIHRob3NlLgoKSSYjMzk7dmUgcXVpY2tseSByZXZpZXdlZCB0aGUgY29kZSBhbmQgZG9uJiMzOTt0ICpzZWUqIGFueXRoaW5nIHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZ2AgY291bnRlciBpcyBpbml0aWFsaXplZCwgc28gdGhhdCYjMzk7cyBnb29kLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgd2dfcGVlcl9jcmVhdGVgIGFuZCBtYWtlIHN1cmUgdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIG9yIHByb3Blcmx5IGluaXRpYWxpemVkLiBHcmVwcGluZyBhbmQgcmVhZGluZyB0aGUgc291cmNlIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgdG8gYmUgc3VyZS4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjM5MjpcdFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkzLVx0XHRpZiAoSVNfRVJSKHBlZXIpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MjI6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD0zNz1zdHJ1Y3Qgd2dfcGVlciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6NzA6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQZWVyIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjAgdGhyb3VnaCA3MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggY29yZSBwZWVyIG1hbmFnZW1lbnQg4oCTIGluaXRpYWxpemF0aW9uLCBsaWtlbHkgc29tZSBzb3J0IG9mIGRhdGEgc3RydWN0dXJlIHNldHVwIGZvciBlYWNoIGNvbm5lY3RlZCBwZWVyLCBhbmQgcGVyaGFwcyBzb21lIGVzc2VudGlhbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgV2lyZUd1YXJkIHJlcHJlc2VudHMgYSBwZWVyIGludGVybmFsbHkuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluOiB3aGF0IGRhdGEgaXMgc3RvcmVkIGFib3V0IGVhY2ggcGVlciwgaG93IHRoYXQgZGF0YSBpcyBzdHJ1Y3R1cmVkIChsaW5rZWQgbGlzdHMsIGhhc2ggdGFibGVzLCBldGMuKSwgYW5kIGhvdyBpbml0aWFsIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBvciB2ZXJpZmllZC4gSSYjMzk7bSBhbHNvIHdhdGNoaW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGtub3dpbmcgaG93IGltcG9ydGFudCBjb25jdXJyZW5jeSBpcyBpbiBuZXR3b3JraW5nIGNvZGUuIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGV4cGVjdGluZyB0aGF0IHRoaXMgaXMgdGhlIGdyb3VuZCBsZXZlbCBpbmZyYXN0cnVjdHVyZSB0aGF0IGV2ZXJ5dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGZvciBwZWVyIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiAgMjM6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4gIDI0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xuICAyNzpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gIDI4Olx0XG4gIDI5Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNndnLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAod2ctXHUwMDNlbnVtX3BlZXJzIFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXG4gIDMyOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDMzOlx0XG4gIDM0Olx0XHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gIDM1Olx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuICAzNjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICAzNzpcdFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcbiAgMzg6XHRcdFx0Z290byBlcnI7XG4gIDM5Olx0XG4gIDQwOlx0XHRwZWVyLVx1MDAzZWRldmljZSA9IHdnO1xuICA0MTpcdFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VoYW5kc2hha2UsIFx1MDAyNndnLVx1MDAzZXN0YXRpY19pZGVudGl0eSxcbiAgNDI6XHRcdFx0XHRcdHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXksIHBlZXIpO1xuICA0MzpcdFx0cGVlci1cdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cGVlcl9jb3VudGVyKTtcbiAgNDQ6XHRcdHBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1ID0gbnJfY3B1bWFza19iaXRzO1xuICA0NTpcdFx0d2dfY29va2llX2luaXQoXHUwMDI2cGVlci1cdTAwM2VsYXRlc3RfY29va2llKTtcbiAgNDY6XHRcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xuICA0NzpcdFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XG4gIDQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xuICA0OTpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuICA1MDpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuICA1MTpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuICA1MjpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuICA1MzpcdFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiAgNTQ6XHRcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gIDU1Olx0XHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuICA1NjpcdFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuICA1NzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuICA1ODpcdFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcdTAwMjZwZWVyLVx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xuICA1OTpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgNjA6XHRcdG5ldGlmX25hcGlfYWRkKHdnLVx1MDAzZWRldiwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLCB3Z19wYWNrZXRfcnhfcG9sbCk7XG4gIDYxOlx0XHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuICA2MjpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwZWVyLVx1MDAzZXBlZXJfbGlzdCwgXHUwMDI2d2ctXHUwMDNlcGVlcl9saXN0KTtcbiAgNjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlZXItXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcbiAgNjQ6XHRcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVx1MDAzZXBlZXJfaGFzaHRhYmxlLCBwZWVyKTtcbiAgNjU6XHRcdCYjNDM7JiM0Mzt3Zy1cdTAwM2VudW1fcGVlcnM7XG4gIDY2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogUGVlciAlbGx1IGNyZWF0ZWRcXG5cJiMzNDssIHdnLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBwZWVyLVx1MDAzZWludGVybmFsX2lkKTtcbiAgNjc6XHRcdHJldHVybiBwZWVyO1xuICA2ODpcdFxuICA2OTpcdGVycjpcbiAgNzA6XHRcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcbiAgNzE6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA3NTpcdHtcbiAgNzY6XHRcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpLFxuICA3NzpcdFx0XHRcdCBcJiMzNDtUYWtpbmcgcGVlciByZWZlcmVuY2Ugd2l0aG91dCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrXCYjMzQ7KTtcbiAgNzg6XHRcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCkpKVxuICA3OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGVlciBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGNsb3NlbHkgYXQgaG93IHRoZSBgcGVlcmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiBGaXJzdCwgYGttZW1fY2FjaGVfemFsbG9jKHBlZXJfY2FjaGUsIEdGUF9LRVJORUwpYCBpcyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBtZW1vcnksIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGVsaW1pbmF0ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZW4sIHRoZSBuZXcgZmllbGQgYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCwgYW4gYGF0b21pY190YCwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC4gVGhpcyBpbml0aWFsIHZhbHVlIG9mIDEgaXMgc2lnbmlmaWNhbnQgYW5kIHdpbGwgcGxheSBhIGNydWNpYWwgcm9sZS4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGlzIGF0b21pYyB2YXJpYWJsZSBpcyB1c2VkIGZvciByZWZlcmVuY2UgdHJhY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGVlciB0ZWFyZG93biB3aXRoaW4gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBJdCYjMzk7cyBpbmNyZW1lbnRlZCBpbiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBhbmQgZGVjcmVtZW50ZWQgaW4gYm90aCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4KCkJhc2VkIG9uIHRoaXMgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgYSBjcml0aWNhbCBzYWZldHkgY29uY2Vybi4gTm8gdXNlci1zcGFjZSBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgcHJlc2VudCwgYW5kIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGJ1ZmZlciBpc3N1ZXMuIFRoZSB1c2Ugb2YgYW4gYXRvbWljIHZhcmlhYmxlIGZvciB0cmFja2luZyBhbHNvIGltcGxpZXMgdGhlIGRldmVsb3BlciBpcyBjb25zY2lvdXMgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKRnVydGhlcm1vcmUsIGFueSBjb25jdXJyZW5jeSBwcm9ibGVtcywgZGFuZ2xpbmcgcG9pbnRlcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9jayBzY2VuYXJpb3Mgc2hvdWxkIGJlIGNhdWdodCBieSB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgaHVuZyB0YXNrIGRldGVjdG9yLiBHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUgZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiYjMzk7cyBhc3Npc3RhbmNlLiBObyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBJIGNhbiBzZWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcmVxdWlyZW1lbnRzLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBMZXQmIzM5O3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdyB0byBmaW5hbGl6ZSB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBXaXJlR3VhcmQmIzM5O3MgcGVlciBtYW5hZ2VtZW50LiBJbnN0ZWFkIG9mIGZsdXNoaW5nIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgdXBvbiBwZWVyIGRlc3RydWN0aW9uLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnRgIHRvIHdhaXQgc3BlY2lmaWNhbGx5IGZvciBpbmZsaWdodCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgZm9yIHRoYXQgcGVlciBiZWZvcmUgZmx1c2hpbmcgcGVyLXBlZXIgd29yayBzdHJ1Y3R1cmVzIGFuZCBkZWxldGluZyBOQVBJLlxuXG5UaGUgbmV3IGZpZWxkIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCB3Z19wZWVyYCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVzaW5nIGBhdG9taWNfc2V0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIEFueSBzeW5jaHJvbml6YXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgUkNVIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIEtNU0FOIGlzIHRoZXJlZm9yZSBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCYjMzk7cyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXG5cblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM4OjUwLjk5OTYyNTUxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTI0NTk4Nzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXSVJFR1VBUkRcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVfYWxsXCIsXG4gICAgXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9kZWNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3R4X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3J4X3BvbGxcIixcbiAgICBcIndnX3NldF9kZXZpY2VfZG9pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCdzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXFxuXFxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozODo1MC45OTk2Mjk3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk2OTgyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcXG5pbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiBcXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbkBAIC00OSw2ICs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XFxuIFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiBcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiBcXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlcmVmY291bnQpO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gXFx0ICovXFxuIFxcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xcbiBcXG4tXFx0LyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24ndFxcbi1cXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxcbi1cXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXFxuLVxcdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xcbi1cXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXFxuK1xcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcXG4rXFx0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXFxuK1xcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcXG4rXFx0ICogdG8gZmluaXNoIHNjaGVkdWxpbmcgdGhlaXIgc2VyaWFsIFRYIHdvcmsgb3IgUlggTkFQSSBwcm9jZXNzaW5nLlxcbiBcXHQgKi9cXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuK1xcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4rXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gXFxuLVxcdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXFxuLVxcdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuLVxcdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xcbi1cXHRmbHVzaF93b3JrcXVldWUocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi1cXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4tXFx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuK1xcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdCAqL1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIFxcbi1cXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxcbi1cXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxcbitcXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcXG4rXFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiBcXHQgKi9cXG4tXFx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIFxcbiBcXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xcbiBcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xcbiBzdHJ1Y3Qgd2dfcGVlciB7XFxuIFxcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xcbitcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xcbiBcXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xcbiBcXHRib29sIGlzX2RlYWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi5mZGQzNGYwZjE1YTZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZQQUNLRVRfUEVFUihza2IpLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIFxcbiBcXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxcbiBcXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXFxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIFxcdFxcdCAgICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiBcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDYgKzE5OCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XFxuIFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRuYXBpX3NjaGVkdWxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcXG4rXFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gXFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM4OjUyLjYzMDAwNzcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc0MjcyOTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19zZXRfZGV2aWNlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozODo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5pbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuQEAgLTQ5LDYgKzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuIFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuIFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuK1x0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbitcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuIFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuQEAgLTEwNSwyOCArMTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gXHQgKi9cbiBcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xuIFxuLVx0LyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24ndFxuLVx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UncyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcbi1cdCAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWxcbi1cdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xuLVx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxuK1x0LyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZVxuK1x0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXG4rXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXG4rXHQgKiB0byBmaW5pc2ggc2NoZWR1bGluZyB0aGVpciBzZXJpYWwgVFggd29yayBvciBSWCBOQVBJIHByb2Nlc3NpbmcuXG4gXHQgKi9cbitcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuK1x0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuK1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLVx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4rXHQvKiBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuIFx0ICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiBcdCAqL1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbiBcbi1cdC8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yXG4tXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxuK1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4rXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gXHQgKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VoYW5kc2hha2Vfc2VuZF93cSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmspO1xuIFxuIFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcbiBcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbitcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xuIFx0aW50IHNlcmlhbF93b3JrX2NwdTtcbiBcdGJvb2wgaXNfZGVhZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi5mZGQzNGYwZjE1YTZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSlcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFxuIFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcbiBcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cbkBAIC0xODIsNiArMTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuK1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFx0d2dfcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuQEAgLTE5NCw2ICsxOTgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozODo1Mi42MzAwMDkxMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODkwNDYwNjgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgUGF0Y2ggQW5hbHlzaXMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBXaXJlR3VhcmQgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugc3RhbmRhcmQga2VybmVsIHBhdGNoIHJldmlldywgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgc3l6a2FsbGVyIGZ1enppbmcuIEEgcXVpY2sgcmlzayBhbmFseXNpcyBzYXlzIHRoaXMgaXMgYmVuaWduLCBqdXN0IGNvZGUgZXZhbHVhdGlvbiBhbmQgbWFpbnRlbmFuY2UuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIGhhbmRsaW5nIG9mIGB3Z19wZWVyYCB0ZWFyZG93biBhbmQgaG93IGl0IGNvb3JkaW5hdGVzIHdpdGggdGhlIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzLiBQcmV2aW91c2x5LCB3ZSBoYWQgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMsIGJ1dCBub3cgdGhleSdyZSBhZGRpbmcgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCwgaW5jcmVtZW50aW5nLCBkZWNyZW1lbnRpbmcsIGFuZCB3YWl0aW5nLiBUaGV5J3JlIGFsc28gZmx1c2hpbmcgaW5kaXZpZHVhbCB3b3JrIGl0ZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc3luY2hyb25pemF0aW9uIGNoYW5nZSwgZGlyZWN0bHkgaW4gdGhlIGNvcmUgV2lyZUd1YXJkIGRyaXZlciBjb2RlLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgY29yZSBXaXJlR3VhcmQgY29kZSBpcyBpbnRlcmVzdGluZy4gV2lyZUd1YXJkIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIEl0J3MgYSBzb2Z0d2FyZSBWUE4gdHVubmVsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBhbmQgcnVucyBmaW5lIGluIFFFTVUgd2l0aG91dCBuZWVkaW5nIHNwZWNpYWwgaGFyZHdhcmUuIFdlIGNhbiBkZWZpbml0ZWx5IHJlYWNoIHRoaXMgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gV2UgbmVlZCB0byBnbyBmb3IgdGhpcy5cblxuU28sIG5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgV2lyZUd1YXJkIGFuZCBuZXR3b3JrIGdlbmVyYWxseSB0byBmaW5kIHRob3NlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIG9uIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYW5kIGBuZXQvS2NvbmZpZ2AgdG8gZG8gc28uIEknbGwgbmVlZCB0aGVzZSBjb25maWdzIGZvciBzeXprYWxsZXIgdG8gYnVpbGQgYSByZXByb2R1Y2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzEuNTM0NjE4MzU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MjAsIkVycm9yIjoidGhlIGZpbGUgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTozMS41MzQ2NjEwNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ5Njg2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipGaW5kaW5nIHRoZSBXaXJlR3VhcmQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBJIG5lZWQgdG8gbG9jYXRlIHRoZSBgV2lyZUd1YXJkYCBLY29uZmlnIGZpbGUuIE5vIG5lZWQgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLCBJJ2xsIGxldmVyYWdlIGBncmVwcGVyYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aXRoaW4gYSBwcm9qZWN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIGtub3cgdGhlIHN0YW5kYXJkIHRvb2xpbmcsIHNvIGxldCdzIGdldCByaWdodCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzMuMjg0MzQ4OTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc2MTY1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdJUkVHVUFSRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTU5PWNvbmZpZyBEVU1NWVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjc0OmNvbmZpZyBXSVJFR1VBUkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05MS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjkyOmNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM1LjAxMTk2OTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MjE3NzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBhbmQgSSdtIHplcm9pbmcgaW4gb24gbGluZSA3My4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBob2xkcyBzb21lIGtleSBpbmZvcm1hdGlvbiDigJMgcGVyaGFwcyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIHZpdGFsIGRyaXZlciBvcHRpb24sIG9yIG1heWJlIGV2ZW4gYSBjcml0aWNhbCBkZXBlbmRlbmN5LiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB3aGVyZSBhIHNpZ25pZmljYW50IG5ldHdvcmsgc2V0dGluZyBvciBjb25kaXRpb25hbCBkcml2ZXIgaW5jbHVzaW9uIGlzIGRlZmluZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTozNy43NTQxNDkzOThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdFxcbiAgNzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA3MjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGR1bW15LlxcbiAgNzM6XFx0XFxuICA3NDpcXHRjb25maWcgV0lSRUdVQVJEXFxuICA3NTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDc3OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgNzg6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgNzk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxcbiAgODA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxcbiAgODE6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXFxuICA4NDpcXHRcXHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0J3NcXG4gIDg1OlxcdFxcdCAgZGVzaWduZWQgdG8gYmUgZmFpcmx5IGdlbmVyYWwgcHVycG9zZSBhbmQgYWJzdHJhY3QgZW5vdWdoIHRvIGZpdCBtb3N0XFxuICA4NjpcXHRcXHQgIHVzZSBjYXNlcywgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSByZW1haW5pbmcgZXh0cmVtZWx5IHNpbXBsZSB0b1xcbiAgODc6XFx0XFx0ICBjb25maWd1cmUuIFNlZSB3d3cud2lyZWd1YXJkLmNvbSBmb3IgbW9yZSBpbmZvLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIEl0J3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcXG4gIDkwOlxcdFxcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbiAgOTM6XFx0XFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXFxuICA5NzpcXHRcXHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxcbiAgOTg6XFx0XFx0ICBleHRyYSB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdW5pdCB0ZXN0cyBhdCB2YXJpb3VzIHBvaW50cy4gVGhpcyBpc1xcbiAgOTk6XFx0XFx0ICBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRcXHQgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRjb25maWcgT1ZQTlxcbiAxMDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDEwNjpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDEwNzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMTA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMTA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM3Ljc1NDIzMzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDY0Mzc2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYXQgbGVhc3QgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgc3BlY2lmaWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBtb2R1bGUgaW5zdGFsbGF0aW9uIGRpcmVjdGl2ZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCdzIHNwZWNpZmljIHRvIFdpcmVHdWFyZC4gSSBzaG91bGQgcXVpY2tseSBzY2FuIGZvciBpbmNsdWRlIGRpcmVjdGl2ZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIHJ1bGVzLCBhbmQgaG93IHRoZSBtb2R1bGUgaXMgdWx0aW1hdGVseSBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9ucyBJJ20gcGxhbm5pbmcuIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyB0aGF0IFdpcmVHdWFyZCBtaWdodCBsZXZlcmFnZS4gVWx0aW1hdGVseSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgV2lyZUd1YXJkIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHNvIGl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjQwLjc2MDY3NzUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjY2ZsYWdzLXkgOj0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXQnXFxuICAgMjpcXHRjY2ZsYWdzLSQoQ09ORklHX1dJUkVHVUFSRF9ERUJVRykgKz0gLURERUJVR1xcbiAgIDM6XFx0d2lyZWd1YXJkLXkgOj0gbWFpbi5vXFxuICAgNDpcXHR3aXJlZ3VhcmQteSArPSBub2lzZS5vXFxuICAgNTpcXHR3aXJlZ3VhcmQteSArPSBkZXZpY2Uub1xcbiAgIDY6XFx0d2lyZWd1YXJkLXkgKz0gcGVlci5vXFxuICAgNzpcXHR3aXJlZ3VhcmQteSArPSB0aW1lcnMub1xcbiAgIDg6XFx0d2lyZWd1YXJkLXkgKz0gcXVldWVpbmcub1xcbiAgIDk6XFx0d2lyZWd1YXJkLXkgKz0gc2VuZC5vXFxuICAxMDpcXHR3aXJlZ3VhcmQteSArPSByZWNlaXZlLm9cXG4gIDExOlxcdHdpcmVndWFyZC15ICs9IHNvY2tldC5vXFxuICAxMjpcXHR3aXJlZ3VhcmQteSArPSBwZWVybG9va3VwLm9cXG4gIDEzOlxcdHdpcmVndWFyZC15ICs9IGFsbG93ZWRpcHMub1xcbiAgMTQ6XFx0d2lyZWd1YXJkLXkgKz0gcmF0ZWxpbWl0ZXIub1xcbiAgMTU6XFx0d2lyZWd1YXJkLXkgKz0gY29va2llLm9cXG4gIDE2OlxcdHdpcmVndWFyZC15ICs9IG5ldGxpbmsubyBnZW5lcmF0ZWQvbmV0bGluay5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MC43NjA3NDAzMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMzMxMzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgS2VybmVsIE1vZHVsZSBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFdpcmVHdWFyZCBzdHVmZiBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjb3JlIGNvbmZpZyBmbGFnIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBpcyBgQ09ORklHX1dJUkVHVUFSRGAuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIGBORVRgIGFuZCBgSU5FVGAsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3ZlcmFyY2hpbmcgZGVwZW5kZW5jaWVzLCBidXQgYFdJUkVHVUFSRGAgaXMgY2xlYXJseSB0aGUgY3JpdGljYWwgb25lIGhlcmUuXG5cbk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cywgdGhlIG5vbi1zdGF0aWMgb25lcyB0aGF0IEkgY2FuIHVzZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGUgc3ltYm9scyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgIGFuZCBpdHMgcmVsYXRlZCBmaWxlcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgYHBlZXIuY2AgZmlsZSBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCdzIGNhcmVmdWxseSBkaXNzZWN0IHRoYXQsIGxvb2tpbmcgZm9yIHRoZSByaWdodCBjYW5kaWRhdGVzIHRvIGluY2x1ZGUgaW4gbXkgRm9jdXNTeW1ib2xzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0My4wNjQwNTYzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgXFx1MDAzY0phc29uQHp4MmM0LmNvbVxcdTAwM2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJkZXZpY2UuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcXCJxdWV1ZWluZy5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcInRpbWVycy5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBlZXJsb29rdXAuaFxcXCJcXG4gIDExOlxcdCNpbmNsdWRlIFxcXCJub2lzZS5oXFxcIlxcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XFxuICAyMDpcXHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuICAyMzpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuICAyNDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlcjtcXG4gIDI3OlxcdFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKHdnLVxcdTAwM2VudW1fcGVlcnMgXFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXFxuICAzMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkoIXBlZXIpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDM3OlxcdFxcdGlmICh1bmxpa2VseShkc3RfY2FjaGVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcXG4gIDM4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRwZWVyLVxcdTAwM2VkZXZpY2UgPSB3ZztcXG4gIDQxOlxcdFxcdHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VoYW5kc2hha2UsIFxcdTAwMjZ3Zy1cXHUwMDNlc3RhdGljX2lkZW50aXR5LFxcbiAgNDI6XFx0XFx0XFx0XFx0XFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XFxuICA0MzpcXHRcXHRwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnBlZXJfY291bnRlcik7XFxuICA0NDpcXHRcXHRwZWVyLVxcdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XFxuICA0NTpcXHRcXHR3Z19jb29raWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlbGF0ZXN0X2Nvb2tpZSk7XFxuICA0NjpcXHRcXHR3Z190aW1lcnNfaW5pdChwZWVyKTtcXG4gIDQ3OlxcdFxcdHdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfcGVlcl9rZXlzKHBlZXIpO1xcbiAgNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xcbiAgNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuICA1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG4gIDUxOlxcdFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiAgNTI6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuICA1MzpcXHRcXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xcbiAgNTQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiAgNTU6XFx0XFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiAgNTY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWZjb3VudCk7XFxuICA1NzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG4gIDU4OlxcdFxcdHdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoXFx1MDAyNnBlZXItXFx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xcbiAgNTk6XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgNjA6XFx0XFx0bmV0aWZfbmFwaV9hZGQod2ctXFx1MDAzZWRldiwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcXG4gIDYxOlxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gIDYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCwgXFx1MDAyNndnLVxcdTAwM2VwZWVyX2xpc3QpO1xcbiAgNjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlZXItXFx1MDAzZWFsbG93ZWRpcHNfbGlzdCk7XFxuICA2NDpcXHRcXHR3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZCh3Zy1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgNjU6XFx0XFx0Kyt3Zy1cXHUwMDNlbnVtX3BlZXJzO1xcbiAgNjY6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBQZWVyICVsbHUgY3JlYXRlZFxcXFxuXFxcIiwgd2ctXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgcGVlci1cXHUwMDNlaW50ZXJuYWxfaWQpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIHBlZXI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdGVycjpcXG4gIDcwOlxcdFxcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcXG4gIDcxOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICA3MjpcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXFxuICA3NzpcXHRcXHRcXHRcXHQgXFxcIlRha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcXFwiKTtcXG4gIDc4OlxcdFxcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KSkpXFxuICA3OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDgwOlxcdFxcdHJldHVybiBwZWVyO1xcbiAgODE6XFx0fVxcbiAgODI6XFx0XFxuICA4MzpcXHRzdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gIDg0OlxcdHtcXG4gIDg1OlxcdFxcdC8qIFJlbW92ZSBmcm9tIGNvbmZpZ3VyYXRpb24tdGltZSBsb29rdXAgc3RydWN0dXJlcy4gKi9cXG4gIDg2OlxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCk7XFxuICA4NzpcXHRcXHR3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKFxcdTAwMjZwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBlZXJfYWxsb3dlZGlwcywgcGVlcixcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDg5OlxcdFxcdHdnX3B1YmtleV9oYXNodGFibGVfcmVtb3ZlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi9cXG4gIDkyOlxcdFxcdFdSSVRFX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIFRoZSBjYWxsZXIgbXVzdCBub3cgc3luY2hyb25pemVfbmV0KCkgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuICovXFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRXQVJOX09OKCFwZWVyLVxcdTAwM2Vpc19kZWFkKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0My4wNjQxNTc5MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NjIwNTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYC4gVGhlIGNvcmUgcGVlciBoYW5kbGluZyBsb2dpYyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgcGVlciBzdGF0ZSwgaGFuZGxpbmcga2V5IGV4Y2hhbmdlcyAob3IgbGFjayB0aGVyZW9mLCBpZiB0aGV5J3JlIHByZS1zaGFyZWQga2V5cyksIGFuZCBkaXJlY3RpbmcgdHJhZmZpYy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGNyeXB0b2dyYXBoaWMgaGFuZHNoYWtlcyBhbmQgcGFja2V0IHByb2Nlc3Npbmcgd2lsbCBtYW5pZmVzdC4gSSB3YW50IHRvIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGtleSB1cGRhdGVzIGFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBldmVudHMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBgd2dfcGVlcmAgc3RydWN0LCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gSSdtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXkgYXJlIHVzaW5nIGFueSB6ZXJvLWNvcHkgbWVjaGFuaXNtcyBvciBvdGhlciBvcHRpbWl6YXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgYXNwZWN0LiBJJ20gcmVhZHkgdG8gZmluZCBvdXQgaG93IHRoZXkgcHV0IGl0IGFsbCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NDUuOTIwMzY2ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdC8qIE5vIG1vcmUga2V5cGFpcnMgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgcGVlciwgc2luY2UgaXNfZGVhZCBwcm90ZWN0c1xcbiAxMDI6XFx0XFx0ICogYWRkX25ld19rZXlwYWlyLCBzbyB3ZSBjYW4gbm93IGRlc3Ryb3kgZXhpc3Rpbmcgb25lcy5cXG4gMTAzOlxcdFxcdCAqL1xcbiAxMDQ6XFx0XFx0d2dfbm9pc2Vfa2V5cGFpcnNfY2xlYXIoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzKTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0LyogRGVzdHJveSBhbGwgb25nb2luZyB0aW1lcnMgdGhhdCB3ZXJlIGluLWZsaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mXFxuIDEwNzpcXHRcXHQgKiB0aGlzIGZ1bmN0aW9uLlxcbiAxMDg6XFx0XFx0ICovXFxuIDEwOTpcXHRcXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0LyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZVxcbiAxMTI6XFx0XFx0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXFxuIDExMzpcXHRcXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXFxuIDExNDpcXHRcXHQgKiB0byBmaW5pc2ggc2NoZWR1bGluZyB0aGVpciBzZXJpYWwgVFggd29yayBvciBSWCBOQVBJIHByb2Nlc3NpbmcuXFxuIDExNTpcXHRcXHQgKi9cXG4gMTE2OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTE3OlxcdFxcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyxcXG4gMTE4OlxcdFxcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbiAxMjM6XFx0XFx0LyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcXG4gMTI0OlxcdFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIDEyNTpcXHRcXHQgKi9cXG4gMTI2OlxcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXFxuIDEyOTpcXHRcXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXFxuIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcXG4gMTM0OlxcdFxcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXFxuIDEzNTpcXHRcXHQgKiByZXR1cm5pbmcsIDIpIGZyb20gd2dfcGFja2V0X2NvbnN1bWVfZGF0YSgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkXFxuIDEzNjpcXHRcXHQgKiBhbmQgcmV0dXJuaW5nLCAzKSBmcm9tIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldCgpIGFmdGVyIGEgcG9pbnRcXG4gMTM3OlxcdFxcdCAqIHdoZXJlIGl0IGhhcyBwcm9jZXNzZWQgYW4gaW5jb21pbmcgaGFuZHNoYWtlIHBhY2tldCwgYnV0IHdoZXJlXFxuIDEzODpcXHRcXHQgKiBhbGwgY2FsbHMgdG8gcGFzcyBpdCBvZmYgdG8gdGltZXJzIGZhaWxzIGJlY2F1c2Ugb2YgaXNfZGVhZC4gV2Ugd29uJ3RcXG4gMTM5OlxcdFxcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tXFxuIDE0MDpcXHRcXHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24ndCBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgyKSBldmVudHVhbGx5LCBiZWNhdXNlXFxuIDE0MTpcXHRcXHQgKiB3Z19pbmRleF9oYXNodGFibGVfbG9va3VwIHdpbGwgYWx3YXlzIHJldHVybiBOVUxMLCBzaW5jZSB3ZSByZW1vdmVkXFxuIDE0MjpcXHRcXHQgKiBhbGwgZXhpc3Rpbmcga2V5cGFpcnMgYW5kIG5vIG1vcmUgY2FuIGJlIGNyZWF0ZWQ7IHdlIHdvbid0IGhhdmUgbmV3XFxuIDE0MzpcXHRcXHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XFxuIDE0NDpcXHRcXHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxcbiAxNDU6XFx0XFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXFxuIDE0NjpcXHRcXHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXFxuIDE0NzpcXHRcXHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cXG4gMTQ4OlxcdFxcdCAqL1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQtLXBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlbnVtX3BlZXJzO1xcbiAxNTE6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE1MjpcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBcXFwicmVtb3ZlXFxcIiBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxcbiAxNTU6XFx0ICogYSBwZWVyIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYW4gZW5kIGFuZCBub3QgcGFzc1xcbiAxNTY6XFx0ICogdGhlaXIgcmVmZXJlbmNlIG9udG8gYW5vdGhlciBjb250ZXh0LlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybjtcXG4gMTYyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cGVlcl9tYWtlX2RlYWQocGVlcik7XFxuIDE2NTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTY2OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0XFx0c3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wO1xcbiAxNzI6XFx0XFx0TElTVF9IRUFEKGRlYWRfcGVlcnMpO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0LyogQXZvaWQgaGF2aW5nIHRvIHRyYXZlcnNlIGluZGl2aWR1YWxseSBmb3IgZWFjaCBvbmUuICovXFxuIDE3NzpcXHRcXHR3Z19hbGxvd2VkaXBzX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VwZWVyX2FsbG93ZWRpcHMsIFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFxcdTAwMjZ3Zy1cXHUwMDNlcGVlcl9saXN0LCBwZWVyX2xpc3QpIHtcXG4gMTgwOlxcdFxcdFxcdHBlZXJfbWFrZV9kZWFkKHBlZXIpO1xcbiAxODE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNlcGVlcl9saXN0LCBcXHUwMDI2ZGVhZF9wZWVycyk7XFxuIDE4MjpcXHRcXHR9XFxuIDE4MzpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCBcXHUwMDI2ZGVhZF9wZWVycywgcGVlcl9saXN0KVxcbiAxODU6XFx0XFx0XFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0c3RhdGljIHZvaWQgcmN1X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCB3Z19wZWVyLCByY3UpO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUpO1xcbiAxOTM6XFx0XFx0V0FSTl9PTih3Z19wcmV2X3F1ZXVlX3BlZWsoXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlKSB8fCB3Z19wcmV2X3F1ZXVlX3BlZWsoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdC8qIFRoZSBmaW5hbCB6ZXJvaW5nIHRha2VzIGNhcmUgb2YgY2xlYXJpbmcgYW55IHJlbWFpbmluZyBoYW5kc2hha2Uga2V5XFxuIDE5NjpcXHRcXHQgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxcbiAxOTc6XFx0XFx0ICovXFxuIDE5ODpcXHRcXHRtZW16ZXJvX2V4cGxpY2l0KHBlZXIsIHNpemVvZigqcGVlcikpO1xcbiAxOTk6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0NS45MjA0NTQ5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjExMDgwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aG9zZSBgd2dfcXVldWVfKmAgZnVuY3Rpb25zLCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIFdpcmVHdWFyZCBRdWV1ZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGxldCdzIHNlZSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIFdpcmVHdWFyZCBxdWV1ZWluZyBzeXN0ZW0gaXMgd29ya2luZy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocyByZWxhdGVkIHRvIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgLCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAsIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnF1ZXVlIGZ1bmN0aW9ucywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBjb250ZXh0IGlzIHBhcmFtb3VudC5cblxuRmlyc3QgdGhpbmcncyBmaXJzdDogSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIG9mIHRob3NlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHdpcmVndWFyZCBjb2RlYmFzZS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhleSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gRnJvbSB0YXNrbGV0cz8gRnJvbSB3aXRoaW4gbmV0ZmlsdGVyIGhvb2tzPyBLbm93aW5nIHRoZSAqd2hlcmUqIGlzIGFic29sdXRlbHkgY3JpdGljYWwuXG5cbkJleW9uZCB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIEknbSBhbHNvIGdvaW5nIHRvIGlkZW50aWZ5IGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgZW5xdWV1ZSBmdW5jdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IG9ubHkgd2hvICpjYWxscyogdGhlbSwgYnV0IGFsc28gd2hvICp0b3VjaGVzKiB0aGVtLCBmb3IgZXhhbXBsZSwgZnVuY3Rpb25zIHRoYXQgcGFzcyBhIGRhdGEgc3RydWN0dXJlIHRvIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgZnVsbCBzY29wZSBvZiBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIGFuZCBpbmZsdWVuY2UgdGhlIHF1ZXVlaW5nIGxvZ2ljLiBCeSBtYXBwaW5nIHRoZSBmdWxsIHJhbmdlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLCBJIGNhbiB1bmRlcnN0YW5kIGFsbCB0aGUgcG9pbnRzIGluIGNvZGUgdGhhdCBoYXZlIGFuIGltcGFjdCBvbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBxdWV1ZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjUzLjEzMTUzNzczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NDQ2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3F1ZXVlX2VucXVldWVfcGVyX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNDg9c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE1MzpzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTU0LVxcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE3Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNzc6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxOTI6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9NDkzPXZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTAyLVxcdFxcdFxcdFxcdFBBQ0tFVF9TVEFURV9DUllQVEVEIDogUEFDS0VUX1NUQVRFX0RFQUQ7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MDM6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChza2IsIHN0YXRlKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUwNC1cXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUwOT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjUtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MjY6XFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcdTAwMjZ3Zy1cXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlLCBza2IsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjgtXFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRVBJUEUpKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI5OlxcdFxcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MzAtXFx0aWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRVBJUEUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTI4Nz12b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMwNC1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMDU6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzA2LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MzExPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMjA6XFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcdTAwMjZ3Zy1cXHUwMDNlZW5jcnlwdF9xdWV1ZSwgXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICB3Zy1cXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMi1cXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMjM6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgUEFDS0VUX1NUQVRFX0RFQUQpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzI0LWVycjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NTQuNzI4OTg4NjA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTA2Nzk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2lyZUd1YXJkIENvZGUgUmV2aWV3IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIHRoaXMgV2lyZUd1YXJkIGNvZGViYXNlLiBGaXJzdCwgSSdsbCBmb2N1cyBvbiB0aGUgY29yZSBwYWNrZXQgaGFuZGxpbmcgcm91dGluZXM6IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgYnVsbGV0cHJvb2YsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG5ldyBhZHZhbmNlbWVudHMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0aHJlYWRpbmcgaXNzdWVzLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUuXG5cblRoZW4sIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQgYW5kIHNjYW4gYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIG1vZHVsZS4gTG9vayBmb3IgYW55IGV4cG9zZWQgZnVuY3Rpb25hbGl0eSBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCB0byB1bmRlcnN0YW5kLlxuXG5GaW5hbGx5LCBJIGFic29sdXRlbHkgKm11c3QqIGNoZWNrIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHVzZXJsYW5kIGludGVyZmFjZSBsaXZlcywgYW5kIHRoYXQncyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBlbnN1cmUgdGhvc2UgaW50ZXJmYWNlcyBhcmUgaGFyZGVuZWQgYW5kIHRoYXQgYW55IHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMgYXJlIGlkZW50aWZpZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjAwLjQzOTY3MTcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODgxNTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX3JlbW92ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjUzLVxcdC8qIFRoZSBmaW5hbCByZWZlcmVuY2VzIGFyZSBjbGVhcmVkIGluIHRoZSBiZWxvdyBjYWxscyB0byBkZXN0cm95X3dvcmtxdWV1ZS4gKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MjU0OlxcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1NS1cXHRkZXN0cm95X3dvcmtxdWV1ZSh3Zy1cXHUwMDNlaGFuZHNoYWtlX3JlY2VpdmVfd3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz0zNDA9c3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgV0dQRUVSX0ZfUkVNT1ZFX01FKSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo0MDU6XFx0XFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDYtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTQ3Mz1pbnQgd2dfc2V0X2RldmljZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxNy1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1MTg6XFx0XFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTM5LVxcdFxcdFxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6NTQwOlxcdFxcdFxcdFxcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTQxLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTU3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTU4OnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjk6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD04MD12b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjgxOnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODI6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjAxLjk0ODQ5MTE5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njc5MjA1MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgV2lyZUd1YXJkIENvZGUgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgV2lyZUd1YXJkIGNvZGViYXNlIGFnYWluLiBGaXJzdCB0aGluZydzIGZpcnN0OiBgd2dfc2V0X2RldmljZV9kb2l0YCBpcyB0aGF0IEdlbmwgRG9JdCBjYWxsYmFjaywgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgbmV0bGluay1iYXNlZCBXaXJlR3VhcmQgY29uZmlndXJhdGlvbi4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYWRkL3VwZGF0ZS9yZW1vdmUgcGVlciBtYWdpYyBoYXBwZW5zIOKAkyBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBmcm9udCBkb29yIGZvciBtYW5hZ2luZyB0aGUgaW50ZXJmYWNlJ3MgcGVlciByZWxhdGlvbnNoaXBzLlxuXG5UaGVuIHRoZXJlJ3MgYHdnX3htaXRgIG92ZXIgaW4gYHNlbmQuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIHRyYW5zbWlzc2lvbiBwYXRoOiBxdWV1ZWluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUuLi4gYSBxdWljayBzd2VlcCB0aHJvdWdoIGBzZW5kLmNgIGFuZCBgcmVjZWl2ZS5jYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgcGFja2V0IGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGhhbmRvZmYgcG9pbnRzLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0cyBhcmUgZ2V0dGluZyBpbiBhbmQgb3V0IGFuZCB3aGF0IGVhY2ggcGFydCBkb2VzIG9uIHRoZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTEyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MDcuNjI3Njk5MjA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1NDgwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl90eF90IHdnX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTExNT1zdGF0aWMgaW50IHdnX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzYtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjEzNzpzdGF0aWMgbmV0ZGV2X3R4X3Qgd2dfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowOS4xMzMxODQ4NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5OTEwNzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgRnVuY3Rpb24gUmV2aWV3KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFdpcmVHdWFyZCBjb2RlYmFzZS4gRmlyc3QsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCBsaXN0IHRob3NlIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZSBvciBhcmUgY3JpdGljYWwgd2l0aGluIHRoZSBrZXJuZWwuIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYHdnX3NldF9kZXZpY2VfZG9pdGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF90eF93b3JrZXJgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGZ1bmN0aW9ucyBzdWNoIGFzIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYW5kIGB3Z19wYWNrZXRfcnhfcG9sbGAsIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMg4oCTIG1ha2luZyBzdXJlIHRoZXNlIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaGFuZGxlZCBhbmQgdGhlaXIgc2NvcGUgaXMgY29ycmVjdGx5IGRlZmluZWQgd2l0aGluIHRoZSBtb2R1bGUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGV4cG9ydGVkIEFQSSBzdXJmYWNlIGFuZCwgdWx0aW1hdGVseSwgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBvZiB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoxMS4zMzIyOTQ3NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk2Nzg0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGFja2V0X3R4X3dvcmtlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTIyPXN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNDktXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo1MDpcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUxLVxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9NTA9dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTE6dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtNTItdm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjQyPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YV9kb25lKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI2Mjp2b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMjYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTIuODExOTc3Njc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzA4NDAwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgd2dfcGFja2V0X3J4X3BvbGxgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBMZXQncyBzZWUuLi4gdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEknbSBmb2N1c2luZyBvbiBgd2dfcGFja2V0X3J4X3BvbGxgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBjbGVhciDigJMgaXQncyBhbGwgYWJvdXQgcG9sbGluZyBmb3IgaW5jb21pbmcgcGFja2V0cyB3aXRoaW4gdGhlIFdpcmVHdWFyZCBjb250ZXh0LCBvYnZpb3VzbHkgZm9yIHJlY2VpdmluZyB0cmFmZmljLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMsIG9mIGNvdXJzZSwgYnV0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIGNsZWFyIGZyb20gdGhlIHRpdGxlLiBOb3csIHdoYXQncyByZWFsbHkgaW1wb3J0YW50IGlzIHdoYXQncyBoYXBwZW5pbmcgKmluc2lkZSogdGhhdCBwb2xsaW5nIGxvb3A6IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHRoZSBpbnRlcnJ1cHQgbWVjaGFuaXNtcywgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgaG93IGl0IGhhbmRsZXMgcGFja2V0IGJ1ZmZlcmluZy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgY2FuIGhhdmUgYSBodWdlIGltcGFjdCBvbiBsYXRlbmN5IGFuZCBvdmVyYWxsIHRocm91Z2hwdXQuIEdvdHRhIGJlIHRob3JvdWdoLiBUaW1lIHRvIGNyYWNrIGl0IG9wZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTQuODgyODIwMzQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MzA1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3BhY2tldF9yeF9wb2xsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9MjI9c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01OS1cXHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaS5zdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo2MDpcXHRuZXRpZl9uYXBpX2FkZCh3Zy1cXHUwMDNlZGV2LCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSwgd2dfcGFja2V0X3J4X3BvbGwpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNjEtXFx0bmFwaV9lbmFibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9MzM9dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3JlY2VpdmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzQtLyogTkFQSSBwb2xsIGZ1bmN0aW9uOiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjM1OmludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTM2LS8qIFdvcmtxdWV1ZSB3b3JrZXI6ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTMzNT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhX2RvbmUoc3RydWN0IHdnX3BlZXIgKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzNy1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjQzODppbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTYuMzE3MTMyNDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxOTI3MDE2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBXaXJlR3VhcmQncyBhcmNoaXRlY3R1cmUsIHRoaXMgaXMgdGhlIHdvcmtlciB0aHJlYWQgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCAqc2VuZGluZyogdGhlIGluaXRpYWwgaGFuZHNoYWtlIHBhY2tldHMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMga2V5IHJlc3BvbnNpYmlsaXRpZXM6IGdlbmVyYXRpbmcgdGhlIGluaXRpYWwgZXBoZW1lcmFsIGtleSBwYWlyLCBjb25zdHJ1Y3RpbmcgdGhlIGhhbmRzaGFrZSBtZXNzYWdlIGl0c2VsZiAocHJvYmFibHkgaW5jbHVkaW5nIHRoZSBwZWVyJ3Mgc3RhdGljIHB1YmxpYyBrZXksIHRoZSBlcGhlbWVyYWwgcHVibGljIGtleSwgdGhlIE1BQywgYW5kIHRoZSBwcm90b2NvbCB2ZXJzaW9uKSwgYW5kIHRoZW4gYWN0dWFsbHkgcXVldWluZyBpdCBmb3IgdHJhbnNtaXNzaW9uLiBJIHN1c3BlY3QgaXQncyB3b3JraW5nIGNsb3NlbHkgd2l0aCB0aGUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMsIGxpa2VseSB1c2luZyB0aGUgWDI1NTE5IGtleSBleGNoYW5nZSwgYW5kIHRoZW4gdGhlIEFFQUQgY2lwaGVyIGZvciB0aGUgbWVzc2FnZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGxvY2tpbmcgc2VtYW50aWNzIGhlcmUuIERvZXMgaXQgaGF2ZSBtdXRleCBwcm90ZWN0aW9uPyBXaGF0IGlzIHRoZSBjb25jdXJyZW5jeSBtb2RlbD8gQW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgc3VjaCBhcyBiYXRjaGluZyB0aGVzZSBoYW5kc2hha2VzIGlmIHRoZXJlJ3MgYSBmbG9vZCBvZiBuZXcgcGVlcnM/IEkgd2FudCB0byBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzOiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvY2tldCBpcyBmdWxsPyBJcyB0aGVyZSBwcm9wZXIgYmFja29mZiBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcmV0cmFuc21pc3Npb25zIGdyYWNlZnVsbHk/IEVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlLCBlc3BlY2lhbGx5IGZvciBwcmV2ZW50aW5nIHJlc291cmNlIHN0YXJ2YXRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5CZXlvbmQgdGhlIGltbWVkaWF0ZSBoYW5kc2hha2UsIEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0aW1lciBsb2dpYy4gSXMgdGhlcmUgYSBkZWZpbmVkIHRpbWVvdXQgZm9yIHRoZSBoYW5kc2hha2UsIGFuZCBob3cgaXMgaXQgdHJpZ2dlcmVkPyBXaGF0IGhhcHBlbnMgdXBvbiB0aW1lb3V0PyBBcmUgcmV0cmFuc21pc3Npb25zIGhhbmRsZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBpbml0aWFsIGF0dGVtcHQ/IE15IHRob3VnaHQgaXMsIGFyZSB0aGUgcmV0cnkgbWVjaGFuaXNtcyBvcHRpbWl6ZWQgb3IgaXMgdGhlcmUgYSB2dWxuZXJhYmlsaXR5PyBBbmQgZmluYWxseSwgd2hhdCBhYm91dCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgc3RhY2s/IEkgd291bGQgbGlrZSB0byBzZWUgaWYgYW55IGNvbnRleHQtc3dpdGNoZXMgYXJlIG5lY2Vzc2FyeSBmb3IgaXQuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBlZmZpY2llbnQgYW5kIHNlY3VyZSwgZXNwZWNpYWxseSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTkuNTA5ODM3MzA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwMDI1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTQ4LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VrZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjQ5OlxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNTAtXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD00OD12b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC00OS0vKiBXb3JrcXVldWUgd29ya2VyczogKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDo1MDp2b2lkIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01MS12b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjE9c3RhdGljIHZvaWQgd2dfcGFja2V0X3NlbmRfaGFuZHNoYWtlX2luaXRpYXRpb24oc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6NDY6dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTg5ODY2NjY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDY3MDQ3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipQZWVyIE1hbmFnZW1lbnQgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSBwZWVyIG1hbmFnZW1lbnQgcm91dGluZXMuIEZpcnN0LCBJJ2xsIHByaW9yaXRpemUgdmVyaWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9uczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNsZWFuaW5nIHVwIHBlZXJzLCBzbyB0aGV5J3JlIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gVGhlbiwgdG8gbWFrZSBzdXJlIEknbSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBhZ2FpbnN0IHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgaGVhZGVyIGZpbGUuIEkgd2lsbCBjaGVjayB0aGUgYHBlZXIuaGAgaGVhZGVyIGZpbGUgYW5kIHRoZW4gc3lzdGVtYXRpY2FsbHkgcmV2aWV3IGBwZWVyLmNgLCBmb2N1c2luZyBvbiBldmVyeSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgZmlsZS4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIEkgY292ZXIgdGhlIHB1YmxpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjMuMzk2NTc0NTEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxcbiAgNzE6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0c3RydWN0IHdnX3BlZXIgKl9fbXVzdF9jaGVjayB3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG4gIDc1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0KHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gIDc4OlxcdFxcdHJldHVybiBwZWVyO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0dm9pZCB3Z19wZWVyX3B1dChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XFxuICA4MTpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG4gIDgyOlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0aW50IHdnX3BlZXJfaW5pdCh2b2lkKTtcXG4gIDg1OlxcdHZvaWQgd2dfcGVlcl91bmluaXQodm9pZCk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNlbmRpZiAvKiBfV0dfUEVFUl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjIzLjM5NjYzNjQzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTgzMTY1MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIGFuZCBQYWNrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGUgZnV6emluZyBwbGFuIGZvciB0aGlzIFdpcmVHdWFyZCBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGNoYW5nZXMgZHVyaW5nIHBlZXIgdGVhcmRvd24gYW5kIHBhY2tldCBxdWV1aW5nIOKAkyBzcGVjaWZpY2FsbHksIHJlcGxhY2luZyBicm9hZCB3b3JrcXVldWUgZmx1c2hlcyB3aXRoIHRhcmdldGVkIG9uZXMgYW5kIGVtcGxveWluZyBhdG9taWMgdHJhY2tpbmcgKGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGB3YWl0X3Zhcl9ldmVudGAsIGB3YWtlX3VwX3ZhcmApLiBTaW5jZSBXaXJlR3VhcmQgaXMgYSBzb2Z0d2FyZSBWUE4gZHJpdmVyLCBJIGNhbiB0YXJnZXQgaXQgaW4gUUVNVSB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpYWxpemVkIGhhcmR3YXJlIHNldHVwIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5BcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBuZWVkIGBXSVJFR1VBUkRgIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBjb3JlIGNvbXBvbmVudC4gSSBzZWUgdGhlIHN1Z2dlc3RlZCBjb25maWdzIGluY2x1ZGUgYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGp1c3QgYFdJUkVHVUFSRGAgdG8gbWluaW1pemUgbm9pc2UsIGJ1dCBJIGNhbiBjZXJ0YWlubHkga2VlcCB0aGUgb3B0aW9uIHRvIGFkZCB0aGUgb3RoZXJzIGxhdGVyLlxuXG5UaGUgcmVhbGx5IGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgdGhlIGFjdGlvbiBpczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMgaW52b2x2ZWQgaW4gcGVlciBsaWZlY3ljbGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwYWNrZXQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGZpbmFsbHkgYHdnX3NldF9kZXZpY2VfZG9pdGAgd2hpY2ggSSBleHBlY3QgY29uZmlndXJlcyB0aGUgZGV2aWNlLiBUaGF0J3MgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyB0byBnbyBhZnRlci5cblxuSSd2ZSByZXZpZXdlZCBhbGwgdGhlIHBhcmFtZXRlcnMsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCwgYW5kIEknbSByZWFkeSB0byBiZWdpbiB0ZXN0aW5nLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyOSwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyOS45Nzk4MDM2ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ5NTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19zZXRfZGV2aWNlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2dfcGVlcl9jcmVhdGVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BhY2tldF9lbmNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X2RlY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfc2V0X2RldmljZV9kb2l0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBsb2dpYyBmb3IgV2lyZUd1YXJkIHBlZXJzIGR1cmluZyBwYWNrZXQgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgYW5kIHF1ZXVlIGRyYWluaW5nIGJ5IGludHJvZHVjaW5nIGFuIGF0b21pYyBwZW5kaW5nIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBhbmQgd2FpdF92YXJfZXZlbnQgaW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZW50aXJlIHdvcmtxdWV1ZSBtdWx0aXBsZSB0aW1lcy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhZGlseSB0ZXN0YWJsZSBpbiBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MzAuMDU3MzA0NTMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE4ODI5ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjMwLjA1Nzc1MzU0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTg3ODQ1OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaW4gV2lyZUd1YXJkJ3MgcGVlciBtYW5hZ2VtZW50LiBJbnN0ZWFkIG9mIGZsdXNoaW5nIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgdXBvbiBwZWVyIGRlc3RydWN0aW9uLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChgcGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCB0byB3YWl0IHNwZWNpZmljYWxseSBmb3IgaW5mbGlnaHQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciB0aGF0IHBlZXIgYmVmb3JlIGZsdXNoaW5nIHBlci1wZWVyIHdvcmsgc3RydWN0dXJlcyBhbmQgZGVsZXRpbmcgTkFQSS5cXG5cXG5UaGUgbmV3IGZpZWxkIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCB3Z19wZWVyYCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVzaW5nIGBhdG9taWNfc2V0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIEFueSBzeW5jaHJvbml6YXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgUkNVIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIEtNU0FOIGlzIHRoZXJlZm9yZSBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ODM2MzAwMzY2NmVlZTA1ZThjYTNlNTg2ZTM2ZmM1OWE1ZmU1YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLmY3YTljNDM3YjViODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xuIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4rXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuK1x0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gXHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbid0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxuLVx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxuLVx0ICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vXG4tXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXG4rXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4rXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbitcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcbitcdCAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy5cbiBcdCAqL1xuK1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXG4rXHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG4rXG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuIFxuLVx0LyogYSkgRm9yIGVuY3J5cHQvZGVjcnlwdC4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0J3MgbmFwaSkuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMi4xKSBGb3IgcmVjZWl2ZSAoYnV0IG5vdCBzZW5kLCBzaW5jZSB0aGF0J3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbitcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4rXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcbitcdCAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS5cbiBcdCAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWhhbmRzaGFrZV9zZW5kX3dxKTtcbitcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICszNyw3IEBAIHN0cnVjdCBlbmRwb2ludCB7XG4gc3RydWN0IHdnX3BlZXIge1xuIFx0c3RydWN0IHdnX2RldmljZSAqZGV2aWNlO1xuIFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xuK1x0YXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7XG4gXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xuIFx0Ym9vbCBpc19kZWFkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xuQEAgLTE2MSw2ICsxNjIsNyBAQCBzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIFx0XHRyZXR1cm4gLUVOT1NQQztcbitcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gXHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5AQCAtMTk0LDYgKzE5OCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XG4gXG4gXHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2UEFDS0VUX0NCKHNrYiktXHUwMDNlc3RhdGUsIHN0YXRlKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuK1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjMwLjA1Nzc1NDY1MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzMDk5OTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgV2lyZUd1YXJkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgV2lyZUd1YXJkIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIG1vcmUgZmluZS1ncmFpbmVkIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwZXItcGVlciBjb250ZXh0LiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhgLCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYCwgd2hpY2ggYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3ZlIGludHJvZHVjZWQgYW4gYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIHdpdGhpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgYWxsb3dzIGZvciBwZXItcGVlciB0cmFja2luZyBvZiBwZW5kaW5nIGNyeXB0byBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHRvIDEgaW4gYHdnX3BlZXJfY3JlYXRlYCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGNvdW50ZXIgaXMgdXNlZCBkdXJpbmcgcGVlciByZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBnbG9iYWwgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggYGF0b21pY19kZWNgLCBgd2FpdF92YXJfZXZlbnRgLCBhbmQgYGZsdXNoX3dvcmtgIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gYXZvaWQgZmx1c2hpbmcgdGhlIGVudGlyZSBkZXZpY2Ugd29ya3F1ZXVlIGFuZCBpbnN0ZWFkIHN5bmNocm9uaXplIG9uIHRoZSBwZW5kaW5nIGNyeXB0byBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZSBwZWVyLiBUaGlzIGlzIHRoZSBnb29kIHBhcnQhIEl0IHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBidXQgaXQgYWxzbyBicmluZ3MgdGhlIHNwZWN0ZXIgb2Ygc3VidGxlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgdGhhdCB3YWl0IGNvbmRpdGlvbi4gSSBob3BlIHRoZXkgZGlkIHRoaXMgY29ycmVjdGx5LlxuXG5JbiBhZGRpdGlvbiwgY2hhbmdlcyBhcmUgaGFwcGVuaW5nIGluIHRoZSBlbnF1ZXVlIGZ1bmN0aW9ucyAoYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCwgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCkuICBJdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5jcmVtZW50aW5nIHRoZSBjb3VudGVyIHdoZW4gYSBwYWNrZXQgaXMgcXVldWVkIGFuZCBkZWNyZW1lbnRpbmcvd2FraW5nIHVwIHRoZSBwcm9jZXNzIHdoZW4gaXQncyBkb25lLlxuXG5NeSBmaXJzdCBjb25jZXJucyBhcmUgYWxsIGFib3V0IHRoZSBwb3RlbnRpYWwgcmlza3M6IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBkZWFkbG9ja3MsIGFuZCBoYW5naW5nIHRlYXJkb3ducywgdGhlIHVzdWFsIHN1c3BlY3RzIGluIGFueSBzeW5jaHJvbml6YXRpb24taGVhdnkgY29kZS4gSSdtIGFsc28gZ29pbmcgdG8gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBvYnZpb3VzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHRob3VnaCBob3BlZnVsbHkgS0FTQU4gYW5kIGxvY2tkZXAgd2lsbCBjYXRjaCB0aG9zZS5cblxuSSd2ZSBxdWlja2x5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBkb24ndCAqc2VlKiBhbnl0aGluZyB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgY291bnRlciBpcyBpbml0aWFsaXplZCwgc28gdGhhdCdzIGdvb2QuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYHdnX3BlZXJfY3JlYXRlYCBhbmQgbWFrZSBzdXJlIHRoZSBgc3RydWN0IHdnX3BlZXJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBvciBwcm9wZXJseSBpbml0aWFsaXplZC4gR3JlcHBpbmcgYW5kIHJlYWRpbmcgdGhlIHNvdXJjZSBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgdG8gYmUgc3VyZS4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo1My45ODg3NTg1ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYyMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9MzQwPXN0YXRpYyBpbnQgc2V0X3BlZXIoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBubGF0dHIgKiphdHRycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkxLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6MzkyOlxcdFxcdHBlZXIgPSB3Z19wZWVyX2NyZWF0ZSh3ZywgcHVibGljX2tleSwgcHJlc2hhcmVkX2tleSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTMtXFx0XFx0aWYgKElTX0VSUihwZWVyKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMjEtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoyMjpzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTM3PXN0cnVjdCB3Z19wZWVyIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtNjktXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo3MDpzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjU0LjA5MjM4NTYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyMTA4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQZWVyIEhhbmRsaW5nKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDIwIHRocm91Z2ggNzAuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIGNvcmUgcGVlciBtYW5hZ2VtZW50IOKAkyBpbml0aWFsaXphdGlvbiwgbGlrZWx5IHNvbWUgc29ydCBvZiBkYXRhIHN0cnVjdHVyZSBzZXR1cCBmb3IgZWFjaCBjb25uZWN0ZWQgcGVlciwgYW5kIHBlcmhhcHMgc29tZSBlc3NlbnRpYWwgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgV2lyZUd1YXJkIHJlcHJlc2VudHMgYSBwZWVyIGludGVybmFsbHkuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46IHdoYXQgZGF0YSBpcyBzdG9yZWQgYWJvdXQgZWFjaCBwZWVyLCBob3cgdGhhdCBkYXRhIGlzIHN0cnVjdHVyZWQgKGxpbmtlZCBsaXN0cywgaGFzaCB0YWJsZXMsIGV0Yy4pLCBhbmQgaG93IGluaXRpYWwgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIG9yIHZlcmlmaWVkLiBJJ20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBrbm93aW5nIGhvdyBpbXBvcnRhbnQgY29uY3VycmVuY3kgaXMgaW4gbmV0d29ya2luZyBjb2RlLiBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGV4cGVjdGluZyB0aGF0IHRoaXMgaXMgdGhlIGdyb3VuZCBsZXZlbCBpbmZyYXN0cnVjdHVyZSB0aGF0IGV2ZXJ5dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGZvciBwZWVyIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo1Ni4yNDQ0OTYyNTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuICAyMzpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuICAyNDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlcjtcXG4gIDI3OlxcdFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKHdnLVxcdTAwM2VudW1fcGVlcnMgXFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXFxuICAzMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkoIXBlZXIpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDM3OlxcdFxcdGlmICh1bmxpa2VseShkc3RfY2FjaGVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcXG4gIDM4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRwZWVyLVxcdTAwM2VkZXZpY2UgPSB3ZztcXG4gIDQxOlxcdFxcdHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VoYW5kc2hha2UsIFxcdTAwMjZ3Zy1cXHUwMDNlc3RhdGljX2lkZW50aXR5LFxcbiAgNDI6XFx0XFx0XFx0XFx0XFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XFxuICA0MzpcXHRcXHRwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnBlZXJfY291bnRlcik7XFxuICA0NDpcXHRcXHRwZWVyLVxcdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XFxuICA0NTpcXHRcXHR3Z19jb29raWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlbGF0ZXN0X2Nvb2tpZSk7XFxuICA0NjpcXHRcXHR3Z190aW1lcnNfaW5pdChwZWVyKTtcXG4gIDQ3OlxcdFxcdHdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfcGVlcl9rZXlzKHBlZXIpO1xcbiAgNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xcbiAgNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuICA1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG4gIDUxOlxcdFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiAgNTI6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuICA1MzpcXHRcXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xcbiAgNTQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiAgNTU6XFx0XFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiAgNTY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWZjb3VudCk7XFxuICA1NzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG4gIDU4OlxcdFxcdHdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoXFx1MDAyNnBlZXItXFx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xcbiAgNTk6XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgNjA6XFx0XFx0bmV0aWZfbmFwaV9hZGQod2ctXFx1MDAzZWRldiwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcXG4gIDYxOlxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gIDYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCwgXFx1MDAyNndnLVxcdTAwM2VwZWVyX2xpc3QpO1xcbiAgNjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlZXItXFx1MDAzZWFsbG93ZWRpcHNfbGlzdCk7XFxuICA2NDpcXHRcXHR3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZCh3Zy1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgNjU6XFx0XFx0Kyt3Zy1cXHUwMDNlbnVtX3BlZXJzO1xcbiAgNjY6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBQZWVyICVsbHUgY3JlYXRlZFxcXFxuXFxcIiwgd2ctXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgcGVlci1cXHUwMDNlaW50ZXJuYWxfaWQpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIHBlZXI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdGVycjpcXG4gIDcwOlxcdFxcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcXG4gIDcxOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICA3MjpcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXFxuICA3NzpcXHRcXHRcXHRcXHQgXFxcIlRha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcXFwiKTtcXG4gIDc4OlxcdFxcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KSkpXFxuICA3OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6NTYuMjQ0NTYyMjQ5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDEwMDk1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGVlciBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBjbG9zZWx5IGF0IGhvdyB0aGUgYHBlZXJgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gRmlyc3QsIGBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKWAgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5LCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dC4gVGhhdCdzIGdvb2Q7IGl0IGVsaW1pbmF0ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZW4sIHRoZSBuZXcgZmllbGQgYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgLCBhbiBgYXRvbWljX3RgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSlgLiBUaGlzIGluaXRpYWwgdmFsdWUgb2YgMSBpcyBzaWduaWZpY2FudCBhbmQgd2lsbCBwbGF5IGEgY3J1Y2lhbCByb2xlLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgYXRvbWljIHZhcmlhYmxlIGlzIHVzZWQgZm9yIHJlZmVyZW5jZSB0cmFja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBlc3BlY2lhbGx5IGR1cmluZyBwZWVyIHRlYXJkb3duIHdpdGhpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIEl0J3MgaW5jcmVtZW50ZWQgaW4gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAgYW5kIGRlY3JlbWVudGVkIGluIGJvdGggYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20uXG5cbkJhc2VkIG9uIHRoaXMgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNhZmV0eSBjb25jZXJuLiBObyB1c2VyLXNwYWNlIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBwcmVzZW50LCBhbmQgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnVmZmVyIGlzc3Vlcy4gVGhlIHVzZSBvZiBhbiBhdG9taWMgdmFyaWFibGUgZm9yIHRyYWNraW5nIGFsc28gaW1wbGllcyB0aGUgZGV2ZWxvcGVyIGlzIGNvbnNjaW91cyBvZiB0aHJlYWQgc2FmZXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbkZ1cnRoZXJtb3JlLCBhbnkgY29uY3VycmVuY3kgcHJvYmxlbXMsIGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2sgc2NlbmFyaW9zIHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIGtlcm5lbCdzIGJ1aWx0LWluIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgaHVuZyB0YXNrIGRldGVjdG9yLiBHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBkb2Vzbid0IHJlcXVpcmUgS01TQU4ncyBhc3Npc3RhbmNlLiBObyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBJIGNhbiBzZWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50cywgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkLiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93IHRvIGZpbmFsaXplIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NCwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MTowMC4yNDU1NzM2NTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBXaXJlR3VhcmQncyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnRgIHRvIHdhaXQgc3BlY2lmaWNhbGx5IGZvciBpbmZsaWdodCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgZm9yIHRoYXQgcGVlciBiZWZvcmUgZmx1c2hpbmcgcGVyLXBlZXIgd29yayBzdHJ1Y3R1cmVzIGFuZCBkZWxldGluZyBOQVBJLlxcblxcblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCdzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXFxuXFxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7txrd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 10:37:36 +0000 UTC FinishedAt: 2026-09-03 10:41:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "70f3995830d3f1e79faa14eb0605914f778feca9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WIREGUARD", "NET", "INET" ], "series_id": "f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "wg_peer_create", "wg_peer_remove", "wg_peer_remove_all", "wg_packet_encrypt_worker", "wg_packet_decrypt_worker", "wg_packet_tx_worker", "wg_packet_rx_poll", "wg_set_device_doit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCYjMzk7cyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXG5cblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozODo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuaW5kZXggMWNiNTAyYTkzMmUwNy4uZjdhOWM0MzdiNWI4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuQEAgLTQ5LDYgJiM0Mzs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiBcdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlKTtcbiBcdHdnX3ByZXZfcXVldWVfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuIFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuIFx0ICovXG4gXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcbiBcbi1cdC8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJiMzOTt0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcbi1cdCAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWxcbi1cdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xuLVx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxuJiM0MztcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcbiYjNDM7XHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbiYjNDM7XHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXG4mIzQzO1x0ICogdG8gZmluaXNoIHNjaGVkdWxpbmcgdGhlaXIgc2VyaWFsIFRYIHdvcmsgb3IgUlggTkFQSSBwcm9jZXNzaW5nLlxuIFx0ICovXG4mIzQzO1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiYjNDM7XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuJiM0MztcdFx0ICAgICAgICFhdG9taWNfcmVhZF9hY3F1aXJlKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcbiYjNDM7XG4mIzQzO1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCYjMzk7cyBuYXBpKS4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4mIzQzO1x0LyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4mIzQzO1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4mIzQzO1x0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxuIFx0ICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xuJiM0MztcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbiYjNDM7XHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc3RhZ2VkX3BhY2tldF9xdWV1ZTtcbiBcdGludCBzZXJpYWxfd29ya19jcHU7XG4gXHRib29sIGlzX2RlYWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuaW5kZXggNzliNmQ3MGRlMjM2Yi4uZmRkMzRmMGYxNWE2YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbiBcdCAqL1xuIFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXG4gXHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuJiM0MztcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuJiM0MztcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5AQCAtMTk0LDYgJiM0MzsxOTgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4mIzQzO1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXSVJFR1VBUkQmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3Z19wZWVyX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDt3Z19wZWVyX3JlbW92ZV9hbGwmIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2VuY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF9kZWNyeXB0X3dvcmtlciYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfdHhfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF9yeF9wb2xsJiMzNDssCiAgICAmIzM0O3dnX3NldF9kZXZpY2VfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4MzYzMDAzNjY2ZWVlMDVlOGNhM2U1ODZlMzZmYzU5YTVmZTViZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwppbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbG9ja2RlcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7CiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApOwpAQCAtNDksNiAmIzQzOzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLAogCUlOSVRfV09SSygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDt0eF9xdWV1ZSk7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7cnhfcXVldWUpOwomIzQzOwkvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqLwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpOwogCXJ3bG9ja19pbml0KCZhbXA7cGVlci0mZ3Q7ZW5kcG9pbnRfbG9jayk7CiAJa3JlZl9pbml0KCZhbXA7cGVlci0mZ3Q7cmVmY291bnQpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtwZWVyLSZndDtzdGFnZWRfcGFja2V0X3F1ZXVlKTsKQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKQogCSAqLwogCXdnX3RpbWVyc19zdG9wKHBlZXIpOwogCi0JLyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24mIzM5O3QKLQkgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnkKLQkgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsCi0JICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vCi0JICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLgomIzQzOwkvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlCiYjNDM7CSAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZwomIzQzOwkgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzCiYjNDM7CSAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKQEAgLTE5NCw2ICYjNDM7MTk4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAogCWF0b21pY19zZXRfcmVsZWFzZSgmYW1wO1BBQ0tFVF9DQihza2IpLSZndDtzdGF0ZSwgc3RhdGUpOwogCW5hcGlfc2NoZWR1bGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQl3YWtlX3VwX3ZhcigmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKIAl3Z19wZWVyX3B1dChwZWVyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjAzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldpcmVHdWFyZCBQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgV2lyZUd1YXJkIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCBsb29rcyBsaWtlIHN0YW5kYXJkIGtlcm5lbCBwYXRjaCByZXZpZXcsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHN5emthbGxlciBmdXp6aW5nLiBBIHF1aWNrIHJpc2sgYW5hbHlzaXMgc2F5cyB0aGlzIGlzIGJlbmlnbiwganVzdCBjb2RlIGV2YWx1YXRpb24gYW5kIG1haW50ZW5hbmNlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIGhhbmRsaW5nIG9mIGB3Z19wZWVyYCB0ZWFyZG93biBhbmQgaG93IGl0IGNvb3JkaW5hdGVzIHdpdGggdGhlIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzLiBQcmV2aW91c2x5LCB3ZSBoYWQgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMsIGJ1dCBub3cgdGhleSYjMzk7cmUgYWRkaW5nIGBhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGluY3JlbWVudGluZywgZGVjcmVtZW50aW5nLCBhbmQgd2FpdGluZy4gVGhleSYjMzk7cmUgYWxzbyBmbHVzaGluZyBpbmRpdmlkdWFsIHdvcmsgaXRlbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzeW5jaHJvbml6YXRpb24gY2hhbmdlLCBkaXJlY3RseSBpbiB0aGUgY29yZSBXaXJlR3VhcmQgZHJpdmVyIGNvZGUuCgpUaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgY29yZSBXaXJlR3VhcmQgY29kZSBpcyBpbnRlcmVzdGluZy4gV2lyZUd1YXJkIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgc29mdHdhcmUgVlBOIHR1bm5lbCBuZXR3b3JrIGRldmljZSBkcml2ZXIgYW5kIHJ1bnMgZmluZSBpbiBRRU1VIHdpdGhvdXQgbmVlZGluZyBzcGVjaWFsIGhhcmR3YXJlLiBXZSBjYW4gZGVmaW5pdGVseSByZWFjaCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZ1enphYmxlLiBXZSBuZWVkIHRvIGdvIGZvciB0aGlzLgoKU28sIG5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIFdpcmVHdWFyZCBhbmQgbmV0d29yayBnZW5lcmFsbHkgdG8gZmluZCB0aG9zZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9LY29uZmlnYCwgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBhbmQgYG5ldC9LY29uZmlnYCB0byBkbyBzby4gSSYjMzk7bGwgbmVlZCB0aGVzZSBjb25maWdzIGZvciBzeXprYWxsZXIgdG8gYnVpbGQgYSByZXByb2R1Y2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZpbGUgZG9lcyBub3QgZXhpc3Q8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmaWxlIGRvZXMgbm90IGV4aXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipGaW5kaW5nIHRoZSBXaXJlR3VhcmQgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0aGlzIHNvcnRlZC4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgYFdpcmVHdWFyZGAgS2NvbmZpZyBmaWxlLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSYjMzk7bGwgbGV2ZXJhZ2UgYGdyZXBwZXJgIOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aXRoaW4gYSBwcm9qZWN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIGtub3cgdGhlIHN0YW5kYXJkIHRvb2xpbmcsIHNvIGxldCYjMzk7cyBnZXQgcmlnaHQgdG8gaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFdJUkVHVUFSRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTU5PWNvbmZpZyBEVU1NWVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNzMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjc0OmNvbmZpZyBXSVJFR1VBUkRcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy05MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6OTI6Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuZHJpdmVycy9uZXQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIGFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gbGluZSA3My4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGxpbmUgcHJvYmFibHkgaG9sZHMgc29tZSBrZXkgaW5mb3JtYXRpb24g4oCTIHBlcmhhcHMgYSBjb3JlIG5ldHdvcmsgZmVhdHVyZSwgYSB2aXRhbCBkcml2ZXIgb3B0aW9uLCBvciBtYXliZSBldmVuIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgd2hlcmUgYSBzaWduaWZpY2FudCBuZXR3b3JrIHNldHRpbmcgb3IgY29uZGl0aW9uYWwgZHJpdmVyIGluY2x1c2lvbiBpcyBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gdW5lYXJ0aCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcwOlx0XG4gIDcxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNzI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZHVtbXkuXG4gIDczOlx0XG4gIDc0Olx0Y29uZmlnIFdJUkVHVUFSRFxuICA3NTpcdFx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuICA3NjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgNzc6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICA3ODpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxuICA4MDpcdFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxuICA4MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgODI6XHRcdGhlbHBcbiAgODM6XHRcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXG4gIDg0Olx0XHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0JiMzOTtzXG4gIDg1Olx0XHQgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdFxuICA4NjpcdFx0ICB1c2UgY2FzZXMsIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgcmVtYWluaW5nIGV4dHJlbWVseSBzaW1wbGUgdG9cbiAgODc6XHRcdCAgY29uZmlndXJlLiBTZWUgd3d3LndpcmVndWFyZC5jb20gZm9yIG1vcmUgaW5mby5cbiAgODg6XHRcbiAgODk6XHRcdCAgSXQmIzM5O3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcbiAgOTA6XHRcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cbiAgOTE6XHRcbiAgOTI6XHRjb25maWcgV0lSRUdVQVJEX0RFQlVHXG4gIDkzOlx0XHRib29sIFwmIzM0O0RlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG4gIDk1Olx0XHRoZWxwXG4gIDk2Olx0XHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXG4gIDk3Olx0XHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxuICA5ODpcdFx0ICBleHRyYSB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdW5pdCB0ZXN0cyBhdCB2YXJpb3VzIHBvaW50cy4gVGhpcyBpc1xuICA5OTpcdFx0ICBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuIDEwMDpcdFxuIDEwMTpcdFx0ICBTYXkgTiBoZXJlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSYjMzk7cmUgZG9pbmcuXG4gMTAyOlx0XG4gMTAzOlx0Y29uZmlnIE9WUE5cbiAxMDQ6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbiAxMDU6XHRcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBJTkVUXG4gMTA2Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMTA3Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAxMDg6XHRcdHNlbGVjdCBDUllQVE9cbiAxMDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGF0IGxlYXN0IGZyb20gYSBidWlsZCBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHNwZWNpZmljIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3MsIG1vZHVsZSBpbnN0YWxsYXRpb24gZGlyZWN0aXZlcywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyB0aGF0JiMzOTtzIHNwZWNpZmljIHRvIFdpcmVHdWFyZC4gSSBzaG91bGQgcXVpY2tseSBzY2FuIGZvciBpbmNsdWRlIGRpcmVjdGl2ZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIHJ1bGVzLCBhbmQgaG93IHRoZSBtb2R1bGUgaXMgdWx0aW1hdGVseSBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9ucyBJJiMzOTttIHBsYW5uaW5nLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgYW55IHBsYXRmb3JtLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgdGhhdCBXaXJlR3VhcmQgbWlnaHQgbGV2ZXJhZ2UuIFVsdGltYXRlbHksIHRoZSBNYWtlZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIFdpcmVHdWFyZCBkcml2ZXIgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBpdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjY2ZsYWdzLXkgOj0gLUQmIzM5O3ByX2ZtdChmbXQpPUtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdCYjMzk7XG4gICAyOlx0Y2NmbGFncy0kKENPTkZJR19XSVJFR1VBUkRfREVCVUcpICYjNDM7PSAtRERFQlVHXG4gICAzOlx0d2lyZWd1YXJkLXkgOj0gbWFpbi5vXG4gICA0Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IG5vaXNlLm9cbiAgIDU6XHR3aXJlZ3VhcmQteSAmIzQzOz0gZGV2aWNlLm9cbiAgIDY6XHR3aXJlZ3VhcmQteSAmIzQzOz0gcGVlci5vXG4gICA3Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHRpbWVycy5vXG4gICA4Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHF1ZXVlaW5nLm9cbiAgIDk6XHR3aXJlZ3VhcmQteSAmIzQzOz0gc2VuZC5vXG4gIDEwOlx0d2lyZWd1YXJkLXkgJiM0Mzs9IHJlY2VpdmUub1xuICAxMTpcdHdpcmVndWFyZC15ICYjNDM7PSBzb2NrZXQub1xuICAxMjpcdHdpcmVndWFyZC15ICYjNDM7PSBwZWVybG9va3VwLm9cbiAgMTM6XHR3aXJlZ3VhcmQteSAmIzQzOz0gYWxsb3dlZGlwcy5vXG4gIDE0Olx0d2lyZWd1YXJkLXkgJiM0Mzs9IHJhdGVsaW1pdGVyLm9cbiAgMTU6XHR3aXJlZ3VhcmQteSAmIzQzOz0gY29va2llLm9cbiAgMTY6XHR3aXJlZ3VhcmQteSAmIzQzOz0gbmV0bGluay5vIGdlbmVyYXRlZC9uZXRsaW5rLm9cbiAgMTc6XHRvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDAxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV2lyZUd1YXJkIEtlcm5lbCBNb2R1bGUgRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFdpcmVHdWFyZCBzdHVmZiBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjb3JlIGNvbmZpZyBmbGFnIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBpcyBgQ09ORklHX1dJUkVHVUFSRGAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIHVzdWFsIHN1c3BlY3RzLCBgTkVUYCBhbmQgYElORVRgLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdmVyYXJjaGluZyBkZXBlbmRlbmNpZXMsIGJ1dCBgV0lSRUdVQVJEYCBpcyBjbGVhcmx5IHRoZSBjcml0aWNhbCBvbmUgaGVyZS4KCk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cywgdGhlIG5vbi1zdGF0aWMgb25lcyB0aGF0IEkgY2FuIHVzZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gY29uY2VudHJhdGUgb24gdGhlIHN5bWJvbHMgd2l0aGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCBhbmQgaXRzIHJlbGF0ZWQgZmlsZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhlIGBwZWVyLmNgIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFNvLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGRpc3NlY3QgdGhhdCwgbG9va2luZyBmb3IgdGhlIHJpZ2h0IGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSBpbiBteSBGb2N1c1N5bWJvbHMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIFx1MDAzY0phc29uQHp4MmM0LmNvbVx1MDAzZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgIDQ6XHQgKi9cbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcJiMzNDtwZWVyLmhcJiMzNDtcbiAgIDc6XHQjaW5jbHVkZSBcJiMzNDtkZXZpY2UuaFwmIzM0O1xuICAgODpcdCNpbmNsdWRlIFwmIzM0O3F1ZXVlaW5nLmhcJiMzNDtcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDt0aW1lcnMuaFwmIzM0O1xuICAxMDpcdCNpbmNsdWRlIFwmIzM0O3BlZXJsb29rdXAuaFwmIzM0O1xuICAxMTpcdCNpbmNsdWRlIFwmIzM0O25vaXNlLmhcJiMzNDtcbiAgMTI6XHRcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICAxODpcdFxuICAxOTpcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiAgMjA6XHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiAgMjM6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4gIDI0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xuICAyNzpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gIDI4Olx0XG4gIDI5Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNndnLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAod2ctXHUwMDNlbnVtX3BlZXJzIFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXG4gIDMyOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDMzOlx0XG4gIDM0Olx0XHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gIDM1Olx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuICAzNjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICAzNzpcdFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcbiAgMzg6XHRcdFx0Z290byBlcnI7XG4gIDM5Olx0XG4gIDQwOlx0XHRwZWVyLVx1MDAzZWRldmljZSA9IHdnO1xuICA0MTpcdFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VoYW5kc2hha2UsIFx1MDAyNndnLVx1MDAzZXN0YXRpY19pZGVudGl0eSxcbiAgNDI6XHRcdFx0XHRcdHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXksIHBlZXIpO1xuICA0MzpcdFx0cGVlci1cdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cGVlcl9jb3VudGVyKTtcbiAgNDQ6XHRcdHBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1ID0gbnJfY3B1bWFza19iaXRzO1xuICA0NTpcdFx0d2dfY29va2llX2luaXQoXHUwMDI2cGVlci1cdTAwM2VsYXRlc3RfY29va2llKTtcbiAgNDY6XHRcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xuICA0NzpcdFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XG4gIDQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xuICA0OTpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuICA1MDpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuICA1MTpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuICA1MjpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuICA1MzpcdFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiAgNTQ6XHRcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gIDU1Olx0XHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuICA1NjpcdFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuICA1NzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuICA1ODpcdFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcdTAwMjZwZWVyLVx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xuICA1OTpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgNjA6XHRcdG5ldGlmX25hcGlfYWRkKHdnLVx1MDAzZWRldiwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLCB3Z19wYWNrZXRfcnhfcG9sbCk7XG4gIDYxOlx0XHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuICA2MjpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwZWVyLVx1MDAzZXBlZXJfbGlzdCwgXHUwMDI2d2ctXHUwMDNlcGVlcl9saXN0KTtcbiAgNjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlZXItXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcbiAgNjQ6XHRcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVx1MDAzZXBlZXJfaGFzaHRhYmxlLCBwZWVyKTtcbiAgNjU6XHRcdCYjNDM7JiM0Mzt3Zy1cdTAwM2VudW1fcGVlcnM7XG4gIDY2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogUGVlciAlbGx1IGNyZWF0ZWRcXG5cJiMzNDssIHdnLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBwZWVyLVx1MDAzZWludGVybmFsX2lkKTtcbiAgNjc6XHRcdHJldHVybiBwZWVyO1xuICA2ODpcdFxuICA2OTpcdGVycjpcbiAgNzA6XHRcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcbiAgNzE6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA3NTpcdHtcbiAgNzY6XHRcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpLFxuICA3NzpcdFx0XHRcdCBcJiMzNDtUYWtpbmcgcGVlciByZWZlcmVuY2Ugd2l0aG91dCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrXCYjMzQ7KTtcbiAgNzg6XHRcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCkpKVxuICA3OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgODA6XHRcdHJldHVybiBwZWVyO1xuICA4MTpcdH1cbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgODQ6XHR7XG4gIDg1Olx0XHQvKiBSZW1vdmUgZnJvbSBjb25maWd1cmF0aW9uLXRpbWUgbG9va3VwIHN0cnVjdHVyZXMuICovXG4gIDg2Olx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0KTtcbiAgODc6XHRcdHdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoXHUwMDI2cGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGVlcl9hbGxvd2VkaXBzLCBwZWVyLFxuICA4ODpcdFx0XHRcdFx0ICAgICBcdTAwMjZwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuICA4OTpcdFx0d2dfcHVia2V5X2hhc2h0YWJsZV9yZW1vdmUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xuICA5MDpcdFxuICA5MTpcdFx0LyogTWFyayBhcyBkZWFkLCBzbyB0aGF0IHdlIGRvbiYjMzk7dCBhbGxvdyBqdW1waW5nIGNvbnRleHRzIGFmdGVyLiAqL1xuICA5MjpcdFx0V1JJVEVfT05DRShwZWVyLVx1MDAzZWlzX2RlYWQsIHRydWUpO1xuICA5MzpcdFxuICA5NDpcdFx0LyogVGhlIGNhbGxlciBtdXN0IG5vdyBzeW5jaHJvbml6ZV9uZXQoKSBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4gKi9cbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgOTg6XHR7XG4gIDk5Olx0XHRXQVJOX09OKCFwZWVyLVx1MDAzZWlzX2RlYWQpO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AqKgoKT2theSwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIFdpcmVHdWFyZCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgLiBUaGUgY29yZSBwZWVyIGhhbmRsaW5nIGxvZ2ljIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgcGVlciBzdGF0ZSwgaGFuZGxpbmcga2V5IGV4Y2hhbmdlcyAob3IgbGFjayB0aGVyZW9mLCBpZiB0aGV5JiMzOTtyZSBwcmUtc2hhcmVkIGtleXMpLCBhbmQgZGlyZWN0aW5nIHRyYWZmaWMuIFRoaXMgaXMgd2hlcmUgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBjcnlwdG9ncmFwaGljIGhhbmRzaGFrZXMgYW5kIHBhY2tldCBwcm9jZXNzaW5nIHdpbGwgbWFuaWZlc3QuIEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgZXNwZWNpYWxseSBhcm91bmQga2V5IHVwZGF0ZXMgYW5kIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIGV2ZW50cy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3ZlIHN0cnVjdHVyZWQgdGhlIGRhdGEgc3RydWN0dXJlcywgbGlrZSB0aGUgYHdnX3BlZXJgIHN0cnVjdCwgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXkgYXJlIHVzaW5nIGFueSB6ZXJvLWNvcHkgbWVjaGFuaXNtcyBvciBvdGhlciBvcHRpbWl6YXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgYXNwZWN0LiBJJiMzOTttIHJlYWR5IHRvIGZpbmQgb3V0IGhvdyB0aGV5IHB1dCBpdCBhbGwgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0LyogTm8gbW9yZSBrZXlwYWlycyBjYW4gYmUgY3JlYXRlZCBmb3IgdGhpcyBwZWVyLCBzaW5jZSBpc19kZWFkIHByb3RlY3RzXG4gMTAyOlx0XHQgKiBhZGRfbmV3X2tleXBhaXIsIHNvIHdlIGNhbiBub3cgZGVzdHJveSBleGlzdGluZyBvbmVzLlxuIDEwMzpcdFx0ICovXG4gMTA0Olx0XHR3Z19ub2lzZV9rZXlwYWlyc19jbGVhcihcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzKTtcbiAxMDU6XHRcbiAxMDY6XHRcdC8qIERlc3Ryb3kgYWxsIG9uZ29pbmcgdGltZXJzIHRoYXQgd2VyZSBpbi1mbGlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZlxuIDEwNzpcdFx0ICogdGhpcyBmdW5jdGlvbi5cbiAxMDg6XHRcdCAqL1xuIDEwOTpcdFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gMTEwOlx0XG4gMTExOlx0XHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4gMTEyOlx0XHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbiAxMTM6XHRcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcbiAxMTQ6XHRcdCAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy5cbiAxMTU6XHRcdCAqL1xuIDExNjpcdFx0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiAxMTc6XHRcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXG4gMTE4Olx0XHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG4gMTE5Olx0XG4gMTIwOlx0XHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuIDEyMTpcdFxuIDEyMjpcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMTIzOlx0XHQvKiBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbiAxMjQ6XHRcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXG4gMTI1Olx0XHQgKi9cbiAxMjY6XHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4gMTI3Olx0XG4gMTI4Olx0XHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcbiAxMjk6XHRcdCAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS5cbiAxMzA6XHRcdCAqL1xuIDEzMTpcdFx0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcbiAxMzI6XHRcbiAxMzM6XHRcdC8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3XG4gMTM0Olx0XHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxuIDEzNTpcdFx0ICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZFxuIDEzNjpcdFx0ICogYW5kIHJldHVybmluZywgMykgZnJvbSB3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQoKSBhZnRlciBhIHBvaW50XG4gMTM3Olx0XHQgKiB3aGVyZSBpdCBoYXMgcHJvY2Vzc2VkIGFuIGluY29taW5nIGhhbmRzaGFrZSBwYWNrZXQsIGJ1dCB3aGVyZVxuIDEzODpcdFx0ICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbiYjMzk7dFxuIDEzOTpcdFx0ICogaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMSkgZXZlbnR1YWxseSwgYmVjYXVzZSB3ZSYjMzk7cmUgcmVtb3ZlZCBmcm9tXG4gMTQwOlx0XHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXcgcmVmZXJlbmNlcyBpbiAoMikgZXZlbnR1YWxseSwgYmVjYXVzZVxuIDE0MTpcdFx0ICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZFxuIDE0MjpcdFx0ICogYWxsIGV4aXN0aW5nIGtleXBhaXJzIGFuZCBubyBtb3JlIGNhbiBiZSBjcmVhdGVkOyB3ZSB3b24mIzM5O3QgaGF2ZSBuZXdcbiAxNDM6XHRcdCAqIHJlZmVyZW5jZXMgaW4gKDMpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UmIzM5O3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XG4gMTQ0Olx0XHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxuIDE0NTpcdFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXG4gMTQ2Olx0XHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXG4gMTQ3Olx0XHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cbiAxNDg6XHRcdCAqL1xuIDE0OTpcdFxuIDE1MDpcdFx0LS1wZWVyLVx1MDAzZWRldmljZS1cdTAwM2VudW1fcGVlcnM7XG4gMTUxOlx0XHR3Z19wZWVyX3B1dChwZWVyKTtcbiAxNTI6XHR9XG4gMTUzOlx0XG4gMTU0Olx0LyogV2UgaGF2ZSBhIHNlcGFyYXRlIFwmIzM0O3JlbW92ZVwmIzM0OyBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxuIDE1NTpcdCAqIGEgcGVlciBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIHdpbGwgZXZlbnR1YWxseSBjb21lIHRvIGFuIGVuZCBhbmQgbm90IHBhc3NcbiAxNTY6XHQgKiB0aGVpciByZWZlcmVuY2Ugb250byBhbm90aGVyIGNvbnRleHQuXG4gMTU3Olx0ICovXG4gMTU4Olx0dm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAxNTk6XHR7XG4gMTYwOlx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuIDE2MTpcdFx0XHRyZXR1cm47XG4gMTYyOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gMTYzOlx0XG4gMTY0Olx0XHRwZWVyX21ha2VfZGVhZChwZWVyKTtcbiAxNjU6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE2NjpcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXG4gMTcwOlx0e1xuIDE3MTpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wO1xuIDE3MjpcdFx0TElTVF9IRUFEKGRlYWRfcGVlcnMpO1xuIDE3MzpcdFxuIDE3NDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ3Zy1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuIDE3NTpcdFxuIDE3NjpcdFx0LyogQXZvaWQgaGF2aW5nIHRvIHRyYXZlcnNlIGluZGl2aWR1YWxseSBmb3IgZWFjaCBvbmUuICovXG4gMTc3Olx0XHR3Z19hbGxvd2VkaXBzX2ZyZWUoXHUwMDI2d2ctXHUwMDNlcGVlcl9hbGxvd2VkaXBzLCBcdTAwMjZ3Zy1cdTAwM2VkZXZpY2VfdXBkYXRlX2xvY2spO1xuIDE3ODpcdFxuIDE3OTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNndnLVx1MDAzZXBlZXJfbGlzdCwgcGVlcl9saXN0KSB7XG4gMTgwOlx0XHRcdHBlZXJfbWFrZV9kZWFkKHBlZXIpO1xuIDE4MTpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnBlZXItXHUwMDNlcGVlcl9saXN0LCBcdTAwMjZkZWFkX3BlZXJzKTtcbiAxODI6XHRcdH1cbiAxODM6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDE4NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFx1MDAyNmRlYWRfcGVlcnMsIHBlZXJfbGlzdClcbiAxODU6XHRcdFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcbiAxODY6XHR9XG4gMTg3Olx0XG4gMTg4Olx0c3RhdGljIHZvaWQgcmN1X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gMTg5Olx0e1xuIDE5MDpcdFx0c3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgd2dfcGVlciwgcmN1KTtcbiAxOTE6XHRcbiAxOTI6XHRcdGRzdF9jYWNoZV9kZXN0cm95KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUpO1xuIDE5MzpcdFx0V0FSTl9PTih3Z19wcmV2X3F1ZXVlX3BlZWsoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSkgfHwgd2dfcHJldl9xdWV1ZV9wZWVrKFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdC8qIFRoZSBmaW5hbCB6ZXJvaW5nIHRha2VzIGNhcmUgb2YgY2xlYXJpbmcgYW55IHJlbWFpbmluZyBoYW5kc2hha2Uga2V5XG4gMTk2Olx0XHQgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuIDE5NzpcdFx0ICovXG4gMTk4Olx0XHRtZW16ZXJvX2V4cGxpY2l0KHBlZXIsIHNpemVvZigqcGVlcikpO1xuIDE5OTpcdFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xuIDIwMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhvc2UgYHdnX3F1ZXVlXypgIGZ1bmN0aW9ucywgYXMgaWYgSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFdpcmVHdWFyZCBRdWV1ZSBNYW5hZ2VtZW50KioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgV2lyZUd1YXJkIHF1ZXVlaW5nIHN5c3RlbSBpcyB3b3JraW5nLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGhzIHJlbGF0ZWQgdG8gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCwgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVucXVldWUgZnVuY3Rpb25zLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQgaXMgcGFyYW1vdW50LgoKRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhvc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgd2lyZWd1YXJkIGNvZGViYXNlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhleSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gRnJvbSB0YXNrbGV0cz8gRnJvbSB3aXRoaW4gbmV0ZmlsdGVyIGhvb2tzPyBLbm93aW5nIHRoZSAqd2hlcmUqIGlzIGFic29sdXRlbHkgY3JpdGljYWwuCgpCZXlvbmQgdGhlIGltbWVkaWF0ZSBjYWxsZXJzLCBJJiMzOTttIGFsc28gZ29pbmcgdG8gaWRlbnRpZnkgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBlbnF1ZXVlIGZ1bmN0aW9ucy4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgY2FsbCBncmFwaCwgc2hvd2luZyBub3Qgb25seSB3aG8gKmNhbGxzKiB0aGVtLCBidXQgYWxzbyB3aG8gKnRvdWNoZXMqIHRoZW0sIGZvciBleGFtcGxlLCBmdW5jdGlvbnMgdGhhdCBwYXNzIGEgZGF0YSBzdHJ1Y3R1cmUgdG8gYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBmdWxsIHNjb3BlIG9mIGZ1bmN0aW9ucyB0aGF0IHJlbHkgb24gYW5kIGluZmx1ZW5jZSB0aGUgcXVldWVpbmcgbG9naWMuIEJ5IG1hcHBpbmcgdGhlIGZ1bGwgcmFuZ2Ugb2YgcmVsYXRlZCBmdW5jdGlvbnMsIEkgY2FuIHVuZGVyc3RhbmQgYWxsIHRoZSBwb2ludHMgaW4gY29kZSB0aGF0IGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBvcGVyYXRpb24gb2YgdGhlIHF1ZXVlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcXVldWVfZW5xdWV1ZV9wZXJfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTE0OD1zdGF0aWMgaW5saW5lIHZvaWQgd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTUyLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MTUzOnN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE1NC1cdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNzYtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNzc6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0xNzgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5MS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE5MjpzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYz00OTM9dm9pZCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTAyLVx0XHRcdFx0UEFDS0VUX1NUQVRFX0NSWVBURUQgOiBQQUNLRVRfU1RBVEVfREVBRDtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTAzOlx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MDQtXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSlcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUwOT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI1LVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MjY6XHRyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXHUwMDI2d2ctXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSwgc2tiLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjctXHRcdFx0XHRcdFx0ICAgd2ctXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTI4LVx0aWYgKHVubGlrZWx5KHJldCA9PSAtRVBJUEUpKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1Mjk6XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUzMC1cdGlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9Mjg3PXZvaWQgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMwNC1cdFx0fVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMDU6XHRcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIHN0YXRlKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzA2LVx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYz0zMTE9c3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjMyMDpcdHJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcihcdTAwMjZ3Zy1cdTAwM2VlbmNyeXB0X3F1ZXVlLCBcdTAwMjZwZWVyLVx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzIxLVx0XHRcdFx0XHRcdCAgIHdnLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMi1cdGlmICh1bmxpa2VseShyZXQgPT0gLUVQSVBFKSlcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6MzIzOlx0XHR3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4KGZpcnN0LCBQQUNLRVRfU1RBVEVfREVBRCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyNC1lcnI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldpcmVHdWFyZCBDb2RlIFJldmlldyBEZWVwIERpdmUqKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGdvIHRocm91Z2ggdGhpcyBXaXJlR3VhcmQgY29kZWJhc2UuIEZpcnN0LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY29yZSBwYWNrZXQgaGFuZGxpbmcgcm91dGluZXM6IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgYnVsbGV0cHJvb2YsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG5ldyBhZHZhbmNlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBhbnkgdGhyZWFkaW5nIGlzc3VlcywgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZXJlLgoKVGhlbiwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQgYW5kIHNjYW4gYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIG1vZHVsZS4gTG9vayBmb3IgYW55IGV4cG9zZWQgZnVuY3Rpb25hbGl0eSBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCB0byB1bmRlcnN0YW5kLgoKRmluYWxseSwgSSBhYnNvbHV0ZWx5ICptdXN0KiBjaGVjayB0aGUgbmV0bGluayBjb25maWd1cmF0aW9uIGVudHJ5IHBvaW50cyBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdXNlcmxhbmQgaW50ZXJmYWNlIGxpdmVzLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBlbnN1cmUgdGhvc2UgaW50ZXJmYWNlcyBhcmUgaGFyZGVuZWQgYW5kIHRoYXQgYW55IHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMgYXJlIGlkZW50aWZpZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0yNDI9c3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjUzLVx0LyogVGhlIGZpbmFsIHJlZmVyZW5jZXMgYXJlIGNsZWFyZWQgaW4gdGhlIGJlbG93IGNhbGxzIHRvIGRlc3Ryb3lfd29ya3F1ZXVlLiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjI1NDpcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjU1LVx0ZGVzdHJveV93b3JrcXVldWUod2ctXHUwMDNlaGFuZHNoYWtlX3JlY2VpdmVfd3EpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9MzQwPXN0YXRpYyBpbnQgc2V0X3BlZXIoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBubGF0dHIgKiphdHRycylcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNC1cdGlmIChmbGFncyBcdTAwMjYgV0dQRUVSX0ZfUkVNT1ZFX01FKSB7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjQwNTpcdFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTQwNi1cdFx0Z290byBvdXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz00NzM9aW50IHdnX3NldF9kZXZpY2VfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE3LVx0aWYgKGZsYWdzIFx1MDAyNiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjUxODpcdFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTE5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTM5LVx0XHRcdFx0d2dfcGVlcl9wdXQocGVlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjU0MDpcdFx0XHRcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy01NDEtXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1Ny0gKi9cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTU4OnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTE1OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjgtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjE2OTp2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZylcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTcwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTgwPXZvaWQgd2dfcGVlcl9wdXQoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo4MTp2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODI6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC04My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgV2lyZUd1YXJkIENvZGUgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgY29kZWJhc2UgYWdhaW4uIEZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0OiBgd2dfc2V0X2RldmljZV9kb2l0YCBpcyB0aGF0IEdlbmwgRG9JdCBjYWxsYmFjaywgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgbmV0bGluay1iYXNlZCBXaXJlR3VhcmQgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGFkZC91cGRhdGUvcmVtb3ZlIHBlZXIgbWFnaWMgaGFwcGVucyDigJMgSSBuZWVkIHRvIGtlZXAgdGhhdCBmaXJtbHkgaW4gbWluZC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGZyb250IGRvb3IgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcmZhY2UmIzM5O3MgcGVlciByZWxhdGlvbnNoaXBzLgoKVGhlbiB0aGVyZSYjMzk7cyBgd2dfeG1pdGAgb3ZlciBpbiBgc2VuZC5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHRyYW5zbWlzc2lvbiBwYXRoOiBxdWV1ZWluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgc3dlZXAgdGhyb3VnaCBgc2VuZC5jYCBhbmQgYHJlY2VpdmUuY2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIHBhY2tldCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBoYW5kb2ZmIHBvaW50cy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldHMgYXJlIGdldHRpbmcgaW4gYW5kIG91dCBhbmQgd2hhdCBlYWNoIHBhcnQgZG9lcyBvbiB0aGUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRkZXZfdHhfdCB3Z194bWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYz0xMTU9c3RhdGljIGludCB3Z19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTEzNi1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYzoxMzc6c3RhdGljIG5ldGRldl90eF90IHdnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXaXJlR3VhcmQgRnVuY3Rpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGNvZGViYXNlLiBGaXJzdCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIGxpc3QgdGhvc2UgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNlIG9yIGFyZSBjcml0aWNhbCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYHdnX3NldF9kZXZpY2VfZG9pdGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF90eF93b3JrZXJgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgd2dfcGFja2V0X3R4X3dvcmtlcmAsIGFuZCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgY29uZmlybSB0aGF0IHRoZXkgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucyDigJMgbWFraW5nIHN1cmUgdGhlc2UgcG90ZW50aWFsbHkgY3JpdGljYWwgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBoYW5kbGVkIGFuZCB0aGVpciBzY29wZSBpcyBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoaW4gdGhlIG1vZHVsZS4gVGhpcyBpcyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZXhwb3J0ZWQgQVBJIHN1cmZhY2UgYW5kLCB1bHRpbWF0ZWx5LCB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgc3RhYmlsaXR5IG9mIHRoZSBXaXJlR3VhcmQgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy00OS1cdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrLCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6NTA6XHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUxLVx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTUwPXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTE6dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01Mi12b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjQyPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YV9kb25lKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yNjEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI2Mjp2b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0yNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzczNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHdnX3BhY2tldF9yeF9wb2xsYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkmIzM5O20gZm9jdXNpbmcgb24gYHdnX3BhY2tldF9yeF9wb2xsYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgY2xlYXIg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBwb2xsaW5nIGZvciBpbmNvbWluZyBwYWNrZXRzIHdpdGhpbiB0aGUgV2lyZUd1YXJkIGNvbnRleHQsIG9idmlvdXNseSBmb3IgcmVjZWl2aW5nIHRyYWZmaWMuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcywgb2YgY291cnNlLCBidXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgY2xlYXIgZnJvbSB0aGUgdGl0bGUuIE5vdywgd2hhdCYjMzk7cyByZWFsbHkgaW1wb3J0YW50IGlzIHdoYXQmIzM5O3MgaGFwcGVuaW5nICppbnNpZGUqIHRoYXQgcG9sbGluZyBsb29wOiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGFueSBwb3RlbnRpYWwgbG9ja2luZywgYW5kIGhvdyBpdCBoYW5kbGVzIHBhY2tldCBidWZmZXJpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBUaGUgaW1wbGVtZW50YXRpb24gaGVyZSBjYW4gaGF2ZSBhIGh1Z2UgaW1wYWN0IG9uIGxhdGVuY3kgYW5kIG92ZXJhbGwgdGhyb3VnaHB1dC4gR290dGEgYmUgdGhvcm91Z2guIFRpbWUgdG8gY3JhY2sgaXQgb3Blbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01OS1cdHNldF9iaXQoTkFQSV9TVEFURV9OT19CVVNZX1BPTEwsIFx1MDAyNnBlZXItXHUwMDNlbmFwaS5zdGF0ZSk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjYwOlx0bmV0aWZfbmFwaV9hZGQod2ctXHUwMDNlZGV2LCBcdTAwMjZwZWVyLVx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNjEtXHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oPTMzPXZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9yZWNlaXZlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzQtLyogTkFQSSBwb2xsIGZ1bmN0aW9uOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6MzU6aW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC0zNi0vKiBXb3JrcXVldWUgd29ya2VyOiAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9MzM1PXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGFfZG9uZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzNy1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NDM4OmludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzQ3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcmAqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBXaXJlR3VhcmQmIzM5O3MgYXJjaGl0ZWN0dXJlLCB0aGlzIGlzIHRoZSB3b3JrZXIgdGhyZWFkIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKnNlbmRpbmcqIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBwYWNrZXRzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBrZXkgcmVzcG9uc2liaWxpdGllczogZ2VuZXJhdGluZyB0aGUgaW5pdGlhbCBlcGhlbWVyYWwga2V5IHBhaXIsIGNvbnN0cnVjdGluZyB0aGUgaGFuZHNoYWtlIG1lc3NhZ2UgaXRzZWxmIChwcm9iYWJseSBpbmNsdWRpbmcgdGhlIHBlZXImIzM5O3Mgc3RhdGljIHB1YmxpYyBrZXksIHRoZSBlcGhlbWVyYWwgcHVibGljIGtleSwgdGhlIE1BQywgYW5kIHRoZSBwcm90b2NvbCB2ZXJzaW9uKSwgYW5kIHRoZW4gYWN0dWFsbHkgcXVldWluZyBpdCBmb3IgdHJhbnNtaXNzaW9uLiBJIHN1c3BlY3QgaXQmIzM5O3Mgd29ya2luZyBjbG9zZWx5IHdpdGggdGhlIGNyeXB0b2dyYXBoeSBwcmltaXRpdmVzLCBsaWtlbHkgdXNpbmcgdGhlIFgyNTUxOSBrZXkgZXhjaGFuZ2UsIGFuZCB0aGVuIHRoZSBBRUFEIGNpcGhlciBmb3IgdGhlIG1lc3NhZ2UuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbG9ja2luZyBzZW1hbnRpY3MgaGVyZS4gRG9lcyBpdCBoYXZlIG11dGV4IHByb3RlY3Rpb24/IFdoYXQgaXMgdGhlIGNvbmN1cnJlbmN5IG1vZGVsPyBBbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLCBzdWNoIGFzIGJhdGNoaW5nIHRoZXNlIGhhbmRzaGFrZXMgaWYgdGhlcmUmIzM5O3MgYSBmbG9vZCBvZiBuZXcgcGVlcnM/IEkgd2FudCB0byBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzOiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvY2tldCBpcyBmdWxsPyBJcyB0aGVyZSBwcm9wZXIgYmFja29mZiBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcmV0cmFuc21pc3Npb25zIGdyYWNlZnVsbHk/IEVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlLCBlc3BlY2lhbGx5IGZvciBwcmV2ZW50aW5nIHJlc291cmNlIHN0YXJ2YXRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLgoKQmV5b25kIHRoZSBpbW1lZGlhdGUgaGFuZHNoYWtlLCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHRpbWVyIGxvZ2ljLiBJcyB0aGVyZSBhIGRlZmluZWQgdGltZW91dCBmb3IgdGhlIGhhbmRzaGFrZSwgYW5kIGhvdyBpcyBpdCB0cmlnZ2VyZWQ/IFdoYXQgaGFwcGVucyB1cG9uIHRpbWVvdXQ/IEFyZSByZXRyYW5zbWlzc2lvbnMgaGFuZGxlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGluaXRpYWwgYXR0ZW1wdD8gTXkgdGhvdWdodCBpcywgYXJlIHRoZSByZXRyeSBtZWNoYW5pc21zIG9wdGltaXplZCBvciBpcyB0aGVyZSBhIHZ1bG5lcmFiaWxpdHk/IEFuZCBmaW5hbGx5LCB3aGF0IGFib3V0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgbmV0d29yayBzdGFjaz8gSSB3b3VsZCBsaWtlIHRvIHNlZSBpZiBhbnkgY29udGV4dC1zd2l0Y2hlcyBhcmUgbmVjZXNzYXJ5IGZvciBpdC4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBlZmZpY2llbnQgYW5kIHNlY3VyZSwgZXNwZWNpYWxseSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy00OC1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNla2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjQ5Olx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01MC1cdElOSVRfV09SSyhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD00OD12b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTQ5LS8qIFdvcmtxdWV1ZSB3b3JrZXJzOiAqL1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTA6dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01MS12b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTIxPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9zZW5kX2hhbmRzaGFrZV9pbml0aWF0aW9uKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtNDUtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjQ2OnZvaWQgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqUGVlciBNYW5hZ2VtZW50IFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIHBlZXIgbWFuYWdlbWVudCByb3V0aW5lcy4gRmlyc3QsIEkmIzM5O2xsIHByaW9yaXRpemUgdmVyaWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9uczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNsZWFuaW5nIHVwIHBlZXJzLCBzbyB0aGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIFRoZW4sIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBhZ2FpbnN0IHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgaGVhZGVyIGZpbGUuIEkgd2lsbCBjaGVjayB0aGUgYHBlZXIuaGAgaGVhZGVyIGZpbGUgYW5kIHRoZW4gc3lzdGVtYXRpY2FsbHkgcmV2aWV3IGBwZWVyLmNgLCBmb2N1c2luZyBvbiBldmVyeSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgZmlsZS4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIEkgY292ZXIgdGhlIHB1YmxpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzA6XHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gIDcxOlx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLFxuICA3MjpcdFx0XHRcdCAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSk7XG4gIDczOlx0XG4gIDc0Olx0c3RydWN0IHdnX3BlZXIgKl9fbXVzdF9jaGVjayB3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgNzU6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiAgNzY6XHR7XG4gIDc3Olx0XHRrcmVmX2dldChcdTAwMjZwZWVyLVx1MDAzZXJlZmNvdW50KTtcbiAgNzg6XHRcdHJldHVybiBwZWVyO1xuICA3OTpcdH1cbiAgODA6XHR2b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgODE6XHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcbiAgODI6XHR2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zyk7XG4gIDgzOlx0XG4gIDg0Olx0aW50IHdnX3BlZXJfaW5pdCh2b2lkKTtcbiAgODU6XHR2b2lkIHdnX3BlZXJfdW5pbml0KHZvaWQpO1xuICA4NjpcdFxuICA4NzpcdCNlbmRpZiAvKiBfV0dfUEVFUl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzI5CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBXaXJlR3VhcmQgUGVlciBUZWFyZG93biBhbmQgUGFja2V0IEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZnV6emluZyBwbGFuIGZvciB0aGlzIFdpcmVHdWFyZCBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIGR1cmluZyBwZWVyIHRlYXJkb3duIGFuZCBwYWNrZXQgcXVldWluZyDigJMgc3BlY2lmaWNhbGx5LCByZXBsYWNpbmcgYnJvYWQgd29ya3F1ZXVlIGZsdXNoZXMgd2l0aCB0YXJnZXRlZCBvbmVzIGFuZCBlbXBsb3lpbmcgYXRvbWljIHRyYWNraW5nIChgcGFja2V0X2NyeXB0X3BlbmRpbmdgLCBgd2FpdF92YXJfZXZlbnRgLCBgd2FrZV91cF92YXJgKS4gU2luY2UgV2lyZUd1YXJkIGlzIGEgc29mdHdhcmUgVlBOIGRyaXZlciwgSSBjYW4gdGFyZ2V0IGl0IGluIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFueSBzcGVjaWFsaXplZCBoYXJkd2FyZSBzZXR1cCB3aGljaCBpcyBhIGJpZyB3aW4uCgpUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuCgpBcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBuZWVkIGBXSVJFR1VBUkRgIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBjb3JlIGNvbXBvbmVudC4gSSBzZWUgdGhlIHN1Z2dlc3RlZCBjb25maWdzIGluY2x1ZGUgYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBqdXN0IGBXSVJFR1VBUkRgIHRvIG1pbmltaXplIG5vaXNlLCBidXQgSSBjYW4gY2VydGFpbmx5IGtlZXAgdGhlIG9wdGlvbiB0byBhZGQgdGhlIG90aGVycyBsYXRlci4KClRoZSByZWFsbHkgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhvc2UgZnVuY3Rpb25zIGFyZSByaWdodCB3aGVyZSB0aGUgYWN0aW9uIGlzOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCBhcmUgdGhlIG9idmlvdXMgb25lcyBpbnZvbHZlZCBpbiBwZWVyIGxpZmVjeWNsZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwYWNrZXQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGZpbmFsbHkgYHdnX3NldF9kZXZpY2VfZG9pdGAgd2hpY2ggSSBleHBlY3QgY29uZmlndXJlcyB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgc29saWQgc2V0IG9mIHRhcmdldHMgdG8gZ28gYWZ0ZXIuCgpJJiMzOTt2ZSByZXZpZXdlZCBhbGwgdGhlIHBhcmFtZXRlcnMsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gYmVnaW4gdGVzdGluZy4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dJUkVHVUFSRCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3dnX3BlZXJfcmVtb3ZlX2FsbCYjMzQ7LAogICAgJiMzNDt3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X2RlY3J5cHRfd29ya2VyJiMzNDssCiAgICAmIzM0O3dnX3BhY2tldF90eF93b3JrZXImIzM0OywKICAgICYjMzQ7d2dfcGFja2V0X3J4X3BvbGwmIzM0OywKICAgICYjMzQ7d2dfc2V0X2RldmljZV9kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMgZm9yIFdpcmVHdWFyZCBwZWVycyBkdXJpbmcgcGFja2V0IGVuY3J5cHRpb24sIGRlY3J5cHRpb24sIGFuZCBxdWV1ZSBkcmFpbmluZyBieSBpbnRyb2R1Y2luZyBhbiBhdG9taWMgcGVuZGluZyBjb3VudGVyIChwYWNrZXRfY3J5cHRfcGVuZGluZykgYW5kIHdhaXRfdmFyX2V2ZW50IGluc3RlYWQgb2YgZmx1c2hpbmcgdGhlIGVudGlyZSB3b3JrcXVldWUgbXVsdGlwbGUgdGltZXMuIFdpcmVHdWFyZCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgZHJpdmVyIHJlYWRpbHkgdGVzdGFibGUgaW4gUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaW4gV2lyZUd1YXJkJiMzOTtzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCB0byB3YWl0IHNwZWNpZmljYWxseSBmb3IgaW5mbGlnaHQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciB0aGF0IHBlZXIgYmVmb3JlIGZsdXNoaW5nIHBlci1wZWVyIHdvcmsgc3RydWN0dXJlcyBhbmQgZGVsZXRpbmcgTkFQSS5cblxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTc4MzYzMDAzNjY2ZWVlMDVlOGNhM2U1ODZlMzZmYzU5YTVmZTViZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYwppbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbG9ja2RlcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7CiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApOwpAQCAtNDksNiAmIzQzOzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLAogCUlOSVRfV09SSygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTsKIAl3Z19wcmV2X3F1ZXVlX2luaXQoJmFtcDtwZWVyLSZndDt0eF9xdWV1ZSk7CiAJd2dfcHJldl9xdWV1ZV9pbml0KCZhbXA7cGVlci0mZ3Q7cnhfcXVldWUpOwomIzQzOwkvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqLwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpOwogCXJ3bG9ja19pbml0KCZhbXA7cGVlci0mZ3Q7ZW5kcG9pbnRfbG9jayk7CiAJa3JlZl9pbml0KCZhbXA7cGVlci0mZ3Q7cmVmY291bnQpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtwZWVyLSZndDtzdGFnZWRfcGFja2V0X3F1ZXVlKTsKQEAgLTEwNSwyOCAmIzQzOzEwOCwyNyBAQCBzdGF0aWMgdm9pZCBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHN0cnVjdCB3Z19wZWVyICpwZWVyKQogCSAqLwogCXdnX3RpbWVyc19zdG9wKHBlZXIpOwogCi0JLyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24mIzM5O3QKLQkgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSYjMzk7cyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnkKLQkgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsCi0JICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vCi0JICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLgomIzQzOwkvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlCiYjNDM7CSAqIHBhcmFsbGVsIGNyeXB0byBxdWV1ZXMgYWZ0ZXIgc3luY2hyb25pemVfbmV0KCkgd2FpdHMgZm9yIHByZS1leGlzdGluZwomIzQzOwkgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzCiYjNDM7CSAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy4KIAkgKi8KJiM0MzsJYXRvbWljX2RlYygmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKJiM0MzsJd2FpdF92YXJfZXZlbnQoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZywKJiM0MzsJCSAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZSgmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKSk7CiYjNDM7CiYjNDM7CWZsdXNoX3dvcmsoJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiAKLQkvKiBhKSBGb3IgZW5jcnlwdC9kZWNyeXB0LiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0JiMzOTtzIG5hcGkpLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSk7Ci0JLyogYi4yLjEpIEZvciByZWNlaXZlIChidXQgbm90IHNlbmQsIHNpbmNlIHRoYXQmIzM5O3Mgd3EpLiAqLwogCW5hcGlfZGlzYWJsZSgmYW1wO3BlZXItJmd0O25hcGkpOwotCS8qIGIuMi4xKSBJdCYjMzk7cyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKJiM0MzsJLyogSXQmIzM5O3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lCiAJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KIAkgKi8KIAluZXRpZl9uYXBpX2RlbCgmYW1wO3BlZXItJmd0O25hcGkpOwogCi0JLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKLQkgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLgomIzQzOwkvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmcKJiM0MzsJICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLgogCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShwZWVyLSZndDtkZXZpY2UtJmd0O2hhbmRzaGFrZV9zZW5kX3dxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3BlZXItJmd0O3RyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKIAogCS8qIEFmdGVyIHRoZSBhYm92ZSBmbHVzaGVzLCBhIHBlZXIgbWlnaHQgc3RpbGwgYmUgYWN0aXZlIGluIGEgZmV3CiAJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaApAQCAtMzcsNiAmIzQzOzM3LDcgQEAgc3RydWN0IGVuZHBvaW50IHsKIHN0cnVjdCB3Z19wZWVyIHsKIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOwomIzQzOwlhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CiAJaW50IHNlcmlhbF93b3JrX2NwdTsKIAlib29sIGlzX2RlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCkBAIC0xMSw2ICYjNDM7MTEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcF90dW5uZWxzLmgmZ3Q7CiAKIHN0cnVjdCB3Z19kZXZpY2U7CkBAIC0xNjEsNiAmIzQzOzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKIAkgKi8KIAlpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtQQUNLRVRfUEVFUihza2IpLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAKIAkvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZQogCSAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi4KQEAgLTE4Miw2ICYjNDM7MTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtQQUNLRVRfQ0Ioc2tiKS0mZ3Q7c3RhdGUsIHN0YXRlKTsKIAlxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZSgmYW1wO3BlZXItJmd0O3NlcmlhbF93b3JrX2NwdSwgcGVlci0mZ3Q7aW50ZXJuYWxfaWQpLAogCQkgICAgICBwZWVyLSZndDtkZXZpY2UtJmd0O3BhY2tldF9jcnlwdF93cSwgJmFtcDtwZWVyLSZndDt0cmFuc21pdF9wYWNrZXRfd29yayk7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcpKQomIzQzOwkJd2FrZV91cF92YXIoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZyk7CiAJd2dfcGVlcl9wdXQocGVlcik7CiB9CiAKQEAgLTE5NCw2ICYjNDM7MTk4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXQKIAogCWF0b21pY19zZXRfcmVsZWFzZSgmYW1wO1BBQ0tFVF9DQihza2IpLSZndDtzdGF0ZSwgc3RhdGUpOwogCW5hcGlfc2NoZWR1bGUoJmFtcDtwZWVyLSZndDtuYXBpKTsKJiM0MzsJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZykpCiYjNDM7CQl3YWtlX3VwX3ZhcigmYW1wO3BlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nKTsKIAl3Z19wZWVyX3B1dChwZWVyKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgV2lyZUd1YXJkIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBXaXJlR3VhcmQgcGF0Y2guIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIG1vcmUgZmluZS1ncmFpbmVkIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwZXItcGVlciBjb250ZXh0LiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhgLCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYCwgd2hpY2ggYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhbiBhdG9taWMgY291bnRlciwgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCwgd2l0aGluIHRoZSBgc3RydWN0IHdnX3BlZXJgLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBhbGxvd3MgZm9yIHBlci1wZWVyIHRyYWNraW5nIG9mIHBlbmRpbmcgY3J5cHRvIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGlzIGNvdW50ZXIgdG8gMSBpbiBgd2dfcGVlcl9jcmVhdGVgLCB3aGljaCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQuCgpUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGNvdW50ZXIgaXMgdXNlZCBkdXJpbmcgcGVlciByZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBnbG9iYWwgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggYGF0b21pY19kZWNgLCBgd2FpdF92YXJfZXZlbnRgLCBhbmQgYGZsdXNoX3dvcmtgIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGF2b2lkIGZsdXNoaW5nIHRoZSBlbnRpcmUgZGV2aWNlIHdvcmtxdWV1ZSBhbmQgaW5zdGVhZCBzeW5jaHJvbml6ZSBvbiB0aGUgcGVuZGluZyBjcnlwdG8gb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgcGVlci4gVGhpcyBpcyB0aGUgZ29vZCBwYXJ0ISBJdCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgYnV0IGl0IGFsc28gYnJpbmdzIHRoZSBzcGVjdGVyIG9mIHN1YnRsZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IHRoYXQgd2FpdCBjb25kaXRpb24uIEkgaG9wZSB0aGV5IGRpZCB0aGlzIGNvcnJlY3RseS4KCkluIGFkZGl0aW9uLCBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcgaW4gdGhlIGVucXVldWUgZnVuY3Rpb25zIChgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCwgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgLCBhbmQgYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcnhgKS4gIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmNyZW1lbnRpbmcgdGhlIGNvdW50ZXIgd2hlbiBhIHBhY2tldCBpcyBxdWV1ZWQgYW5kIGRlY3JlbWVudGluZy93YWtpbmcgdXAgdGhlIHByb2Nlc3Mgd2hlbiBpdCYjMzk7cyBkb25lLgoKTXkgZmlyc3QgY29uY2VybnMgYXJlIGFsbCBhYm91dCB0aGUgcG90ZW50aWFsIHJpc2tzOiByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgZGVhZGxvY2tzLCBhbmQgaGFuZ2luZyB0ZWFyZG93bnMsIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiBhbnkgc3luY2hyb25pemF0aW9uLWhlYXZ5IGNvZGUuIEkmIzM5O20gYWxzbyBnb2luZyB0byBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IG9idmlvdXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgdGhvdWdoIGhvcGVmdWxseSBLQVNBTiBhbmQgbG9ja2RlcCB3aWxsIGNhdGNoIHRob3NlLgoKSSYjMzk7dmUgcXVpY2tseSByZXZpZXdlZCB0aGUgY29kZSBhbmQgZG9uJiMzOTt0ICpzZWUqIGFueXRoaW5nIHRoYXQgd291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGBwZWVyLSZndDtwYWNrZXRfY3J5cHRfcGVuZGluZ2AgY291bnRlciBpcyBpbml0aWFsaXplZCwgc28gdGhhdCYjMzk7cyBnb29kLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgd2dfcGVlcl9jcmVhdGVgIGFuZCBtYWtlIHN1cmUgdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIG9yIHByb3Blcmx5IGluaXRpYWxpemVkLiBHcmVwcGluZyBhbmQgcmVhZGluZyB0aGUgc291cmNlIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgdG8gYmUgc3VyZS4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dnX3BlZXJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTM0MD1zdGF0aWMgaW50IHNldF9wZWVyKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTEtXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjM5MjpcdFx0cGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkzLVx0XHRpZiAoSVNfRVJSKHBlZXIpKSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MjI6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD0zNz1zdHJ1Y3Qgd2dfcGVlciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6NzA6c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQZWVyIEhhbmRsaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMjAgdGhyb3VnaCA3MC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGRlYWxzIHdpdGggY29yZSBwZWVyIG1hbmFnZW1lbnQg4oCTIGluaXRpYWxpemF0aW9uLCBsaWtlbHkgc29tZSBzb3J0IG9mIGRhdGEgc3RydWN0dXJlIHNldHVwIGZvciBlYWNoIGNvbm5lY3RlZCBwZWVyLCBhbmQgcGVyaGFwcyBzb21lIGVzc2VudGlhbCBzdGF0ZSB0cmFuc2l0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgV2lyZUd1YXJkIHJlcHJlc2VudHMgYSBwZWVyIGludGVybmFsbHkuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluOiB3aGF0IGRhdGEgaXMgc3RvcmVkIGFib3V0IGVhY2ggcGVlciwgaG93IHRoYXQgZGF0YSBpcyBzdHJ1Y3R1cmVkIChsaW5rZWQgbGlzdHMsIGhhc2ggdGFibGVzLCBldGMuKSwgYW5kIGhvdyBpbml0aWFsIGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZCBvciB2ZXJpZmllZC4gSSYjMzk7bSBhbHNvIHdhdGNoaW5nIG91dCBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQsIGtub3dpbmcgaG93IGltcG9ydGFudCBjb25jdXJyZW5jeSBpcyBpbiBuZXR3b3JraW5nIGNvZGUuIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGV4cGVjdGluZyB0aGF0IHRoaXMgaXMgdGhlIGdyb3VuZCBsZXZlbCBpbmZyYXN0cnVjdHVyZSB0aGF0IGV2ZXJ5dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGZvciBwZWVyIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuICAyMTpcdFxuICAyMjpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcbiAgMjM6XHRcdFx0XHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXG4gIDI0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKVxuICAyNTpcdHtcbiAgMjY6XHRcdHN0cnVjdCB3Z19wZWVyICpwZWVyO1xuICAyNzpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gIDI4Olx0XG4gIDI5Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNndnLVx1MDAzZWRldmljZV91cGRhdGVfbG9jayk7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAod2ctXHUwMDNlbnVtX3BlZXJzIFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXG4gIDMyOlx0XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDMzOlx0XG4gIDM0Olx0XHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4gIDM1Olx0XHRpZiAodW5saWtlbHkoIXBlZXIpKVxuICAzNjpcdFx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuICAzNzpcdFx0aWYgKHVubGlrZWx5KGRzdF9jYWNoZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcbiAgMzg6XHRcdFx0Z290byBlcnI7XG4gIDM5Olx0XG4gIDQwOlx0XHRwZWVyLVx1MDAzZWRldmljZSA9IHdnO1xuICA0MTpcdFx0d2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VoYW5kc2hha2UsIFx1MDAyNndnLVx1MDAzZXN0YXRpY19pZGVudGl0eSxcbiAgNDI6XHRcdFx0XHRcdHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXksIHBlZXIpO1xuICA0MzpcdFx0cGVlci1cdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cGVlcl9jb3VudGVyKTtcbiAgNDQ6XHRcdHBlZXItXHUwMDNlc2VyaWFsX3dvcmtfY3B1ID0gbnJfY3B1bWFza19iaXRzO1xuICA0NTpcdFx0d2dfY29va2llX2luaXQoXHUwMDI2cGVlci1cdTAwM2VsYXRlc3RfY29va2llKTtcbiAgNDY6XHRcdHdnX3RpbWVyc19pbml0KHBlZXIpO1xuICA0NzpcdFx0d2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7XG4gIDQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xuICA0OTpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xuICA1MDpcdFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuICA1MTpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuICA1MjpcdFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuICA1MzpcdFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbiAgNTQ6XHRcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gIDU1Olx0XHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuICA1NjpcdFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuICA1NzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuICA1ODpcdFx0d2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShcdTAwMjZwZWVyLVx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xuICA1OTpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgNjA6XHRcdG5ldGlmX25hcGlfYWRkKHdnLVx1MDAzZWRldiwgXHUwMDI2cGVlci1cdTAwM2VuYXBpLCB3Z19wYWNrZXRfcnhfcG9sbCk7XG4gIDYxOlx0XHRuYXBpX2VuYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuICA2MjpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwZWVyLVx1MDAzZXBlZXJfbGlzdCwgXHUwMDI2d2ctXHUwMDNlcGVlcl9saXN0KTtcbiAgNjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBlZXItXHUwMDNlYWxsb3dlZGlwc19saXN0KTtcbiAgNjQ6XHRcdHdnX3B1YmtleV9oYXNodGFibGVfYWRkKHdnLVx1MDAzZXBlZXJfaGFzaHRhYmxlLCBwZWVyKTtcbiAgNjU6XHRcdCYjNDM7JiM0Mzt3Zy1cdTAwM2VudW1fcGVlcnM7XG4gIDY2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslczogUGVlciAlbGx1IGNyZWF0ZWRcXG5cJiMzNDssIHdnLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBwZWVyLVx1MDAzZWludGVybmFsX2lkKTtcbiAgNjc6XHRcdHJldHVybiBwZWVyO1xuICA2ODpcdFxuICA2OTpcdGVycjpcbiAgNzA6XHRcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcbiAgNzE6XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gIDcyOlx0fVxuICA3MzpcdFxuICA3NDpcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxuICA3NTpcdHtcbiAgNzY6XHRcdFJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpLFxuICA3NzpcdFx0XHRcdCBcJiMzNDtUYWtpbmcgcGVlciByZWZlcmVuY2Ugd2l0aG91dCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrXCYjMzQ7KTtcbiAgNzg6XHRcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCkpKVxuICA3OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NAoJCQkJCQkJb3V0cHV0OiAyMTEKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGVlciBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGNsb3NlbHkgYXQgaG93IHRoZSBgcGVlcmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiBGaXJzdCwgYGttZW1fY2FjaGVfemFsbG9jKHBlZXJfY2FjaGUsIEdGUF9LRVJORUwpYCBpcyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBtZW1vcnksIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyB6ZXJvZWQgb3V0LiBUaGF0JiMzOTtzIGdvb2Q7IGl0IGVsaW1pbmF0ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZW4sIHRoZSBuZXcgZmllbGQgYHBlZXItJmd0O3BhY2tldF9jcnlwdF9wZW5kaW5nYCwgYW4gYGF0b21pY190YCwgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGBhdG9taWNfc2V0KCZhbXA7cGVlci0mZ3Q7cGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpYC4gVGhpcyBpbml0aWFsIHZhbHVlIG9mIDEgaXMgc2lnbmlmaWNhbnQgYW5kIHdpbGwgcGxheSBhIGNydWNpYWwgcm9sZS4gRnJvbSB0aGUgY29kZSwgSSBzZWUgdGhhdCB0aGlzIGF0b21pYyB2YXJpYWJsZSBpcyB1c2VkIGZvciByZWZlcmVuY2UgdHJhY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgZXNwZWNpYWxseSBkdXJpbmcgcGVlciB0ZWFyZG93biB3aXRoaW4gYHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWRgLiBJdCYjMzk7cyBpbmNyZW1lbnRlZCBpbiBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyYCBhbmQgZGVjcmVtZW50ZWQgaW4gYm90aCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbS4KCkJhc2VkIG9uIHRoaXMgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgd2hpY2ggaXMgYSBjcml0aWNhbCBzYWZldHkgY29uY2Vybi4gTm8gdXNlci1zcGFjZSBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgcHJlc2VudCwgYW5kIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcHJldmVudHMgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGJ1ZmZlciBpc3N1ZXMuIFRoZSB1c2Ugb2YgYW4gYXRvbWljIHZhcmlhYmxlIGZvciB0cmFja2luZyBhbHNvIGltcGxpZXMgdGhlIGRldmVsb3BlciBpcyBjb25zY2lvdXMgb2YgdGhyZWFkIHNhZmV0eSBhbmQgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKRnVydGhlcm1vcmUsIGFueSBjb25jdXJyZW5jeSBwcm9ibGVtcywgZGFuZ2xpbmcgcG9pbnRlcnMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9jayBzY2VuYXJpb3Mgc2hvdWxkIGJlIGNhdWdodCBieSB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgaHVuZyB0YXNrIGRldGVjdG9yLiBHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBzZWN0aW9uIG9mIGNvZGUgZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiYjMzk7cyBhc3Npc3RhbmNlLiBObyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBJIGNhbiBzZWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcmVxdWlyZW1lbnRzLCBhbmQgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBMZXQmIzM5O3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdyB0byBmaW5hbGl6ZSB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBXaXJlR3VhcmQmIzM5O3MgcGVlciBtYW5hZ2VtZW50LiBJbnN0ZWFkIG9mIGZsdXNoaW5nIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgdXBvbiBwZWVyIGRlc3RydWN0aW9uLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnRgIHRvIHdhaXQgc3BlY2lmaWNhbGx5IGZvciBpbmZsaWdodCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgZm9yIHRoYXQgcGVlciBiZWZvcmUgZmx1c2hpbmcgcGVyLXBlZXIgd29yayBzdHJ1Y3R1cmVzIGFuZCBkZWxldGluZyBOQVBJLlxuXG5UaGUgbmV3IGZpZWxkIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCB3Z19wZWVyYCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVzaW5nIGBhdG9taWNfc2V0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIEFueSBzeW5jaHJvbml6YXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgUkNVIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIEtNU0FOIGlzIHRoZXJlZm9yZSBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCYjMzk7cyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXG5cblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM4OjUwLjk5OTYyNTUxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTI0NTk4Nzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXSVJFR1VBUkRcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIndnX3BlZXJfY3JlYXRlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVfYWxsXCIsXG4gICAgXCJ3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9kZWNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3R4X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X3J4X3BvbGxcIixcbiAgICBcIndnX3NldF9kZXZpY2VfZG9pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCdzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXFxuXFxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozODo1MC45OTk2Mjk3MzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk2OTgyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTA6Mzg6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcXG5pbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiBcXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbkBAIC00OSw2ICs1MCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XFxuIFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiBcXHR3Z19wcmV2X3F1ZXVlX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFx0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiBcXHRyd2xvY2tfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfbG9jayk7XFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlcmVmY291bnQpO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gXFx0ICovXFxuIFxcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xcbiBcXG4tXFx0LyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24ndFxcbi1cXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxcbi1cXHQgKiB0d28gZ2VuZXJhdGlvbnM6IG9uY2UgZm9yIHBhcmFsbGVsIGNyeXB0byBhbmQgb25jZSBmb3Igc2VyaWFsXFxuLVxcdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xcbi1cXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXFxuK1xcdC8qIExvb2t1cCByZW1vdmFsIGFuZCBpc19kZWFkIHByZXZlbnQgbmV3IHBhY2tldHMgZnJvbSBlbnRlcmluZyB0aGVcXG4rXFx0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXFxuK1xcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcXG4rXFx0ICogdG8gZmluaXNoIHNjaGVkdWxpbmcgdGhlaXIgc2VyaWFsIFRYIHdvcmsgb3IgUlggTkFQSSBwcm9jZXNzaW5nLlxcbiBcXHQgKi9cXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbitcXHR3YWl0X3Zhcl9ldmVudChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXFxuK1xcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4rXFxuK1xcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcXG4gXFxuLVxcdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXFxuLVxcdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuLVxcdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xcbi1cXHRmbHVzaF93b3JrcXVldWUocGVlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xcbi1cXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4tXFx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuK1xcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXFxuIFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdCAqL1xcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSk7XFxuIFxcbi1cXHQvKiBFbnN1cmUgYW55IHdvcmtzdHJ1Y3RzIHdlIG93biAobGlrZSB0cmFuc21pdF9oYW5kc2hha2Vfd29yayBvclxcbi1cXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxcbitcXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcXG4rXFx0ICogcGVlci1vd25lZCBoYW5kc2hha2Ugd29yayBpcyBubyBsb25nZXIgaW4gdXNlLlxcbiBcXHQgKi9cXG4tXFx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlaGFuZHNoYWtlX3NlbmRfd3EpO1xcbitcXHRmbHVzaF93b3JrKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XFxuIFxcbiBcXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xcbiBcXHQgKiBkaWZmZXJlbnQgY29udGV4dHM6IDEpIGZyb20geG1pdCgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkIGFuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xcbiBzdHJ1Y3Qgd2dfcGVlciB7XFxuIFxcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcXG4gXFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xcbitcXHRhdG9taWNfdCBwYWNrZXRfY3J5cHRfcGVuZGluZztcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xcbiBcXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xcbiBcXHRib29sIGlzX2RlYWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi5mZGQzNGYwZjE1YTZiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdF9iaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpXFxuIFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZQQUNLRVRfUEVFUihza2IpLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XFxuIFxcbiBcXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxcbiBcXHQgKiBwYWNrZXQgYXMgc29vbiBhcyBpdCBjYW4uXFxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcXHUwMDI2cGVlci1cXHUwMDNlc2VyaWFsX3dvcmtfY3B1LCBwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCksXFxuIFxcdFxcdCAgICAgIHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGFja2V0X2NyeXB0X3dxLCBcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbitcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxcbitcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xcbiBcXHR3Z19wZWVyX3B1dChwZWVyKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDYgKzE5OCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XFxuIFxcbiBcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNlBBQ0tFVF9DQihza2IpLVxcdTAwM2VzdGF0ZSwgc3RhdGUpO1xcbiBcXHRuYXBpX3NjaGVkdWxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4rXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcXG4rXFx0XFx0d2FrZV91cF92YXIoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gXFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM4OjUyLjYzMDAwNzcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTc0MjcyOTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19zZXRfZGV2aWNlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzgzNjMwMDM2NjZlZWUwNWU4Y2EzZTU4NmUzNmZjNTlhNWZlNWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMDozODo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5pbmRleCAxY2I1MDJhOTMyZTA3Li5mN2E5YzQzN2I1Yjg2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2NrZGVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuIFxuIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGVlcl9jYWNoZTtcbiBzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xuQEAgLTQ5LDYgKzUwLDggQEAgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxuIFx0SU5JVF9XT1JLKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmssIHdnX3BhY2tldF90eF93b3JrZXIpO1xuIFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNldHhfcXVldWUpO1xuIFx0d2dfcHJldl9xdWV1ZV9pbml0KFx1MDAyNnBlZXItXHUwMDNlcnhfcXVldWUpO1xuK1x0LyogS2VlcCB0aGlzIGFib3ZlIHplcm8gdW50aWwgdGVhcmRvd24gcHJldmVudHMgbmV3IHBhY2tldCBoYW5kb2Zmcy4gKi9cbitcdGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZwZWVyLVx1MDAzZWVuZHBvaW50X2xvY2spO1xuIFx0a3JlZl9pbml0KFx1MDAyNnBlZXItXHUwMDNlcmVmY291bnQpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZWVyLVx1MDAzZXN0YWdlZF9wYWNrZXRfcXVldWUpO1xuQEAgLTEwNSwyOCArMTA4LDI3IEBAIHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXG4gXHQgKi9cbiBcdHdnX3RpbWVyc19zdG9wKHBlZXIpO1xuIFxuLVx0LyogVGhlIHRyYW5zaXRpb24gYmV0d2VlbiBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHF1ZXVlcyBpc24ndFxuLVx0ICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UncyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnlcbi1cdCAqIHR3byBnZW5lcmF0aW9uczogb25jZSBmb3IgcGFyYWxsZWwgY3J5cHRvIGFuZCBvbmNlIGZvciBzZXJpYWxcbi1cdCAqIGluZ2VzdGlvbiwgc28gd2UgY2FuIHNpbXBseSBmbHVzaCB0d2ljZSwgYW5kIGJlIHN1cmUgdGhhdCB3ZSBub1xuLVx0ICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLlxuK1x0LyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZVxuK1x0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXG4rXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXG4rXHQgKiB0byBmaW5pc2ggc2NoZWR1bGluZyB0aGVpciBzZXJpYWwgVFggd29yayBvciBSWCBOQVBJIHByb2Nlc3NpbmcuXG4gXHQgKi9cbitcdGF0b21pY19kZWMoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4rXHR3YWl0X3Zhcl9ldmVudChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLFxuK1x0XHQgICAgICAgIWF0b21pY19yZWFkX2FjcXVpcmUoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpO1xuK1xuK1x0Zmx1c2hfd29yayhcdTAwMjZwZWVyLVx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrKTtcbiBcbi1cdC8qIGEpIEZvciBlbmNyeXB0L2RlY3J5cHQuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMSkgRm9yIHNlbmQgKGJ1dCBub3QgcmVjZWl2ZSwgc2luY2UgdGhhdCdzIG5hcGkpLiAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSk7XG4tXHQvKiBiLjIuMSkgRm9yIHJlY2VpdmUgKGJ1dCBub3Qgc2VuZCwgc2luY2UgdGhhdCdzIHdxKS4gKi9cbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuLVx0LyogYi4yLjEpIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4rXHQvKiBJdCdzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGUgbmFwaSBzdHJ1Y3QsIHdoaWNoIG11c3QgYmUgZG9uZVxuIFx0ICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiBcdCAqL1xuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbiBcbi1cdC8qIEVuc3VyZSBhbnkgd29ya3N0cnVjdHMgd2Ugb3duIChsaWtlIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrIG9yXG4tXHQgKiBjbGVhcl9wZWVyX3dvcmspIG5vIGxvbmdlciBhcmUgaW4gdXNlLlxuK1x0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXG4rXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXG4gXHQgKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VoYW5kc2hha2Vfc2VuZF93cSk7XG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmspO1xuIFxuIFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcbiBcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbmluZGV4IDcxOGZiNDJiZGFjN2UuLjY0NDEyYzY3ZjQxMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oXG5AQCAtMzcsNiArMzcsNyBAQCBzdHJ1Y3QgZW5kcG9pbnQge1xuIHN0cnVjdCB3Z19wZWVyIHtcbiBcdHN0cnVjdCB3Z19kZXZpY2UgKmRldmljZTtcbiBcdHN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTtcbitcdGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlO1xuIFx0aW50IHNlcmlhbF93b3JrX2NwdTtcbiBcdGJvb2wgaXNfZGVhZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5pbmRleCA3OWI2ZDcwZGUyMzZiLi5mZGQzNGYwZjE1YTZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oXG5AQCAtMTEsNiArMTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG4gXG4gc3RydWN0IHdnX2RldmljZTtcbkBAIC0xNjEsNiArMTYyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoIXdnX3ByZXZfcXVldWVfZW5xdWV1ZShwZWVyX3F1ZXVlLCBza2IpKSlcbiBcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXHRhdG9taWNfaW5jKFx1MDAyNlBBQ0tFVF9QRUVSKHNrYiktXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFxuIFx0LyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGVcbiBcdCAqIHBhY2tldCBhcyBzb29uIGFzIGl0IGNhbi5cbkBAIC0xODIsNiArMTg0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRcbiBcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZQQUNLRVRfQ0Ioc2tiKS1cdTAwM2VzdGF0ZSwgc3RhdGUpO1xuIFx0cXVldWVfd29ya19vbih3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoXHUwMDI2cGVlci1cdTAwM2VzZXJpYWxfd29ya19jcHUsIHBlZXItXHUwMDNlaW50ZXJuYWxfaWQpLFxuIFx0XHQgICAgICBwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EsIFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuK1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZykpXG4rXHRcdHdha2VfdXBfdmFyKFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpO1xuIFx0d2dfcGVlcl9wdXQocGVlcik7XG4gfVxuIFxuQEAgLTE5NCw2ICsxOTgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozODo1Mi42MzAwMDkxMjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODkwNDYwNjgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgUGF0Y2ggQW5hbHlzaXMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBXaXJlR3VhcmQgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2Ugc3RhbmRhcmQga2VybmVsIHBhdGNoIHJldmlldywgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvd2FyZHMgc3l6a2FsbGVyIGZ1enppbmcuIEEgcXVpY2sgcmlzayBhbmFseXNpcyBzYXlzIHRoaXMgaXMgYmVuaWduLCBqdXN0IGNvZGUgZXZhbHVhdGlvbiBhbmQgbWFpbnRlbmFuY2UuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG1lYXQgb2YgaXQuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIGhhbmRsaW5nIG9mIGB3Z19wZWVyYCB0ZWFyZG93biBhbmQgaG93IGl0IGNvb3JkaW5hdGVzIHdpdGggdGhlIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzLiBQcmV2aW91c2x5LCB3ZSBoYWQgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMsIGJ1dCBub3cgdGhleSdyZSBhZGRpbmcgYGF0b21pY190IHBhY2tldF9jcnlwdF9wZW5kaW5nYCwgaW5jcmVtZW50aW5nLCBkZWNyZW1lbnRpbmcsIGFuZCB3YWl0aW5nLiBUaGV5J3JlIGFsc28gZmx1c2hpbmcgaW5kaXZpZHVhbCB3b3JrIGl0ZW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc3luY2hyb25pemF0aW9uIGNoYW5nZSwgZGlyZWN0bHkgaW4gdGhlIGNvcmUgV2lyZUd1YXJkIGRyaXZlciBjb2RlLlxuXG5UaGUgZmFjdCB0aGF0IHRoaXMgdG91Y2hlcyB0aGUgY29yZSBXaXJlR3VhcmQgY29kZSBpcyBpbnRlcmVzdGluZy4gV2lyZUd1YXJkIGlzIHBlcmZlY3QgZm9yIGZ1enppbmcuIEl0J3MgYSBzb2Z0d2FyZSBWUE4gdHVubmVsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBhbmQgcnVucyBmaW5lIGluIFFFTVUgd2l0aG91dCBuZWVkaW5nIHNwZWNpYWwgaGFyZHdhcmUuIFdlIGNhbiBkZWZpbml0ZWx5IHJlYWNoIHRoaXMgY29kZSwgYW5kIGl0J3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gV2UgbmVlZCB0byBnbyBmb3IgdGhpcy5cblxuU28sIG5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgV2lyZUd1YXJkIGFuZCBuZXR3b3JrIGdlbmVyYWxseSB0byBmaW5kIHRob3NlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIG9uIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYW5kIGBuZXQvS2NvbmZpZ2AgdG8gZG8gc28uIEknbGwgbmVlZCB0aGVzZSBjb25maWdzIGZvciBzeXprYWxsZXIgdG8gYnVpbGQgYSByZXByb2R1Y2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzEuNTM0NjE4MzU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE2MjAsIkVycm9yIjoidGhlIGZpbGUgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTozMS41MzQ2NjEwNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ5Njg2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipGaW5kaW5nIHRoZSBXaXJlR3VhcmQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoaXMgc29ydGVkLiBJIG5lZWQgdG8gbG9jYXRlIHRoZSBgV2lyZUd1YXJkYCBLY29uZmlnIGZpbGUuIE5vIG5lZWQgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLCBJJ2xsIGxldmVyYWdlIGBncmVwcGVyYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIHF1aWNrZXN0IGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8gcGlucG9pbnQgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aXRoaW4gYSBwcm9qZWN0LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLiBJIGtub3cgdGhlIHN0YW5kYXJkIHRvb2xpbmcsIHNvIGxldCdzIGdldCByaWdodCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6MzMuMjg0MzQ4OTczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjc2MTY1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdJUkVHVUFSRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTU5PWNvbmZpZyBEVU1NWVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjc0OmNvbmZpZyBXSVJFR1VBUkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVxcdHRyaXN0YXRlIFxcXCJXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05MS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjkyOmNvbmZpZyBXSVJFR1VBUkRfREVCVUdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTkzLVxcdGJvb2wgXFxcIkRlYnVnZ2luZyBjaGVja3MgYW5kIHZlcmJvc2UgbWVzc2FnZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM1LjAxMTk2OTk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MjE3NzQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBhbmQgSSdtIHplcm9pbmcgaW4gb24gbGluZSA3My4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBob2xkcyBzb21lIGtleSBpbmZvcm1hdGlvbiDigJMgcGVyaGFwcyBhIGNvcmUgbmV0d29yayBmZWF0dXJlLCBhIHZpdGFsIGRyaXZlciBvcHRpb24sIG9yIG1heWJlIGV2ZW4gYSBjcml0aWNhbCBkZXBlbmRlbmN5LiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSB3aGVyZSBhIHNpZ25pZmljYW50IG5ldHdvcmsgc2V0dGluZyBvciBjb25kaXRpb25hbCBkcml2ZXIgaW5jbHVzaW9uIGlzIGRlZmluZWQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIHVuZWFydGggdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTozNy43NTQxNDkzOThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDcwOlxcdFxcbiAgNzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA3MjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGR1bW15LlxcbiAgNzM6XFx0XFxuICA3NDpcXHRjb25maWcgV0lSRUdVQVJEXFxuICA3NTpcXHRcXHR0cmlzdGF0ZSBcXFwiV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFxcXCJcXG4gIDc2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDc3OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgNzg6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgNzk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOVxcbiAgODA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNVxcbiAgODE6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjXFxuICA4NDpcXHRcXHQgIHRoYXQgdXNlcyBtb2Rlcm4gY3J5cHRvZ3JhcGh5IGFuZCBjbGV2ZXIgbmV0d29ya2luZyB0cmlja3MuIEl0J3NcXG4gIDg1OlxcdFxcdCAgZGVzaWduZWQgdG8gYmUgZmFpcmx5IGdlbmVyYWwgcHVycG9zZSBhbmQgYWJzdHJhY3QgZW5vdWdoIHRvIGZpdCBtb3N0XFxuICA4NjpcXHRcXHQgIHVzZSBjYXNlcywgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSByZW1haW5pbmcgZXh0cmVtZWx5IHNpbXBsZSB0b1xcbiAgODc6XFx0XFx0ICBjb25maWd1cmUuIFNlZSB3d3cud2lyZWd1YXJkLmNvbSBmb3IgbW9yZSBpbmZvLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIEl0J3Mgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUsIGFzIHRoZSBkcml2ZXIgaXMgdmVyeSBsaWdodHdlaWdodCBhbmRcXG4gIDkwOlxcdFxcdCAgaXMgb25seSBpbiB1c2Ugd2hlbiBhbiBhZG1pbmlzdHJhdG9yIGNob29zZXMgdG8gYWRkIGFuIGludGVyZmFjZS5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbiAgOTM6XFx0XFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG4gIDk0OlxcdFxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuICA5NTpcXHRcXHRoZWxwXFxuICA5NjpcXHRcXHQgIFRoaXMgd2lsbCB3cml0ZSBsb2cgbWVzc2FnZXMgZm9yIGhhbmRzaGFrZSBhbmQgb3RoZXIgZXZlbnRzXFxuICA5NzpcXHRcXHQgIHRoYXQgb2NjdXIgZm9yIGEgV2lyZUd1YXJkIGludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHBlcmZvcm0gc29tZVxcbiAgOTg6XFx0XFx0ICBleHRyYSB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdW5pdCB0ZXN0cyBhdCB2YXJpb3VzIHBvaW50cy4gVGhpcyBpc1xcbiAgOTk6XFx0XFx0ICBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxcbiAxMDA6XFx0XFxuIDEwMTpcXHRcXHQgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRjb25maWcgT1ZQTlxcbiAxMDQ6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcXFwiXFxuIDEwNTpcXHRcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuIDEwNjpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDEwNzpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gMTA4OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gMTA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjM3Ljc1NDIzMzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDY0Mzc2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaXJlR3VhcmQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYXQgbGVhc3QgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgc3BlY2lmaWMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsIHRyZWUuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBtb2R1bGUgaW5zdGFsbGF0aW9uIGRpcmVjdGl2ZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgbG9naWMgdGhhdCdzIHNwZWNpZmljIHRvIFdpcmVHdWFyZC4gSSBzaG91bGQgcXVpY2tseSBzY2FuIGZvciBpbmNsdWRlIGRpcmVjdGl2ZXMsIHNvdXJjZSBmaWxlIGxpc3RzLCBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIHJ1bGVzLCBhbmQgaG93IHRoZSBtb2R1bGUgaXMgdWx0aW1hdGVseSBsaW5rZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9ucyBJJ20gcGxhbm5pbmcuIEkgc2hvdWxkIGFsc28gYmUgbWluZGZ1bCBvZiBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyB0aGF0IFdpcmVHdWFyZCBtaWdodCBsZXZlcmFnZS4gVWx0aW1hdGVseSwgdGhlIE1ha2VmaWxlIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgV2lyZUd1YXJkIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHNvIGl0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjQwLjc2MDY3NzUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRjY2ZsYWdzLXkgOj0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXQnXFxuICAgMjpcXHRjY2ZsYWdzLSQoQ09ORklHX1dJUkVHVUFSRF9ERUJVRykgKz0gLURERUJVR1xcbiAgIDM6XFx0d2lyZWd1YXJkLXkgOj0gbWFpbi5vXFxuICAgNDpcXHR3aXJlZ3VhcmQteSArPSBub2lzZS5vXFxuICAgNTpcXHR3aXJlZ3VhcmQteSArPSBkZXZpY2Uub1xcbiAgIDY6XFx0d2lyZWd1YXJkLXkgKz0gcGVlci5vXFxuICAgNzpcXHR3aXJlZ3VhcmQteSArPSB0aW1lcnMub1xcbiAgIDg6XFx0d2lyZWd1YXJkLXkgKz0gcXVldWVpbmcub1xcbiAgIDk6XFx0d2lyZWd1YXJkLXkgKz0gc2VuZC5vXFxuICAxMDpcXHR3aXJlZ3VhcmQteSArPSByZWNlaXZlLm9cXG4gIDExOlxcdHdpcmVndWFyZC15ICs9IHNvY2tldC5vXFxuICAxMjpcXHR3aXJlZ3VhcmQteSArPSBwZWVybG9va3VwLm9cXG4gIDEzOlxcdHdpcmVndWFyZC15ICs9IGFsbG93ZWRpcHMub1xcbiAgMTQ6XFx0d2lyZWd1YXJkLXkgKz0gcmF0ZWxpbWl0ZXIub1xcbiAgMTU6XFx0d2lyZWd1YXJkLXkgKz0gY29va2llLm9cXG4gIDE2OlxcdHdpcmVndWFyZC15ICs9IG5ldGxpbmsubyBnZW5lcmF0ZWQvbmV0bGluay5vXFxuICAxNzpcXHRvYmotJChDT05GSUdfV0lSRUdVQVJEKSA6PSB3aXJlZ3VhcmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0MC43NjA3NDAzMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwMzMxMzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgS2VybmVsIE1vZHVsZSBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFdpcmVHdWFyZCBzdHVmZiBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoZSBjb3JlIGNvbmZpZyBmbGFnIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBpcyBgQ09ORklHX1dJUkVHVUFSRGAuIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHMsIGBORVRgIGFuZCBgSU5FVGAsIGp1c3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3ZlcmFyY2hpbmcgZGVwZW5kZW5jaWVzLCBidXQgYFdJUkVHVUFSRGAgaXMgY2xlYXJseSB0aGUgY3JpdGljYWwgb25lIGhlcmUuXG5cbk5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucywgdGhlIGVudHJ5IHBvaW50cywgdGhlIG5vbi1zdGF0aWMgb25lcyB0aGF0IEkgY2FuIHVzZSB0byBidWlsZCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiB0aGUgc3ltYm9scyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNgIGFuZCBpdHMgcmVsYXRlZCBmaWxlcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgYHBlZXIuY2AgZmlsZSBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gU28sIGxldCdzIGNhcmVmdWxseSBkaXNzZWN0IHRoYXQsIGxvb2tpbmcgZm9yIHRoZSByaWdodCBjYW5kaWRhdGVzIHRvIGluY2x1ZGUgaW4gbXkgRm9jdXNTeW1ib2xzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0My4wNjQwNTYzNDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgXFx1MDAzY0phc29uQHp4MmM0LmNvbVxcdTAwM2UuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICAgNDpcXHQgKi9cXG4gICA1OlxcdFxcbiAgIDY6XFx0I2luY2x1ZGUgXFxcInBlZXIuaFxcXCJcXG4gICA3OlxcdCNpbmNsdWRlIFxcXCJkZXZpY2UuaFxcXCJcXG4gICA4OlxcdCNpbmNsdWRlIFxcXCJxdWV1ZWluZy5oXFxcIlxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcInRpbWVycy5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcInBlZXJsb29rdXAuaFxcXCJcXG4gIDExOlxcdCNpbmNsdWRlIFxcXCJub2lzZS5oXFxcIlxcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvY2tkZXAuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBlZXJfY2FjaGU7XFxuICAyMDpcXHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuICAyMzpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuICAyNDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlcjtcXG4gIDI3OlxcdFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKHdnLVxcdTAwM2VudW1fcGVlcnMgXFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXFxuICAzMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkoIXBlZXIpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDM3OlxcdFxcdGlmICh1bmxpa2VseShkc3RfY2FjaGVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcXG4gIDM4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRwZWVyLVxcdTAwM2VkZXZpY2UgPSB3ZztcXG4gIDQxOlxcdFxcdHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VoYW5kc2hha2UsIFxcdTAwMjZ3Zy1cXHUwMDNlc3RhdGljX2lkZW50aXR5LFxcbiAgNDI6XFx0XFx0XFx0XFx0XFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XFxuICA0MzpcXHRcXHRwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnBlZXJfY291bnRlcik7XFxuICA0NDpcXHRcXHRwZWVyLVxcdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XFxuICA0NTpcXHRcXHR3Z19jb29raWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlbGF0ZXN0X2Nvb2tpZSk7XFxuICA0NjpcXHRcXHR3Z190aW1lcnNfaW5pdChwZWVyKTtcXG4gIDQ3OlxcdFxcdHdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfcGVlcl9rZXlzKHBlZXIpO1xcbiAgNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xcbiAgNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuICA1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG4gIDUxOlxcdFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiAgNTI6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuICA1MzpcXHRcXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xcbiAgNTQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiAgNTU6XFx0XFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiAgNTY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWZjb3VudCk7XFxuICA1NzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG4gIDU4OlxcdFxcdHdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoXFx1MDAyNnBlZXItXFx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xcbiAgNTk6XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgNjA6XFx0XFx0bmV0aWZfbmFwaV9hZGQod2ctXFx1MDAzZWRldiwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcXG4gIDYxOlxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gIDYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCwgXFx1MDAyNndnLVxcdTAwM2VwZWVyX2xpc3QpO1xcbiAgNjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlZXItXFx1MDAzZWFsbG93ZWRpcHNfbGlzdCk7XFxuICA2NDpcXHRcXHR3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZCh3Zy1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgNjU6XFx0XFx0Kyt3Zy1cXHUwMDNlbnVtX3BlZXJzO1xcbiAgNjY6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBQZWVyICVsbHUgY3JlYXRlZFxcXFxuXFxcIiwgd2ctXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgcGVlci1cXHUwMDNlaW50ZXJuYWxfaWQpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIHBlZXI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdGVycjpcXG4gIDcwOlxcdFxcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcXG4gIDcxOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICA3MjpcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXFxuICA3NzpcXHRcXHRcXHRcXHQgXFxcIlRha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcXFwiKTtcXG4gIDc4OlxcdFxcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KSkpXFxuICA3OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDgwOlxcdFxcdHJldHVybiBwZWVyO1xcbiAgODE6XFx0fVxcbiAgODI6XFx0XFxuICA4MzpcXHRzdGF0aWMgdm9pZCBwZWVyX21ha2VfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4gIDg0OlxcdHtcXG4gIDg1OlxcdFxcdC8qIFJlbW92ZSBmcm9tIGNvbmZpZ3VyYXRpb24tdGltZSBsb29rdXAgc3RydWN0dXJlcy4gKi9cXG4gIDg2OlxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCk7XFxuICA4NzpcXHRcXHR3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKFxcdTAwMjZwZWVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXBlZXJfYWxsb3dlZGlwcywgcGVlcixcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDg5OlxcdFxcdHdnX3B1YmtleV9oYXNodGFibGVfcmVtb3ZlKHBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHQvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi9cXG4gIDkyOlxcdFxcdFdSSVRFX09OQ0UocGVlci1cXHUwMDNlaXNfZGVhZCwgdHJ1ZSk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdC8qIFRoZSBjYWxsZXIgbXVzdCBub3cgc3luY2hyb25pemVfbmV0KCkgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuICovXFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyB2b2lkIHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRXQVJOX09OKCFwZWVyLVxcdTAwM2Vpc19kZWFkKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0My4wNjQxNTc5MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg1NjIwNTYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYC4gVGhlIGNvcmUgcGVlciBoYW5kbGluZyBsb2dpYyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgcGVlciBzdGF0ZSwgaGFuZGxpbmcga2V5IGV4Y2hhbmdlcyAob3IgbGFjayB0aGVyZW9mLCBpZiB0aGV5J3JlIHByZS1zaGFyZWQga2V5cyksIGFuZCBkaXJlY3RpbmcgdHJhZmZpYy4gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGNyeXB0b2dyYXBoaWMgaGFuZHNoYWtlcyBhbmQgcGFja2V0IHByb2Nlc3Npbmcgd2lsbCBtYW5pZmVzdC4gSSB3YW50IHRvIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGtleSB1cGRhdGVzIGFuZCBjb25uZWN0aW9uIGxpZmVjeWNsZSBldmVudHMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkndmUgc3RydWN0dXJlZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHRoZSBgd2dfcGVlcmAgc3RydWN0LCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjay4gSSdtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucywgbGlrZSB3aGV0aGVyIHRoZXkgYXJlIHVzaW5nIGFueSB6ZXJvLWNvcHkgbWVjaGFuaXNtcyBvciBvdGhlciBvcHRpbWl6YXRpb25zLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwZWVyIG1hbmFnZW1lbnQgYXNwZWN0LiBJJ20gcmVhZHkgdG8gZmluZCBvdXQgaG93IHRoZXkgcHV0IGl0IGFsbCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NDUuOTIwMzY2ODNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdC8qIE5vIG1vcmUga2V5cGFpcnMgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoaXMgcGVlciwgc2luY2UgaXNfZGVhZCBwcm90ZWN0c1xcbiAxMDI6XFx0XFx0ICogYWRkX25ld19rZXlwYWlyLCBzbyB3ZSBjYW4gbm93IGRlc3Ryb3kgZXhpc3Rpbmcgb25lcy5cXG4gMTAzOlxcdFxcdCAqL1xcbiAxMDQ6XFx0XFx0d2dfbm9pc2Vfa2V5cGFpcnNfY2xlYXIoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzKTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0LyogRGVzdHJveSBhbGwgb25nb2luZyB0aW1lcnMgdGhhdCB3ZXJlIGluLWZsaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mXFxuIDEwNzpcXHRcXHQgKiB0aGlzIGZ1bmN0aW9uLlxcbiAxMDg6XFx0XFx0ICovXFxuIDEwOTpcXHRcXHR3Z190aW1lcnNfc3RvcChwZWVyKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0XFx0LyogTG9va3VwIHJlbW92YWwgYW5kIGlzX2RlYWQgcHJldmVudCBuZXcgcGFja2V0cyBmcm9tIGVudGVyaW5nIHRoZVxcbiAxMTI6XFx0XFx0ICogcGFyYWxsZWwgY3J5cHRvIHF1ZXVlcyBhZnRlciBzeW5jaHJvbml6ZV9uZXQoKSB3YWl0cyBmb3IgcHJlLWV4aXN0aW5nXFxuIDExMzpcXHRcXHQgKiBzdWJtaXNzaW9uIHBhdGhzLiBEcm9wIHRoZSBpbml0aWFsIGNvdW50IGFuZCB3YWl0IGZvciBleGlzdGluZyBwYWNrZXRzXFxuIDExNDpcXHRcXHQgKiB0byBmaW5pc2ggc2NoZWR1bGluZyB0aGVpciBzZXJpYWwgVFggd29yayBvciBSWCBOQVBJIHByb2Nlc3NpbmcuXFxuIDExNTpcXHRcXHQgKi9cXG4gMTE2OlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcXG4gMTE3OlxcdFxcdHdhaXRfdmFyX2V2ZW50KFxcdTAwMjZwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyxcXG4gMTE4OlxcdFxcdFxcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKTtcXG4gMTE5OlxcdFxcbiAxMjA6XFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbiAxMjM6XFx0XFx0LyogSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcXG4gMTI0OlxcdFxcdCAqIGhlcmUgZnJvbSBwcm9jZXNzIGNvbnRleHQuXFxuIDEyNTpcXHRcXHQgKi9cXG4gMTI2OlxcdFxcdG5ldGlmX25hcGlfZGVsKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gMTI3OlxcdFxcbiAxMjg6XFx0XFx0LyogY2xlYXJfcGVlcl93b3JrIHdhcyBmbHVzaGVkIGJ5IHdnX3RpbWVyc19zdG9wKCkuIEVuc3VyZSB0aGUgcmVtYWluaW5nXFxuIDEyOTpcXHRcXHQgKiBwZWVyLW93bmVkIGhhbmRzaGFrZSB3b3JrIGlzIG5vIGxvbmdlciBpbiB1c2UuXFxuIDEzMDpcXHRcXHQgKi9cXG4gMTMxOlxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXdcXG4gMTM0OlxcdFxcdCAqIGRpZmZlcmVudCBjb250ZXh0czogMSkgZnJvbSB4bWl0KCksIGJlZm9yZSBoaXR0aW5nIGlzX2RlYWQgYW5kXFxuIDEzNTpcXHRcXHQgKiByZXR1cm5pbmcsIDIpIGZyb20gd2dfcGFja2V0X2NvbnN1bWVfZGF0YSgpLCBiZWZvcmUgaGl0dGluZyBpc19kZWFkXFxuIDEzNjpcXHRcXHQgKiBhbmQgcmV0dXJuaW5nLCAzKSBmcm9tIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldCgpIGFmdGVyIGEgcG9pbnRcXG4gMTM3OlxcdFxcdCAqIHdoZXJlIGl0IGhhcyBwcm9jZXNzZWQgYW4gaW5jb21pbmcgaGFuZHNoYWtlIHBhY2tldCwgYnV0IHdoZXJlXFxuIDEzODpcXHRcXHQgKiBhbGwgY2FsbHMgdG8gcGFzcyBpdCBvZmYgdG8gdGltZXJzIGZhaWxzIGJlY2F1c2Ugb2YgaXNfZGVhZC4gV2Ugd29uJ3RcXG4gMTM5OlxcdFxcdCAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tXFxuIDE0MDpcXHRcXHQgKiBhbGxvd2VkaXBzOyB3ZSB3b24ndCBoYXZlIG5ldyByZWZlcmVuY2VzIGluICgyKSBldmVudHVhbGx5LCBiZWNhdXNlXFxuIDE0MTpcXHRcXHQgKiB3Z19pbmRleF9oYXNodGFibGVfbG9va3VwIHdpbGwgYWx3YXlzIHJldHVybiBOVUxMLCBzaW5jZSB3ZSByZW1vdmVkXFxuIDE0MjpcXHRcXHQgKiBhbGwgZXhpc3Rpbmcga2V5cGFpcnMgYW5kIG5vIG1vcmUgY2FuIGJlIGNyZWF0ZWQ7IHdlIHdvbid0IGhhdmUgbmV3XFxuIDE0MzpcXHRcXHQgKiByZWZlcmVuY2VzIGluICgzKSBldmVudHVhbGx5LCBiZWNhdXNlIHdlJ3JlIHJlbW92ZWQgZnJvbSB0aGUgcHVia2V5XFxuIDE0NDpcXHRcXHQgKiBoYXNoIHRhYmxlLCB3aGljaCBhbGxvd3MgZm9yIGEgbWF4aW11bSBvZiBvbmUgaGFuZHNoYWtlIHJlc3BvbnNlLFxcbiAxNDU6XFx0XFx0ICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsXFxuIDE0NjpcXHRcXHQgKiBhbmQgaW4gd2dfY29va2llX21lc3NhZ2VfY29uc3VtZSwgdGhlIGxvb2t1cCBldmVudHVhbGx5IGdldHMgYSBwZWVyXFxuIDE0NzpcXHRcXHQgKiB3aXRoIGEgcmVmY291bnQgb2YgemVybywgc28gbm8gbmV3IHJlZmVyZW5jZSBpcyB0YWtlbi5cXG4gMTQ4OlxcdFxcdCAqL1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHQtLXBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlbnVtX3BlZXJzO1xcbiAxNTE6XFx0XFx0d2dfcGVlcl9wdXQocGVlcik7XFxuIDE1MjpcXHR9XFxuIDE1MzpcXHRcXG4gMTU0OlxcdC8qIFdlIGhhdmUgYSBzZXBhcmF0ZSBcXFwicmVtb3ZlXFxcIiBmdW5jdGlvbiBtYWtlIHN1cmUgdGhhdCBhbGwgYWN0aXZlIHBsYWNlcyB3aGVyZVxcbiAxNTU6XFx0ICogYSBwZWVyIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYW4gZW5kIGFuZCBub3QgcGFzc1xcbiAxNTY6XFx0ICogdGhlaXIgcmVmZXJlbmNlIG9udG8gYW5vdGhlciBjb250ZXh0LlxcbiAxNTc6XFx0ICovXFxuIDE1ODpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0aWYgKHVubGlrZWx5KCFwZWVyKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybjtcXG4gMTYyOlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnBlZXItXFx1MDAzZWRldmljZS1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cGVlcl9tYWtlX2RlYWQocGVlcik7XFxuIDE2NTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTY2OlxcdFxcdHBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7XFxuIDE2NzpcXHR9XFxuIDE2ODpcXHRcXG4gMTY5OlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKVxcbiAxNzA6XFx0e1xcbiAxNzE6XFx0XFx0c3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wO1xcbiAxNzI6XFx0XFx0TElTVF9IRUFEKGRlYWRfcGVlcnMpO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0LyogQXZvaWQgaGF2aW5nIHRvIHRyYXZlcnNlIGluZGl2aWR1YWxseSBmb3IgZWFjaCBvbmUuICovXFxuIDE3NzpcXHRcXHR3Z19hbGxvd2VkaXBzX2ZyZWUoXFx1MDAyNndnLVxcdTAwM2VwZWVyX2FsbG93ZWRpcHMsIFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gMTc4OlxcdFxcbiAxNzk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsIFxcdTAwMjZ3Zy1cXHUwMDNlcGVlcl9saXN0LCBwZWVyX2xpc3QpIHtcXG4gMTgwOlxcdFxcdFxcdHBlZXJfbWFrZV9kZWFkKHBlZXIpO1xcbiAxODE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGVlci1cXHUwMDNlcGVlcl9saXN0LCBcXHUwMDI2ZGVhZF9wZWVycyk7XFxuIDE4MjpcXHRcXHR9XFxuIDE4MzpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gMTg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCBcXHUwMDI2ZGVhZF9wZWVycywgcGVlcl9saXN0KVxcbiAxODU6XFx0XFx0XFx0cGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChwZWVyKTtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0c3RhdGljIHZvaWQgcmN1X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuIDE4OTpcXHR7XFxuIDE5MDpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCB3Z19wZWVyLCByY3UpO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUpO1xcbiAxOTM6XFx0XFx0V0FSTl9PTih3Z19wcmV2X3F1ZXVlX3BlZWsoXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlKSB8fCB3Z19wcmV2X3F1ZXVlX3BlZWsoXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlKSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdC8qIFRoZSBmaW5hbCB6ZXJvaW5nIHRha2VzIGNhcmUgb2YgY2xlYXJpbmcgYW55IHJlbWFpbmluZyBoYW5kc2hha2Uga2V5XFxuIDE5NjpcXHRcXHQgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxcbiAxOTc6XFx0XFx0ICovXFxuIDE5ODpcXHRcXHRtZW16ZXJvX2V4cGxpY2l0KHBlZXIsIHNpemVvZigqcGVlcikpO1xcbiAxOTk6XFx0XFx0a21lbV9jYWNoZV9mcmVlKHBlZXJfY2FjaGUsIHBlZXIpO1xcbiAyMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDozOTo0NS45MjA0NTQ5NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjExMDgwNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aG9zZSBgd2dfcXVldWVfKmAgZnVuY3Rpb25zLCBhcyBpZiBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIFdpcmVHdWFyZCBRdWV1ZSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGxldCdzIHNlZSwgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIFdpcmVHdWFyZCBxdWV1ZWluZyBzeXN0ZW0gaXMgd29ya2luZy4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRocyByZWxhdGVkIHRvIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXJgLCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eGAsIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnF1ZXVlIGZ1bmN0aW9ucywgc28gdW5kZXJzdGFuZGluZyB0aGVpciBjb250ZXh0IGlzIHBhcmFtb3VudC5cblxuRmlyc3QgdGhpbmcncyBmaXJzdDogSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxsIHNpdGVzIG9mIHRob3NlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHdpcmVndWFyZCBjb2RlYmFzZS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSdyZSBiZWluZyBpbnZva2VkLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhleSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dD8gRnJvbSB0YXNrbGV0cz8gRnJvbSB3aXRoaW4gbmV0ZmlsdGVyIGhvb2tzPyBLbm93aW5nIHRoZSAqd2hlcmUqIGlzIGFic29sdXRlbHkgY3JpdGljYWwuXG5cbkJleW9uZCB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIEknbSBhbHNvIGdvaW5nIHRvIGlkZW50aWZ5IGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgZW5xdWV1ZSBmdW5jdGlvbnMuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IG9ubHkgd2hvICpjYWxscyogdGhlbSwgYnV0IGFsc28gd2hvICp0b3VjaGVzKiB0aGVtLCBmb3IgZXhhbXBsZSwgZnVuY3Rpb25zIHRoYXQgcGFzcyBhIGRhdGEgc3RydWN0dXJlIHRvIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBpZGVudGlmeSB0aGUgZnVsbCBzY29wZSBvZiBmdW5jdGlvbnMgdGhhdCByZWx5IG9uIGFuZCBpbmZsdWVuY2UgdGhlIHF1ZXVlaW5nIGxvZ2ljLiBCeSBtYXBwaW5nIHRoZSBmdWxsIHJhbmdlIG9mIHJlbGF0ZWQgZnVuY3Rpb25zLCBJIGNhbiB1bmRlcnN0YW5kIGFsbCB0aGUgcG9pbnRzIGluIGNvZGUgdGhhdCBoYXZlIGFuIGltcGFjdCBvbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBxdWV1ZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjM5OjUzLjEzMTUzNzczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3NDQ2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3F1ZXVlX2VucXVldWVfcGVyX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD0xNDg9c3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTUyLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjE1MzpzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTU0LVxcdHN0cnVjdCBjcnlwdF9xdWV1ZSAqZGV2aWNlX3F1ZXVlLCBzdHJ1Y3QgcHJldl9xdWV1ZSAqcGVlcl9xdWV1ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE3Ni1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxNzc6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTE5MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDoxOTI6c3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9NDkzPXZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTAyLVxcdFxcdFxcdFxcdFBBQ0tFVF9TVEFURV9DUllQVEVEIDogUEFDS0VUX1NUQVRFX0RFQUQ7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MDM6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeChza2IsIHN0YXRlKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTUwNC1cXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTUwOT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjUtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzo1MjY6XFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcdTAwMjZ3Zy1cXHUwMDNlZGVjcnlwdF9xdWV1ZSwgXFx1MDAyNnBlZXItXFx1MDAzZXJ4X3F1ZXVlLCBza2IsXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjctXFx0XFx0XFx0XFx0XFx0XFx0ICAgd2ctXFx1MDAzZXBhY2tldF9jcnlwdF93cSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MjgtXFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRVBJUEUpKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTI5OlxcdFxcdHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01MzAtXFx0aWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRVBJUEUpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jPTI4Nz12b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMwNC1cXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMDU6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzA2LVxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MzExPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYy0zMTktXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMjA6XFx0cmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKFxcdTAwMjZ3Zy1cXHUwMDNlZW5jcnlwdF9xdWV1ZSwgXFx1MDAyNnBlZXItXFx1MDAzZXR4X3F1ZXVlLCBmaXJzdCxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMS1cXHRcXHRcXHRcXHRcXHRcXHQgICB3Zy1cXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTMyMi1cXHRpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYzozMjM6XFx0XFx0d2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgUEFDS0VUX1NUQVRFX0RFQUQpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMzI0LWVycjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6Mzk6NTQuNzI4OTg4NjA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTA2Nzk3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV2lyZUd1YXJkIENvZGUgUmV2aWV3IERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIHRoaXMgV2lyZUd1YXJkIGNvZGViYXNlLiBGaXJzdCwgSSdsbCBmb2N1cyBvbiB0aGUgY29yZSBwYWNrZXQgaGFuZGxpbmcgcm91dGluZXM6IGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgYnVsbGV0cHJvb2YsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG5ldyBhZHZhbmNlbWVudHMuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFueSB0aHJlYWRpbmcgaXNzdWVzLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUuXG5cblRoZW4sIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUgYSBiaXQgYW5kIHNjYW4gYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgV2lyZUd1YXJkIG1vZHVsZS4gTG9vayBmb3IgYW55IGV4cG9zZWQgZnVuY3Rpb25hbGl0eSBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBiZSBzaWduaWZpY2FudCB0byB1bmRlcnN0YW5kLlxuXG5GaW5hbGx5LCBJIGFic29sdXRlbHkgKm11c3QqIGNoZWNrIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gZW50cnkgcG9pbnRzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHVzZXJsYW5kIGludGVyZmFjZSBsaXZlcywgYW5kIHRoYXQncyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGZvciBib3RoIHNlY3VyaXR5IGFuZCBmdW5jdGlvbmFsaXR5LiBHb3R0YSBlbnN1cmUgdGhvc2UgaW50ZXJmYWNlcyBhcmUgaGFyZGVuZWQgYW5kIHRoYXQgYW55IHByaXZpbGVnZSBlc2NhbGF0aW9uIHBvc3NpYmlsaXRpZXMgYXJlIGlkZW50aWZpZWQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjAwLjQzOTY3MTcwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODgxNTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX3JlbW92ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM9MjQyPXN0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMtMjUzLVxcdC8qIFRoZSBmaW5hbCByZWZlcmVuY2VzIGFyZSBjbGVhcmVkIGluIHRoZSBiZWxvdyBjYWxscyB0byBkZXN0cm95X3dvcmtxdWV1ZS4gKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmM6MjU0OlxcdHdnX3BlZXJfcmVtb3ZlX2FsbCh3Zyk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jLTI1NS1cXHRkZXN0cm95X3dvcmtxdWV1ZSh3Zy1cXHUwMDNlaGFuZHNoYWtlX3JlY2VpdmVfd3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz0zNDA9c3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgV0dQRUVSX0ZfUkVNT1ZFX01FKSB7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo0MDU6XFx0XFx0d2dfcGVlcl9yZW1vdmUocGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy00MDYtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTQ3Mz1pbnQgd2dfc2V0X2RldmljZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxNy1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1MTg6XFx0XFx0d2dfcGVlcl9yZW1vdmVfYWxsKHdnKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTUxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTM5LVxcdFxcdFxcdFxcdHdnX3BlZXJfcHV0KHBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6NTQwOlxcdFxcdFxcdFxcdHdnX3BlZXJfcmVtb3ZlKHBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtNTQxLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9OTc9c3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMTU3LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM6MTU4OnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxNjk6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0xNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaD04MD12b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oOjgxOnZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmg6ODI6dm9pZCB3Z19wZWVyX3JlbW92ZV9hbGwoc3RydWN0IHdnX2RldmljZSAqd2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjAxLjk0ODQ5MTE5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Njc5MjA1MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgV2lyZUd1YXJkIENvZGUgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgV2lyZUd1YXJkIGNvZGViYXNlIGFnYWluLiBGaXJzdCB0aGluZydzIGZpcnN0OiBgd2dfc2V0X2RldmljZV9kb2l0YCBpcyB0aGF0IEdlbmwgRG9JdCBjYWxsYmFjaywgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgbmV0bGluay1iYXNlZCBXaXJlR3VhcmQgY29uZmlndXJhdGlvbi4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYWRkL3VwZGF0ZS9yZW1vdmUgcGVlciBtYWdpYyBoYXBwZW5zIOKAkyBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBmcm9udCBkb29yIGZvciBtYW5hZ2luZyB0aGUgaW50ZXJmYWNlJ3MgcGVlciByZWxhdGlvbnNoaXBzLlxuXG5UaGVuIHRoZXJlJ3MgYHdnX3htaXRgIG92ZXIgaW4gYHNlbmQuY2AuIFJpZ2h0LCB0aGF0J3MgdGhlIHRyYW5zbWlzc2lvbiBwYXRoOiBxdWV1ZWluZyBwYWNrZXRzIGZvciBlbmNyeXB0aW9uLiBNYWtlcyBzZW5zZS4gTm93IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUuLi4gYSBxdWljayBzd2VlcCB0aHJvdWdoIGBzZW5kLmNgIGFuZCBgcmVjZWl2ZS5jYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgcGFja2V0IGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGhhbmRvZmYgcG9pbnRzLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGUgcGFja2V0cyBhcmUgZ2V0dGluZyBpbiBhbmQgb3V0IGFuZCB3aGF0IGVhY2ggcGFydCBkb2VzIG9uIHRoZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTEyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MDcuNjI3Njk5MjA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1NDgwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGRldl90eF90IHdnX3htaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jPTExNT1zdGF0aWMgaW50IHdnX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzYtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jOjEzNzpzdGF0aWMgbmV0ZGV2X3R4X3Qgd2dfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYy0xMzgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDowOS4xMzMxODQ4NDRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE5OTEwNzU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXaXJlR3VhcmQgRnVuY3Rpb24gUmV2aWV3KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIFdpcmVHdWFyZCBjb2RlYmFzZS4gRmlyc3QsIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCBsaXN0IHRob3NlIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQgZm9yIGV4dGVybmFsIHVzZSBvciBhcmUgY3JpdGljYWwgd2l0aGluIHRoZSBrZXJuZWwuIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nOiBgd2dfcGVlcl9jcmVhdGVgLCBgd2dfcGVlcl9yZW1vdmVgLCBgd2dfcGVlcl9yZW1vdmVfYWxsYCwgYHdnX3NldF9kZXZpY2VfZG9pdGAsIGB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXJgLCBgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF90eF93b3JrZXJgLCBgd2dfcGFja2V0X3J4X3BvbGxgLCBhbmQgYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGRlZXBlci4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZWZpbml0aW9uIG9mIGZ1bmN0aW9ucyBzdWNoIGFzIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYW5kIGB3Z19wYWNrZXRfcnhfcG9sbGAsIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMg4oCTIG1ha2luZyBzdXJlIHRoZXNlIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgaGFuZGxlZCBhbmQgdGhlaXIgc2NvcGUgaXMgY29ycmVjdGx5IGRlZmluZWQgd2l0aGluIHRoZSBtb2R1bGUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGV4cG9ydGVkIEFQSSBzdXJmYWNlIGFuZCwgdWx0aW1hdGVseSwgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBvZiB0aGUgV2lyZUd1YXJkIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0OCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoxMS4zMzIyOTQ3NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk2Nzg0NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2dfcGFja2V0X3R4X3dvcmtlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jPTIyPXN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNDktXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo1MDpcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTUxLVxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9NTA9dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg6NTE6dm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtNTItdm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjQyPXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YV9kb25lKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTI2MS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jOjI2Mjp2b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMtMjYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTIuODExOTc3Njc2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzA4NDAwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipEaXZpbmcgaW50byBgd2dfcGFja2V0X3J4X3BvbGxgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBMZXQncyBzZWUuLi4gdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEknbSBmb2N1c2luZyBvbiBgd2dfcGFja2V0X3J4X3BvbGxgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBjbGVhciDigJMgaXQncyBhbGwgYWJvdXQgcG9sbGluZyBmb3IgaW5jb21pbmcgcGFja2V0cyB3aXRoaW4gdGhlIFdpcmVHdWFyZCBjb250ZXh0LCBvYnZpb3VzbHkgZm9yIHJlY2VpdmluZyB0cmFmZmljLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMsIG9mIGNvdXJzZSwgYnV0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIGNsZWFyIGZyb20gdGhlIHRpdGxlLiBOb3csIHdoYXQncyByZWFsbHkgaW1wb3J0YW50IGlzIHdoYXQncyBoYXBwZW5pbmcgKmluc2lkZSogdGhhdCBwb2xsaW5nIGxvb3A6IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHRoZSBpbnRlcnJ1cHQgbWVjaGFuaXNtcywgYW55IHBvdGVudGlhbCBsb2NraW5nLCBhbmQgaG93IGl0IGhhbmRsZXMgcGFja2V0IGJ1ZmZlcmluZy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgY2FuIGhhdmUgYSBodWdlIGltcGFjdCBvbiBsYXRlbmN5IGFuZCBvdmVyYWxsIHRocm91Z2hwdXQuIEdvdHRhIGJlIHRob3JvdWdoLiBUaW1lIHRvIGNyYWNrIGl0IG9wZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTQuODgyODIwMzQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MzA1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3BhY2tldF9yeF9wb2xsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmM9MjI9c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy01OS1cXHRzZXRfYml0KE5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaS5zdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzo2MDpcXHRuZXRpZl9uYXBpX2FkZCh3Zy1cXHUwMDNlZGV2LCBcXHUwMDI2cGVlci1cXHUwMDNlbmFwaSwgd2dfcGFja2V0X3J4X3BvbGwpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNjEtXFx0bmFwaV9lbmFibGUoXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmg9MzM9dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3JlY2VpdmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgtMzQtLyogTkFQSSBwb2xsIGZ1bmN0aW9uOiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oOjM1OmludCB3Z19wYWNrZXRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oLTM2LS8qIFdvcmtxdWV1ZSB3b3JrZXI6ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTMzNT1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhX2RvbmUoc3RydWN0IHdnX3BlZXIgKnBlZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTQzNy1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjQzODppbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNDM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTYuMzE3MTMyNDAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxOTI3MDE2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBXaXJlR3VhcmQncyBhcmNoaXRlY3R1cmUsIHRoaXMgaXMgdGhlIHdvcmtlciB0aHJlYWQgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCAqc2VuZGluZyogdGhlIGluaXRpYWwgaGFuZHNoYWtlIHBhY2tldHMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMga2V5IHJlc3BvbnNpYmlsaXRpZXM6IGdlbmVyYXRpbmcgdGhlIGluaXRpYWwgZXBoZW1lcmFsIGtleSBwYWlyLCBjb25zdHJ1Y3RpbmcgdGhlIGhhbmRzaGFrZSBtZXNzYWdlIGl0c2VsZiAocHJvYmFibHkgaW5jbHVkaW5nIHRoZSBwZWVyJ3Mgc3RhdGljIHB1YmxpYyBrZXksIHRoZSBlcGhlbWVyYWwgcHVibGljIGtleSwgdGhlIE1BQywgYW5kIHRoZSBwcm90b2NvbCB2ZXJzaW9uKSwgYW5kIHRoZW4gYWN0dWFsbHkgcXVldWluZyBpdCBmb3IgdHJhbnNtaXNzaW9uLiBJIHN1c3BlY3QgaXQncyB3b3JraW5nIGNsb3NlbHkgd2l0aCB0aGUgY3J5cHRvZ3JhcGh5IHByaW1pdGl2ZXMsIGxpa2VseSB1c2luZyB0aGUgWDI1NTE5IGtleSBleGNoYW5nZSwgYW5kIHRoZW4gdGhlIEFFQUQgY2lwaGVyIGZvciB0aGUgbWVzc2FnZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGxvY2tpbmcgc2VtYW50aWNzIGhlcmUuIERvZXMgaXQgaGF2ZSBtdXRleCBwcm90ZWN0aW9uPyBXaGF0IGlzIHRoZSBjb25jdXJyZW5jeSBtb2RlbD8gQW55IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiwgc3VjaCBhcyBiYXRjaGluZyB0aGVzZSBoYW5kc2hha2VzIGlmIHRoZXJlJ3MgYSBmbG9vZCBvZiBuZXcgcGVlcnM/IEkgd2FudCB0byBzZWUgaG93IGVmZmljaWVudGx5IGl0IGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzOiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvY2tldCBpcyBmdWxsPyBJcyB0aGVyZSBwcm9wZXIgYmFja29mZiBsb2dpYz8gRG9lcyBpdCBoYW5kbGUgcmV0cmFuc21pc3Npb25zIGdyYWNlZnVsbHk/IEVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlLCBlc3BlY2lhbGx5IGZvciBwcmV2ZW50aW5nIHJlc291cmNlIHN0YXJ2YXRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLlxuXG5CZXlvbmQgdGhlIGltbWVkaWF0ZSBoYW5kc2hha2UsIEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0aW1lciBsb2dpYy4gSXMgdGhlcmUgYSBkZWZpbmVkIHRpbWVvdXQgZm9yIHRoZSBoYW5kc2hha2UsIGFuZCBob3cgaXMgaXQgdHJpZ2dlcmVkPyBXaGF0IGhhcHBlbnMgdXBvbiB0aW1lb3V0PyBBcmUgcmV0cmFuc21pc3Npb25zIGhhbmRsZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBpbml0aWFsIGF0dGVtcHQ/IE15IHRob3VnaHQgaXMsIGFyZSB0aGUgcmV0cnkgbWVjaGFuaXNtcyBvcHRpbWl6ZWQgb3IgaXMgdGhlcmUgYSB2dWxuZXJhYmlsaXR5PyBBbmQgZmluYWxseSwgd2hhdCBhYm91dCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmsgc3RhY2s/IEkgd291bGQgbGlrZSB0byBzZWUgaWYgYW55IGNvbnRleHQtc3dpdGNoZXMgYXJlIG5lY2Vzc2FyeSBmb3IgaXQuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBlZmZpY2llbnQgYW5kIHNlY3VyZSwgZXNwZWNpYWxseSBpbiBhIGhpZ2gtY29uY3VycmVuY3kgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MTkuNTA5ODM3MzA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwMDI1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMj1zdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jLTQ4LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VrZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jOjQ5OlxcdElOSVRfV09SSyhcXHUwMDI2cGVlci1cXHUwMDNldHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtNTAtXFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaD00OD12b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC00OS0vKiBXb3JrcXVldWUgd29ya2VyczogKi9cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaDo1MDp2b2lkIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaC01MS12b2lkIHdnX3BhY2tldF90eF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM9MjE9c3RhdGljIHZvaWQgd2dfcGFja2V0X3NlbmRfaGFuZHNoYWtlX2luaXRpYXRpb24oc3RydWN0IHdnX3BlZXIgKnBlZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmM6NDY6dm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jLTQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjAuOTg5ODY2NjY0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDY3MDQ3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipQZWVyIE1hbmFnZW1lbnQgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSBwZWVyIG1hbmFnZW1lbnQgcm91dGluZXMuIEZpcnN0LCBJJ2xsIHByaW9yaXRpemUgdmVyaWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9uczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYW5kIGB3Z19wZWVyX3JlbW92ZV9hbGxgLiBUaG9zZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWRkaW5nLCBkZWxldGluZywgYW5kIGNsZWFuaW5nIHVwIHBlZXJzLCBzbyB0aGV5J3JlIHRoZSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gVGhlbiwgdG8gbWFrZSBzdXJlIEknbSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGNyb3NzLXJlZmVyZW5jZSB0aG9zZSBhZ2FpbnN0IHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgaGVhZGVyIGZpbGUuIEkgd2lsbCBjaGVjayB0aGUgYHBlZXIuaGAgaGVhZGVyIGZpbGUgYW5kIHRoZW4gc3lzdGVtYXRpY2FsbHkgcmV2aWV3IGBwZWVyLmNgLCBmb2N1c2luZyBvbiBldmVyeSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgZmlsZS4gVGhpcyBhcHByb2FjaCBlbnN1cmVzIEkgY292ZXIgdGhlIHB1YmxpYyBpbnRlcmZhY2UgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBjb21wcmVoZW5zaXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MjMuMzk2NTc0NTEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0c3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLFxcbiAgNzE6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHU4IHByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0c3RydWN0IHdnX3BlZXIgKl9fbXVzdF9jaGVjayB3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG4gIDc1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0KHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KTtcXG4gIDc4OlxcdFxcdHJldHVybiBwZWVyO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0dm9pZCB3Z19wZWVyX3B1dChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7XFxuICA4MTpcXHR2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTtcXG4gIDgyOlxcdHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0aW50IHdnX3BlZXJfaW5pdCh2b2lkKTtcXG4gIDg1OlxcdHZvaWQgd2dfcGVlcl91bmluaXQodm9pZCk7XFxuICA4NjpcXHRcXG4gIDg3OlxcdCNlbmRpZiAvKiBfV0dfUEVFUl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjIzLjM5NjYzNjQzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTgzMTY1MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFdpcmVHdWFyZCBQZWVyIFRlYXJkb3duIGFuZCBQYWNrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGUgZnV6emluZyBwbGFuIGZvciB0aGlzIFdpcmVHdWFyZCBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc3luY2hyb25pemF0aW9uIGNoYW5nZXMgZHVyaW5nIHBlZXIgdGVhcmRvd24gYW5kIHBhY2tldCBxdWV1aW5nIOKAkyBzcGVjaWZpY2FsbHksIHJlcGxhY2luZyBicm9hZCB3b3JrcXVldWUgZmx1c2hlcyB3aXRoIHRhcmdldGVkIG9uZXMgYW5kIGVtcGxveWluZyBhdG9taWMgdHJhY2tpbmcgKGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIGB3YWl0X3Zhcl9ldmVudGAsIGB3YWtlX3VwX3ZhcmApLiBTaW5jZSBXaXJlR3VhcmQgaXMgYSBzb2Z0d2FyZSBWUE4gZHJpdmVyLCBJIGNhbiB0YXJnZXQgaXQgaW4gUUVNVSB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpYWxpemVkIGhhcmR3YXJlIHNldHVwIHdoaWNoIGlzIGEgYmlnIHdpbi5cblxuVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5BcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoZSBwYXRjaCBzZWVtcyB0byBuZWVkIGBXSVJFR1VBUkRgIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBjb3JlIGNvbXBvbmVudC4gSSBzZWUgdGhlIHN1Z2dlc3RlZCBjb25maWdzIGluY2x1ZGUgYE5FVGAgYW5kIGBJTkVUYCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCwgc28gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGp1c3QgYFdJUkVHVUFSRGAgdG8gbWluaW1pemUgbm9pc2UsIGJ1dCBJIGNhbiBjZXJ0YWlubHkga2VlcCB0aGUgb3B0aW9uIHRvIGFkZCB0aGUgb3RoZXJzIGxhdGVyLlxuXG5UaGUgcmVhbGx5IGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRob3NlIGZ1bmN0aW9ucyBhcmUgcmlnaHQgd2hlcmUgdGhlIGFjdGlvbiBpczogYHdnX3BlZXJfY3JlYXRlYCwgYHdnX3BlZXJfcmVtb3ZlYCwgYHdnX3BlZXJfcmVtb3ZlX2FsbGAgYXJlIHRoZSBvYnZpb3VzIG9uZXMgaW52b2x2ZWQgaW4gcGVlciBsaWZlY3ljbGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwYWNrZXQgaGFuZGxpbmcgZnVuY3Rpb25zOiBgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyYCwgYHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcmAsIGB3Z19wYWNrZXRfdHhfd29ya2VyYCwgYHdnX3BhY2tldF9yeF9wb2xsYCwgYW5kIGZpbmFsbHkgYHdnX3NldF9kZXZpY2VfZG9pdGAgd2hpY2ggSSBleHBlY3QgY29uZmlndXJlcyB0aGUgZGV2aWNlLiBUaGF0J3MgYSBzb2xpZCBzZXQgb2YgdGFyZ2V0cyB0byBnbyBhZnRlci5cblxuSSd2ZSByZXZpZXdlZCBhbGwgdGhlIHBhcmFtZXRlcnMsIHRoZSByZWFzb25pbmcgY2hlY2tzIG91dCwgYW5kIEknbSByZWFkeSB0byBiZWdpbiB0ZXN0aW5nLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcyOSwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDoyOS45Nzk4MDM2ODRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ5NTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0lSRUdVQVJEXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICAgIFwid2dfcGVlcl9yZW1vdmVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlX2FsbFwiLFxuICAgIFwid2dfcGFja2V0X2VuY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF90eF93b3JrZXJcIixcbiAgICBcIndnX3BhY2tldF9yeF9wb2xsXCIsXG4gICAgXCJ3Z19zZXRfZGV2aWNlX2RvaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBzeW5jaHJvbml6YXRpb24gYW5kIHRlYXJkb3duIGxvZ2ljIGZvciBXaXJlR3VhcmQgcGVlcnMgZHVyaW5nIHBhY2tldCBlbmNyeXB0aW9uLCBkZWNyeXB0aW9uLCBhbmQgcXVldWUgZHJhaW5pbmcgYnkgaW50cm9kdWNpbmcgYW4gYXRvbWljIHBlbmRpbmcgY291bnRlciAocGFja2V0X2NyeXB0X3BlbmRpbmcpIGFuZCB3YWl0X3Zhcl9ldmVudCBpbnN0ZWFkIG9mIGZsdXNoaW5nIHRoZSBlbnRpcmUgd29ya3F1ZXVlIG11bHRpcGxlIHRpbWVzLiBXaXJlR3VhcmQgaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciByZWFkaWx5IHRlc3RhYmxlIGluIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldJUkVHVUFSRFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2dfcGVlcl9jcmVhdGVcIixcbiAgICBcIndnX3BlZXJfcmVtb3ZlXCIsXG4gICAgXCJ3Z19wZWVyX3JlbW92ZV9hbGxcIixcbiAgICBcIndnX3BhY2tldF9lbmNyeXB0X3dvcmtlclwiLFxuICAgIFwid2dfcGFja2V0X2RlY3J5cHRfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfdHhfd29ya2VyXCIsXG4gICAgXCJ3Z19wYWNrZXRfcnhfcG9sbFwiLFxuICAgIFwid2dfc2V0X2RldmljZV9kb2l0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc3luY2hyb25pemF0aW9uIGFuZCB0ZWFyZG93biBsb2dpYyBmb3IgV2lyZUd1YXJkIHBlZXJzIGR1cmluZyBwYWNrZXQgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgYW5kIHF1ZXVlIGRyYWluaW5nIGJ5IGludHJvZHVjaW5nIGFuIGF0b21pYyBwZW5kaW5nIGNvdW50ZXIgKHBhY2tldF9jcnlwdF9wZW5kaW5nKSBhbmQgd2FpdF92YXJfZXZlbnQgaW5zdGVhZCBvZiBmbHVzaGluZyB0aGUgZW50aXJlIHdvcmtxdWV1ZSBtdWx0aXBsZSB0aW1lcy4gV2lyZUd1YXJkIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIgcmVhZGlseSB0ZXN0YWJsZSBpbiBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6MzAuMDU3MzA0NTMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE4ODI5ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjMwLjA1Nzc1MzU0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTg3ODQ1OTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRlYXJkb3duIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaW4gV2lyZUd1YXJkJ3MgcGVlciBtYW5hZ2VtZW50LiBJbnN0ZWFkIG9mIGZsdXNoaW5nIGRldmljZS13aWRlIHdvcmtxdWV1ZXMgdXBvbiBwZWVyIGRlc3RydWN0aW9uLCBpdCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIChgcGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgKSBhbmQgYHdhaXRfdmFyX2V2ZW50YCB0byB3YWl0IHNwZWNpZmljYWxseSBmb3IgaW5mbGlnaHQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zIGZvciB0aGF0IHBlZXIgYmVmb3JlIGZsdXNoaW5nIHBlci1wZWVyIHdvcmsgc3RydWN0dXJlcyBhbmQgZGVsZXRpbmcgTkFQSS5cXG5cXG5UaGUgbmV3IGZpZWxkIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AgaXMgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCB3Z19wZWVyYCB2aWEgYGttZW1fY2FjaGVfemFsbG9jKClgIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHVzaW5nIGBhdG9taWNfc2V0KClgLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIHBhZGRpbmcsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMuIEFueSBzeW5jaHJvbml6YXRpb24gb3IgbGlmZWN5Y2xlIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRlYXJkb3duKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgUkNVIGRlYnVnZ2luZywgYW5kIExPQ0tERVAuIEtNU0FOIGlzIHRoZXJlZm9yZSBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3ODM2MzAwMzY2NmVlZTA1ZThjYTNlNTg2ZTM2ZmM1OWE1ZmU1YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEwOjM4OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmNcbmluZGV4IDFjYjUwMmE5MzJlMDcuLmY3YTljNDM3YjViODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvY2tkZXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gXG4gc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlO1xuIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7XG5AQCAtNDksNiArNTAsOCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXG4gXHRJTklUX1dPUksoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yaywgd2dfcGFja2V0X3R4X3dvcmtlcik7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2V0eF9xdWV1ZSk7XG4gXHR3Z19wcmV2X3F1ZXVlX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyeF9xdWV1ZSk7XG4rXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xuK1x0YXRvbWljX3NldChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nLCAxKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNnBlZXItXHUwMDNlZW5kcG9pbnRfbG9jayk7XG4gXHRrcmVmX2luaXQoXHUwMDI2cGVlci1cdTAwM2VyZWZjb3VudCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnBlZXItXHUwMDNlc3RhZ2VkX3BhY2tldF9xdWV1ZSk7XG5AQCAtMTA1LDI4ICsxMDgsMjcgQEAgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcilcbiBcdCAqL1xuIFx0d2dfdGltZXJzX3N0b3AocGVlcik7XG4gXG4tXHQvKiBUaGUgdHJhbnNpdGlvbiBiZXR3ZWVuIHBhY2tldCBlbmNyeXB0aW9uL2RlY3J5cHRpb24gcXVldWVzIGlzbid0XG4tXHQgKiBndWFyZGVkIGJ5IGlzX2RlYWQsIGJ1dCBlYWNoIHJlZmVyZW5jZSdzIGxpZmUgaXMgc3RyaWN0bHkgYm91bmRlZCBieVxuLVx0ICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbFxuLVx0ICogaW5nZXN0aW9uLCBzbyB3ZSBjYW4gc2ltcGx5IGZsdXNoIHR3aWNlLCBhbmQgYmUgc3VyZSB0aGF0IHdlIG5vXG4tXHQgKiBsb25nZXIgaGF2ZSByZWZlcmVuY2VzIGluc2lkZSB0aGVzZSBxdWV1ZXMuXG4rXHQvKiBMb29rdXAgcmVtb3ZhbCBhbmQgaXNfZGVhZCBwcmV2ZW50IG5ldyBwYWNrZXRzIGZyb20gZW50ZXJpbmcgdGhlXG4rXHQgKiBwYXJhbGxlbCBjcnlwdG8gcXVldWVzIGFmdGVyIHN5bmNocm9uaXplX25ldCgpIHdhaXRzIGZvciBwcmUtZXhpc3RpbmdcbitcdCAqIHN1Ym1pc3Npb24gcGF0aHMuIERyb3AgdGhlIGluaXRpYWwgY291bnQgYW5kIHdhaXQgZm9yIGV4aXN0aW5nIHBhY2tldHNcbitcdCAqIHRvIGZpbmlzaCBzY2hlZHVsaW5nIHRoZWlyIHNlcmlhbCBUWCB3b3JrIG9yIFJYIE5BUEkgcHJvY2Vzc2luZy5cbiBcdCAqL1xuK1x0YXRvbWljX2RlYyhcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbitcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsXG4rXHRcdCAgICAgICAhYXRvbWljX3JlYWRfYWNxdWlyZShcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSk7XG4rXG4rXHRmbHVzaF93b3JrKFx1MDAyNnBlZXItXHUwMDNldHJhbnNtaXRfcGFja2V0X3dvcmspO1xuIFxuLVx0LyogYSkgRm9yIGVuY3J5cHQvZGVjcnlwdC4gKi9cbi1cdGZsdXNoX3dvcmtxdWV1ZShwZWVyLVx1MDAzZWRldmljZS1cdTAwM2VwYWNrZXRfY3J5cHRfd3EpO1xuLVx0LyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0J3MgbmFwaSkuICovXG4tXHRmbHVzaF93b3JrcXVldWUocGVlci1cdTAwM2VkZXZpY2UtXHUwMDNlcGFja2V0X2NyeXB0X3dxKTtcbi1cdC8qIGIuMi4xKSBGb3IgcmVjZWl2ZSAoYnV0IG5vdCBzZW5kLCBzaW5jZSB0aGF0J3Mgd3EpLiAqL1xuIFx0bmFwaV9kaXNhYmxlKFx1MDAyNnBlZXItXHUwMDNlbmFwaSk7XG4tXHQvKiBiLjIuMSkgSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmVcbitcdC8qIEl0J3Mgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZSBuYXBpIHN0cnVjdCwgd2hpY2ggbXVzdCBiZSBkb25lXG4gXHQgKiBoZXJlIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuIFx0ICovXG4gXHRuZXRpZl9uYXBpX2RlbChcdTAwMjZwZWVyLVx1MDAzZW5hcGkpO1xuIFxuLVx0LyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3Jcbi1cdCAqIGNsZWFyX3BlZXJfd29yaykgbm8gbG9uZ2VyIGFyZSBpbiB1c2UuXG4rXHQvKiBjbGVhcl9wZWVyX3dvcmsgd2FzIGZsdXNoZWQgYnkgd2dfdGltZXJzX3N0b3AoKS4gRW5zdXJlIHRoZSByZW1haW5pbmdcbitcdCAqIHBlZXItb3duZWQgaGFuZHNoYWtlIHdvcmsgaXMgbm8gbG9uZ2VyIGluIHVzZS5cbiBcdCAqL1xuLVx0Zmx1c2hfd29ya3F1ZXVlKHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZWhhbmRzaGFrZV9zZW5kX3dxKTtcbitcdGZsdXNoX3dvcmsoXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yayk7XG4gXG4gXHQvKiBBZnRlciB0aGUgYWJvdmUgZmx1c2hlcywgYSBwZWVyIG1pZ2h0IHN0aWxsIGJlIGFjdGl2ZSBpbiBhIGZld1xuIFx0ICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaFxuaW5kZXggNzE4ZmI0MmJkYWM3ZS4uNjQ0MTJjNjdmNDEzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhcbkBAIC0zNyw2ICszNyw3IEBAIHN0cnVjdCBlbmRwb2ludCB7XG4gc3RydWN0IHdnX3BlZXIge1xuIFx0c3RydWN0IHdnX2RldmljZSAqZGV2aWNlO1xuIFx0c3RydWN0IHByZXZfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlO1xuK1x0YXRvbWljX3QgcGFja2V0X2NyeXB0X3BlbmRpbmc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7XG4gXHRpbnQgc2VyaWFsX3dvcmtfY3B1O1xuIFx0Ym9vbCBpc19kZWFkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbmluZGV4IDc5YjZkNzBkZTIzNmIuLmZkZDM0ZjBmMTVhNmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmhcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2VcbiBcbiBzdHJ1Y3Qgd2dfZGV2aWNlO1xuQEAgLTE2MSw2ICsxNjIsNyBAQCBzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseSghd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHBlZXJfcXVldWUsIHNrYikpKVxuIFx0XHRyZXR1cm4gLUVOT1NQQztcbitcdGF0b21pY19pbmMoXHUwMDI2UEFDS0VUX1BFRVIoc2tiKS1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXG4gXHQvKiBUaGVuIHdlIHF1ZXVlIGl0IHVwIGluIHRoZSBkZXZpY2UgcXVldWUsIHdoaWNoIGNvbnN1bWVzIHRoZVxuIFx0ICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLlxuQEAgLTE4Miw2ICsxODQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHBhY2tldFxuIFx0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNlBBQ0tFVF9DQihza2IpLVx1MDAzZXN0YXRlLCBzdGF0ZSk7XG4gXHRxdWV1ZV93b3JrX29uKHdnX2NwdW1hc2tfY2hvb3NlX29ubGluZShcdTAwMjZwZWVyLVx1MDAzZXNlcmlhbF93b3JrX2NwdSwgcGVlci1cdTAwM2VpbnRlcm5hbF9pZCksXG4gXHRcdCAgICAgIHBlZXItXHUwMDNlZGV2aWNlLVx1MDAzZXBhY2tldF9jcnlwdF93cSwgXHUwMDI2cGVlci1cdTAwM2V0cmFuc21pdF9wYWNrZXRfd29yayk7XG4rXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKSlcbitcdFx0d2FrZV91cF92YXIoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZyk7XG4gXHR3Z19wZWVyX3B1dChwZWVyKTtcbiB9XG4gXG5AQCAtMTk0LDYgKzE5OCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHN0cnVjdCBza19idWZmICpza2IsIGVudW0gcGFja2V0XG4gXG4gXHRhdG9taWNfc2V0X3JlbGVhc2UoXHUwMDI2UEFDS0VUX0NCKHNrYiktXHUwMDNlc3RhdGUsIHN0YXRlKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2cGVlci1cdTAwM2VuYXBpKTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNnBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcpKVxuK1x0XHR3YWtlX3VwX3ZhcihcdTAwMjZwZWVyLVx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nKTtcbiBcdHdnX3BlZXJfcHV0KHBlZXIpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjMwLjA1Nzc1NDY1MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkzMDk5OTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoaXMgV2lyZUd1YXJkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgV2lyZUd1YXJkIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIG1vcmUgZmluZS1ncmFpbmVkIHN5bmNocm9uaXphdGlvbiBhbmQgdGVhcmRvd24gb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwZXItcGVlciBjb250ZXh0LiBJIHNlZSBjaGFuZ2VzIGluIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCwgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmhgLCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oYCwgd2hpY2ggYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIHdvcmsuXG5cbkVzc2VudGlhbGx5LCB0aGV5J3ZlIGludHJvZHVjZWQgYW4gYXRvbWljIGNvdW50ZXIsIGBwYWNrZXRfY3J5cHRfcGVuZGluZ2AsIHdpdGhpbiB0aGUgYHN0cnVjdCB3Z19wZWVyYC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgYWxsb3dzIGZvciBwZXItcGVlciB0cmFja2luZyBvZiBwZW5kaW5nIGNyeXB0byBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhpcyBjb3VudGVyIHRvIDEgaW4gYHdnX3BlZXJfY3JlYXRlYCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIGNvdW50ZXIgaXMgdXNlZCBkdXJpbmcgcGVlciByZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBnbG9iYWwgYGZsdXNoX3dvcmtxdWV1ZWAgY2FsbHMgYXJlIGJlaW5nIHJlcGxhY2VkIHdpdGggYGF0b21pY19kZWNgLCBgd2FpdF92YXJfZXZlbnRgLCBhbmQgYGZsdXNoX3dvcmtgIG9wZXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gYXZvaWQgZmx1c2hpbmcgdGhlIGVudGlyZSBkZXZpY2Ugd29ya3F1ZXVlIGFuZCBpbnN0ZWFkIHN5bmNocm9uaXplIG9uIHRoZSBwZW5kaW5nIGNyeXB0byBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZSBwZWVyLiBUaGlzIGlzIHRoZSBnb29kIHBhcnQhIEl0IHNob3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBidXQgaXQgYWxzbyBicmluZ3MgdGhlIHNwZWN0ZXIgb2Ygc3VidGxlIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgdGhhdCB3YWl0IGNvbmRpdGlvbi4gSSBob3BlIHRoZXkgZGlkIHRoaXMgY29ycmVjdGx5LlxuXG5JbiBhZGRpdGlvbiwgY2hhbmdlcyBhcmUgaGFwcGVuaW5nIGluIHRoZSBlbnF1ZXVlIGZ1bmN0aW9ucyAoYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAsIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3R4YCwgYW5kIGB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4YCkuICBJdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5jcmVtZW50aW5nIHRoZSBjb3VudGVyIHdoZW4gYSBwYWNrZXQgaXMgcXVldWVkIGFuZCBkZWNyZW1lbnRpbmcvd2FraW5nIHVwIHRoZSBwcm9jZXNzIHdoZW4gaXQncyBkb25lLlxuXG5NeSBmaXJzdCBjb25jZXJucyBhcmUgYWxsIGFib3V0IHRoZSBwb3RlbnRpYWwgcmlza3M6IHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBkZWFkbG9ja3MsIGFuZCBoYW5naW5nIHRlYXJkb3ducywgdGhlIHVzdWFsIHN1c3BlY3RzIGluIGFueSBzeW5jaHJvbml6YXRpb24taGVhdnkgY29kZS4gSSdtIGFsc28gZ29pbmcgdG8gYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueSBvYnZpb3VzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHRob3VnaCBob3BlZnVsbHkgS0FTQU4gYW5kIGxvY2tkZXAgd2lsbCBjYXRjaCB0aG9zZS5cblxuSSd2ZSBxdWlja2x5IHJldmlld2VkIHRoZSBjb2RlIGFuZCBkb24ndCAqc2VlKiBhbnl0aGluZyB0aGF0IHdvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgZGF0YSBleHBvc3VyZSB0byB1c2VyIHNwYWNlLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBgcGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2AgY291bnRlciBpcyBpbml0aWFsaXplZCwgc28gdGhhdCdzIGdvb2QuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYHdnX3BlZXJfY3JlYXRlYCBhbmQgbWFrZSBzdXJlIHRoZSBgc3RydWN0IHdnX3BlZXJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBvciBwcm9wZXJseSBpbml0aWFsaXplZC4gR3JlcHBpbmcgYW5kIHJlYWRpbmcgdGhlIHNvdXJjZSBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzdHJ1Y3Qgd2dfcGVlcmAgdG8gYmUgc3VyZS4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo1My45ODg3NTg1ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYyMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3Z19wZWVyX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlZ3VhcmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM9MzQwPXN0YXRpYyBpbnQgc2V0X3BlZXIoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBubGF0dHIgKiphdHRycylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMzkxLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6MzkyOlxcdFxcdHBlZXIgPSB3Z19wZWVyX2NyZWF0ZSh3ZywgcHVibGljX2tleSwgcHJlc2hhcmVkX2tleSk7XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0zOTMtXFx0XFx0aWYgKElTX0VSUihwZWVyKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYz0yMD1zdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMtMjEtXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoyMjpzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYy0yMy1cXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oPTM3PXN0cnVjdCB3Z19wZWVyIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgtNjktXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaDo3MDpzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaC03MS1cXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEwOjQwOjU0LjA5MjM4NTYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTUyMTA4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIFdpcmVHdWFyZCBQZWVyIEhhbmRsaW5nKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDIwIHRocm91Z2ggNzAuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIGNvcmUgcGVlciBtYW5hZ2VtZW50IOKAkyBpbml0aWFsaXphdGlvbiwgbGlrZWx5IHNvbWUgc29ydCBvZiBkYXRhIHN0cnVjdHVyZSBzZXR1cCBmb3IgZWFjaCBjb25uZWN0ZWQgcGVlciwgYW5kIHBlcmhhcHMgc29tZSBlc3NlbnRpYWwgc3RhdGUgdHJhbnNpdGlvbnMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgV2lyZUd1YXJkIHJlcHJlc2VudHMgYSBwZWVyIGludGVybmFsbHkuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW46IHdoYXQgZGF0YSBpcyBzdG9yZWQgYWJvdXQgZWFjaCBwZWVyLCBob3cgdGhhdCBkYXRhIGlzIHN0cnVjdHVyZWQgKGxpbmtlZCBsaXN0cywgaGFzaCB0YWJsZXMsIGV0Yy4pLCBhbmQgaG93IGluaXRpYWwgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIG9yIHZlcmlmaWVkLiBJJ20gYWxzbyB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkLCBrbm93aW5nIGhvdyBpbXBvcnRhbnQgY29uY3VycmVuY3kgaXMgaW4gbmV0d29ya2luZyBjb2RlLiBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbnkgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGV4cGVjdGluZyB0aGF0IHRoaXMgaXMgdGhlIGdyb3VuZCBsZXZlbCBpbmZyYXN0cnVjdHVyZSB0aGF0IGV2ZXJ5dGhpbmcgZWxzZSBkZXBlbmRzIG9uIGZvciBwZWVyIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MDo1Ni4yNDQ0OTYyNTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRzdGF0aWMgYXRvbWljNjRfdCBwZWVyX2NvdW50ZXIgPSBBVE9NSUM2NF9JTklUKDApO1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csXFxuICAyMzpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sXFxuICAyNDpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3Qgd2dfcGVlciAqcGVlcjtcXG4gIDI3OlxcdFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ3Zy1cXHUwMDNlZGV2aWNlX3VwZGF0ZV9sb2NrKTtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKHdnLVxcdTAwM2VudW1fcGVlcnMgXFx1MDAzZT0gTUFYX1BFRVJTX1BFUl9ERVZJQ0UpXFxuICAzMjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRwZWVyID0ga21lbV9jYWNoZV96YWxsb2MocGVlcl9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuICAzNTpcXHRcXHRpZiAodW5saWtlbHkoIXBlZXIpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4gIDM3OlxcdFxcdGlmICh1bmxpa2VseShkc3RfY2FjaGVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKSlcXG4gIDM4OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRwZWVyLVxcdTAwM2VkZXZpY2UgPSB3ZztcXG4gIDQxOlxcdFxcdHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VoYW5kc2hha2UsIFxcdTAwMjZ3Zy1cXHUwMDNlc3RhdGljX2lkZW50aXR5LFxcbiAgNDI6XFx0XFx0XFx0XFx0XFx0cHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7XFxuICA0MzpcXHRcXHRwZWVyLVxcdTAwM2VpbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnBlZXJfY291bnRlcik7XFxuICA0NDpcXHRcXHRwZWVyLVxcdTAwM2VzZXJpYWxfd29ya19jcHUgPSBucl9jcHVtYXNrX2JpdHM7XFxuICA0NTpcXHRcXHR3Z19jb29raWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNlbGF0ZXN0X2Nvb2tpZSk7XFxuICA0NjpcXHRcXHR3Z190aW1lcnNfaW5pdChwZWVyKTtcXG4gIDQ3OlxcdFxcdHdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfcGVlcl9rZXlzKHBlZXIpO1xcbiAgNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spO1xcbiAgNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwZWVyLVxcdTAwM2V0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7XFxuICA1MDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnBlZXItXFx1MDAzZXRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTtcXG4gIDUxOlxcdFxcdHdnX3ByZXZfcXVldWVfaW5pdChcXHUwMDI2cGVlci1cXHUwMDNldHhfcXVldWUpO1xcbiAgNTI6XFx0XFx0d2dfcHJldl9xdWV1ZV9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyeF9xdWV1ZSk7XFxuICA1MzpcXHRcXHQvKiBLZWVwIHRoaXMgYWJvdmUgemVybyB1bnRpbCB0ZWFyZG93biBwcmV2ZW50cyBuZXcgcGFja2V0IGhhbmRvZmZzLiAqL1xcbiAgNTQ6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cGVlci1cXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmcsIDEpO1xcbiAgNTU6XFx0XFx0cndsb2NrX2luaXQoXFx1MDAyNnBlZXItXFx1MDAzZWVuZHBvaW50X2xvY2spO1xcbiAgNTY6XFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VyZWZjb3VudCk7XFxuICA1NzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZWVyLVxcdTAwM2VzdGFnZWRfcGFja2V0X3F1ZXVlKTtcXG4gIDU4OlxcdFxcdHdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoXFx1MDAyNnBlZXItXFx1MDAzZWxhc3Rfc2VudF9oYW5kc2hha2UpO1xcbiAgNTk6XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgNjA6XFx0XFx0bmV0aWZfbmFwaV9hZGQod2ctXFx1MDAzZWRldiwgXFx1MDAyNnBlZXItXFx1MDAzZW5hcGksIHdnX3BhY2tldF9yeF9wb2xsKTtcXG4gIDYxOlxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwZWVyLVxcdTAwM2VuYXBpKTtcXG4gIDYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBlZXItXFx1MDAzZXBlZXJfbGlzdCwgXFx1MDAyNndnLVxcdTAwM2VwZWVyX2xpc3QpO1xcbiAgNjM6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBlZXItXFx1MDAzZWFsbG93ZWRpcHNfbGlzdCk7XFxuICA2NDpcXHRcXHR3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZCh3Zy1cXHUwMDNlcGVlcl9oYXNodGFibGUsIHBlZXIpO1xcbiAgNjU6XFx0XFx0Kyt3Zy1cXHUwMDNlbnVtX3BlZXJzO1xcbiAgNjY6XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBQZWVyICVsbHUgY3JlYXRlZFxcXFxuXFxcIiwgd2ctXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgcGVlci1cXHUwMDNlaW50ZXJuYWxfaWQpO1xcbiAgNjc6XFx0XFx0cmV0dXJuIHBlZXI7XFxuICA2ODpcXHRcXG4gIDY5OlxcdGVycjpcXG4gIDcwOlxcdFxcdGttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTtcXG4gIDcxOlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuICA3MjpcXHR9XFxuICA3MzpcXHRcXG4gIDc0OlxcdHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKVxcbiAgNzU6XFx0e1xcbiAgNzY6XFx0XFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19iaF9oZWxkKCksXFxuICA3NzpcXHRcXHRcXHRcXHQgXFxcIlRha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2tcXFwiKTtcXG4gIDc4OlxcdFxcdGlmICh1bmxpa2VseSghcGVlciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBlZXItXFx1MDAzZXJlZmNvdW50KSkpXFxuICA3OTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTA6NDA6NTYuMjQ0NTYyMjQ5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDEwMDk1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGVlciBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBjbG9zZWx5IGF0IGhvdyB0aGUgYHBlZXJgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4gRmlyc3QsIGBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKWAgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5LCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyb2VkIG91dC4gVGhhdCdzIGdvb2Q7IGl0IGVsaW1pbmF0ZXMgYSB3aG9sZSBjbGFzcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoZW4sIHRoZSBuZXcgZmllbGQgYHBlZXItXHUwMDNlcGFja2V0X2NyeXB0X3BlbmRpbmdgLCBhbiBgYXRvbWljX3RgLCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYGF0b21pY19zZXQoXHUwMDI2cGVlci1cdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZywgMSlgLiBUaGlzIGluaXRpYWwgdmFsdWUgb2YgMSBpcyBzaWduaWZpY2FudCBhbmQgd2lsbCBwbGF5IGEgY3J1Y2lhbCByb2xlLiBGcm9tIHRoZSBjb2RlLCBJIHNlZSB0aGF0IHRoaXMgYXRvbWljIHZhcmlhYmxlIGlzIHVzZWQgZm9yIHJlZmVyZW5jZSB0cmFja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBlc3BlY2lhbGx5IGR1cmluZyBwZWVyIHRlYXJkb3duIHdpdGhpbiBgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZGAuIEl0J3MgaW5jcmVtZW50ZWQgaW4gYHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcmAgYW5kIGRlY3JlbWVudGVkIGluIGJvdGggYHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHhgIGFuZCBgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9yeGAuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20uXG5cbkJhc2VkIG9uIHRoaXMgaW5pdGlhbGl6YXRpb24gYW5kIHVzYWdlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBhIGNyaXRpY2FsIHNhZmV0eSBjb25jZXJuLiBObyB1c2VyLXNwYWNlIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBwcmVzZW50LCBhbmQgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBwcmV2ZW50cyB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnVmZmVyIGlzc3Vlcy4gVGhlIHVzZSBvZiBhbiBhdG9taWMgdmFyaWFibGUgZm9yIHRyYWNraW5nIGFsc28gaW1wbGllcyB0aGUgZGV2ZWxvcGVyIGlzIGNvbnNjaW91cyBvZiB0aHJlYWQgc2FmZXR5IGFuZCB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbkZ1cnRoZXJtb3JlLCBhbnkgY29uY3VycmVuY3kgcHJvYmxlbXMsIGRhbmdsaW5nIHBvaW50ZXJzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2sgc2NlbmFyaW9zIHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIGtlcm5lbCdzIGJ1aWx0LWluIHRvb2xzIGxpa2UgS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgaHVuZyB0YXNrIGRldGVjdG9yLiBHaXZlbiB0aGVzZSBvYnNlcnZhdGlvbnMsIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBkb2Vzbid0IHJlcXVpcmUgS01TQU4ncyBhc3Npc3RhbmNlLiBObyBtZW1vcnkgc2FmZXR5IGlzc3VlcyBJIGNhbiBzZWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uXG5cbkkndmUgcmV2aWV3ZWQgdGhlIHJlcXVpcmVtZW50cywgYW5kIEknbSByZWFkeSB0byBwcm9jZWVkLiBMZXQncyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93IHRvIGZpbmFsaXplIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0NCwiT3V0cHV0VG9rZW5zIjoyMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMDo0MTowMC4yNDU1NzM2NTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGVhcmRvd24gc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBXaXJlR3VhcmQncyBwZWVyIG1hbmFnZW1lbnQuIEluc3RlYWQgb2YgZmx1c2hpbmcgZGV2aWNlLXdpZGUgd29ya3F1ZXVlcyB1cG9uIHBlZXIgZGVzdHJ1Y3Rpb24sIGl0IGludHJvZHVjZXMgYW4gYXRvbWljIGNvdW50ZXIgKGBwZWVyLVxcdTAwM2VwYWNrZXRfY3J5cHRfcGVuZGluZ2ApIGFuZCBgd2FpdF92YXJfZXZlbnRgIHRvIHdhaXQgc3BlY2lmaWNhbGx5IGZvciBpbmZsaWdodCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgZm9yIHRoYXQgcGVlciBiZWZvcmUgZmx1c2hpbmcgcGVyLXBlZXIgd29yayBzdHJ1Y3R1cmVzIGFuZCBkZWxldGluZyBOQVBJLlxcblxcblRoZSBuZXcgZmllbGQgYHBhY2tldF9jcnlwdF9wZW5kaW5nYCBpcyBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IHdnX3BlZXJgIHZpYSBga21lbV9jYWNoZV96YWxsb2MoKWAgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdXNpbmcgYGF0b21pY19zZXQoKWAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlcywgcGFkZGluZywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcy4gQW55IHN5bmNocm9uaXphdGlvbiBvciBsaWZlY3ljbGUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGVhcmRvd24pIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBSQ1UgZGVidWdnaW5nLCBhbmQgTE9DS0RFUC4gS01TQU4gaXMgdGhlcmVmb3JlIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0ZWFyZG93biBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIGluIFdpcmVHdWFyZCdzIHBlZXIgbWFuYWdlbWVudC4gSW5zdGVhZCBvZiBmbHVzaGluZyBkZXZpY2Utd2lkZSB3b3JrcXVldWVzIHVwb24gcGVlciBkZXN0cnVjdGlvbiwgaXQgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciAoYHBlZXItXFx1MDAzZXBhY2tldF9jcnlwdF9wZW5kaW5nYCkgYW5kIGB3YWl0X3Zhcl9ldmVudGAgdG8gd2FpdCBzcGVjaWZpY2FsbHkgZm9yIGluZmxpZ2h0IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9ucyBmb3IgdGhhdCBwZWVyIGJlZm9yZSBmbHVzaGluZyBwZXItcGVlciB3b3JrIHN0cnVjdHVyZXMgYW5kIGRlbGV0aW5nIE5BUEkuXFxuXFxuVGhlIG5ldyBmaWVsZCBgcGFja2V0X2NyeXB0X3BlbmRpbmdgIGlzIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3Qgd2dfcGVlcmAgdmlhIGBrbWVtX2NhY2hlX3phbGxvYygpYCBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB1c2luZyBgYXRvbWljX3NldCgpYC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwYWRkaW5nLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLiBBbnkgc3luY2hyb25pemF0aW9uIG9yIGxpZmVjeWNsZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0ZWFyZG93bikgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFJDVSBkZWJ1Z2dpbmcsIGFuZCBMT0NLREVQLiBLTVNBTiBpcyB0aGVyZWZvcmUgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7txrd[1] Phase: Succeeded StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 10:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 10:41:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2] Phase: Succeeded StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 10:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 10:41:11 +0000 UTC FinishedAt: 2026-09-03 10:41:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7txrd/series-workflow7txrd-convert-artifact-1080704384/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 10:41:22 +0000 UTC FinishedAt: 2026-09-03 10:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 10:41:22 +0000 UTC FinishedAt: 2026-09-03 10:57:20 +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:*9ef3fcce-4789-4dcd-ac6b-efaddfaa212f,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-workflow7txrd/series-workflow7txrd-convert-artifact-1080704384/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": "7e29622e-22bf-45a4-9881-e1ad5bd17d42", "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-workflow7txrd/series-workflow7txrd-build-action-511150150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 10:41:22 +0000 UTC FinishedAt: 2026-09-03 10:57:10 +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:*9ef3fcce-4789-4dcd-ac6b-efaddfaa212f,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-workflow7txrd/series-workflow7txrd-convert-artifact-1080704384/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": "7e29622e-22bf-45a4-9881-e1ad5bd17d42", "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-workflow7txrd/series-workflow7txrd-build-action-511150150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 10:57:20 +0000 UTC FinishedAt: 2026-09-03 10:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 10:57:20 +0000 UTC FinishedAt: 2026-09-03 10:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 10:57:20 +0000 UTC FinishedAt: 2026-09-03 10:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 10:57:20 +0000 UTC FinishedAt: 2026-09-03 10:57:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7txrd/series-workflow7txrd-convert-artifact-591297575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 10:57:30 +0000 UTC FinishedAt: 2026-09-03 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 10:57:30 +0000 UTC FinishedAt: 2026-09-03 10:59:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e29622e-22bf-45a4-9881-e1ad5bd17d42,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-workflow7txrd/series-workflow7txrd-build-action-511150150/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-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 10:59:24 +0000 UTC FinishedAt: 2026-09-03 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 10:59:24 +0000 UTC FinishedAt: 2026-09-03 10:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 10:59:24 +0000 UTC FinishedAt: 2026-09-03 11:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 10:59:24 +0000 UTC FinishedAt: 2026-09-03 11:15:27 +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:*9ef3fcce-4789-4dcd-ac6b-efaddfaa212f,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-workflow7txrd/series-workflow7txrd-convert-artifact-591297575/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": "42caa8c3-1e27-4ff1-8b03-1fc9b910a80e", "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-workflow7txrd/series-workflow7txrd-build-action-1938746795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 10:59:24 +0000 UTC FinishedAt: 2026-09-03 11:15:17 +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:*9ef3fcce-4789-4dcd-ac6b-efaddfaa212f,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-workflow7txrd/series-workflow7txrd-convert-artifact-591297575/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": "42caa8c3-1e27-4ff1-8b03-1fc9b910a80e", "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-workflow7txrd/series-workflow7txrd-build-action-1938746795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 11:15:27 +0000 UTC FinishedAt: 2026-09-03 11:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 11:15:27 +0000 UTC FinishedAt: 2026-09-03 11:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 11:15:27 +0000 UTC FinishedAt: 2026-09-03 11:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 11:15:27 +0000 UTC FinishedAt: 2026-09-03 11:17:16 +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:*42caa8c3-1e27-4ff1-8b03-1fc9b910a80e,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-workflow7txrd/series-workflow7txrd-build-action-1938746795/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-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +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":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"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:*7e29622e-22bf-45a4-9881-e1ad5bd17d42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42caa8c3-1e27-4ff1-8b03-1fc9b910a80e,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-workflow7txrd/series-workflow7txrd-build-action-511150150/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-workflow7txrd/series-workflow7txrd-build-action-1938746795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 11:17:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 11:17:31 +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":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"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-workflow7txrd/series-workflow7txrd-convert-artifact-18007168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 11:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 11:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 11:17:26 +0000 UTC FinishedAt: 2026-09-03 11:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 11:17:36 +0000 UTC FinishedAt: 2026-09-03 14:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7txrd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wg_peer_create","wg_peer_remove","wg_peer_remove_all","wg_packet_encrypt_worker","wg_packet_decrypt_worker","wg_packet_tx_worker","wg_packet_rx_poll","wg_set_device_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"70f3995830d3f1e79faa14eb0605914f778feca9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WIREGUARD","NET","INET"],"series_id":"f2ff2fe5-ae8f-4179-ad92-dbdb25eef44d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 11:17:36 +0000 UTC FinishedAt: 2026-09-03 14:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7e29622e-22bf-45a4-9881-e1ad5bd17d42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42caa8c3-1e27-4ff1-8b03-1fc9b910a80e,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-workflow7txrd/series-workflow7txrd-build-action-511150150/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-workflow7txrd/series-workflow7txrd-build-action-1938746795/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-workflow7txrd/series-workflow7txrd-convert-artifact-18007168/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,}