Name: series-workflowhvc74 Phase: Succeeded StartedAt: 2026-08-13 18:53:39 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[0] Phase: Succeeded StartedAt: 2026-08-13 18:53:39 +0000 UTC FinishedAt: 2026-08-13 18:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 18:53:39 +0000 UTC FinishedAt: 2026-08-13 18:56:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_VMCLOCK", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_VMCLOCK", "PTP_1588_CLOCK" ], "series_id": "52c0aa50-74d4-4163-8ada-7aa4ee9fde80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vmclock_miscdev_mmap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWNsb2NrX21pc2NkZXZfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5pbmRleCBlZWJkY2Q1ZWJjMDgwLi5iYjBlMTRiYWM5ZjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuQEAgLTM3Miw2ICYjNDM7MzcyLDEyIEBAIHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fUkVBRHxWTV9XUklURSkpICE9IFZNX1JFQUQpXG4gXHRcdHJldHVybiAtRVJPRlM7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvXG4mIzQzO1x0ICogd3JpdGFibGUgbGF0ZXIgd2l0aCBtcHJvdGVjdCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpO1xuJiM0MztcbiBcdGlmICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0ICE9IFBBR0VfU0laRSB8fCB2bWEtXHUwMDNldm1fcGdvZmYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMKaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jCkBAIC0zNzIsNiAmIzQzOzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKCh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRCkKIAkJcmV0dXJuIC1FUk9GUzsKIAomIzQzOwkvKgomIzQzOwkgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvCiYjNDM7CSAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS0mZ3Q7dm1fcGdvZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIGBwdHBfdm1jbG9jay5jYCBhbmQgTWVtb3J5IE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgdGhlIHBhdGNoIHJlbW92ZXMgYFZNX01BWVdSSVRFYCBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBwdHBfdm1jbG9jay5jYCBhY3R1YWxseSAqaXMqLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGEgUFRQIGRyaXZlciBkZXNpZ25lZCBmb3Igdm1jbG9jay4gQWxyaWdodCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgY29kZSB0aGF0JiMzOTtzIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIHN5c3RlbXMgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4gSXMgdGhpcyBkcml2ZXIgbGlrZWx5IHRvIGJlIHVzZWQgaW4gb3VyIHR5cGljYWwgUUVNVSBjb25maWd1cmF0aW9ucz8gSXMgaXQgc29tZXRoaW5nIHdlIHNlZSBpbiBHQ0U/IEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgdm1jbG9ja19taXNjZGV2X21tYXBgIGFuZCBgcHRwX3ZtY2xvY2suY2AgaW4gb3VyIGNvZGViYXNlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBldmVuIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgaXQgaXMgYWN0dWFsbHkgYWZmZWN0aW5nIG91ciB1c2UtY2FzZSBvciBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNsb2NrX21pc2NkZXZfbW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0zNjI9c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM2NzpzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM2OC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz00ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdm1jbG9ja19taXNjZGV2X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODYtXHQucmVsZWFzZSA9IHZtY2xvY2tfbWlzY2Rldl9yZWxlYXNlLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODc6XHQubW1hcCA9IHZtY2xvY2tfbWlzY2Rldl9tbWFwLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODgtXHQucmVhZCA9IHZtY2xvY2tfbWlzY2Rldl9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXZpY2UgRHJpdmVyJiMzOTtzIE1lbW9yeSBNYXBwaW5nKioKCkFscmlnaHQsIHNvIHRoZSBkcml2ZXImIzM5O3Mgc2V0dGluZyB1cCBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlIHdpdGggYG1tYXBgLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUgaW4gdGVybXMgb2YgbWVtb3J5IG1hcHBpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZm9yIGBwdHBfdm1jbG9jay5jYC4gVGhhdCYjMzk7bGwgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuIEtub3dpbmcgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBhcmVuJiMzOTt0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBzaGFyZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLiBHb3R0YSBzZWUgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRwX3ZtY2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz0xMzQ9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE0OC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNDk6XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNTAtXG4tLVxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX0tWTSlcdCYjNDM7PSBwdHBfa3ZtLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19WTUNMT0NLKVx0JiM0Mzs9IHB0cF92bWNsb2NrLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19RT1JJUSlcdCYjNDM7PSBwdHBfcW9yaXEub1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MTkzPXN0YXRpYyBpbnQgdm1jbG9ja19nZXRfY3Jvc3N0c3RhbXBfa3ZtY2xvY2soc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMxLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyMzI6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRfdGltZV9mbihrdGltZV90ICpkZXZpY2VfdGltZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMzLVx0XHRcdFx0ICAgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbV9jb3VudGVyLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjUzLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTQ6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjU1LVx0XHRcdFx0ICAgICAgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNTgtXHRcdFx0XHRcdFx0cHRwX2Nsb2NrX2luZm8pO1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTk6XHRpbnQgcmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sIHN0LFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNjAtXHRcdFx0XHRcdFx0TlVMTCwgeHRzdGFtcCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNzQtXHRcdFx0V1JJVEVfT05DRShzdC1cdTAwM2VzeXNfY3NfaWQsIHN5c3RpbWVfc25hcHNob3QuY3NfaWQpO1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNzU6XHRcdFx0cmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI3Ni1cdFx0XHRcdFx0XHRcdCAgICBzdCwgTlVMTCwgeHRzdGFtcCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yODYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI4NzpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgZGVsdGEpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4OC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yOTEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI5MjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI5Ni1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjk3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjk4LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMwMi1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzAzOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfZ2V0dGltZXgoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzA0LVx0XHRcdFx0c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMTEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMxMjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzEzLVx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpycSwgaW50IG9uKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzE3LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfdm1jbG9ja19pbmZvID0ge1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMTktXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMyMy1cdC5wcHNcdFx0PSAwLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjQ6XHQuYWRqZmluZVx0PSBwdHBfdm1jbG9ja19hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjU6XHQuYWRqdGltZVx0PSBwdHBfdm1jbG9ja19hZGp0aW1lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjY6XHQuZ2V0dGltZXg2NFx0PSBwdHBfdm1jbG9ja19nZXR0aW1leCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI3Olx0LnNldHRpbWU2NFx0PSBwdHBfdm1jbG9ja19zZXR0aW1lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjg6XHQuZW5hYmxlXHRcdD0gcHRwX3ZtY2xvY2tfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjk6XHQuZ2V0Y3Jvc3N0c3RhbXAgPSBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzMwLX07XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0zMzI9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2sgKnZtY2xvY2tfcHRwX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM1NS1cdHN0LVx1MDAzZWNzX2lkID0gY3NfaWQ7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM1NjpcdHN0LVx1MDAzZXB0cF9jbG9ja19pbmZvID0gcHRwX3ZtY2xvY2tfaW5mbztcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzU3LVx0c3Ryc2NweShzdC1cdTAwM2VwdHBfY2xvY2tfaW5mby5uYW1lLCBzdC1cdTAwM2VuYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQVFAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBSaWdodCwgc28gdGhhdCBwb2ludHMgdG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdmlydHVhbCBtYWNoaW5lIGNsb2NrIHN5bmNocm9uaXphdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9wdHAvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgdG8gdW5kZXJzdGFuZCBpdHMgbWVhbmluZywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFjY29tcGFueWluZyBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgaXQgYWN0dWFsbHkgZW5hYmxlcyBvciBkaXNhYmxlcyB3aXRoaW4gdGhlIFBUUCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxhdGlvbiB0byBWTSBjbG9ja3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9MTIyPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzMy1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTM0OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgUFRQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTM0IOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uIHN0YXJ0cywgZXNwZWNpYWxseSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBQVFAuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGNsZWFybHkgb3JnYW5pemVkLCBwcm9iYWJseSBoaWVyYXJjaGljYWxseSwgd2l0aCBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgY29uY2lzZWx5LiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBvcHRpb25hbCwgd2hpY2ggYXJlIGJ1aWx0LWluIGRlZmF1bHRzLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZHJpdmUgdGhlIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgd2hlcmUgaXQgaXMgaW4gdGhlIGhpZXJhcmNoeSBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF9rdm0uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcbiAxMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gWDg2X1RTQyB8fCBBUk1fQVJDSF9USU1FUlxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19JTlQxMjhcbiAxMzg6XHRcdGRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0tfS1ZNXG4gMTM5Olx0XHRoZWxwXG4gMTQwOlx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdXNpbmcgYSB2aXJ0dWFsIHByZWNpc2lvbiBjbG9ja1xuIDE0MTpcdFx0ICBhZHZlcnRpc2VkIGJ5IHRoZSBoeXBlcnZpc29yLiBUaGlzIGNsb2NrIGlzIG9ubHkgdXNlZnVsIGluIHZpcnR1YWxcbiAxNDI6XHRcdCAgbWFjaGluZXMgd2hlcmUgc3VjaCBhIGRldmljZSBpcyBwcmVzZW50LlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBVbmxpa2UgdGhlIEtWTSB2aXJ0dWFsIFBUUCBjbG9jaywgdGhlIFZNQ0xPQ0sgZGV2aWNlIG9mZmVycyBzdXBwb3J0XG4gMTQ1Olx0XHQgIGZvciByZWxpYWJsZSB0aW1la2VlcGluZyBldmVuIGFjcm9zcyBsaXZlIG1pZ3JhdGlvbi4gU28gdGhpcyBkcml2ZXJcbiAxNDY6XHRcdCAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBLVk0gUFRQIGNsb2NrIGlzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTQ5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxuIDE1MDpcdFxuIDE1MTpcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFQ4MlAzM1xuIDE1MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SURUIDgyUDMzeHh4IFBUUCBjbG9ja1wmIzM0O1xuIDE1MzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgSTJDXG4gMTU0Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNQ2xvY2sgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJIHNlZSwgaXQgaGluZ2VzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBhbmQgYWxzbyBuZWVkcyBgQVJDSF9TVVBQT1JUU19JTlQxMjhgIGFuZCBlaXRoZXIgYFg4Nl9UU0NgIG9yIGBBUk1fQVJDSF9USU1FUmAg4oCTIHdoaWNoIGNvbmZpcm1zIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdm1jbG9ja19taXNjZGV2X21tYXBgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIG1tYXAgaGFuZGxlciBmb3IgdGhlIG1pc2MgZGV2aWNlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgbW1hcCBmcm9tIGdhaW5pbmcgd3JpdGUgYWNjZXNzLCB3aGljaCBpcyBhIGtleSBzZWN1cml0eSBjb25zaWRlcmF0aW9uLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBtbWFwIGhhbmRsZXIgd2l0aGluIGEgbWlzYyBkZXZpY2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBgdm1jbG9ja19taXNjZGV2X21tYXBgIGl0c2VsZiBpcyB0aGUgZnVuY3Rpb24gd2UgbmVlZCB0byBzY3J1dGluaXplLiBUaGUgZHJpdmVyIGludm9sdmVkIGlzIGBwdHBfdm1jbG9ja2AuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIGluIHRoaXMgZHJpdmVyIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgb3IgbmVlZCBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtY2xvY2tfbWlzY2Rldl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzYyPXN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY2LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozNjc6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjgte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzkxLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozOTI6c3RhdGljIHNzaXplX3Qgdm1jbG9ja19taXNjZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zOTMtXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00MzctXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQzODpzdGF0aWMgX19wb2xsX3Qgdm1jbG9ja19taXNjZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICp3YWl0KVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00Mzkte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDU5LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0NjA6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZnApXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ2MS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00NzYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQ3NzpzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmcClcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc4LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ4Mi1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZtY2xvY2tfbWlzY2Rldl9mb3BzID0ge1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg1Olx0Lm9wZW4gPSB2bWNsb2NrX21pc2NkZXZfb3BlbixcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg2Olx0LnJlbGVhc2UgPSB2bWNsb2NrX21pc2NkZXZfcmVsZWFzZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg3Olx0Lm1tYXAgPSB2bWNsb2NrX21pc2NkZXZfbW1hcCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg4Olx0LnJlYWQgPSB2bWNsb2NrX21pc2NkZXZfcmVhZCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg5Olx0LnBvbGwgPSB2bWNsb2NrX21pc2NkZXZfcG9sbCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDkwLX07XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NjI9c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy03MzctXHRpZiAobGUzMl90b19jcHUoc3QtXHUwMDNlY2xrLVx1MDAzZXNpemUpIFx1MDAzZT0gUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjczODpcdFx0c3QtXHUwMDNlbWlzY2Rldi5mb3BzID0gXHUwMDI2dm1jbG9ja19taXNjZGV2X2ZvcHM7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczOS1cdFx0c3QtXHUwMDNlbWlzY2Rldi5uYW1lID0gc3QtXHUwMDNlbmFtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiB0aGUgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBDb250ZXh0KioKClJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAuIFRoYXQmIzM5O3MgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgaXMgcmVsZXZhbnQg4oCTIHRoaXMgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrLCBsaWtlbHkgY29ubmVjdGVkIHRvIHRoaXMgYHZtY2xvY2tgIHN0dWZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIFFFTVU/JiMzNDsuIEFuZCB0aGUgYW5zd2VyIGlzIHllczsgdGhpcyBpcyBhIHZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2suCgpCdXQgaGVyZeKAmXMgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGRldmljZSBhY3R1YWxseSAqY3JlYXRlZCogYnkgUUVNVT8gVGhhdOKAmXMgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gbmVlZHMgdG8gc2hpZnQuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBkcml2ZXIgYWN0dWFsbHkgZ2V0cyBwcm9iZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSB2aXJ0dWFsIG1hY2hpbmUgZGV2aWNlLCBpdCBpcyBsaWtlbHkgYW4gQUNQSSBvciBwbGF0Zm9ybSBkZXZpY2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGB2bWNsb2NrX3Byb2JlYCB0byBjb25maXJtIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhhdCBmdW5jdGlvbiB3aWxsIGxpa2VseSBob2xkIHRoZSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1jbG9ja19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz01MzI9c3RhdGljIGludCB2bWNsb2NrX3NldHVwX2FjcGlfbm90aWZpY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1NS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NTU2OnN0YXRpYyBpbnQgdm1jbG9ja19wcm9iZV9hY3BpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0KVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01NTcte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NTgwPXN0YXRpYyBpcnFyZXR1cm5fdCB2bWNsb2NrX29mX2lycV9oYW5kbGVyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpfc3QpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01ODctXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjU4ODpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmVfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU4OS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NTU9c3RhdGljIHZvaWQgdm1jbG9ja19wdXRfaWR4KHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjY2MjpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNjYzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3My1cdGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Njc0Olx0XHRyZXQgPSB2bWNsb2NrX3Byb2JlX2FjcGkoZGV2LCBzdCk7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3NS1cdGVsc2VcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNjc2LSNlbmRpZlxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2Nzc6XHRcdHJldCA9IHZtY2xvY2tfcHJvYmVfZHQoZGV2LCBzdCk7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3OC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTc4ND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2bWNsb2NrX3BsYXRmb3JtX2RyaXZlciA9IHtcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Nzg1Olx0LnByb2JlXHRcdD0gdm1jbG9ja19wcm9iZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNzg2LVx0LmRyaXZlclx0PSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDQKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2bWNsb2NrYCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdm1jbG9ja2AgZHJpdmVyLiBJdCBhcHBlYXJzIHRvIGJlIGEgcGxhdGZvcm0gZHJpdmVyLCBwcm9iZWQgZWl0aGVyIHRocm91Z2ggQUNQSSBvciB0aGUgRGV2aWNlIFRyZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIFFFTVUgZW11bGF0ZSB0aGlzPyBZZWFoLCBRRU1VICpjYW4qIGVtdWxhdGUgdGhpcyBkZXZpY2UgaWYgaXQmIzM5O3MgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIG1heWJlIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGZha2UgcGxhdGZvcm0gZGV2aWNlLCBidXQgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQuIFN5emthbGxlciBjYW4mIzM5O3QgKmVhc2lseSogY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgcHNldWRvLXN5c2NhbGwgb3IgaXQmIzM5O3MgYSBnZW5lcmljIHRoaW5nLgoKV2FpdCwgdGhvdWdoLCBzeXprYWxsZXIgKmNhbiogdGVzdCBtaXNjIGRldmljZXMgaWYgdGhlIGRldmljZSBub2RlIGlzIHByZXNlbnQsIHdoaWNoIGlzIHdoYXQgd2UgaGF2ZSBoZXJlLiBUaGUgcHJvYmxlbSBpcywgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhhdCBgbW1hcGAgd29uJiMzOTt0IGJlIHJlYWNoYWJsZS4gSG93ZXZlciwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHRoaW5rIHdlICpzaG91bGQqIHN0aWxsIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciwgYW5kIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZS4KCkxldCYjMzk7cyBzZWUuLi4gdGhlIGluc3RydWN0aW9ucyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBCdXQsIGlzIGB2bWNsb2NrYCBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFllcyEgSXQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgY2xvY2sgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBtZWFucyBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLiBTbywgd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIFdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgd2UgbmVlZCAqYm90aCogYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKSSYjMzk7bSBmb2N1c2VkIG9uIHRoZSBzeW1ib2wgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC4gVGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoaXMuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMKaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jCkBAIC0zNzIsNiAmIzQzOzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKCh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRCkKIAkJcmV0dXJuIC1FUk9GUzsKIAomIzQzOwkvKgomIzQzOwkgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvCiYjNDM7CSAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS0mZ3Q7dm1fcGdvZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIGEgUmVhZC1Pbmx5IE1lbW9yeSBNYXBwaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBgdm1jbG9ja19taXNjZGV2X21tYXBgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGB2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyB1c2Vyc3BhY2UgZnJvbSBlc2NhbGF0aW5nIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHJlYWQtd3JpdGUgdXNpbmcgYG1wcm90ZWN0KClgLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYW4gYG1tYXBgIGhhbmRsZXIgZm9yIGEgbWlzYyBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgd3JpdGUgcGVybWlzc2lvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSBjb25uZWN0aW9uIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgYWJvdXQgKndoYXQqIGlzIG1hcHBlZCwgYnV0ICpob3cqIGl0JiMzOTtzIGFjY2Vzc2VkLiBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGlyZWN0IHJpc2sgb2YgaXQgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhpcyBwYXRjaCBpdHNlbGYuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uIG1hcHMgYSAqc2luZ2xlKiBwYWdlIHRvIHVzZXJzcGFjZS4gVGhhdCByYWlzZXMgYSBmbGFnLiBDb3VsZCB0aGF0IHBhZ2UgY29udGFpbiB1bmluaXRpYWxpemVkIGRhdGEgKmJlZm9yZSogdGhlIG1hcHBpbmc/IFRoZSBwYXRjaCwgYXMgaXQgaXMsIGRvZXNuJiMzOTt0IGFkZHJlc3MgdGhlICppbml0aWFsaXphdGlvbiogb2YgdGhhdCBwYWdlLiBJdCBqdXN0IGZvY3VzZXMgb24gcmVzdHJpY3RpbmcgdGhlIHBlcm1pc3Npb25zIGFmdGVyIHRoZSBtYXBwaW5nIGlzIGVzdGFibGlzaGVkLgoKVGhlIGxpa2VseSBleHBsb2l0IHNjZW5hcmlvIHRoaXMgZml4ZXMgaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhhdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgYWxsb3dzIHJlYWQgYWNjZXNzIGluaXRpYWxseSwgYnV0IGNvdWxkIHRoZW4sIHZpYSBgbXByb3RlY3QoKWAsIGJlIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGNvdWxkIGNyZWF0ZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2hlcmUgdXNlcnNwYWNlIGNvdWxkIG1vZGlmeSBhIGtlcm5lbCBwYWdlIHRoYXQgaXMgYmVpbmcgc2hhcmVkLCBvciBwb3RlbnRpYWxseSB1c2VkIGJ5IHRoZSBrZXJuZWwgaW4gc29tZSB3YXkuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoYXQgcG90ZW50aWFsIGFjY2VzcyBjb250cm9sIGJ5cGFzcy4gU28sIG92ZXJhbGwsIGEgc29saWQgcGVybWlzc2lvbiBmaXggYW5kIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGF0IGxlYXN0IGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcbiAzNjM6XHRcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdDtcbiAzNjQ6XHRcdGF0b21pY190IHNlcTtcbiAzNjU6XHR9O1xuIDM2NjpcdFxuIDM2NzpcdHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAzNjg6XHR7XG4gMzY5Olx0XHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlICpmc3QgPSBmcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMzcwOlx0XHRzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QgPSBmc3QtXHUwMDNlc3Q7XG4gMzcxOlx0XG4gMzcyOlx0XHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxuIDM3MzpcdFx0XHRyZXR1cm4gLUVST0ZTO1xuIDM3NDpcdFxuIDM3NTpcdFx0LypcbiAzNzY6XHRcdCAqIFJlc3RyaWN0IHRoZSByZWFkLW9ubHkgbWFwcGluZyBzbyBpdCBjYW5ub3QgYmUgdXBncmFkZWQgdG9cbiAzNzc6XHRcdCAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS5cbiAzNzg6XHRcdCAqL1xuIDM3OTpcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4gMzgwOlx0XG4gMzgxOlx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVx1MDAzZXZtX3Bnb2ZmKVxuIDM4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzODM6XHRcbiAzODQ6XHRcdGlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsXG4gMzg1Olx0XHRcdFx0ICAgICAgIHN0LVx1MDAzZXJlcy5zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgUEFHRV9TSVpFLFxuIDM4NjpcdFx0XHRcdCAgICAgICB2bWEtXHUwMDNldm1fcGFnZV9wcm90KSlcbiAzODc6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gMDtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIHNzaXplX3Qgdm1jbG9ja19taXNjZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLFxuIDM5MzpcdFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIDM5NDpcdHtcbiAzOTU6XHRcdGt0aW1lX3QgZGVhZGxpbmUgPSBrdGltZV9hZGQoa3RpbWVfZ2V0KCksIFZNQ0xPQ0tfTUFYX1dBSVQpO1xuIDM5NjpcdFx0c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSAqZnN0ID0gZnAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDM5NzpcdFx0c3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0ID0gZnN0LVx1MDAzZXN0O1xuIDM5ODpcdFx0dWludDMyX3Qgc2VxLCBvbGRfc2VxO1xuIDM5OTpcdFx0c2l6ZV90IG1heF9jb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MQoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIEl0JiMzOTtzIGxvY2tpbmcgZG93biB0aGF0IG1hcHBlZCBwYWdlLCBzcGVjaWZpY2FsbHkgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGlkZW50aWZpZWQgYnkgYHN0LSZndDtyZXMuc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVGAsIHByZXZlbnRpbmcgYW55IG1vZGlmaWNhdGlvbiBmcm9tIHVzZXJzcGFjZS4gVGhpcyBpcyB0ZXh0Ym9vayBiZWhhdmlvciBmb3IgYSByZWFkLW9ubHkgYG1tYXBgIGhhbmRsZXIuIEl0JiMzOTtzIGEgc3RhbmRhcmQgc2FmZWd1YXJkIGFnYWluc3Qgc29tZW9uZSB0cnlpbmcgdG8gcHVsbCBhIGZhc3Qgb25lIHdpdGggYG1wcm90ZWN0KFBST1RfV1JJVEUpYC4gR29vZCwgZ29vZC4gTm8gb2J2aW91cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29uY2VybnMgaGVyZSwgd2hpY2ggaXMgYWx3YXlzIGEgcmVsaWVmLiBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBJdCYjMzk7cyBhIGNsZWFuLCBleHBlY3RlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuMjM2NTc2NTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTkyMDczNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCB0byBjbGVhciB0aGUgYFZNX01BWVdSSVRFYCBmbGFnIGZyb20gdGhlIFZNQS4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UgZnJvbSB1c2luZyBgbXByb3RlY3QoKWAgdG8gdXBncmFkZSBhIHJlYWQtb25seSBtZW1vcnkgbWFwcGluZyB0byB3cml0YWJsZS4gVGhpcyBpcyBhIHBlcm1pc3Npb24vYWNjZXNzIGNvbnRyb2wgZml4IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHBhcnRpYWxseSBpbml0aWFsaXplZC4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3Rpbmcgb3IgS0FTQU4sIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuMjM2NTgzMjc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMwMjA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ODllYmUxMjc5MjVlNjJjZjNjYzFhMTY2ZDdjNmJmYzhiYmIwZGU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXFxuaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXFxuKysrIGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xcbkBAIC0zNzIsNiArMzcyLDEyIEBAIHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0aWYgKCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxcbiBcXHRcXHRyZXR1cm4gLUVST0ZTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVzdHJpY3QgdGhlIHJlYWQtb25seSBtYXBwaW5nIHNvIGl0IGNhbm5vdCBiZSB1cGdyYWRlZCB0b1xcbitcXHQgKiB3cml0YWJsZSBsYXRlciB3aXRoIG1wcm90ZWN0KCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4rXFxuIFxcdGlmICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS1cXHUwMDNldm1fcGdvZmYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuODE3NjkxMzQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYwMjA3MjMyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmNcbmluZGV4IGVlYmRjZDVlYmMwODAuLmJiMGUxNGJhYzlmMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5AQCAtMzcyLDYgKzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxuIFx0XHRyZXR1cm4gLUVST0ZTO1xuIFxuK1x0LypcbitcdCAqIFJlc3RyaWN0IHRoZSByZWFkLW9ubHkgbWFwcGluZyBzbyBpdCBjYW5ub3QgYmUgdXBncmFkZWQgdG9cbitcdCAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS5cbitcdCAqL1xuK1x0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4rXG4gXHRpZiAodm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVx1MDAzZXZtX3Bnb2ZmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQwLjgxNzY5Mzg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjgzNzkwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIGBwdHBfdm1jbG9jay5jYCBhbmQgTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYmVjYXVzZSB0aGUgcGF0Y2ggcmVtb3ZlcyBgVk1fTUFZV1JJVEVgIGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBwdHBfdm1jbG9jay5jYCBhY3R1YWxseSAqaXMqLiBBaCwgcmlnaHQsIGl0J3MgYSBQVFAgZHJpdmVyIGRlc2lnbmVkIGZvciB2bWNsb2NrLiBBbHJpZ2h0LCB0aGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGlzIGlzIGNvZGUgdGhhdCdzIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIHN5c3RlbXMgSSdtIGNvbmNlcm5lZCB3aXRoLiBJcyB0aGlzIGRyaXZlciBsaWtlbHkgdG8gYmUgdXNlZCBpbiBvdXIgdHlwaWNhbCBRRU1VIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCBzb21ldGhpbmcgd2Ugc2VlIGluIEdDRT8gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBhbmQgYHB0cF92bWNsb2NrLmNgIGluIG91ciBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaWYgaXQncyBldmVuIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgaXQgaXMgYWN0dWFsbHkgYWZmZWN0aW5nIG91ciB1c2UtY2FzZSBvciBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzYWZlbHkgaWdub3JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQ1Ljc0NjA3NjMwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI1NDE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19taXNjZGV2X21tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTM2Mj1zdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzY3OnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM2OC17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2bWNsb2NrX21pc2NkZXZfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDg2LVxcdC5yZWxlYXNlID0gdm1jbG9ja19taXNjZGV2X3JlbGVhc2UsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODc6XFx0Lm1tYXAgPSB2bWNsb2NrX21pc2NkZXZfbW1hcCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ4OC1cXHQucmVhZCA9IHZtY2xvY2tfbWlzY2Rldl9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo0NS44OTg2MjM2NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc5ODI5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXZpY2UgRHJpdmVyJ3MgTWVtb3J5IE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZHJpdmVyJ3Mgc2V0dGluZyB1cCBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlIHdpdGggYG1tYXBgLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZSBpbiB0ZXJtcyBvZiBtZW1vcnkgbWFwcGluZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHB0cF92bWNsb2NrLmNgLiBUaGF0J2xsIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBlbmFibGVkIG9yIHJlcXVpcmVkIHRvIG1ha2UgdGhpcyB3b3JrLiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIHdoaWNoIG9uZXMgYXJlbid0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBzaGFyZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLiBHb3R0YSBzZWUgd2hhdCdzIGNvbmZpZ3VyYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQ5Ljg3ODQ1NzE2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzNzA5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRwX3ZtY2xvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTM0PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE0OC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE0OTpcXHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxcbmRyaXZlcnMvcHRwL0tjb25maWctMTUwLVxcbi0tXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX0tWTSlcXHQrPSBwdHBfa3ZtLm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DSylcXHQrPSBwdHBfdm1jbG9jay5vXFxuZHJpdmVycy9wdHAvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1FPUklRKVxcdCs9IHB0cF9xb3JpcS5vXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTE5Mz1zdGF0aWMgaW50IHZtY2xvY2tfZ2V0X2Nyb3NzdHN0YW1wX2t2bWNsb2NrKHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MjMyOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4oa3RpbWVfdCAqZGV2aWNlX3RpbWUsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yMzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbV9jb3VudGVyLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNTMtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTQ6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc3lzdGVtX2RldmljZV9jcm9zc3RzdGFtcCAqeHRzdGFtcClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjU4LVxcdFxcdFxcdFxcdFxcdFxcdHB0cF9jbG9ja19pbmZvKTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI1OTpcXHRpbnQgcmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sIHN0LFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjYwLVxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNzQtXFx0XFx0XFx0V1JJVEVfT05DRShzdC1cXHUwMDNlc3lzX2NzX2lkLCBzeXN0aW1lX3NuYXBzaG90LmNzX2lkKTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI3NTpcXHRcXHRcXHRyZXQgPSBnZXRfZGV2aWNlX3N5c3RlbV9jcm9zc3RzdGFtcChwdHBfdm1jbG9ja19nZXRfdGltZV9mbixcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI3Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3QsIE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yODYtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyODc6c3RhdGljIGludCBwdHBfdm1jbG9ja19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MjkyOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkzLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjk2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjk3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI5OC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMwMi1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMwMzpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2dldHRpbWV4KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMDQtXFx0XFx0XFx0XFx0c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxMS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMxMjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxMy1cXHRcXHRcXHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzE3LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX3ZtY2xvY2tfaW5mbyA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxOS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMjMtXFx0LnBwc1xcdFxcdD0gMCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNDpcXHQuYWRqZmluZVxcdD0gcHRwX3ZtY2xvY2tfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNTpcXHQuYWRqdGltZVxcdD0gcHRwX3ZtY2xvY2tfYWRqdGltZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNjpcXHQuZ2V0dGltZXg2NFxcdD0gcHRwX3ZtY2xvY2tfZ2V0dGltZXgsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjc6XFx0LnNldHRpbWU2NFxcdD0gcHRwX3ZtY2xvY2tfc2V0dGltZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyODpcXHQuZW5hYmxlXFx0XFx0PSBwdHBfdm1jbG9ja19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjk6XFx0LmdldGNyb3NzdHN0YW1wID0gcHRwX3ZtY2xvY2tfZ2V0Y3Jvc3N0c3RhbXAsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMzAtfTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzMyPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrICp2bWNsb2NrX3B0cF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM1NS1cXHRzdC1cXHUwMDNlY3NfaWQgPSBjc19pZDtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM1NjpcXHRzdC1cXHUwMDNlcHRwX2Nsb2NrX2luZm8gPSBwdHBfdm1jbG9ja19pbmZvO1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzU3LVxcdHN0cnNjcHkoc3QtXFx1MDAzZXB0cF9jbG9ja19pbmZvLm5hbWUsIHN0LVxcdTAwM2VuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NTAuMDMwODg5MzA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTU3NDgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBQVFBfMTU4OF9DTE9DS19WTUNMT0NLYC4gUmlnaHQsIHNvIHRoYXQgcG9pbnRzIHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIHZpcnR1YWwgbWFjaGluZSBjbG9jayBzeW5jaHJvbml6YXRpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBpcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3B0cC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgdG8gdW5kZXJzdGFuZCBpdHMgbWVhbmluZywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFjY29tcGFueWluZyBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgaXQgYWN0dWFsbHkgZW5hYmxlcyBvciBkaXNhYmxlcyB3aXRoaW4gdGhlIFBUUCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxhdGlvbiB0byBWTSBjbG9ja3MuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo1NC4wMTY0NjY3MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTI4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTEyMj1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzMy1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEzNDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTM1LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo1NC4xMjA1OTk3NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE1MDU2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDEzNCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uIHN0YXJ0cywgZXNwZWNpYWxseSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBQVFAuIEknbSBob3BpbmcgaXQncyBjbGVhcmx5IG9yZ2FuaXplZCwgcHJvYmFibHkgaGllcmFyY2hpY2FsbHksIHdpdGggZGVwZW5kZW5jaWVzIGxhaWQgb3V0IGNvbmNpc2VseS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIHdoaWNoIGFyZSBidWlsdC1pbiBkZWZhdWx0cywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGRyaXZlIHRoZSBjb25maWd1cmF0aW9uLiBLbm93aW5nIHdoZXJlIGl0IGlzIGluIHRoZSBoaWVyYXJjaHkgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjU3LjYzNTY2NTkxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHRwX2t2bS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcXG4gMTM1OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBYODZfVFNDIHx8IEFSTV9BUkNIX1RJTUVSXFxuIDEzNzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfSU5UMTI4XFxuIDEzODpcXHRcXHRkZWZhdWx0IFBUUF8xNTg4X0NMT0NLX0tWTVxcbiAxMzk6XFx0XFx0aGVscFxcbiAxNDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHVzaW5nIGEgdmlydHVhbCBwcmVjaXNpb24gY2xvY2tcXG4gMTQxOlxcdFxcdCAgYWR2ZXJ0aXNlZCBieSB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjbG9jayBpcyBvbmx5IHVzZWZ1bCBpbiB2aXJ0dWFsXFxuIDE0MjpcXHRcXHQgIG1hY2hpbmVzIHdoZXJlIHN1Y2ggYSBkZXZpY2UgaXMgcHJlc2VudC5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBVbmxpa2UgdGhlIEtWTSB2aXJ0dWFsIFBUUCBjbG9jaywgdGhlIFZNQ0xPQ0sgZGV2aWNlIG9mZmVycyBzdXBwb3J0XFxuIDE0NTpcXHRcXHQgIGZvciByZWxpYWJsZSB0aW1la2VlcGluZyBldmVuIGFjcm9zcyBsaXZlIG1pZ3JhdGlvbi4gU28gdGhpcyBkcml2ZXJcXG4gMTQ2OlxcdFxcdCAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBLVk0gUFRQIGNsb2NrIGlzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTQ5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHRwX3ZtY2xvY2suXFxuIDE1MDpcXHRcXG4gMTUxOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFQ4MlAzM1xcbiAxNTI6XFx0XFx0dHJpc3RhdGUgXFxcIklEVCA4MlAzM3h4eCBQVFAgY2xvY2tcXFwiXFxuIDE1MzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLIFxcdTAwMjZcXHUwMDI2IEkyQ1xcbiAxNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjU3LjYzNjExNDI1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgyOTk4NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1DbG9jayBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBQVFBfMTU4OF9DTE9DS19WTUNMT0NLYC4gSSBzZWUsIGl0IGhpbmdlcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZSwgYW5kIGFsc28gbmVlZHMgYEFSQ0hfU1VQUE9SVFNfSU5UMTI4YCBhbmQgZWl0aGVyIGBYODZfVFNDYCBvciBgQVJNX0FSQ0hfVElNRVJgIOKAkyB3aGljaCBjb25maXJtcyB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBtbWFwIGhhbmRsZXIgZm9yIHRoZSBtaXNjIGRldmljZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgcHJldmVudGluZyB0aGUgbW1hcCBmcm9tIGdhaW5pbmcgd3JpdGUgYWNjZXNzLCB3aGljaCBpcyBhIGtleSBzZWN1cml0eSBjb25zaWRlcmF0aW9uLlxuXG5HaXZlbiB0aGF0IGl0J3MgYW4gbW1hcCBoYW5kbGVyIHdpdGhpbiBhIG1pc2MgZGV2aWNlLCBJIGltbWVkaWF0ZWx5IHRoaW5rIHRoaXMgd2FycmFudHMgZnV6emluZy4gYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBpdHNlbGYgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gVGhlIGRyaXZlciBpbnZvbHZlZCBpcyBgcHRwX3ZtY2xvY2tgLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LCBJIHNob3VsZCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIG9yIGVudHJ5IHBvaW50cyBpbiB0aGlzIGRyaXZlciB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IG9yIG5lZWQgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTY6MDIuMzE5MTE1NTk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1NTg3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19taXNjZGV2X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzYyPXN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjYtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozNjc6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzkxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzkyOnN0YXRpYyBzc2l6ZV90IHZtY2xvY2tfbWlzY2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM5My1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQzNy1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQzODpzdGF0aWMgX19wb2xsX3Qgdm1jbG9ja19taXNjZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICp3YWl0KVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDU5LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDYwOnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDYxLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDc3OnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDgyLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZtY2xvY2tfbWlzY2Rldl9mb3BzID0ge1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDg0LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg1OlxcdC5vcGVuID0gdm1jbG9ja19taXNjZGV2X29wZW4sXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODY6XFx0LnJlbGVhc2UgPSB2bWNsb2NrX21pc2NkZXZfcmVsZWFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQ4NzpcXHQubW1hcCA9IHZtY2xvY2tfbWlzY2Rldl9tbWFwLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg4OlxcdC5yZWFkID0gdm1jbG9ja19taXNjZGV2X3JlYWQsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODk6XFx0LnBvbGwgPSB2bWNsb2NrX21pc2NkZXZfcG9sbCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ5MC19O1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NjI9c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczNy1cXHRpZiAobGUzMl90b19jcHUoc3QtXFx1MDAzZWNsay1cXHUwMDNlc2l6ZSkgXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo3Mzg6XFx0XFx0c3QtXFx1MDAzZW1pc2NkZXYuZm9wcyA9IFxcdTAwMjZ2bWNsb2NrX21pc2NkZXZfZm9wcztcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczOS1cXHRcXHRzdC1cXHUwMDNlbWlzY2Rldi5uYW1lID0gc3QtXFx1MDAzZW5hbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjAyLjQ0MzY3OTQxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTM2NTU2MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgdm1jbG9ja19taXNjZGV2X21tYXBgLiBUaGF0J3MgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgaXMgcmVsZXZhbnQg4oCTIHRoaXMgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrLCBsaWtlbHkgY29ubmVjdGVkIHRvIHRoaXMgYHZtY2xvY2tgIHN0dWZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIFFFTVU/XCIuIEFuZCB0aGUgYW5zd2VyIGlzIHllczsgdGhpcyBpcyBhIHZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2suXG5cbkJ1dCBoZXJl4oCZcyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgZGV2aWNlIGFjdHVhbGx5ICpjcmVhdGVkKiBieSBRRU1VPyBUaGF04oCZcyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiBuZWVkcyB0byBzaGlmdC4gSSBzaG91bGQgYmUgbG9va2luZyBhdCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBnZXRzIHByb2JlZC4gR2l2ZW4gdGhhdCBpdCdzIGEgdmlydHVhbCBtYWNoaW5lIGRldmljZSwgaXQgaXMgbGlrZWx5IGFuIEFDUEkgb3IgcGxhdGZvcm0gZGV2aWNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGB2bWNsb2NrX3Byb2JlYCB0byBjb25maXJtIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhhdCBmdW5jdGlvbiB3aWxsIGxpa2VseSBob2xkIHRoZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjA3LjU4MDIzODg3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTI3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NTMyPXN0YXRpYyBpbnQgdm1jbG9ja19zZXR1cF9hY3BpX25vdGlmaWNhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1NS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjU1NjpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmVfYWNwaShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdClcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1Ny17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTU4MD1zdGF0aWMgaXJxcmV0dXJuX3Qgdm1jbG9ja19vZl9pcnFfaGFuZGxlcihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqX3N0KVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01ODctXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo1ODg6c3RhdGljIGludCB2bWNsb2NrX3Byb2JlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0KVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNTg5LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NjU1PXN0YXRpYyB2b2lkIHZtY2xvY2tfcHV0X2lkeCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjEtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2NjI6c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjMte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NzMtXFx0aWYgKGhhc19hY3BpX2NvbXBhbmlvbihkZXYpKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Njc0OlxcdFxcdHJldCA9IHZtY2xvY2tfcHJvYmVfYWNwaShkZXYsIHN0KTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3NS1cXHRlbHNlXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NzYtI2VuZGlmXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2Nzc6XFx0XFx0cmV0ID0gdm1jbG9ja19wcm9iZV9kdChkZXYsIHN0KTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3OC1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9Nzg0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZtY2xvY2tfcGxhdGZvcm1fZHJpdmVyID0ge1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Nzg1OlxcdC5wcm9iZVxcdFxcdD0gdm1jbG9ja19wcm9iZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTc4Ni1cXHQuZHJpdmVyXFx0PSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjA3LjY1MzU5NjM2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTYyOTM5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2bWNsb2NrYCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHZtY2xvY2tgIGRyaXZlci4gSXQgYXBwZWFycyB0byBiZSBhIHBsYXRmb3JtIGRyaXZlciwgcHJvYmVkIGVpdGhlciB0aHJvdWdoIEFDUEkgb3IgdGhlIERldmljZSBUcmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBRRU1VIGVtdWxhdGUgdGhpcz8gWWVhaCwgUUVNVSAqY2FuKiBlbXVsYXRlIHRoaXMgZGV2aWNlIGlmIGl0J3MgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIG1heWJlIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGZha2UgcGxhdGZvcm0gZGV2aWNlLCBidXQgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQuIFN5emthbGxlciBjYW4ndCAqZWFzaWx5KiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHBzZXVkby1zeXNjYWxsIG9yIGl0J3MgYSBnZW5lcmljIHRoaW5nLlxuXG5XYWl0LCB0aG91Z2gsIHN5emthbGxlciAqY2FuKiB0ZXN0IG1pc2MgZGV2aWNlcyBpZiB0aGUgZGV2aWNlIG5vZGUgaXMgcHJlc2VudCwgd2hpY2ggaXMgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBwcm9ibGVtIGlzLCBpZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoYXQgYG1tYXBgIHdvbid0IGJlIHJlYWNoYWJsZS4gSG93ZXZlciwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHRoaW5rIHdlICpzaG91bGQqIHN0aWxsIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCBhbmQgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LCB0aGVuIGl0ICppcyogcmVhY2hhYmxlLlxuXG5MZXQncyBzZWUuLi4gdGhlIGluc3RydWN0aW9ucyBzYXkgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBCdXQsIGlzIGB2bWNsb2NrYCBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFllcyEgSXQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgY2xvY2sgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBtZWFucyBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIFdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgd2UgbmVlZCAqYm90aCogYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLlxuXG5JJ20gZm9jdXNlZCBvbiB0aGUgc3ltYm9sIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzLiBUaW1lIHRvIHNldCB0aG9zZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ0LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoxNi42MTY1Mzg0MzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE4NzEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1jbG9ja19taXNjZGV2X21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGVyIG9mIHRoZSB2bWNsb2NrIG1pc2MgZGV2aWNlIHRvIGNsZWFyIHRoZSBWTV9NQVlXUklURSBmbGFnLCBwcmV2ZW50aW5nIHRoZSBtYXBwaW5nIGZyb20gYmVpbmcgdXBncmFkZWQgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpLCBzbyBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTY6MTYuODM4NDIwMjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NzMzODg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjE2Ljg0MDM2MzY0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE1NTM5MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCB0byBjbGVhciB0aGUgYFZNX01BWVdSSVRFYCBmbGFnIGZyb20gdGhlIFZNQS4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UgZnJvbSB1c2luZyBgbXByb3RlY3QoKWAgdG8gdXBncmFkZSBhIHJlYWQtb25seSBtZW1vcnkgbWFwcGluZyB0byB3cml0YWJsZS4gVGhpcyBpcyBhIHBlcm1pc3Npb24vYWNjZXNzIGNvbnRyb2wgZml4IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHBhcnRpYWxseSBpbml0aWFsaXplZC4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3Rpbmcgb3IgS0FTQU4sIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4OWViZTEyNzkyNWU2MmNmM2NjMWExNjZkN2M2YmZjOGJiYjBkZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxODo1NTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5pbmRleCBlZWJkY2Q1ZWJjMDgwLi5iYjBlMTRiYWM5ZjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuQEAgLTM3Miw2ICszNzIsMTIgQEAgc3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRClcbiBcdFx0cmV0dXJuIC1FUk9GUztcbiBcbitcdC8qXG4rXHQgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvXG4rXHQgKiB3cml0YWJsZSBsYXRlciB3aXRoIG1wcm90ZWN0KCkuXG4rXHQgKi9cbitcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS1cdTAwM2V2bV9wZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoxNi44NDAzNjQ5MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MTg0ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyBvZiBhIFJlYWQtT25seSBNZW1vcnkgTWFwcGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYC4gSXQncyBtb2RpZnlpbmcgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBgdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUuIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyB1c2Vyc3BhY2UgZnJvbSBlc2NhbGF0aW5nIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHJlYWQtd3JpdGUgdXNpbmcgYG1wcm90ZWN0KClgLlxuXG5MZXQncyBkaXZlIGRlZXBlci4gVGhlIHBhdGNoIG1vZGlmaWVzIGFuIGBtbWFwYCBoYW5kbGVyIGZvciBhIG1pc2MgZGV2aWNlLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlbW92YWwgb2YgdGhlIHdyaXRlIHBlcm1pc3Npb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJ1bGUgb3V0IGFueSBpbW1lZGlhdGUgY29ubmVjdGlvbiB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgKndoYXQqIGlzIG1hcHBlZCwgYnV0ICpob3cqIGl0J3MgYWNjZXNzZWQuIFRoZXJlJ3Mgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRpcmVjdCByaXNrIG9mIGl0IGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2UgdmlhIHRoaXMgcGF0Y2ggaXRzZWxmLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uIG1hcHMgYSAqc2luZ2xlKiBwYWdlIHRvIHVzZXJzcGFjZS4gVGhhdCByYWlzZXMgYSBmbGFnLiBDb3VsZCB0aGF0IHBhZ2UgY29udGFpbiB1bmluaXRpYWxpemVkIGRhdGEgKmJlZm9yZSogdGhlIG1hcHBpbmc/IFRoZSBwYXRjaCwgYXMgaXQgaXMsIGRvZXNuJ3QgYWRkcmVzcyB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGF0IHBhZ2UuIEl0IGp1c3QgZm9jdXNlcyBvbiByZXN0cmljdGluZyB0aGUgcGVybWlzc2lvbnMgYWZ0ZXIgdGhlIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQuXG5cblRoZSBsaWtlbHkgZXhwbG9pdCBzY2VuYXJpbyB0aGlzIGZpeGVzIGlzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoYXQgdGhlIHJlYWQtb25seSBtYXBwaW5nIGFsbG93cyByZWFkIGFjY2VzcyBpbml0aWFsbHksIGJ1dCBjb3VsZCB0aGVuLCB2aWEgYG1wcm90ZWN0KClgLCBiZSB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBjb3VsZCBjcmVhdGUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHdoZXJlIHVzZXJzcGFjZSBjb3VsZCBtb2RpZnkgYSBrZXJuZWwgcGFnZSB0aGF0IGlzIGJlaW5nIHNoYXJlZCwgb3IgcG90ZW50aWFsbHkgdXNlZCBieSB0aGUga2VybmVsIGluIHNvbWUgd2F5LiBUaGUgcGF0Y2ggaXMgcHJldmVudGluZyB0aGF0IHBvdGVudGlhbCBhY2Nlc3MgY29udHJvbCBieXBhc3MuIFNvLCBvdmVyYWxsLCBhIHNvbGlkIHBlcm1pc3Npb24gZml4IGFuZCBub3RoaW5nIHRvIGRvIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBhdCBsZWFzdCBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjI0LjExMjIxNjQyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcXG4gMzYzOlxcdFxcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdDtcXG4gMzY0OlxcdFxcdGF0b21pY190IHNlcTtcXG4gMzY1OlxcdH07XFxuIDM2NjpcXHRcXG4gMzY3OlxcdHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMzY4OlxcdHtcXG4gMzY5OlxcdFxcdHN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUgKmZzdCA9IGZwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDM3MDpcXHRcXHRzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QgPSBmc3QtXFx1MDAzZXN0O1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fUkVBRHxWTV9XUklURSkpICE9IFZNX1JFQUQpXFxuIDM3MzpcXHRcXHRcXHRyZXR1cm4gLUVST0ZTO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHQvKlxcbiAzNzY6XFx0XFx0ICogUmVzdHJpY3QgdGhlIHJlYWQtb25seSBtYXBwaW5nIHNvIGl0IGNhbm5vdCBiZSB1cGdyYWRlZCB0b1xcbiAzNzc6XFx0XFx0ICogd3JpdGFibGUgbGF0ZXIgd2l0aCBtcHJvdGVjdCgpLlxcbiAzNzg6XFx0XFx0ICovXFxuIDM3OTpcXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVxcdTAwM2V2bV9wZ29mZilcXG4gMzgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCxcXG4gMzg1OlxcdFxcdFxcdFxcdCAgICAgICBzdC1cXHUwMDNlcmVzLnN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIFBBR0VfU0laRSxcXG4gMzg2OlxcdFxcdFxcdFxcdCAgICAgICB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCkpXFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0cmV0dXJuIDA7XFxuIDM5MDpcXHR9XFxuIDM5MTpcXHRcXG4gMzkyOlxcdHN0YXRpYyBzc2l6ZV90IHZtY2xvY2tfbWlzY2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdGt0aW1lX3QgZGVhZGxpbmUgPSBrdGltZV9hZGQoa3RpbWVfZ2V0KCksIFZNQ0xPQ0tfTUFYX1dBSVQpO1xcbiAzOTY6XFx0XFx0c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSAqZnN0ID0gZnAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMzk3OlxcdFxcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdCA9IGZzdC1cXHUwMDNlc3Q7XFxuIDM5ODpcXHRcXHR1aW50MzJfdCBzZXEsIG9sZF9zZXE7XFxuIDM5OTpcXHRcXHRzaXplX3QgbWF4X2NvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoyNC4xMTIzMzYxMTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MzM5MDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB3aGF0IGl0J3MgZG9pbmcuIEl0J3MgbG9ja2luZyBkb3duIHRoYXQgbWFwcGVkIHBhZ2UsIHNwZWNpZmljYWxseSB0aGUgSS9PIG1lbW9yeSByZWdpb24gaWRlbnRpZmllZCBieSBgc3QtXHUwMDNlcmVzLnN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUYCwgcHJldmVudGluZyBhbnkgbW9kaWZpY2F0aW9uIGZyb20gdXNlcnNwYWNlLiBUaGlzIGlzIHRleHRib29rIGJlaGF2aW9yIGZvciBhIHJlYWQtb25seSBgbW1hcGAgaGFuZGxlci4gSXQncyBhIHN0YW5kYXJkIHNhZmVndWFyZCBhZ2FpbnN0IHNvbWVvbmUgdHJ5aW5nIHRvIHB1bGwgYSBmYXN0IG9uZSB3aXRoIGBtcHJvdGVjdChQUk9UX1dSSVRFKWAuIEdvb2QsIGdvb2QuIE5vIG9idmlvdXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvbmNlcm5zIGhlcmUsIHdoaWNoIGlzIGFsd2F5cyBhIHJlbGllZi4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gSXQncyBhIGNsZWFuLCBleHBlY3RlZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTEsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoyOC45OTU3Mjk2NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdm1jbG9ja19taXNjZGV2X21tYXBgIHRvIGNsZWFyIHRoZSBgVk1fTUFZV1JJVEVgIGZsYWcgZnJvbSB0aGUgVk1BLiBUaGlzIHByZXZlbnRzIHVzZXJzcGFjZSBmcm9tIHVzaW5nIGBtcHJvdGVjdCgpYCB0byB1cGdyYWRlIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgcGVybWlzc2lvbi9hY2Nlc3MgY29udHJvbCBmaXggYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZyBvciBLQVNBTiwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhvc74[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 18:53:39 +0000 UTC FinishedAt: 2026-08-13 18:56:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_VMCLOCK", "PTP_1588_CLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9006c116dd111d457bf5d074990210f70a4ad2c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTP_1588_CLOCK_VMCLOCK", "PTP_1588_CLOCK" ], "series_id": "52c0aa50-74d4-4163-8ada-7aa4ee9fde80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vmclock_miscdev_mmap" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0smIzM0OywKICAgICYjMzQ7UFRQXzE1ODhfQ0xPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWNsb2NrX21pc2NkZXZfbW1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5pbmRleCBlZWJkY2Q1ZWJjMDgwLi5iYjBlMTRiYWM5ZjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuQEAgLTM3Miw2ICYjNDM7MzcyLDEyIEBAIHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGlmICgodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiAoVk1fUkVBRHxWTV9XUklURSkpICE9IFZNX1JFQUQpXG4gXHRcdHJldHVybiAtRVJPRlM7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvXG4mIzQzO1x0ICogd3JpdGFibGUgbGF0ZXIgd2l0aCBtcHJvdGVjdCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpO1xuJiM0MztcbiBcdGlmICh2bWEtXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3N0YXJ0ICE9IFBBR0VfU0laRSB8fCB2bWEtXHUwMDNldm1fcGdvZmYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMKaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jCkBAIC0zNzIsNiAmIzQzOzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKCh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRCkKIAkJcmV0dXJuIC1FUk9GUzsKIAomIzQzOwkvKgomIzQzOwkgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvCiYjNDM7CSAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS0mZ3Q7dm1fcGdvZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIGBwdHBfdm1jbG9jay5jYCBhbmQgTWVtb3J5IE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIGJlY2F1c2UgdGhlIHBhdGNoIHJlbW92ZXMgYFZNX01BWVdSSVRFYCBmcm9tIGB2bWEtJmd0O3ZtX2ZsYWdzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBwdHBfdm1jbG9jay5jYCBhY3R1YWxseSAqaXMqLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGEgUFRQIGRyaXZlciBkZXNpZ25lZCBmb3Igdm1jbG9jay4gQWxyaWdodCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgY29kZSB0aGF0JiMzOTtzIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIHN5c3RlbXMgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4gSXMgdGhpcyBkcml2ZXIgbGlrZWx5IHRvIGJlIHVzZWQgaW4gb3VyIHR5cGljYWwgUUVNVSBjb25maWd1cmF0aW9ucz8gSXMgaXQgc29tZXRoaW5nIHdlIHNlZSBpbiBHQ0U/IEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgdm1jbG9ja19taXNjZGV2X21tYXBgIGFuZCBgcHRwX3ZtY2xvY2suY2AgaW4gb3VyIGNvZGViYXNlIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBldmVuIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgaXQgaXMgYWN0dWFsbHkgYWZmZWN0aW5nIG91ciB1c2UtY2FzZSBvciBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzYWZlbHkgaWdub3JlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNsb2NrX21pc2NkZXZfbW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0zNjI9c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM2NzpzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM2OC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz00ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdm1jbG9ja19taXNjZGV2X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODYtXHQucmVsZWFzZSA9IHZtY2xvY2tfbWlzY2Rldl9yZWxlYXNlLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODc6XHQubW1hcCA9IHZtY2xvY2tfbWlzY2Rldl9tbWFwLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODgtXHQucmVhZCA9IHZtY2xvY2tfbWlzY2Rldl9yZWFkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXZpY2UgRHJpdmVyJiMzOTtzIE1lbW9yeSBNYXBwaW5nKioKCkFscmlnaHQsIHNvIHRoZSBkcml2ZXImIzM5O3Mgc2V0dGluZyB1cCBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlIHdpdGggYG1tYXBgLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUgaW4gdGVybXMgb2YgbWVtb3J5IG1hcHBpbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZm9yIGBwdHBfdm1jbG9jay5jYC4gVGhhdCYjMzk7bGwgdGVsbCBtZSB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgcmVxdWlyZWQgdG8gbWFrZSB0aGlzIHdvcmsuIEtub3dpbmcgdGhlIEtjb25maWcgb3B0aW9ucyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggb25lcyBhcmVuJiMzOTt0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBzaGFyZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLiBHb3R0YSBzZWUgd2hhdCYjMzk7cyBjb25maWd1cmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRwX3ZtY2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvS2NvbmZpZz0xMzQ9Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE0OC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9wdHAvS2NvbmZpZzoxNDk6XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxuZHJpdmVycy9wdHAvS2NvbmZpZy0xNTAtXG4tLVxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX0tWTSlcdCYjNDM7PSBwdHBfa3ZtLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19WTUNMT0NLKVx0JiM0Mzs9IHB0cF92bWNsb2NrLm9cbmRyaXZlcnMvcHRwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19RT1JJUSlcdCYjNDM7PSBwdHBfcW9yaXEub1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MTkzPXN0YXRpYyBpbnQgdm1jbG9ja19nZXRfY3Jvc3N0c3RhbXBfa3ZtY2xvY2soc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMxLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyMzI6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRfdGltZV9mbihrdGltZV90ICpkZXZpY2VfdGltZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMzLVx0XHRcdFx0ICAgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbV9jb3VudGVyLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjUzLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTQ6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjU1LVx0XHRcdFx0ICAgICAgc3RydWN0IHN5c3RlbV9kZXZpY2VfY3Jvc3N0c3RhbXAgKnh0c3RhbXApXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNTgtXHRcdFx0XHRcdFx0cHRwX2Nsb2NrX2luZm8pO1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTk6XHRpbnQgcmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sIHN0LFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNjAtXHRcdFx0XHRcdFx0TlVMTCwgeHRzdGFtcCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNzQtXHRcdFx0V1JJVEVfT05DRShzdC1cdTAwM2VzeXNfY3NfaWQsIHN5c3RpbWVfc25hcHNob3QuY3NfaWQpO1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNzU6XHRcdFx0cmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI3Ni1cdFx0XHRcdFx0XHRcdCAgICBzdCwgTlVMTCwgeHRzdGFtcCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yODYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI4NzpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgZGVsdGEpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI4OC17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yOTEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI5MjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI5Ni1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjk3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjk4LVx0XHRcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMwMi1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzAzOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfZ2V0dGltZXgoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzA0LVx0XHRcdFx0c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMTEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMxMjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzEzLVx0XHRcdCAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpycSwgaW50IG9uKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzE3LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfdm1jbG9ja19pbmZvID0ge1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMTktXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMyMy1cdC5wcHNcdFx0PSAwLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjQ6XHQuYWRqZmluZVx0PSBwdHBfdm1jbG9ja19hZGpmaW5lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjU6XHQuYWRqdGltZVx0PSBwdHBfdm1jbG9ja19hZGp0aW1lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjY6XHQuZ2V0dGltZXg2NFx0PSBwdHBfdm1jbG9ja19nZXR0aW1leCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzI3Olx0LnNldHRpbWU2NFx0PSBwdHBfdm1jbG9ja19zZXR0aW1lLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjg6XHQuZW5hYmxlXHRcdD0gcHRwX3ZtY2xvY2tfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjk6XHQuZ2V0Y3Jvc3N0c3RhbXAgPSBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzMwLX07XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz0zMzI9c3RhdGljIHN0cnVjdCBwdHBfY2xvY2sgKnZtY2xvY2tfcHRwX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM1NS1cdHN0LVx1MDAzZWNzX2lkID0gY3NfaWQ7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM1NjpcdHN0LVx1MDAzZXB0cF9jbG9ja19pbmZvID0gcHRwX3ZtY2xvY2tfaW5mbztcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzU3LVx0c3Ryc2NweShzdC1cdTAwM2VwdHBfY2xvY2tfaW5mby5uYW1lLCBzdC1cdTAwM2VuYW1lKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQVFAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBSaWdodCwgc28gdGhhdCBwb2ludHMgdG8gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdmlydHVhbCBtYWNoaW5lIGNsb2NrIHN5bmNocm9uaXphdGlvbiwgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9wdHAvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgdG8gdW5kZXJzdGFuZCBpdHMgbWVhbmluZywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFjY29tcGFueWluZyBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgaXQgYWN0dWFsbHkgZW5hYmxlcyBvciBkaXNhYmxlcyB3aXRoaW4gdGhlIFBUUCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxhdGlvbiB0byBWTSBjbG9ja3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWc9MTIyPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzMy1cbmRyaXZlcnMvcHRwL0tjb25maWc6MTM0OmNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzNS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgUFRQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvcHRwL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTM0IOKAkyB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uIHN0YXJ0cywgZXNwZWNpYWxseSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBQVFAuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIGNsZWFybHkgb3JnYW5pemVkLCBwcm9iYWJseSBoaWVyYXJjaGljYWxseSwgd2l0aCBkZXBlbmRlbmNpZXMgbGFpZCBvdXQgY29uY2lzZWx5LiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBvcHRpb25hbCwgd2hpY2ggYXJlIGJ1aWx0LWluIGRlZmF1bHRzLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZHJpdmUgdGhlIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgd2hlcmUgaXQgaXMgaW4gdGhlIGhpZXJhcmNoeSBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF9rdm0uXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcbiAxMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2tcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gWDg2X1RTQyB8fCBBUk1fQVJDSF9USU1FUlxuIDEzNzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgQVJDSF9TVVBQT1JUU19JTlQxMjhcbiAxMzg6XHRcdGRlZmF1bHQgUFRQXzE1ODhfQ0xPQ0tfS1ZNXG4gMTM5Olx0XHRoZWxwXG4gMTQwOlx0XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdXNpbmcgYSB2aXJ0dWFsIHByZWNpc2lvbiBjbG9ja1xuIDE0MTpcdFx0ICBhZHZlcnRpc2VkIGJ5IHRoZSBoeXBlcnZpc29yLiBUaGlzIGNsb2NrIGlzIG9ubHkgdXNlZnVsIGluIHZpcnR1YWxcbiAxNDI6XHRcdCAgbWFjaGluZXMgd2hlcmUgc3VjaCBhIGRldmljZSBpcyBwcmVzZW50LlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBVbmxpa2UgdGhlIEtWTSB2aXJ0dWFsIFBUUCBjbG9jaywgdGhlIFZNQ0xPQ0sgZGV2aWNlIG9mZmVycyBzdXBwb3J0XG4gMTQ1Olx0XHQgIGZvciByZWxpYWJsZSB0aW1la2VlcGluZyBldmVuIGFjcm9zcyBsaXZlIG1pZ3JhdGlvbi4gU28gdGhpcyBkcml2ZXJcbiAxNDY6XHRcdCAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBLVk0gUFRQIGNsb2NrIGlzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTQ5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxuIDE1MDpcdFxuIDE1MTpcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFQ4MlAzM1xuIDE1MjpcdFx0dHJpc3RhdGUgXCYjMzQ7SURUIDgyUDMzeHh4IFBUUCBjbG9ja1wmIzM0O1xuIDE1MzpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DSyBcdTAwMjZcdTAwMjYgSTJDXG4gMTU0Olx0XHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZNQ2xvY2sgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJIHNlZSwgaXQgaGluZ2VzIG9uIGBQVFBfMTU4OF9DTE9DS2AsIHdoaWNoIG1ha2VzIHNlbnNlLCBhbmQgYWxzbyBuZWVkcyBgQVJDSF9TVVBQT1JUU19JTlQxMjhgIGFuZCBlaXRoZXIgYFg4Nl9UU0NgIG9yIGBBUk1fQVJDSF9USU1FUmAg4oCTIHdoaWNoIGNvbmZpcm1zIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdm1jbG9ja19taXNjZGV2X21tYXBgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIG1tYXAgaGFuZGxlciBmb3IgdGhlIG1pc2MgZGV2aWNlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgbW1hcCBmcm9tIGdhaW5pbmcgd3JpdGUgYWNjZXNzLCB3aGljaCBpcyBhIGtleSBzZWN1cml0eSBjb25zaWRlcmF0aW9uLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBtbWFwIGhhbmRsZXIgd2l0aGluIGEgbWlzYyBkZXZpY2UsIEkgaW1tZWRpYXRlbHkgdGhpbmsgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBgdm1jbG9ja19taXNjZGV2X21tYXBgIGl0c2VsZiBpcyB0aGUgZnVuY3Rpb24gd2UgbmVlZCB0byBzY3J1dGluaXplLiBUaGUgZHJpdmVyIGludm9sdmVkIGlzIGBwdHBfdm1jbG9ja2AuIE5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIGluIHRoaXMgZHJpdmVyIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgb3IgbmVlZCBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtY2xvY2tfbWlzY2Rldl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzYyPXN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY2LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozNjc6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjgte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzkxLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozOTI6c3RhdGljIHNzaXplX3Qgdm1jbG9ja19taXNjZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zOTMtXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00MzctXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQzODpzdGF0aWMgX19wb2xsX3Qgdm1jbG9ja19taXNjZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICp3YWl0KVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00Mzkte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDU5LVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0NjA6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZnApXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ2MS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00NzYtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQ3NzpzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmcClcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc4LXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ4Mi1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZtY2xvY2tfbWlzY2Rldl9mb3BzID0ge1xuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy00ODQtXHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg1Olx0Lm9wZW4gPSB2bWNsb2NrX21pc2NkZXZfb3BlbixcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg2Olx0LnJlbGVhc2UgPSB2bWNsb2NrX21pc2NkZXZfcmVsZWFzZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg3Olx0Lm1tYXAgPSB2bWNsb2NrX21pc2NkZXZfbW1hcCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg4Olx0LnJlYWQgPSB2bWNsb2NrX21pc2NkZXZfcmVhZCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg5Olx0LnBvbGwgPSB2bWNsb2NrX21pc2NkZXZfcG9sbCxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDkwLX07XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NjI9c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy03MzctXHRpZiAobGUzMl90b19jcHUoc3QtXHUwMDNlY2xrLVx1MDAzZXNpemUpIFx1MDAzZT0gUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjczODpcdFx0c3QtXHUwMDNlbWlzY2Rldi5mb3BzID0gXHUwMDI2dm1jbG9ja19taXNjZGV2X2ZvcHM7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczOS1cdFx0c3QtXHUwMDNlbWlzY2Rldi5uYW1lID0gc3QtXHUwMDNlbmFtZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipNeSBBbmFseXNpcyBvZiB0aGUgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBDb250ZXh0KioKClJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAuIFRoYXQmIzM5O3MgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgaXMgcmVsZXZhbnQg4oCTIHRoaXMgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrLCBsaWtlbHkgY29ubmVjdGVkIHRvIHRoaXMgYHZtY2xvY2tgIHN0dWZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIFFFTVU/JiMzNDsuIEFuZCB0aGUgYW5zd2VyIGlzIHllczsgdGhpcyBpcyBhIHZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2suCgpCdXQgaGVyZeKAmXMgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIGRldmljZSBhY3R1YWxseSAqY3JlYXRlZCogYnkgUUVNVT8gVGhhdOKAmXMgd2hlcmUgdGhlIGludmVzdGlnYXRpb24gbmVlZHMgdG8gc2hpZnQuIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IHRoZSBkcml2ZXIgYWN0dWFsbHkgZ2V0cyBwcm9iZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSB2aXJ0dWFsIG1hY2hpbmUgZGV2aWNlLCBpdCBpcyBsaWtlbHkgYW4gQUNQSSBvciBwbGF0Zm9ybSBkZXZpY2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGB2bWNsb2NrX3Byb2JlYCB0byBjb25maXJtIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhhdCBmdW5jdGlvbiB3aWxsIGxpa2VseSBob2xkIHRoZSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1jbG9ja19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz01MzI9c3RhdGljIGludCB2bWNsb2NrX3NldHVwX2FjcGlfbm90aWZpY2F0aW9uKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1NS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NTU2OnN0YXRpYyBpbnQgdm1jbG9ja19wcm9iZV9hY3BpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0KVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01NTcte1xuLS1cbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NTgwPXN0YXRpYyBpcnFyZXR1cm5fdCB2bWNsb2NrX29mX2lycV9oYW5kbGVyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpfc3QpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01ODctXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjU4ODpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmVfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QpXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU4OS17XG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NTU9c3RhdGljIHZvaWQgdm1jbG9ja19wdXRfaWR4KHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjEtXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjY2MjpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNjYzLXtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3My1cdGlmIChoYXNfYWNwaV9jb21wYW5pb24oZGV2KSlcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Njc0Olx0XHRyZXQgPSB2bWNsb2NrX3Byb2JlX2FjcGkoZGV2LCBzdCk7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3NS1cdGVsc2VcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNjc2LSNlbmRpZlxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2Nzc6XHRcdHJldCA9IHZtY2xvY2tfcHJvYmVfZHQoZGV2LCBzdCk7XG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3OC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTc4ND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2bWNsb2NrX3BsYXRmb3JtX2RyaXZlciA9IHtcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Nzg1Olx0LnByb2JlXHRcdD0gdm1jbG9ja19wcm9iZSxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNzg2LVx0LmRyaXZlclx0PSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDQKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2bWNsb2NrYCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgdm1jbG9ja2AgZHJpdmVyLiBJdCBhcHBlYXJzIHRvIGJlIGEgcGxhdGZvcm0gZHJpdmVyLCBwcm9iZWQgZWl0aGVyIHRocm91Z2ggQUNQSSBvciB0aGUgRGV2aWNlIFRyZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIFFFTVUgZW11bGF0ZSB0aGlzPyBZZWFoLCBRRU1VICpjYW4qIGVtdWxhdGUgdGhpcyBkZXZpY2UgaWYgaXQmIzM5O3MgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIG1heWJlIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGZha2UgcGxhdGZvcm0gZGV2aWNlLCBidXQgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQuIFN5emthbGxlciBjYW4mIzM5O3QgKmVhc2lseSogY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgcHNldWRvLXN5c2NhbGwgb3IgaXQmIzM5O3MgYSBnZW5lcmljIHRoaW5nLgoKV2FpdCwgdGhvdWdoLCBzeXprYWxsZXIgKmNhbiogdGVzdCBtaXNjIGRldmljZXMgaWYgdGhlIGRldmljZSBub2RlIGlzIHByZXNlbnQsIHdoaWNoIGlzIHdoYXQgd2UgaGF2ZSBoZXJlLiBUaGUgcHJvYmxlbSBpcywgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgdGhhdCBgbW1hcGAgd29uJiMzOTt0IGJlIHJlYWNoYWJsZS4gSG93ZXZlciwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHRoaW5rIHdlICpzaG91bGQqIHN0aWxsIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciwgYW5kIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCwgdGhlbiBpdCAqaXMqIHJlYWNoYWJsZS4KCkxldCYjMzk7cyBzZWUuLi4gdGhlIGluc3RydWN0aW9ucyBzYXkgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBCdXQsIGlzIGB2bWNsb2NrYCBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFllcyEgSXQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgY2xvY2sgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBtZWFucyBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLiBTbywgd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIFdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgd2UgbmVlZCAqYm90aCogYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLgoKSSYjMzk7bSBmb2N1c2VkIG9uIHRoZSBzeW1ib2wgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC4gVGhhdCYjMzk7cyB0aGUga2V5IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoaXMuIFRpbWUgdG8gc2V0IHRob3NlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVFBfMTU4OF9DTE9DS19WTUNMT0NLJiMzNDssCiAgICAmIzM0O1BUUF8xNTg4X0NMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1jbG9ja19taXNjZGV2X21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxlciBvZiB0aGUgdm1jbG9jayBtaXNjIGRldmljZSB0byBjbGVhciB0aGUgVk1fTUFZV1JJVEUgZmxhZywgcHJldmVudGluZyB0aGUgbWFwcGluZyBmcm9tIGJlaW5nIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBkcml2ZXIgZGVzaWduZWQgZm9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VKSwgc28gaXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMKaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jCkBAIC0zNzIsNiAmIzQzOzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJaWYgKCh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRCkKIAkJcmV0dXJuIC1FUk9GUzsKIAomIzQzOwkvKgomIzQzOwkgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvCiYjNDM7CSAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS4KJiM0MzsJICovCiYjNDM7CXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpOwomIzQzOwogCWlmICh2bWEtJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS0mZ3Q7dm1fcGdvZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIGEgUmVhZC1Pbmx5IE1lbW9yeSBNYXBwaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBgdm1jbG9ja19taXNjZGV2X21tYXBgLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGB2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBzZWN1cml0eSBoYXJkZW5pbmcgbWVhc3VyZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcHJldmVudGluZyB1c2Vyc3BhY2UgZnJvbSBlc2NhbGF0aW5nIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHJlYWQtd3JpdGUgdXNpbmcgYG1wcm90ZWN0KClgLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYW4gYG1tYXBgIGhhbmRsZXIgZm9yIGEgbWlzYyBkZXZpY2UuIFRoZSBrZXkgaGVyZSBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgd3JpdGUgcGVybWlzc2lvbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSBjb25uZWN0aW9uIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gVGhpcyBwYXRjaCBpc24mIzM5O3QgYWJvdXQgKndoYXQqIGlzIG1hcHBlZCwgYnV0ICpob3cqIGl0JiMzOTtzIGFjY2Vzc2VkLiBUaGVyZSYjMzk7cyBubyBjb3B5aW5nIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gZGlyZWN0IHJpc2sgb2YgaXQgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhpcyBwYXRjaCBpdHNlbGYuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uIG1hcHMgYSAqc2luZ2xlKiBwYWdlIHRvIHVzZXJzcGFjZS4gVGhhdCByYWlzZXMgYSBmbGFnLiBDb3VsZCB0aGF0IHBhZ2UgY29udGFpbiB1bmluaXRpYWxpemVkIGRhdGEgKmJlZm9yZSogdGhlIG1hcHBpbmc/IFRoZSBwYXRjaCwgYXMgaXQgaXMsIGRvZXNuJiMzOTt0IGFkZHJlc3MgdGhlICppbml0aWFsaXphdGlvbiogb2YgdGhhdCBwYWdlLiBJdCBqdXN0IGZvY3VzZXMgb24gcmVzdHJpY3RpbmcgdGhlIHBlcm1pc3Npb25zIGFmdGVyIHRoZSBtYXBwaW5nIGlzIGVzdGFibGlzaGVkLgoKVGhlIGxpa2VseSBleHBsb2l0IHNjZW5hcmlvIHRoaXMgZml4ZXMgaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgdGhhdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgYWxsb3dzIHJlYWQgYWNjZXNzIGluaXRpYWxseSwgYnV0IGNvdWxkIHRoZW4sIHZpYSBgbXByb3RlY3QoKWAsIGJlIHVwZ3JhZGVkIHRvIHdyaXRhYmxlLiBUaGlzIGNvdWxkIGNyZWF0ZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2hlcmUgdXNlcnNwYWNlIGNvdWxkIG1vZGlmeSBhIGtlcm5lbCBwYWdlIHRoYXQgaXMgYmVpbmcgc2hhcmVkLCBvciBwb3RlbnRpYWxseSB1c2VkIGJ5IHRoZSBrZXJuZWwgaW4gc29tZSB3YXkuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHRoYXQgcG90ZW50aWFsIGFjY2VzcyBjb250cm9sIGJ5cGFzcy4gU28sIG92ZXJhbGwsIGEgc29saWQgcGVybWlzc2lvbiBmaXggYW5kIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGF0IGxlYXN0IGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2MDpcdH1cbiAzNjE6XHRcbiAzNjI6XHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcbiAzNjM6XHRcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdDtcbiAzNjQ6XHRcdGF0b21pY190IHNlcTtcbiAzNjU6XHR9O1xuIDM2NjpcdFxuIDM2NzpcdHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAzNjg6XHR7XG4gMzY5Olx0XHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlICpmc3QgPSBmcC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMzcwOlx0XHRzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QgPSBmc3QtXHUwMDNlc3Q7XG4gMzcxOlx0XG4gMzcyOlx0XHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxuIDM3MzpcdFx0XHRyZXR1cm4gLUVST0ZTO1xuIDM3NDpcdFxuIDM3NTpcdFx0LypcbiAzNzY6XHRcdCAqIFJlc3RyaWN0IHRoZSByZWFkLW9ubHkgbWFwcGluZyBzbyBpdCBjYW5ub3QgYmUgdXBncmFkZWQgdG9cbiAzNzc6XHRcdCAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS5cbiAzNzg6XHRcdCAqL1xuIDM3OTpcdFx0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4gMzgwOlx0XG4gMzgxOlx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVx1MDAzZXZtX3Bnb2ZmKVxuIDM4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzODM6XHRcbiAzODQ6XHRcdGlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsXG4gMzg1Olx0XHRcdFx0ICAgICAgIHN0LVx1MDAzZXJlcy5zdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgUEFHRV9TSVpFLFxuIDM4NjpcdFx0XHRcdCAgICAgICB2bWEtXHUwMDNldm1fcGFnZV9wcm90KSlcbiAzODc6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gMDtcbiAzOTA6XHR9XG4gMzkxOlx0XG4gMzkyOlx0c3RhdGljIHNzaXplX3Qgdm1jbG9ja19taXNjZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLFxuIDM5MzpcdFx0XHRcdFx0ICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIDM5NDpcdHtcbiAzOTU6XHRcdGt0aW1lX3QgZGVhZGxpbmUgPSBrdGltZV9hZGQoa3RpbWVfZ2V0KCksIFZNQ0xPQ0tfTUFYX1dBSVQpO1xuIDM5NjpcdFx0c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSAqZnN0ID0gZnAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDM5NzpcdFx0c3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0ID0gZnN0LVx1MDAzZXN0O1xuIDM5ODpcdFx0dWludDMyX3Qgc2VxLCBvbGRfc2VxO1xuIDM5OTpcdFx0c2l6ZV90IG1heF9jb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MQoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIEl0JiMzOTtzIGxvY2tpbmcgZG93biB0aGF0IG1hcHBlZCBwYWdlLCBzcGVjaWZpY2FsbHkgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGlkZW50aWZpZWQgYnkgYHN0LSZndDtyZXMuc3RhcnQgJmd0OyZndDsgUEFHRV9TSElGVGAsIHByZXZlbnRpbmcgYW55IG1vZGlmaWNhdGlvbiBmcm9tIHVzZXJzcGFjZS4gVGhpcyBpcyB0ZXh0Ym9vayBiZWhhdmlvciBmb3IgYSByZWFkLW9ubHkgYG1tYXBgIGhhbmRsZXIuIEl0JiMzOTtzIGEgc3RhbmRhcmQgc2FmZWd1YXJkIGFnYWluc3Qgc29tZW9uZSB0cnlpbmcgdG8gcHVsbCBhIGZhc3Qgb25lIHdpdGggYG1wcm90ZWN0KFBST1RfV1JJVEUpYC4gR29vZCwgZ29vZC4gTm8gb2J2aW91cyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gY29uY2VybnMgaGVyZSwgd2hpY2ggaXMgYWx3YXlzIGEgcmVsaWVmLiBJIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBJdCYjMzk7cyBhIGNsZWFuLCBleHBlY3RlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuMjM2NTc2NTM0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NTkyMDczNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCB0byBjbGVhciB0aGUgYFZNX01BWVdSSVRFYCBmbGFnIGZyb20gdGhlIFZNQS4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UgZnJvbSB1c2luZyBgbXByb3RlY3QoKWAgdG8gdXBncmFkZSBhIHJlYWQtb25seSBtZW1vcnkgbWFwcGluZyB0byB3cml0YWJsZS4gVGhpcyBpcyBhIHBlcm1pc3Npb24vYWNjZXNzIGNvbnRyb2wgZml4IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHBhcnRpYWxseSBpbml0aWFsaXplZC4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3Rpbmcgb3IgS0FTQU4sIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuMjM2NTgzMjc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzMwMjA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ODllYmUxMjc5MjVlNjJjZjNjYzFhMTY2ZDdjNmJmYzhiYmIwZGU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXFxuaW5kZXggZWViZGNkNWViYzA4MC4uYmIwZTE0YmFjOWYyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXFxuKysrIGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xcbkBAIC0zNzIsNiArMzcyLDEyIEBAIHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0aWYgKCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxcbiBcXHRcXHRyZXR1cm4gLUVST0ZTO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUmVzdHJpY3QgdGhlIHJlYWQtb25seSBtYXBwaW5nIHNvIGl0IGNhbm5vdCBiZSB1cGdyYWRlZCB0b1xcbitcXHQgKiB3cml0YWJsZSBsYXRlciB3aXRoIG1wcm90ZWN0KCkuXFxuK1xcdCAqL1xcbitcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4rXFxuIFxcdGlmICh2bWEtXFx1MDAzZXZtX2VuZCAtIHZtYS1cXHUwMDNldm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS1cXHUwMDNldm1fcGdvZmYpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NDAuODE3NjkxMzQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYwMjA3MjMyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjg5ZWJlMTI3OTI1ZTYyY2YzY2MxYTE2NmQ3YzZiZmM4YmJiMGRlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjU1OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYyBiL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmNcbmluZGV4IGVlYmRjZDVlYmMwODAuLmJiMGUxNGJhYzlmMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG4rKysgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5AQCAtMzcyLDYgKzM3MiwxMiBAQCBzdGF0aWMgaW50IHZtY2xvY2tfbWlzY2Rldl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSAhPSBWTV9SRUFEKVxuIFx0XHRyZXR1cm4gLUVST0ZTO1xuIFxuK1x0LypcbitcdCAqIFJlc3RyaWN0IHRoZSByZWFkLW9ubHkgbWFwcGluZyBzbyBpdCBjYW5ub3QgYmUgdXBncmFkZWQgdG9cbitcdCAqIHdyaXRhYmxlIGxhdGVyIHdpdGggbXByb3RlY3QoKS5cbitcdCAqL1xuK1x0dm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSk7XG4rXG4gXHRpZiAodm1hLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVx1MDAzZXZtX3Bnb2ZmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQwLjgxNzY5Mzg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjgzNzkwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEZvY3VzIG9uIGBwdHBfdm1jbG9jay5jYCBhbmQgTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgdHdlYWtpbmcgdGhlIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYmVjYXVzZSB0aGUgcGF0Y2ggcmVtb3ZlcyBgVk1fTUFZV1JJVEVgIGZyb20gYHZtYS1cdTAwM2V2bV9mbGFnc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGF0IGBwdHBfdm1jbG9jay5jYCBhY3R1YWxseSAqaXMqLiBBaCwgcmlnaHQsIGl0J3MgYSBQVFAgZHJpdmVyIGRlc2lnbmVkIGZvciB2bWNsb2NrLiBBbHJpZ2h0LCB0aGF0J3MgZ29vZCB0byBrbm93LiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGlzIGlzIGNvZGUgdGhhdCdzIGV2ZW4gcmVsZXZhbnQgdG8gdGhlIHN5c3RlbXMgSSdtIGNvbmNlcm5lZCB3aXRoLiBJcyB0aGlzIGRyaXZlciBsaWtlbHkgdG8gYmUgdXNlZCBpbiBvdXIgdHlwaWNhbCBRRU1VIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCBzb21ldGhpbmcgd2Ugc2VlIGluIEdDRT8gSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGJvdGggYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBhbmQgYHB0cF92bWNsb2NrLmNgIGluIG91ciBjb2RlYmFzZSB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaWYgaXQncyBldmVuIHJlYWNoYWJsZS4gSSBuZWVkIHRvIGJlIHN1cmUgaXQgaXMgYWN0dWFsbHkgYWZmZWN0aW5nIG91ciB1c2UtY2FzZSBvciBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzYWZlbHkgaWdub3JlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQ1Ljc0NjA3NjMwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI1NDE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19taXNjZGV2X21tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTM2Mj1zdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzY3OnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM2OC17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTQ4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2bWNsb2NrX21pc2NkZXZfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDg2LVxcdC5yZWxlYXNlID0gdm1jbG9ja19taXNjZGV2X3JlbGVhc2UsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODc6XFx0Lm1tYXAgPSB2bWNsb2NrX21pc2NkZXZfbW1hcCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ4OC1cXHQucmVhZCA9IHZtY2xvY2tfbWlzY2Rldl9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo0NS44OTg2MjM2NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc5ODI5OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXZpY2UgRHJpdmVyJ3MgTWVtb3J5IE1hcHBpbmcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZHJpdmVyJ3Mgc2V0dGluZyB1cCBhIG1pc2NlbGxhbmVvdXMgZGV2aWNlIHdpdGggYG1tYXBgLiBIbW0sIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZSBpbiB0ZXJtcyBvZiBtZW1vcnkgbWFwcGluZy4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHB0cF92bWNsb2NrLmNgLiBUaGF0J2xsIHRlbGwgbWUgd2hhdCBvcHRpb25zIGFyZSBlbmFibGVkIG9yIHJlcXVpcmVkIHRvIG1ha2UgdGhpcyB3b3JrLiBLbm93aW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgYW5kIHdoaWNoIG9uZXMgYXJlbid0LCB3aGVuIHRoZSBkcml2ZXIgaXMgYnVpbHQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBvciBzaGFyZWQgbWVtb3J5IGlzIGFjY2Vzc2VkLiBHb3R0YSBzZWUgd2hhdCdzIGNvbmZpZ3VyYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjQ5Ljg3ODQ1NzE2OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIzNzA5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRwX3ZtY2xvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL0tjb25maWc9MTM0PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19WTUNMT0NLXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTE0OC1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjE0OTpcXHQgIHdpbGwgYmUgY2FsbGVkIHB0cF92bWNsb2NrLlxcbmRyaXZlcnMvcHRwL0tjb25maWctMTUwLVxcbi0tXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX0tWTSlcXHQrPSBwdHBfa3ZtLm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DSylcXHQrPSBwdHBfdm1jbG9jay5vXFxuZHJpdmVycy9wdHAvTWFrZWZpbGUtMTUtb2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1FPUklRKVxcdCs9IHB0cF9xb3JpcS5vXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTE5Mz1zdGF0aWMgaW50IHZtY2xvY2tfZ2V0X2Nyb3NzdHN0YW1wX2t2bWNsb2NrKHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjMxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MjMyOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4oa3RpbWVfdCAqZGV2aWNlX3RpbWUsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yMzMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHN5c3RlbV9jb3VudGVydmFsX3QgKnN5c3RlbV9jb3VudGVyLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNTMtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyNTQ6c3RhdGljIGludCBwdHBfdm1jbG9ja19nZXRjcm9zc3RzdGFtcChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI1NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc3lzdGVtX2RldmljZV9jcm9zc3RzdGFtcCAqeHRzdGFtcClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjU4LVxcdFxcdFxcdFxcdFxcdFxcdHB0cF9jbG9ja19pbmZvKTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI1OTpcXHRpbnQgcmV0ID0gZ2V0X2RldmljZV9zeXN0ZW1fY3Jvc3N0c3RhbXAocHRwX3ZtY2xvY2tfZ2V0X3RpbWVfZm4sIHN0LFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjYwLVxcdFxcdFxcdFxcdFxcdFxcdE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yNzQtXFx0XFx0XFx0V1JJVEVfT05DRShzdC1cXHUwMDNlc3lzX2NzX2lkLCBzeXN0aW1lX3NuYXBzaG90LmNzX2lkKTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjI3NTpcXHRcXHRcXHRyZXQgPSBnZXRfZGV2aWNlX3N5c3RlbV9jcm9zc3RzdGFtcChwdHBfdm1jbG9ja19nZXRfdGltZV9mbixcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI3Ni1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc3QsIE5VTEwsIHh0c3RhbXApO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0yODYtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzoyODc6c3RhdGljIGludCBwdHBfdm1jbG9ja19hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjg4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MjkyOnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjkzLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMjk2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Mjk3OnN0YXRpYyBpbnQgcHRwX3ZtY2xvY2tfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTI5OC1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMwMi1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMwMzpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2dldHRpbWV4KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMDQtXFx0XFx0XFx0XFx0c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxMS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMxMjpzdGF0aWMgaW50IHB0cF92bWNsb2NrX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxMy1cXHRcXHRcXHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbilcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzE3LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX3ZtY2xvY2tfaW5mbyA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTMxOS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMjMtXFx0LnBwc1xcdFxcdD0gMCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNDpcXHQuYWRqZmluZVxcdD0gcHRwX3ZtY2xvY2tfYWRqZmluZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNTpcXHQuYWRqdGltZVxcdD0gcHRwX3ZtY2xvY2tfYWRqdGltZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyNjpcXHQuZ2V0dGltZXg2NFxcdD0gcHRwX3ZtY2xvY2tfZ2V0dGltZXgsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjc6XFx0LnNldHRpbWU2NFxcdD0gcHRwX3ZtY2xvY2tfc2V0dGltZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjMyODpcXHQuZW5hYmxlXFx0XFx0PSBwdHBfdm1jbG9ja19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozMjk6XFx0LmdldGNyb3NzdHN0YW1wID0gcHRwX3ZtY2xvY2tfZ2V0Y3Jvc3N0c3RhbXAsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zMzAtfTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzMyPXN0YXRpYyBzdHJ1Y3QgcHRwX2Nsb2NrICp2bWNsb2NrX3B0cF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM1NS1cXHRzdC1cXHUwMDNlY3NfaWQgPSBjc19pZDtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjM1NjpcXHRzdC1cXHUwMDNlcHRwX2Nsb2NrX2luZm8gPSBwdHBfdm1jbG9ja19pbmZvO1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzU3LVxcdHN0cnNjcHkoc3QtXFx1MDAzZXB0cF9jbG9ja19pbmZvLm5hbWUsIHN0LVxcdTAwM2VuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTU6NTAuMDMwODg5MzA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTU3NDgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGBQVFBfMTU4OF9DTE9DS19WTUNMT0NLYC4gUmlnaHQsIHNvIHRoYXQgcG9pbnRzIHRvIHNvbWV0aGluZyByZWxhdGVkIHRvIHZpcnR1YWwgbWFjaGluZSBjbG9jayBzeW5jaHJvbml6YXRpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTXkgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhpcyBpcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL3B0cC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgUFRQIChQcmVjaXNpb24gVGltZSBQcm90b2NvbCkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgdG8gdW5kZXJzdGFuZCBpdHMgbWVhbmluZywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGFjY29tcGFueWluZyBoZWxwIHRleHQuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHdoYXQgaXQgYWN0dWFsbHkgZW5hYmxlcyBvciBkaXNhYmxlcyB3aXRoaW4gdGhlIFBUUCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxhdGlvbiB0byBWTSBjbG9ja3MuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo1NC4wMTY0NjY3MjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTI4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9LY29uZmlnPTEyMj1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTEzMy1cXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEzNDpjb25maWcgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1xcbmRyaXZlcnMvcHRwL0tjb25maWctMTM1LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NTo1NC4xMjA1OTk3NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE1MDU2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBUUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9wdHAvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDEzNCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igb3B0aW9uIHN0YXJ0cywgZXNwZWNpYWxseSBpbiBhIHdlbGwtc3RydWN0dXJlZCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBQVFAuIEknbSBob3BpbmcgaXQncyBjbGVhcmx5IG9yZ2FuaXplZCwgcHJvYmFibHkgaGllcmFyY2hpY2FsbHksIHdpdGggZGVwZW5kZW5jaWVzIGxhaWQgb3V0IGNvbmNpc2VseS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgb3B0aW9uYWwsIHdoaWNoIGFyZSBidWlsdC1pbiBkZWZhdWx0cywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGRyaXZlIHRoZSBjb25maWd1cmF0aW9uLiBLbm93aW5nIHdoZXJlIGl0IGlzIGluIHRoZSBoaWVyYXJjaHkgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgc3RydWN0dXJlIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjU3LjYzNTY2NTkxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHRwX2t2bS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcXG4gMTM1OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrXFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBYODZfVFNDIHx8IEFSTV9BUkNIX1RJTUVSXFxuIDEzNzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1VQUE9SVFNfSU5UMTI4XFxuIDEzODpcXHRcXHRkZWZhdWx0IFBUUF8xNTg4X0NMT0NLX0tWTVxcbiAxMzk6XFx0XFx0aGVscFxcbiAxNDA6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHVzaW5nIGEgdmlydHVhbCBwcmVjaXNpb24gY2xvY2tcXG4gMTQxOlxcdFxcdCAgYWR2ZXJ0aXNlZCBieSB0aGUgaHlwZXJ2aXNvci4gVGhpcyBjbG9jayBpcyBvbmx5IHVzZWZ1bCBpbiB2aXJ0dWFsXFxuIDE0MjpcXHRcXHQgIG1hY2hpbmVzIHdoZXJlIHN1Y2ggYSBkZXZpY2UgaXMgcHJlc2VudC5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBVbmxpa2UgdGhlIEtWTSB2aXJ0dWFsIFBUUCBjbG9jaywgdGhlIFZNQ0xPQ0sgZGV2aWNlIG9mZmVycyBzdXBwb3J0XFxuIDE0NTpcXHRcXHQgIGZvciByZWxpYWJsZSB0aW1la2VlcGluZyBldmVuIGFjcm9zcyBsaXZlIG1pZ3JhdGlvbi4gU28gdGhpcyBkcml2ZXJcXG4gMTQ2OlxcdFxcdCAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBLVk0gUFRQIGNsb2NrIGlzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTQ5OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgcHRwX3ZtY2xvY2suXFxuIDE1MDpcXHRcXG4gMTUxOlxcdGNvbmZpZyBQVFBfMTU4OF9DTE9DS19JRFQ4MlAzM1xcbiAxNTI6XFx0XFx0dHJpc3RhdGUgXFxcIklEVCA4MlAzM3h4eCBQVFAgY2xvY2tcXFwiXFxuIDE1MzpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLIFxcdTAwMjZcXHUwMDI2IEkyQ1xcbiAxNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU1OjU3LjYzNjExNDI1N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgyOTk4NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1DbG9jayBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBQVFBfMTU4OF9DTE9DS19WTUNMT0NLYC4gSSBzZWUsIGl0IGhpbmdlcyBvbiBgUFRQXzE1ODhfQ0xPQ0tgLCB3aGljaCBtYWtlcyBzZW5zZSwgYW5kIGFsc28gbmVlZHMgYEFSQ0hfU1VQUE9SVFNfSU5UMTI4YCBhbmQgZWl0aGVyIGBYODZfVFNDYCBvciBgQVJNX0FSQ0hfVElNRVJgIOKAkyB3aGljaCBjb25maXJtcyB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCwgc3BlY2lmaWNhbGx5IGluIHRoZSBtbWFwIGhhbmRsZXIgZm9yIHRoZSBtaXNjIGRldmljZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgcHJldmVudGluZyB0aGUgbW1hcCBmcm9tIGdhaW5pbmcgd3JpdGUgYWNjZXNzLCB3aGljaCBpcyBhIGtleSBzZWN1cml0eSBjb25zaWRlcmF0aW9uLlxuXG5HaXZlbiB0aGF0IGl0J3MgYW4gbW1hcCBoYW5kbGVyIHdpdGhpbiBhIG1pc2MgZGV2aWNlLCBJIGltbWVkaWF0ZWx5IHRoaW5rIHRoaXMgd2FycmFudHMgZnV6emluZy4gYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCBpdHNlbGYgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gVGhlIGRyaXZlciBpbnZvbHZlZCBpcyBgcHRwX3ZtY2xvY2tgLiBOb3csIGJlZm9yZSBJIGRpdmUgZGVlcCBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LCBJIHNob3VsZCB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIG9yIGVudHJ5IHBvaW50cyBpbiB0aGlzIGRyaXZlciB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IG9yIG5lZWQgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTY6MDIuMzE5MTE1NTk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1NTg3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19taXNjZGV2X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9MzYyPXN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy0zNjYtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzozNjc6c3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzY4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtMzkxLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6MzkyOnN0YXRpYyBzc2l6ZV90IHZtY2xvY2tfbWlzY2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTM5My1cXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQzNy1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQzODpzdGF0aWMgX19wb2xsX3Qgdm1jbG9ja19taXNjZGV2X3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICp3YWl0KVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDM5LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDU5LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDYwOnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDYxLXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc2LVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDc3OnN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDc4LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDgyLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZtY2xvY2tfbWlzY2Rldl9mb3BzID0ge1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNDg0LVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg1OlxcdC5vcGVuID0gdm1jbG9ja19taXNjZGV2X29wZW4sXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODY6XFx0LnJlbGVhc2UgPSB2bWNsb2NrX21pc2NkZXZfcmVsZWFzZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjQ4NzpcXHQubW1hcCA9IHZtY2xvY2tfbWlzY2Rldl9tbWFwLFxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6NDg4OlxcdC5yZWFkID0gdm1jbG9ja19taXNjZGV2X3JlYWQsXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo0ODk6XFx0LnBvbGwgPSB2bWNsb2NrX21pc2NkZXZfcG9sbCxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTQ5MC19O1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYz02NjI9c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczNy1cXHRpZiAobGUzMl90b19jcHUoc3QtXFx1MDAzZWNsay1cXHUwMDNlc2l6ZSkgXFx1MDAzZT0gUEFHRV9TSVpFKSB7XFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo3Mzg6XFx0XFx0c3QtXFx1MDAzZW1pc2NkZXYuZm9wcyA9IFxcdTAwMjZ2bWNsb2NrX21pc2NkZXZfZm9wcztcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTczOS1cXHRcXHRzdC1cXHUwMDNlbWlzY2Rldi5uYW1lID0gc3QtXFx1MDAzZW5hbWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjAyLjQ0MzY3OTQxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTM2NTU2MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIENvbnRleHQqKlxuXG5SaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgdm1jbG9ja19taXNjZGV2X21tYXBgLiBUaGF0J3MgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS2AgaXMgcmVsZXZhbnQg4oCTIHRoaXMgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgUFRQIGNsb2NrLCBsaWtlbHkgY29ubmVjdGVkIHRvIHRoaXMgYHZtY2xvY2tgIHN0dWZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIFFFTVU/XCIuIEFuZCB0aGUgYW5zd2VyIGlzIHllczsgdGhpcyBpcyBhIHZpcnR1YWwgbWFjaGluZSBQVFAgY2xvY2suXG5cbkJ1dCBoZXJl4oCZcyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgZGV2aWNlIGFjdHVhbGx5ICpjcmVhdGVkKiBieSBRRU1VPyBUaGF04oCZcyB3aGVyZSB0aGUgaW52ZXN0aWdhdGlvbiBuZWVkcyB0byBzaGlmdC4gSSBzaG91bGQgYmUgbG9va2luZyBhdCBob3cgdGhlIGRyaXZlciBhY3R1YWxseSBnZXRzIHByb2JlZC4gR2l2ZW4gdGhhdCBpdCdzIGEgdmlydHVhbCBtYWNoaW5lIGRldmljZSwgaXQgaXMgbGlrZWx5IGFuIEFDUEkgb3IgcGxhdGZvcm0gZGV2aWNlLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGB2bWNsb2NrX3Byb2JlYCB0byBjb25maXJtIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gVGhhdCBmdW5jdGlvbiB3aWxsIGxpa2VseSBob2xkIHRoZSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkwMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjA3LjU4MDIzODg3MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTI3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jbG9ja19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NTMyPXN0YXRpYyBpbnQgdm1jbG9ja19zZXR1cF9hY3BpX25vdGlmaWNhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1NS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jOjU1NjpzdGF0aWMgaW50IHZtY2xvY2tfcHJvYmVfYWNwaShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdClcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTU1Ny17XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jPTU4MD1zdGF0aWMgaXJxcmV0dXJuX3Qgdm1jbG9ja19vZl9pcnFfaGFuZGxlcihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqX3N0KVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy01ODctXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo1ODg6c3RhdGljIGludCB2bWNsb2NrX3Byb2JlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtY2xvY2tfc3RhdGUgKnN0KVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMtNTg5LXtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9NjU1PXN0YXRpYyB2b2lkIHZtY2xvY2tfcHV0X2lkeCh2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjEtXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2NjI6c3RhdGljIGludCB2bWNsb2NrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NjMte1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NzMtXFx0aWYgKGhhc19hY3BpX2NvbXBhbmlvbihkZXYpKVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Njc0OlxcdFxcdHJldCA9IHZtY2xvY2tfcHJvYmVfYWNwaShkZXYsIHN0KTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3NS1cXHRlbHNlXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYy02NzYtI2VuZGlmXFxuZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suYzo2Nzc6XFx0XFx0cmV0ID0gdm1jbG9ja19wcm9iZV9kdChkZXYsIHN0KTtcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTY3OC1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM9Nzg0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZtY2xvY2tfcGxhdGZvcm1fZHJpdmVyID0ge1xcbmRyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmM6Nzg1OlxcdC5wcm9iZVxcdFxcdD0gdm1jbG9ja19wcm9iZSxcXG5kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jLTc4Ni1cXHQuZHJpdmVyXFx0PSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjA3LjY1MzU5NjM2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTYyOTM5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGB2bWNsb2NrYCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYHZtY2xvY2tgIGRyaXZlci4gSXQgYXBwZWFycyB0byBiZSBhIHBsYXRmb3JtIGRyaXZlciwgcHJvYmVkIGVpdGhlciB0aHJvdWdoIEFDUEkgb3IgdGhlIERldmljZSBUcmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBRRU1VIGVtdWxhdGUgdGhpcz8gWWVhaCwgUUVNVSAqY2FuKiBlbXVsYXRlIHRoaXMgZGV2aWNlIGlmIGl0J3MgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIG1heWJlIHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhIGZha2UgcGxhdGZvcm0gZGV2aWNlLCBidXQgdGhhdCB3b3VsZCBiZSBkaWZmaWN1bHQuIFN5emthbGxlciBjYW4ndCAqZWFzaWx5KiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHBzZXVkby1zeXNjYWxsIG9yIGl0J3MgYSBnZW5lcmljIHRoaW5nLlxuXG5XYWl0LCB0aG91Z2gsIHN5emthbGxlciAqY2FuKiB0ZXN0IG1pc2MgZGV2aWNlcyBpZiB0aGUgZGV2aWNlIG5vZGUgaXMgcHJlc2VudCwgd2hpY2ggaXMgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBwcm9ibGVtIGlzLCBpZiB0aGUgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoYXQgYG1tYXBgIHdvbid0IGJlIHJlYWNoYWJsZS4gSG93ZXZlciwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHRoaW5rIHdlICpzaG91bGQqIHN0aWxsIG1hcmsgaXQgYXMgYFdvcnRoRnV6emluZz10cnVlYC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyLCBhbmQgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LCB0aGVuIGl0ICppcyogcmVhY2hhYmxlLlxuXG5MZXQncyBzZWUuLi4gdGhlIGluc3RydWN0aW9ucyBzYXkgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBCdXQsIGlzIGB2bWNsb2NrYCBldmVuIGVtdWxhdGVkIGluIFFFTVU/IFllcyEgSXQgaXMgYSB2aXJ0dWFsIG1hY2hpbmUgY2xvY2sgZGV2aWNlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gVGhhdCBtZWFucyBpdCAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VLiBTbywgd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIFdlIG5lZWQgYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgLiBJdCBkZXBlbmRzIG9uIGBQVFBfMTU4OF9DTE9DS2AuIFRoZXJlZm9yZSwgd2UgbmVlZCAqYm90aCogYFBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tgIGFuZCBgUFRQXzE1ODhfQ0xPQ0tgLlxuXG5JJ20gZm9jdXNlZCBvbiB0aGUgc3ltYm9sIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzLiBUaW1lIHRvIHNldCB0aG9zZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ0LCJPdXRwdXRUb2tlbnMiOjEyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoxNi42MTY1Mzg0MzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE4NzEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBUUF8xNTg4X0NMT0NLX1ZNQ0xPQ0tcIixcbiAgICBcIlBUUF8xNTg4X0NMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1jbG9ja19taXNjZGV2X21tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGVyIG9mIHRoZSB2bWNsb2NrIG1pc2MgZGV2aWNlIHRvIGNsZWFyIHRoZSBWTV9NQVlXUklURSBmbGFnLCBwcmV2ZW50aW5nIHRoZSBtYXBwaW5nIGZyb20gYmVpbmcgdXBncmFkZWQgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGRyaXZlciBkZXNpZ25lZCBmb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUpLCBzbyBpdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFRQXzE1ODhfQ0xPQ0tfVk1DTE9DS1wiLFxuICAgIFwiUFRQXzE1ODhfQ0xPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWNsb2NrX21pc2NkZXZfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsZXIgb2YgdGhlIHZtY2xvY2sgbWlzYyBkZXZpY2UgdG8gY2xlYXIgdGhlIFZNX01BWVdSSVRFIGZsYWcsIHByZXZlbnRpbmcgdGhlIG1hcHBpbmcgZnJvbSBiZWluZyB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgZHJpdmVyIGRlc2lnbmVkIGZvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSksIHNvIGl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6NTY6MTYuODM4NDIwMjg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NzMzODg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjE2Ljg0MDM2MzY0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjE1NTM5MDA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCB0byBjbGVhciB0aGUgYFZNX01BWVdSSVRFYCBmbGFnIGZyb20gdGhlIFZNQS4gVGhpcyBwcmV2ZW50cyB1c2Vyc3BhY2UgZnJvbSB1c2luZyBgbXByb3RlY3QoKWAgdG8gdXBncmFkZSBhIHJlYWQtb25seSBtZW1vcnkgbWFwcGluZyB0byB3cml0YWJsZS4gVGhpcyBpcyBhIHBlcm1pc3Npb24vYWNjZXNzIGNvbnRyb2wgZml4IGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIHBhcnRpYWxseSBpbml0aWFsaXplZC4gQW55IGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIHRlc3Rpbmcgb3IgS0FTQU4sIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY4OWViZTEyNzkyNWU2MmNmM2NjMWExNjZkN2M2YmZjOGJiYjBkZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxODo1NTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF92bWNsb2NrLmMgYi9kcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jXG5pbmRleCBlZWJkY2Q1ZWJjMDgwLi5iYjBlMTRiYWM5ZjJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1xuQEAgLTM3Miw2ICszNzIsMTIgQEAgc3RhdGljIGludCB2bWNsb2NrX21pc2NkZXZfbW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9SRUFEfFZNX1dSSVRFKSkgIT0gVk1fUkVBRClcbiBcdFx0cmV0dXJuIC1FUk9GUztcbiBcbitcdC8qXG4rXHQgKiBSZXN0cmljdCB0aGUgcmVhZC1vbmx5IG1hcHBpbmcgc28gaXQgY2Fubm90IGJlIHVwZ3JhZGVkIHRvXG4rXHQgKiB3cml0YWJsZSBsYXRlciB3aXRoIG1wcm90ZWN0KCkuXG4rXHQgKi9cbitcdHZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fTUFZV1JJVEUpO1xuK1xuIFx0aWYgKHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQgIT0gUEFHRV9TSVpFIHx8IHZtYS1cdTAwM2V2bV9wZ29mZilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoxNi44NDAzNjQ5MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3MTg0ODU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNlY3VyaXR5IEltcGxpY2F0aW9ucyBvZiBhIFJlYWQtT25seSBNZW1vcnkgTWFwcGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL3B0cC9wdHBfdm1jbG9jay5jYC4gSXQncyBtb2RpZnlpbmcgYHZtY2xvY2tfbWlzY2Rldl9tbWFwYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBgdm1fZmxhZ3NfY2xlYXIodm1hLCBWTV9NQVlXUklURSlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUuIEl0J3MgZXNzZW50aWFsbHkgcHJldmVudGluZyB1c2Vyc3BhY2UgZnJvbSBlc2NhbGF0aW5nIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHJlYWQtd3JpdGUgdXNpbmcgYG1wcm90ZWN0KClgLlxuXG5MZXQncyBkaXZlIGRlZXBlci4gVGhlIHBhdGNoIG1vZGlmaWVzIGFuIGBtbWFwYCBoYW5kbGVyIGZvciBhIG1pc2MgZGV2aWNlLiBUaGUga2V5IGhlcmUgaXMgdGhlIHJlbW92YWwgb2YgdGhlIHdyaXRlIHBlcm1pc3Npb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHJ1bGUgb3V0IGFueSBpbW1lZGlhdGUgY29ubmVjdGlvbiB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRoaXMgcGF0Y2ggaXNuJ3QgYWJvdXQgKndoYXQqIGlzIG1hcHBlZCwgYnV0ICpob3cqIGl0J3MgYWNjZXNzZWQuIFRoZXJlJ3Mgbm8gY29weWluZyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIG5vIGRpcmVjdCByaXNrIG9mIGl0IGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2UgdmlhIHRoaXMgcGF0Y2ggaXRzZWxmLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBgdm1jbG9ja19taXNjZGV2X21tYXBgIGZ1bmN0aW9uIG1hcHMgYSAqc2luZ2xlKiBwYWdlIHRvIHVzZXJzcGFjZS4gVGhhdCByYWlzZXMgYSBmbGFnLiBDb3VsZCB0aGF0IHBhZ2UgY29udGFpbiB1bmluaXRpYWxpemVkIGRhdGEgKmJlZm9yZSogdGhlIG1hcHBpbmc/IFRoZSBwYXRjaCwgYXMgaXQgaXMsIGRvZXNuJ3QgYWRkcmVzcyB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGF0IHBhZ2UuIEl0IGp1c3QgZm9jdXNlcyBvbiByZXN0cmljdGluZyB0aGUgcGVybWlzc2lvbnMgYWZ0ZXIgdGhlIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQuXG5cblRoZSBsaWtlbHkgZXhwbG9pdCBzY2VuYXJpbyB0aGlzIGZpeGVzIGlzLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRoYXQgdGhlIHJlYWQtb25seSBtYXBwaW5nIGFsbG93cyByZWFkIGFjY2VzcyBpbml0aWFsbHksIGJ1dCBjb3VsZCB0aGVuLCB2aWEgYG1wcm90ZWN0KClgLCBiZSB1cGdyYWRlZCB0byB3cml0YWJsZS4gVGhpcyBjb3VsZCBjcmVhdGUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHdoZXJlIHVzZXJzcGFjZSBjb3VsZCBtb2RpZnkgYSBrZXJuZWwgcGFnZSB0aGF0IGlzIGJlaW5nIHNoYXJlZCwgb3IgcG90ZW50aWFsbHkgdXNlZCBieSB0aGUga2VybmVsIGluIHNvbWUgd2F5LiBUaGUgcGF0Y2ggaXMgcHJldmVudGluZyB0aGF0IHBvdGVudGlhbCBhY2Nlc3MgY29udHJvbCBieXBhc3MuIFNvLCBvdmVyYWxsLCBhIHNvbGlkIHBlcm1pc3Npb24gZml4IGFuZCBub3RoaW5nIHRvIGRvIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBhdCBsZWFzdCBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjU2OjI0LjExMjIxNjQyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTczNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9wdHAvcHRwX3ZtY2xvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRzdHJ1Y3Qgdm1jbG9ja19maWxlX3N0YXRlIHtcXG4gMzYzOlxcdFxcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdDtcXG4gMzY0OlxcdFxcdGF0b21pY190IHNlcTtcXG4gMzY1OlxcdH07XFxuIDM2NjpcXHRcXG4gMzY3OlxcdHN0YXRpYyBpbnQgdm1jbG9ja19taXNjZGV2X21tYXAoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMzY4OlxcdHtcXG4gMzY5OlxcdFxcdHN0cnVjdCB2bWNsb2NrX2ZpbGVfc3RhdGUgKmZzdCA9IGZwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDM3MDpcXHRcXHRzdHJ1Y3Qgdm1jbG9ja19zdGF0ZSAqc3QgPSBmc3QtXFx1MDAzZXN0O1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHRpZiAoKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiAoVk1fUkVBRHxWTV9XUklURSkpICE9IFZNX1JFQUQpXFxuIDM3MzpcXHRcXHRcXHRyZXR1cm4gLUVST0ZTO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHQvKlxcbiAzNzY6XFx0XFx0ICogUmVzdHJpY3QgdGhlIHJlYWQtb25seSBtYXBwaW5nIHNvIGl0IGNhbm5vdCBiZSB1cGdyYWRlZCB0b1xcbiAzNzc6XFx0XFx0ICogd3JpdGFibGUgbGF0ZXIgd2l0aCBtcHJvdGVjdCgpLlxcbiAzNzg6XFx0XFx0ICovXFxuIDM3OTpcXHRcXHR2bV9mbGFnc19jbGVhcih2bWEsIFZNX01BWVdSSVRFKTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0aWYgKHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydCAhPSBQQUdFX1NJWkUgfHwgdm1hLVxcdTAwM2V2bV9wZ29mZilcXG4gMzgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCxcXG4gMzg1OlxcdFxcdFxcdFxcdCAgICAgICBzdC1cXHUwMDNlcmVzLnN0YXJ0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsIFBBR0VfU0laRSxcXG4gMzg2OlxcdFxcdFxcdFxcdCAgICAgICB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCkpXFxuIDM4NzpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0cmV0dXJuIDA7XFxuIDM5MDpcXHR9XFxuIDM5MTpcXHRcXG4gMzkyOlxcdHN0YXRpYyBzc2l6ZV90IHZtY2xvY2tfbWlzY2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gMzkzOlxcdFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdGt0aW1lX3QgZGVhZGxpbmUgPSBrdGltZV9hZGQoa3RpbWVfZ2V0KCksIFZNQ0xPQ0tfTUFYX1dBSVQpO1xcbiAzOTY6XFx0XFx0c3RydWN0IHZtY2xvY2tfZmlsZV9zdGF0ZSAqZnN0ID0gZnAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMzk3OlxcdFxcdHN0cnVjdCB2bWNsb2NrX3N0YXRlICpzdCA9IGZzdC1cXHUwMDNlc3Q7XFxuIDM5ODpcXHRcXHR1aW50MzJfdCBzZXEsIG9sZF9zZXE7XFxuIDM5OTpcXHRcXHRzaXplX3QgbWF4X2NvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoyNC4xMTIzMzYxMTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MzM5MDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB3aGF0IGl0J3MgZG9pbmcuIEl0J3MgbG9ja2luZyBkb3duIHRoYXQgbWFwcGVkIHBhZ2UsIHNwZWNpZmljYWxseSB0aGUgSS9PIG1lbW9yeSByZWdpb24gaWRlbnRpZmllZCBieSBgc3QtXHUwMDNlcmVzLnN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUYCwgcHJldmVudGluZyBhbnkgbW9kaWZpY2F0aW9uIGZyb20gdXNlcnNwYWNlLiBUaGlzIGlzIHRleHRib29rIGJlaGF2aW9yIGZvciBhIHJlYWQtb25seSBgbW1hcGAgaGFuZGxlci4gSXQncyBhIHN0YW5kYXJkIHNhZmVndWFyZCBhZ2FpbnN0IHNvbWVvbmUgdHJ5aW5nIHRvIHB1bGwgYSBmYXN0IG9uZSB3aXRoIGBtcHJvdGVjdChQUk9UX1dSSVRFKWAuIEdvb2QsIGdvb2QuIE5vIG9idmlvdXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGNvbmNlcm5zIGhlcmUsIHdoaWNoIGlzIGFsd2F5cyBhIHJlbGllZi4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gSXQncyBhIGNsZWFuLCBleHBlY3RlZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTEsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODo1NjoyOC45OTU3Mjk2NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWNsb2NrX21pc2NkZXZfbW1hcGAgdG8gY2xlYXIgdGhlIGBWTV9NQVlXUklURWAgZmxhZyBmcm9tIHRoZSBWTUEuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlIGZyb20gdXNpbmcgYG1wcm90ZWN0KClgIHRvIHVwZ3JhZGUgYSByZWFkLW9ubHkgbWVtb3J5IG1hcHBpbmcgdG8gd3JpdGFibGUuIFRoaXMgaXMgYSBwZXJtaXNzaW9uL2FjY2VzcyBjb250cm9sIGZpeCBhbmQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEFueSBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCB0ZXN0aW5nIG9yIEtBU0FOLCBhbmQgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdm1jbG9ja19taXNjZGV2X21tYXBgIHRvIGNsZWFyIHRoZSBgVk1fTUFZV1JJVEVgIGZsYWcgZnJvbSB0aGUgVk1BLiBUaGlzIHByZXZlbnRzIHVzZXJzcGFjZSBmcm9tIHVzaW5nIGBtcHJvdGVjdCgpYCB0byB1cGdyYWRlIGEgcmVhZC1vbmx5IG1lbW9yeSBtYXBwaW5nIHRvIHdyaXRhYmxlLiBUaGlzIGlzIGEgcGVybWlzc2lvbi9hY2Nlc3MgY29udHJvbCBmaXggYW5kIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkLiBBbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgdGVzdGluZyBvciBLQVNBTiwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhvc74[1] Phase: Succeeded StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 18:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 18:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2] Phase: Succeeded StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 18:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 18:56:40 +0000 UTC FinishedAt: 2026-08-13 18:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhvc74/series-workflowhvc74-convert-artifact-1977510839/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 18:57:01 +0000 UTC FinishedAt: 2026-08-13 19:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 18:57:01 +0000 UTC FinishedAt: 2026-08-13 19:16:21 +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:*29d0b1af-0a76-4632-b744-10fcfff59936,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-workflowhvc74/series-workflowhvc74-convert-artifact-1977510839/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": "4cf902c1-40a6-40cf-92b1-dc1bc99df5b7", "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-workflowhvc74/series-workflowhvc74-build-action-2667825933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 18:57:01 +0000 UTC FinishedAt: 2026-08-13 19:16:12 +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:*29d0b1af-0a76-4632-b744-10fcfff59936,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-workflowhvc74/series-workflowhvc74-convert-artifact-1977510839/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": "4cf902c1-40a6-40cf-92b1-dc1bc99df5b7", "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-workflowhvc74/series-workflowhvc74-build-action-2667825933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 19:16:21 +0000 UTC FinishedAt: 2026-08-13 19:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 19:16:21 +0000 UTC FinishedAt: 2026-08-13 19:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 19:16:21 +0000 UTC FinishedAt: 2026-08-13 19:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 19:16:21 +0000 UTC FinishedAt: 2026-08-13 19:16:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhvc74/series-workflowhvc74-convert-artifact-3951678694/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 19:16:32 +0000 UTC FinishedAt: 2026-08-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 19:16:32 +0000 UTC FinishedAt: 2026-08-13 19:18:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4cf902c1-40a6-40cf-92b1-dc1bc99df5b7,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-workflowhvc74/series-workflowhvc74-build-action-2667825933/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-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 19:18:39 +0000 UTC FinishedAt: 2026-08-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:18:39 +0000 UTC FinishedAt: 2026-08-13 19:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 19:18:39 +0000 UTC FinishedAt: 2026-08-13 19:39:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 19:18:39 +0000 UTC FinishedAt: 2026-08-13 19:39:52 +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:*29d0b1af-0a76-4632-b744-10fcfff59936,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-workflowhvc74/series-workflowhvc74-convert-artifact-3951678694/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": "c4691b15-1fa2-49b0-9a64-56156011265b", "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-workflowhvc74/series-workflowhvc74-build-action-3697445546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 19:18:39 +0000 UTC FinishedAt: 2026-08-13 19:39:28 +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:*29d0b1af-0a76-4632-b744-10fcfff59936,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-workflowhvc74/series-workflowhvc74-convert-artifact-3951678694/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": "c4691b15-1fa2-49b0-9a64-56156011265b", "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-workflowhvc74/series-workflowhvc74-build-action-3697445546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 19:39:52 +0000 UTC FinishedAt: 2026-08-13 19:39:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 19:39:52 +0000 UTC FinishedAt: 2026-08-13 19:39:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 19:39:52 +0000 UTC FinishedAt: 2026-08-13 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 19:39:52 +0000 UTC FinishedAt: 2026-08-13 19:41:53 +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:*c4691b15-1fa2-49b0-9a64-56156011265b,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-workflowhvc74/series-workflowhvc74-build-action-3697445546/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-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +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":["vmclock_miscdev_mmap"],"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:*4cf902c1-40a6-40cf-92b1-dc1bc99df5b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4691b15-1fa2-49b0-9a64-56156011265b,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-workflowhvc74/series-workflowhvc74-build-action-2667825933/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-workflowhvc74/series-workflowhvc74-build-action-3697445546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 19:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 19:42:07 +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":["vmclock_miscdev_mmap"],"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-workflowhvc74/series-workflowhvc74-convert-artifact-67314731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:42:03 +0000 UTC FinishedAt: 2026-08-13 19:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 19:42:13 +0000 UTC FinishedAt: 2026-08-13 20:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhvc74[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmclock_miscdev_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9006c116dd111d457bf5d074990210f70a4ad2c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTP_1588_CLOCK_VMCLOCK","PTP_1588_CLOCK"],"series_id":"52c0aa50-74d4-4163-8ada-7aa4ee9fde80","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 19:42:13 +0000 UTC FinishedAt: 2026-08-13 20:45:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4cf902c1-40a6-40cf-92b1-dc1bc99df5b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4691b15-1fa2-49b0-9a64-56156011265b,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-workflowhvc74/series-workflowhvc74-build-action-2667825933/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-workflowhvc74/series-workflowhvc74-build-action-3697445546/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-workflowhvc74/series-workflowhvc74-convert-artifact-67314731/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,}