Name: series-workflowng9qs Phase: Succeeded StartedAt: 2026-08-08 10:37:59 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[0] Phase: Succeeded StartedAt: 2026-08-08 10:37:59 +0000 UTC FinishedAt: 2026-08-08 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 10:37:59 +0000 UTC FinishedAt: 2026-08-08 10:56:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_USER", "VDPA_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_USER", "VDPA_SIM" ], "series_id": "a3040c6d-a404-41f0-9ac7-8ee65d30635d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdmhvc3RfdmRwYV92cmluZ19pb2N0bC4gSXQgY29waWVzIGEgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIGZyb20gdXNlciBzcGFjZSB1c2luZyBjb3B5X2Zyb21fdXNlciwgd2hpY2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0YWNrIHZhcmlhYmxlICYjMzk7cyYjMzk7IGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhbiBpb2N0bCBoYW5kbGVyIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIEZ1enppbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCB3aWxsIGhlbHAgZW5zdXJlIHRoZSBuZXcgY2hlY2sgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBzaXplcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzdjYjYyMDg0ZGJlODYyOGQ2N2EzODljNjIwMjk4MmEzZWFhNDE3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTA6NTU6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTcxNiw2ICYjNDM7NzE2LDEzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0XHR2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGlkeCk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuJiM0MztcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzLCBhcmdwLCBzaXplb2YocykpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjU1OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwppbmRleCBhYzU1Mjc1ZmEwZDBhLi5iMjA4M2UxZWYxNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwpAQCAtNzE2LDYgJiM0Mzs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGlkeCk7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTToKJiM0MzsJCS8qIFJlamVjdCBzaXplcyBhYm92ZSB0aGUgbWF4IHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzLCBhcmdwLCBzaXplb2YocykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWYgKHMubnVtICZndDsgb3BzLSZndDtnZXRfdnFfbnVtX21heCh2ZHBhKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwogCX0KIAogCXIgPSB2aG9zdF92cmluZ19pb2N0bCgmYW1wO3YtJmd0O3ZkZXYsIGNtZCwgYXJncCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYHZob3N0L3ZkcGEuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGZ1bmN0aW9uLiBJdCYjMzk7cyBoYW5kbGluZyBgVkhPU1RfU0VUX1ZSSU5HX05VTWAsIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBhZGRlZCBjaGVjazogaXQmIzM5O3MgcmVqZWN0aW5nIHNpemVzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UgdXNpbmcgYG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSlgLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCYjMzk7cyBhbiBpb2N0bCBoYW5kbGVyLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzIHZ1bG5lcmFiaWxpdHkgaHVudGluZy4KCkdpdmVuIHRoaXMgaXMgYW4gaW9jdGwgaGFuZGxlciBmdW5jdGlvbiwgSSByZWFsbHkgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBwb3RlbnRpYWwgZmxhd3MuIFRoZSBjaGFuZ2UgKml0c2VsZiogc2VlbXMgc291bmQsIHRoZSBwYXRjaCBpcyBhZGRpbmcgdmFsaWRhdGlvbiwgYnV0IEkgc3RpbGwgc2VlIGEgcG90ZW50aWFsIGZvciBmdXp6aW5nIHRhcmdldHMgaGVyZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBjYW4gSSBicmVhayB0aGlzPyYjMzQ7LgoKU28sIGZ1enppbmcgZWl0aGVyIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBvciBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZWxldmFudCBmdXp6aW5nLCBhbmQgbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYxMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2MzI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTYzMy1cdFx0XHRcdCAgIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTc4Mz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTYtXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjg5NzpcdFx0XHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODk4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoaXMgbW9kdWxlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gYXBwZWFycyB0byBiZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIE1ha2VzIHNlbnNlLiBOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIHRoZSB1bmxvY2tlZCBpb2N0bCBoYW5kbGVyLCBhbmQgdGhlIG92ZXJhbGwgZHJpdmVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmRwYVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZIT1NUX1JJTkcpICYjNDM7PSB2cmluZ2gub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICYjNDM7PSB2aG9zdF92ZHBhLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBpcyBgVkhPU1RfVkRQQWAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc3RhcnQgbWFwcGluZyBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIHN1cHBvcnRpbmcgZWxlbWVudHMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGhpZ2gtcGVyZm9ybWFuY2Ugb3IgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgVkhPU1RfVkRQQWAqKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgVkhPU1RfVkRQQWAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoYXQgdGVybS4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgYW5kIHdpdGhvdXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGl0IHJlcHJlc2VudHMsIGFueSBhbmFseXNpcyBvciBhY3Rpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiBXaGF0IGxheWVycyBhcmUgaW52b2x2ZWQgaGVyZT8gV2hhdCBkb2VzIFZIT1NUIG1lYW4gaW4gY29udGV4dD8gQW5kIHdoYXQgYWJvdXQgdGhlICYjMzQ7VkRQQSYjMzQ7IHBhcnQ/IElzIHRoYXQgYSBzcGVjaWZpYyB2aXJ0dWFsIGRldmljZSwgYSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIGFyZSBhbHdheXMgdGhlIGRldmlsLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiB0byBmb3JtIGEgc3Ryb25nIGZvdW5kYXRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgVkRQQWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNldHVwLCBpdHMgcGFyYW1ldGVycywgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbS4gIEkmIzM5O20gdGhpbmtpbmcgYW55IGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gY2FzY2FkZSwgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGVzc2VudGlhbCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiB0ZWxscyB1cy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyOm1lbnVjb25maWcgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnPTEwPWlmIFZEUEFcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MTI6Y29uZmlnIFZEUEFfU0lNXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMy1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjAtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyMTpjb25maWcgVkRQQV9TSU1fTkVUXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI3LVxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjM1OmNvbmZpZyBWRFBBX1VTRVJcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM2LVx0dHJpc3RhdGUgXCYjMzQ7VkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkVuYWJsaW5nIEFjY2VsZXJhdGVkIFZpcnRpby1uZXQgd2l0aCB2RFBBKioKCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGxldmVyYWdpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBvdXIgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMuICBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGBWRFBBYCBhbmQgYFZIT1NUX1ZEUEFgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGZvdW5kYXRpb25hbCBzdGVwIHRvIGJyaW5nIGluIHRoZSB2RFBBIGNhcGFiaWxpdGllcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYnJpbmdpbmcgaW4gc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgc28gdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHdoYXQgdHlwZSBvZiB2RFBBIGRldmljZSB3ZSBtaWdodCB3YW50IGZvciBpbml0aWFsIHRlc3RpbmcuIFBlcmhhcHMgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYCB3b3VsZCBnaXZlIHVzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHZEUEEgZGV2aWNlIHRoYXQgd2UgY2FuIHVzZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1pZ2h0IGJlIGEgcXVpY2tlciB3YXkgdG8gdmFsaWRhdGUgdGhlIHNldHVwIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHdlIGRpdmUgaW50byBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlZ3JhdGlvbnMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhhdCB0aGVzZSBhcmUgZm9yIGVhcmx5IGRldmVsb3BtZW50IG9yIHRlc3Rpbmcg4oCTIHdl4oCZbGwgd2FudCB0byBtb3ZlIHRvIHRoZSByZWFsIGhhcmR3YXJlIGFzIHNvb24gYXMgcG9zc2libGUgZm9yIHJlcHJlc2VudGF0aXZlIGJlbmNobWFya3MuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIGBWRFBBYCBpcyBjb3JyZWN0LiBJ4oCZbGwgZ28gYW5kIHJlLXJlYWQgdGhlIGRlZmluaXRpb24gdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIG92ZXJhbGwgZ29hbHMuIE1ha2luZyBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgYmFzZSBkb3duIGlzIGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uIFdlIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHNwZWMgdG8gZW5zdXJlIHdlIGtub3cgYWxsIHRoZSBjYXZlYXRzIGZvciBhIGdpdmVuIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRFBBXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHRoYXQgdXNlcyBhXG4gICA3Olx0XHQgIGRhdGFwYXRoIHdoaWNoIGNvbXBsaWVzIHdpdGggdmlydGlvIHNwZWNpZmljYXRpb25zIHdpdGhcbiAgIDg6XHRcdCAgdmVuZG9yIHNwZWNpZmljIGNvbnRyb2wgcGF0aC5cbiAgIDk6XHRcbiAgMTA6XHRpZiBWRFBBXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGFuZCBDb250ZXh0KioKClJpZ2h0LCBzbyBgVkRQQV9TSU1gIGlzIGNsZWFybHkgbGlua2VkIHRvIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSB0ZWxscyBtZSB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaW11bGF0aW9uIGNvbXBvbmVudCB0aGF0IGxpa2VseSBsZXZlcmFnZXMgYSBydW50aW1lIG1lbnUgZm9yIGl0cyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuIE9rYXksIGdvdCBpdC4KCk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBgVkRQQV9TSU1gIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdXNlciBpbnRlcmZhY2Ugc2lkZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBWRFBBX1VTRVJgLiBJcyBgVkRQQV9VU0VSYCB0aGUgVUkgbGF5ZXIgZm9yIHRoZSBWRFBBIHN5c3RlbT8gSXMgaXQgdGhlIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBydW50aW1lIG1lbnU/IExldCYjMzk7cyBxdWlja2x5IHJldmlldyB3aGVyZSB0aGlzIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFRoaXMgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nIHdpbGwgZ3VpZGUgbWUgbW9yZSBlZmZpY2llbnRseSBpbiB0aGUgbmV4dCBpbnZlc3RpZ2F0aW9uIHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICB2RFBBIGJsb2NrIGRldmljZSBzaW11bGF0b3Igd2hpY2ggdGVybWluYXRlcyBJTyByZXF1ZXN0IGluIGFcbiAgMzM6XHRcdCAgbWVtb3J5IGJ1ZmZlci5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgVkRQQV9VU0VSXG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVWRU5URkQgXHUwMDI2XHUwMDI2IE1NVVxuICAzODpcdFx0c2VsZWN0IFZIT1NUX0lPVExCXG4gIDM5Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBXaXRoIFZEVVNFIGl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgYSB2RFBBIERldmljZVxuICA0MjpcdFx0ICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBJRkNWRlxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBkcml2ZSBJbnRlbCBJRkMgVkYgTklDIHRvIG9mZmxvYWRcbiAgNDk6XHRcdCAgdmlydGlvIGRhdGFwbGFuZSB0cmFmZmljIHRvIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZEUEEgSW1wbGVtZW50YXRpb24gYW5kIFByb3Bvc2VkIENoYW5nZSoqCgpPa2F5LCBzbyBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBgVkRQQV9VU0VSYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCDigJMgYFZEUEFgLCBgVkhPU1RfVkRQQWAsIGBWRFBBX1VTRVJgLCBhbmQgYFZEUEFfU0lNYCBuZWVkIHRvIGJlIHZlcmlmaWVkLiBUaGUgY29yZSBmdW5jdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvIGlzIGRlZmluaXRlbHkgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBnZXRzIGNhbGxlZCAqZnJvbSogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGlzIGlzIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIHRoZSBjcnVjaWFsIGNoZWNrIGZvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIFNwZWNpZmljYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgbm93IHJlamVjdCByaW5nIHNpemVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gVGhhdCBtYWtlcyBzZW5zZSwgaXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgbWVjaGFuaXNtLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgZ29vZCwgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdXNlci1hY2Nlc3NpYmxlIHZpYSBpb2N0bCBtZWFucyB0aGF0IGNyYWZ0aW5nIGlucHV0cyBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHdlIGNhbiB0ZXN0IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJpbmcgc2l6ZSBvdmVyZmxvd3MsIG9yIGluY29ycmVjdCB2YWxpZGF0aW9uLgoKQmVmb3JlIEkgY29tbWl0IHRvIGZ1enppbmcsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBlbnRyeSBwb2ludC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYzMj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4Mi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjc4MzpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4NC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjUtXHQud3JpdGVfaXRlclx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU2NjpcdC51bmxvY2tlZF9pb2N0bFx0PSB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsLFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny0jaWZkZWYgQ09ORklHX01NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI3CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIG5hcnJvd3MgZG93biB0byBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIEkgY2FuIHNlZSB0aGF0JiMzOTtzIHRoZSBpb2N0bCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdmRwYV9mb3BzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgd2l0aGluIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gV2hpbGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGludGVybmFsLCB0aGUgcmVhbCBlbnRyeSBwb2ludCBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIGlzIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4KCkkgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIGFjY2Vzc2libGUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgaXQgbG9va3MgbGlrZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGlvbi4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9VU0VSYCwgYW5kIGBWRFBBX1NJTWAuCgpNeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHZob3N0LXZkcGEgZHJpdmVyJiMzOTtzIGhhbmRsaW5nIG9mIGFuIGlvY3RsIGNvbW1hbmQgKGBWSE9TVF9TRVRfVlJJTkdfTlVNYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBmdXp6aW5nLiBGdXp6aW5nIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBzcGVjaWZpY2FsbHkgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoaXMgbmV3IGJvdW5kIGNoZWNrIGlzIHJvYnVzdC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBuZXcgY2hlY2sgaGFuZGxlcyBhbnkgaW52YWxpZCBzaXplcyB0aGUgZnV6emVyIG1pZ2h0IHRocm93IGF0IGl0IGFuZCB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdmhvc3RfdmRwYV92cmluZ19pb2N0bC4gSXQgY29waWVzIGEgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIGZyb20gdXNlciBzcGFjZSB1c2luZyBjb3B5X2Zyb21fdXNlciwgd2hpY2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0YWNrIHZhcmlhYmxlICYjMzk7cyYjMzk7IGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3N2NiNjIwODRkYmU4NjI4ZDY3YTM4OWM2MjAyOTgyYTNlYWE0MTc5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxMDo1NTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTcxNiw2ICYjNDM7NzE2LDEzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpOwogCQl9CiAJCWJyZWFrOwomIzQzOwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CiYjNDM7CQkvKiBSZWplY3Qgc2l6ZXMgYWJvdmUgdGhlIG1heCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiAqLwomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWlmIChzLm51bSAmZ3Q7IG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAl9CiAKIAlyID0gdmhvc3RfdnJpbmdfaW9jdGwoJmFtcDt2LSZndDt2ZGV2LCBjbWQsIGFyZ3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZob3N0IFZEUEEgVnJpbmcgSW9jdGwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gSXQgc2VlbXMgdGhlIHByaW1hcnkgY2hhbmdlIGlzIGEgY2hlY2sgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIEl0IGFwcGVhcnMgdG8gYmUgY29weWluZyBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2cmluZyBzdGF0ZSwgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgc2AuIEFuZCBpdCYjMzk7cyBkb2luZyBhIGJvdW5kcyBjaGVjazogbWFraW5nIHN1cmUgYHMubnVtYCBkb2VzbiYjMzk7dCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBxdWV1ZSBudW1iZXIgcmV0dXJuZWQgYnkgYG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSlgLiBJZiBpdCBkb2VzLCB3ZSBnZXQgYW4gYC1FSU5WQUxgLiBPdGhlcndpc2UsIGl0IGZhbGxzIHRocm91Z2ggdG8gdGhlIHN0YW5kYXJkIGB2aG9zdF92cmluZ19pb2N0bGAgcGF0aC4KCk15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSAqaXMqIGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlLiBPa2F5LCBgY29weV9mcm9tX3VzZXJgICpzaG91bGQqIGluaXRpYWxpemUgYHNgIHdpdGggdGhlIHVzZXItcHJvdmlkZWQgZGF0YS4gQW5kIGl0IGNvcGllcyBgc2l6ZW9mKHMpYCBieXRlcy4gTGV0IG1lIGNvbmZpcm0gdGhhdCBsb2dpYyBpbiBteSBoZWFkLiBJZiBgY29weV9mcm9tX3VzZXJgIHN1Y2NlZWRzLCB0aGVuIHRoZSBlbnRpcmUgc3RydWN0dXJlIGBzYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gVGhlIGNoZWNrIGl0c2VsZiBsb29rcyBhdCB0aGUgdmFsdWUgb2YgYHMubnVtYCwgYnV0IGJlY2F1c2UgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHdheSBpdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8ga2VybmVsIG1lbW9yeSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIG9uIGZpcnN0IGdsYW5jZSwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuCgpJJiMzOTttIGZlZWxpbmcgZ29vZCBhYm91dCB0aGlzLCBidXQgSSYjMzk7bGwgZ2xhbmNlIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFueXdheS4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfdnJpbmdfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMxLVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzMtXHRcdFx0XHQgICB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz03ODM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVx0XHRpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XHRcdFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdmlydHVhbGl6YXRpb24gYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyczoKCioqQW5hbHl6aW5nIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92ZHBhLmNgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBzcGVjaWZpYyBpb2N0bCBmdW5jdGlvbiBiZWNhdXNlIEkgc3VzcGVjdCBpdCBoYW5kbGVzIHRoZSBjb3JlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGEgdmlydHVhbCBob3N0ICh2aG9zdCkgYW5kIGEgVmlydHVhbCBEYXRhIFBhdGggQWNjZWxlcmF0b3IgKFZEUEEpIGRldmljZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgdmlydGlvIHJpbmcgc2V0dXAgYW5kIGNvbnRyb2wgY29tbWFuZHMgYXJlIGxpa2VseSBwYXNzZWQgYmV0d2VlbiB0aGUgdmhvc3QgZHJpdmVyIGFuZCB0aGUgdW5kZXJseWluZyBWRFBBIGhhcmR3YXJlLgoKSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSB2YXJpb3VzIGBpb2N0bGAgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGUgdmlydGlvIHJpbmdzLCBzdWNoIGFzIGNvbmZpZ3VyaW5nIHJpbmcgc2l6ZXMsIHNldHRpbmcgdXAgc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0b3JzIGFuZCBkYXRhIGJ1ZmZlcnMsIGFuZCBwb3RlbnRpYWxseSBtYW5hZ2luZyBpbnRlcnJ1cHQgZXZlbnRzIG9yIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgVkRQQS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBwYXJzaW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGUgYGlvY3RsYCBjYWxscy4gSeKAmWxsIGJlIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZGF0YSBjb3BpZXMgaW52b2x2ZWQsIGFzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGNhbiBhcmlzZSBpbiB0aGVzZSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHBhc3NlZCwgYXMgVkRQQSBkZXZpY2VzIGFyZSBvZnRlbiBjcml0aWNhbCBjb21wb25lbnRzLiBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGZvciBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiByb3V0aW5lcyB0byBkZXRlcm1pbmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdmhvc3QtVkRQQSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzI6XHRzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuIDYzMzpcdFx0XHRcdFx0ICAgdm9pZCBfX3VzZXIgKmFyZ3ApXG4gNjM0Olx0e1xuIDYzNTpcdFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cdTAwM2V2ZHBhO1xuIDYzNjpcdFx0Y29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS1cdTAwM2Vjb25maWc7XG4gNjM3Olx0XHRzdHJ1Y3QgdmRwYV92cV9zdGF0ZSB2cV9zdGF0ZTtcbiA2Mzg6XHRcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuIDYzOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gNjQwOlx0XHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgcztcbiA2NDE6XHRcdHUzMiBpZHg7XG4gNjQyOlx0XHRsb25nIHI7XG4gNjQzOlx0XG4gNjQ0Olx0XHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xuIDY0NTpcdFx0aWYgKHIgXHUwMDNjIDApXG4gNjQ2Olx0XHRcdHJldHVybiByO1xuIDY0NzpcdFxuIDY0ODpcdFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiA2NDk6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDY1MDpcdFxuIDY1MTpcdFx0aWR4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGlkeCwgdi1cdTAwM2VudnFzKTtcbiA2NTI6XHRcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiA2NTM6XHRcbiA2NTQ6XHRcdHN3aXRjaCAoY21kKSB7XG4gNjU1Olx0XHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiA2NTY6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNjU3Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjU4Olx0XHRcdG9wcy1cdTAwM2VzZXRfdnFfcmVhZHkodmRwYSwgaWR4LCBzLm51bSk7XG4gNjU5Olx0XHRcdHJldHVybiAwO1xuIDY2MDpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9WUklOR19HUk9VUDpcbiA2NjE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlZ2V0X3ZxX2dyb3VwKVxuIDY2MjpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA2NjM6XHRcdFx0cy5pbmRleCA9IGlkeDtcbiA2NjQ6XHRcdFx0cy5udW0gPSBvcHMtXHUwMDNlZ2V0X3ZxX2dyb3VwKHZkcGEsIGlkeCk7XG4gNjY1Olx0XHRcdGlmIChzLm51bSBcdTAwM2U9IHZkcGEtXHUwMDNlbmdyb3VwcylcbiA2NjY6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA2Njc6XHRcdFx0ZWxzZSBpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnMsIHNpemVvZihzKSkpXG4gNjY4Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjY5Olx0XHRcdHJldHVybiAwO1xuIDY3MDpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9WUklOR19ERVNDX0dST1VQOlxuIDY3MTpcdFx0XHRpZiAoIXZob3N0X3ZkcGFfaGFzX2Rlc2NfZ3JvdXAodikpXG4gNjcyOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY3MzpcdFx0XHRzLmluZGV4ID0gaWR4O1xuIDY3NDpcdFx0XHRzLm51bSA9IG9wcy1cdTAwM2VnZXRfdnFfZGVzY19ncm91cCh2ZHBhLCBpZHgpO1xuIDY3NTpcdFx0XHRpZiAocy5udW0gXHUwMDNlPSB2ZHBhLVx1MDAzZW5ncm91cHMpXG4gNjc2Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4gNjc3Olx0XHRcdGVsc2UgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZzLCBzaXplb2YocykpKVxuIDY3ODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDY3OTpcdFx0XHRyZXR1cm4gMDtcbiA2ODA6XHRcdGNhc2UgVkhPU1RfVkRQQV9TRVRfR1JPVVBfQVNJRDpcbiA2ODE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNjgyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjgzOlx0XHRcdGlmIChpZHggXHUwMDNlPSB2ZHBhLVx1MDAzZW5ncm91cHMgfHwgcy5udW0gXHUwMDNlPSB2ZHBhLVx1MDAzZW5hcylcbiA2ODQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2ODU6XHRcdFx0aWYgKG9wcy1cdTAwM2VnZXRfc3RhdHVzKHZkcGEpIFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKVxuIDY4NjpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjg3Olx0XHRcdGlmICghb3BzLVx1MDAzZXNldF9ncm91cF9hc2lkKVxuIDY4ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA2ODk6XHRcdFx0cmV0dXJuIG9wcy1cdTAwM2VzZXRfZ3JvdXBfYXNpZCh2ZHBhLCBpZHgsIHMubnVtKTtcbiA2OTA6XHRcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfU0laRTpcbiA2OTE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlZ2V0X3ZxX3NpemUpXG4gNjkyOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY5MzpcdFx0XHRzLmluZGV4ID0gaWR4O1xuIDY5NDpcdFx0XHRzLm51bSA9IG9wcy1cdTAwM2VnZXRfdnFfc2l6ZSh2ZHBhLCBpZHgpO1xuIDY5NTpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnMsIHNpemVvZihzKSkpXG4gNjk2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjk3Olx0XHRcdHJldHVybiAwO1xuIDY5ODpcdFx0Y2FzZSBWSE9TVF9HRVRfVlJJTkdfQkFTRTpcbiA2OTk6XHRcdFx0ciA9IG9wcy1cdTAwM2VnZXRfdnFfc3RhdGUodi1cdTAwM2V2ZHBhLCBpZHgsIFx1MDAyNnZxX3N0YXRlKTtcbiA3MDA6XHRcdFx0aWYgKHIpXG4gNzAxOlx0XHRcdFx0cmV0dXJuIHI7XG4gNzAyOlx0XG4gNzAzOlx0XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfUklOR19QQUNLRUQpKSB7XG4gNzA0Olx0XHRcdFx0dnEtXHUwMDNlbGFzdF9hdmFpbF9pZHggPSB2cV9zdGF0ZS5wYWNrZWQubGFzdF9hdmFpbF9pZHggfFxuIDcwNTpcdFx0XHRcdFx0XHQgICAgICh2cV9zdGF0ZS5wYWNrZWQubGFzdF9hdmFpbF9jb3VudGVyIFx1MDAzY1x1MDAzYyAxNSk7XG4gNzA2Olx0XHRcdFx0dnEtXHUwMDNlbGFzdF91c2VkX2lkeCA9IHZxX3N0YXRlLnBhY2tlZC5sYXN0X3VzZWRfaWR4IHxcbiA3MDc6XHRcdFx0XHRcdFx0ICAgICh2cV9zdGF0ZS5wYWNrZWQubGFzdF91c2VkX2NvdW50ZXIgXHUwMDNjXHUwMDNjIDE1KTtcbiA3MDg6XHRcdFx0fSBlbHNlIHtcbiA3MDk6XHRcdFx0XHR2cS1cdTAwM2VsYXN0X2F2YWlsX2lkeCA9IHZxX3N0YXRlLnNwbGl0LmF2YWlsX2luZGV4O1xuIDcxMDpcdFx0XHR9XG4gNzExOlx0XHRcdGJyZWFrO1xuIDcxMjpcdFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfQ0FMTDpcbiA3MTM6XHRcdFx0aWYgKHZxLVx1MDAzZWNhbGxfY3R4LmN0eCkge1xuIDcxNDpcdFx0XHRcdGlmIChvcHMtXHUwMDNlZ2V0X3N0YXR1cyh2ZHBhKSBcdTAwMjZcbiA3MTU6XHRcdFx0XHQgICAgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcbiA3MTY6XHRcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcbiA3MTc6XHRcdFx0fVxuIDcxODpcdFx0XHRicmVhaztcbiA3MTk6XHRcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcbiA3MjA6XHRcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbiA3MjE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNzIyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzIzOlx0XHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuIDcyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcyNTpcdFx0XHRicmVhaztcbiA3MjY6XHRcdH1cbiA3Mjc6XHRcbiA3Mjg6XHRcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2LVx1MDAzZXZkZXYsIGNtZCwgYXJncCk7XG4gNzI5Olx0XHRpZiAocilcbiA3MzA6XHRcdFx0cmV0dXJuIHI7XG4gNzMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBCb3VuZHMgQ2hlY2sqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIHdpdGhpbiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGNhc2UgaW4gdGhlIHZob3N0IGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gc3RlcC4gVGhlIHBhdGNoIHJldHJpZXZlcyBgcy5udW1gIGZyb20gdXNlciBzcGFjZSwgYW5kIHRoZW4gY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgdmlydHVhbCBxdWV1ZSBudW1iZXIgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBkZXZpY2UgKGBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpYCkuCgpXYWl0IGEgbWludXRlLCBsZXQmIzM5O3MgbG9vayBjbG9zZXIuIFRoZSB2YXJpYWJsZSBgc2AgaXMgYSBsb2NhbCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGNvcHlfZnJvbV91c2VyYCAqZnVsbHkqIGluaXRpYWxpemVzIGBzYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2UgZ2V0IGFuIGAtRUZBVUxUYCBlcnJvciwgc28gdGhlcmUgaXMgbm8gaXNzdWUgaWYgY29weSBmYWlscy4gSWYgaXQgc3VjY2VlZHMsICphbGwqIGZpZWxkcyBvZiBgc2AgYXJlIHBvcHVsYXRlZC4gQWZ0ZXIgdGhlIGNoZWNrIHBhc3NlcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gY2FsbCBgdmhvc3RfdnJpbmdfaW9jdGxgLCBhbmQgeWVzLCB0aGF0IGZ1bmN0aW9uIGFsc28gY29waWVzIGBzYCBmcm9tIHVzZXIgc3BhY2UgYmVjYXVzZSBpdCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayBoZXJlLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSByb2xlIGlzIHRvIHJlc3RyaWN0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhjZWVkaW5nIHRoZSB1cHBlciBib3VuZCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgYm91bmRzIGNoZWNrLCBqdXN0IG1ha2luZyBzdXJlIHRoZSB2YWx1ZXMgYXJlIHJlYXNvbmFibGUgYmVmb3JlIHVzaW5nIHRoZW0uIEl0JiMzOTtzIG5vdCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgpTbywgaWYgd2Ugd2VyZSByZWx5aW5nIG9uIEtBU0FOLCBVQlNBTiwgZXRjLiB0byBkZXRlY3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoZXkgd291bGQgbm90IGJlIHJlbGV2YW50IGhlcmUuIEJ1dCBldmVuIEtNU0FOIGlzIG5vdCB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgdmFyaWFibGUgYHNgIGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgLiBJJiMzOTt2ZSBkb3VibGUgY2hlY2tlZCB0aGF0OyB0aGUgYHNpemVvZihzKWAgYnl0ZXMgYXJlIGNvcGllZC4gVGhlcmUmIzM5O3Mgbm8gc2NlbmFyaW8gd2hlcmUgYHMubnVtYCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGVpdGhlciBjb21wbGV0ZWx5IGluaXRpYWxpemVkLCBvciB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAmIzM5O3MmIzM5OyBpZiBzdWNjZXNzZnVsLiBJdCB0aGVuIGNoZWNrcyBpZiBzLm51bSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgcmVhZHMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UgaW4gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzb2xlbHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCB3aGljaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAmIzM5O3MmIzM5OyBpZiBzdWNjZXNzZnVsLiBJdCB0aGVuIGNoZWNrcyBpZiBzLm51bSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgcmVhZHMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UgaW4gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzb2xlbHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCB3aGljaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MDcuODM5OTQyNjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NTM1NTk2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJWRFBBX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAncycgaWYgc3VjY2Vzc2Z1bC4gSXQgdGhlbiBjaGVja3MgaWYgcy5udW0gZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIGluIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggc29sZWx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlcywgd2hpY2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTowNy44Mzk5NDg3NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzM5ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDo1NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTcxNiw2ICs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0XFx0XFx0XFx0dmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XFxuK1xcdFxcdC8qIFJlamVjdCBzaXplcyBhYm92ZSB0aGUgbWF4IHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovXFxuK1xcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChzLm51bSBcXHUwMDNlIG9wcy1cXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2LCBjbWQsIGFyZ3ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTowOC4yMTgyODMwMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjQ2ODM5MzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1VTRVJcIixcbiAgICBcIlZEUEFfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdjYjYyMDg0ZGJlODYyOGQ2N2EzODljNjIwMjk4MmEzZWFhNDE3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTA6NTU6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhLi5iMjA4M2UxZWYxNTAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNzE2LDYgKzcxNiwxMyBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdFx0dmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuK1x0XHQvKiBSZWplY3Qgc2l6ZXMgYWJvdmUgdGhlIG1heCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiAqL1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWYgKHMubnVtIFx1MDAzZSBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjA4LjIxODI4NDM1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjM1NTQ5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYHZob3N0L3ZkcGEuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy92aG9zdC92ZHBhLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGZ1bmN0aW9uLiBJdCdzIGhhbmRsaW5nIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgYW5kIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGFkZGVkIGNoZWNrOiBpdCdzIHJlamVjdGluZyBzaXplcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSByZXBvcnRlZCBieSB0aGUgZGV2aWNlIHVzaW5nIGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgLiBUaGF0J3MgZ29vZCwgYnV0IGl0J3MgYW4gaW9jdGwgaGFuZGxlciwgc28gbXkgZmlyc3QgdGhvdWdodCBpcyB2dWxuZXJhYmlsaXR5IGh1bnRpbmcuXG5cbkdpdmVuIHRoaXMgaXMgYW4gaW9jdGwgaGFuZGxlciBmdW5jdGlvbiwgSSByZWFsbHkgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBwb3RlbnRpYWwgZmxhd3MuIFRoZSBjaGFuZ2UgKml0c2VsZiogc2VlbXMgc291bmQsIHRoZSBwYXRjaCBpcyBhZGRpbmcgdmFsaWRhdGlvbiwgYnV0IEkgc3RpbGwgc2VlIGEgcG90ZW50aWFsIGZvciBmdXp6aW5nIHRhcmdldHMgaGVyZS4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGNhbiBJIGJyZWFrIHRoaXM/XCIuXG5cblNvLCBmdXp6aW5nIGVpdGhlciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgb3IgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZWxldmFudCBmdXp6aW5nLCBhbmQgbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NToxMy4wODE4NDE0NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4Mjc0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV92cmluZ19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMzLVxcdFxcdFxcdFxcdCAgIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NzgzPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjEzLjEzMTY3NzcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjAwOTA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24sIGFuZCBpdCdzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoaXMgbW9kdWxlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gYXBwZWFycyB0byBiZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIE1ha2VzIHNlbnNlLiBOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCwgdGhlIHVubG9ja2VkIGlvY3RsIGhhbmRsZXIsIGFuZCB0aGUgb3ZlcmFsbCBkcml2ZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjE4LjE5MTc3MDQ5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUyNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZHBhXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjE4LjI0MDMwMzY0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4OTk4NTMwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGlzIGBWSE9TVF9WRFBBYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCBtYXBwaW5nIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgc3VwcG9ydGluZyBlbGVtZW50cyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBvciBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MjguMTQwMTU5NTU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTk1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WRFBBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MjguMTkxNzYxODcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDk3OTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBWSE9TVF9WRFBBYCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgbWVudGlvbnMgYFZIT1NUX1ZEUEFgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiB0aGF0IHRlcm0uIEl0J3MgYSBrZXkgZWxlbWVudCwgYW5kIHdpdGhvdXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGl0IHJlcHJlc2VudHMsIGFueSBhbmFseXNpcyBvciBhY3Rpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiBXaGF0IGxheWVycyBhcmUgaW52b2x2ZWQgaGVyZT8gV2hhdCBkb2VzIFZIT1NUIG1lYW4gaW4gY29udGV4dD8gQW5kIHdoYXQgYWJvdXQgdGhlIFwiVkRQQVwiIHBhcnQ/IElzIHRoYXQgYSBzcGVjaWZpYyB2aXJ0dWFsIGRldmljZSwgYSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIGFyZSBhbHdheXMgdGhlIGRldmlsLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiB0byBmb3JtIGEgc3Ryb25nIGZvdW5kYXRpb24uIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozMS40MzI3NDQxNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozMS40MzI4MTM1NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzc1NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBoaW5nZSBvbiBib3RoIGBFVkVOVEZEYCBhbmQgYFZEUEFgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBWRFBBYCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2V0dXAsIGl0cyBwYXJhbWV0ZXJzLCBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0uICBJJ20gdGhpbmtpbmcgYW55IGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gY2FzY2FkZSwgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGVzc2VudGlhbCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIHRlbGxzIHVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjM0Ljg1MDU3MDgxOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MDMzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyOm1lbnVjb25maWcgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcInZEUEEgZHJpdmVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnPTEwPWlmIFZEUEFcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyMTpjb25maWcgVkRQQV9TSU1fTkVUXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI3LVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJ2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzQtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozNC45MDAxNzg1MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0ODc4NjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRW5hYmxpbmcgQWNjZWxlcmF0ZWQgVmlydGlvLW5ldCB3aXRoIHZEUEEqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBsZXZlcmFnaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3Igb3VyIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiAgTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGVuYWJsZSBgVkRQQWAgYW5kIGBWSE9TVF9WRFBBYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBmb3VuZGF0aW9uYWwgc3RlcCB0byBicmluZyBpbiB0aGUgdkRQQSBjYXBhYmlsaXRpZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYnJpbmdpbmcgaW4gc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgc28gdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB3aGF0IHR5cGUgb2YgdkRQQSBkZXZpY2Ugd2UgbWlnaHQgd2FudCBmb3IgaW5pdGlhbCB0ZXN0aW5nLiBQZXJoYXBzIGBWRFBBX1NJTWAgb3IgYFZEUEFfVVNFUmAgd291bGQgZ2l2ZSB1cyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB2RFBBIGRldmljZSB0aGF0IHdlIGNhbiB1c2Ugd2l0aG91dCBuZWVkaW5nIHNwZWNpYWxpemVkIGhhcmR3YXJlIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtaWdodCBiZSBhIHF1aWNrZXIgd2F5IHRvIHZhbGlkYXRlIHRoZSBzZXR1cCBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIGJlZm9yZSB3ZSBkaXZlIGludG8gaGFyZHdhcmUtc3BlY2lmaWMgaW50ZWdyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIGZvciBlYXJseSBkZXZlbG9wbWVudCBvciB0ZXN0aW5nIOKAkyB3ZeKAmWxsIHdhbnQgdG8gbW92ZSB0byB0aGUgcmVhbCBoYXJkd2FyZSBhcyBzb29uIGFzIHBvc3NpYmxlIGZvciByZXByZXNlbnRhdGl2ZSBiZW5jaG1hcmtzLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IG15IHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGNvcnJlY3QuIEnigJlsbCBnbyBhbmQgcmUtcmVhZCB0aGUgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb250ZXh0IG9mIG91ciBvdmVyYWxsIGdvYWxzLiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgYmFzZSBkb3duIGlzIGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uIFdlIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHNwZWMgdG8gZW5zdXJlIHdlIGtub3cgYWxsIHRoZSBjYXZlYXRzIGZvciBhIGdpdmVuIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MzguOTQ4OTY3OTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmRwYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIFZEUEFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRyaXZlcnNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSB0aGF0IHVzZXMgYVxcbiAgIDc6XFx0XFx0ICBkYXRhcGF0aCB3aGljaCBjb21wbGllcyB3aXRoIHZpcnRpbyBzcGVjaWZpY2F0aW9ucyB3aXRoXFxuICAgODpcXHRcXHQgIHZlbmRvciBzcGVjaWZpYyBjb250cm9sIHBhdGguXFxuICAgOTpcXHRcXG4gIDEwOlxcdGlmIFZEUEFcXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIFZEUEFfU0lNXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFJVTlRJTUVfVEVTVElOR19NRU5VXFxuICAxNTpcXHRcXHRzZWxlY3QgVkhPU1RfUklOR1xcbiAgMTY6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHRvIHN1cHBvcnQgdkRQQSBkZXZpY2Ugc2ltdWxhdG9ycy4gVGhlc2UgZGV2aWNlc1xcbiAgMTk6XFx0XFx0ICBhcmUgdXNlZCBmb3IgdGVzdGluZywgcHJvdG90eXBpbmcgYW5kIGRldmVsb3BtZW50IG9mIHZEUEEuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MzguOTQ5MDU3MzYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM5MTg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIERlcGVuZGVuY2llcyBhbmQgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgVkRQQV9TSU1gIGlzIGNsZWFybHkgbGlua2VkIHRvIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5LiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHRlbGxzIG1lIHRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgc2ltdWxhdGlvbiBjb21wb25lbnQgdGhhdCBsaWtlbHkgbGV2ZXJhZ2VzIGEgcnVudGltZSBtZW51IGZvciBpdHMgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBPa2F5LCBnb3QgaXQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBgVkRQQV9TSU1gIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdXNlciBpbnRlcmZhY2Ugc2lkZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBWRFBBX1VTRVJgLiBJcyBgVkRQQV9VU0VSYCB0aGUgVUkgbGF5ZXIgZm9yIHRoZSBWRFBBIHN5c3RlbT8gSXMgaXQgdGhlIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBydW50aW1lIG1lbnU/IExldCdzIHF1aWNrbHkgcmV2aWV3IHdoZXJlIHRoaXMgZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgd2lsbCBndWlkZSBtZSBtb3JlIGVmZmljaWVudGx5IGluIHRoZSBuZXh0IGludmVzdGlnYXRpb24gc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjQyLjM4Mjk3ODIyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRkZXBlbmRzIG9uIFZEUEFfU0lNXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIHZEUEEgYmxvY2sgZGV2aWNlIHNpbXVsYXRvciB3aGljaCB0ZXJtaW5hdGVzIElPIHJlcXVlc3QgaW4gYVxcbiAgMzM6XFx0XFx0ICBtZW1vcnkgYnVmZmVyLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgVkRQQV9VU0VSXFxuICAzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDM4OlxcdFxcdHNlbGVjdCBWSE9TVF9JT1RMQlxcbiAgMzk6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgV2l0aCBWRFVTRSBpdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIGEgdkRQQSBEZXZpY2VcXG4gIDQyOlxcdFxcdCAgaW4gYSB1c2Vyc3BhY2UgcHJvZ3JhbS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIElGQ1ZGXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXFxcIlxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gZHJpdmUgSW50ZWwgSUZDIFZGIE5JQyB0byBvZmZsb2FkXFxuICA0OTpcXHRcXHQgIHZpcnRpbyBkYXRhcGxhbmUgdHJhZmZpYyB0byBoYXJkd2FyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NDIuMzgzMDQ0NzQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA1NjQxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkRQQSBJbXBsZW1lbnRhdGlvbiBhbmQgUHJvcG9zZWQgQ2hhbmdlKipcblxuT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgYFZEUEFfVVNFUmAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQg4oCTIGBWRFBBYCwgYFZIT1NUX1ZEUEFgLCBgVkRQQV9VU0VSYCwgYW5kIGBWRFBBX1NJTWAgbmVlZCB0byBiZSB2ZXJpZmllZC4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gcGF5IGF0dGVudGlvbiB0byBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBnZXRzIGNhbGxlZCAqZnJvbSogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGlzIGlzIHdoZXJlIHRoZXkndmUgYWRkZWQgdGhlIGNydWNpYWwgY2hlY2sgZm9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gU3BlY2lmaWNhbGx5LCB0aGUgbmV3IGNvZGUgd2lsbCBub3cgcmVqZWN0IHJpbmcgc2l6ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCdzIGEgY3JpdGljYWwgc2FmZXR5IG1lY2hhbmlzbS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIFRoYXQncyBnb29kLCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gdGVzdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIHVzZXItYWNjZXNzaWJsZSB2aWEgaW9jdGwgbWVhbnMgdGhhdCBjcmFmdGluZyBpbnB1dHMgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGFuZCB3ZSBjYW4gdGVzdCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByaW5nIHNpemUgb3ZlcmZsb3dzLCBvciBpbmNvcnJlY3QgdmFsaWRhdGlvbi5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGZ1enppbmcsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBlbnRyeSBwb2ludC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NDcuNjIzNjExNjU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI5ODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTYzMj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzgyLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjc4MzpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03ODQtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjUtXFx0LndyaXRlX2l0ZXJcXHQ9IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU2NjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny0jaWZkZWYgQ09ORklHX01NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo0Ny42Njc5MTk0NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzOTMzMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBuYXJyb3dzIGRvd24gdG8gYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBJIGNhbiBzZWUgdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdmRwYV9mb3BzYCwgc28gdGhhdCdzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLiBXaGlsZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaXMgaW50ZXJuYWwsIHRoZSByZWFsIGVudHJ5IHBvaW50IEknbSBjb25jZXJuZWQgd2l0aCBpcyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuXG5cbkkgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIGFjY2Vzc2libGUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgaXQgbG9va3MgbGlrZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGlvbi5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1VTRVJgLCBhbmQgYFZEUEFfU0lNYC5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSB2aG9zdC12ZHBhIGRyaXZlcidzIGhhbmRsaW5nIG9mIGFuIGlvY3RsIGNvbW1hbmQgKGBWSE9TVF9TRVRfVlJJTkdfTlVNYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0J3MgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZnV6emluZy4gRnV6emluZyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgc3BlY2lmaWNhbGx5IGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIG5ldyBib3VuZCBjaGVjayBpcyByb2J1c3QuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgbmV3IGNoZWNrIGhhbmRsZXMgYW55IGludmFsaWQgc2l6ZXMgdGhlIGZ1enplciBtaWdodCB0aHJvdyBhdCBpdCBhbmQgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NTQuNjA3MjUzMzg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MjAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiVkRQQV9TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiVkRQQV9TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo1NC42ODY2ODAxNDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjA2ODExMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NTQuNjg3MTkxODI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4NjA2Mjk0NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsLiBJdCBjb3BpZXMgYSBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGNvcHlfZnJvbV91c2VyLCB3aGljaCBmdWxseSBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgJ3MnIGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjU1OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTcxNiw2ICs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcbitcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2LVx1MDAzZXZkZXYsIGNtZCwgYXJncCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo1NC42ODcxOTI2MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3MDY4NTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFZEUEEgVnJpbmcgSW9jdGwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEl0IHNlZW1zIHRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhIGNoZWNrIGZvciB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsLiBJdCBhcHBlYXJzIHRvIGJlIGNvcHlpbmcgYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCwgd2hpY2ggSSdtIGFzc3VtaW5nIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2cmluZyBzdGF0ZSwgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgc2AuIEFuZCBpdCdzIGRvaW5nIGEgYm91bmRzIGNoZWNrOiBtYWtpbmcgc3VyZSBgcy5udW1gIGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcXVldWUgbnVtYmVyIHJldHVybmVkIGJ5IGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgLiBJZiBpdCBkb2VzLCB3ZSBnZXQgYW4gYC1FSU5WQUxgLiBPdGhlcndpc2UsIGl0IGZhbGxzIHRocm91Z2ggdG8gdGhlIHN0YW5kYXJkIGB2aG9zdF92cmluZ19pb2N0bGAgcGF0aC5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlICppcyogY29weWluZyBmcm9tIHVzZXIgc3BhY2UuIE9rYXksIGBjb3B5X2Zyb21fdXNlcmAgKnNob3VsZCogaW5pdGlhbGl6ZSBgc2Agd2l0aCB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBBbmQgaXQgY29waWVzIGBzaXplb2YocylgIGJ5dGVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGxvZ2ljIGluIG15IGhlYWQuIElmIGBjb3B5X2Zyb21fdXNlcmAgc3VjY2VlZHMsIHRoZW4gdGhlIGVudGlyZSBzdHJ1Y3R1cmUgYHNgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYm91bmRzIGNoZWNrLiBUaGUgY2hlY2sgaXRzZWxmIGxvb2tzIGF0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBidXQgYmVjYXVzZSB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgdGhlcmUncyBubyB3YXkgaXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmUncyBubyBrZXJuZWwgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIGVpdGhlci4gSXQncyByZWFsbHkganVzdCBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBvbiBmaXJzdCBnbGFuY2UsIGJ1dCBJIGFsd2F5cyBkaWcgZGVlcGVyLlxuXG5JJ20gZmVlbGluZyBnb29kIGFib3V0IHRoaXMsIGJ1dCBJJ2xsIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbnl3YXkuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgY2VydGFpbiB0aGVyZSdzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJ20gbWlzc2luZy4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU2OjAwLjc1Nzg4MTY4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTE3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV92cmluZ19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMzLVxcdFxcdFxcdFxcdCAgIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NzgzPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU2OjAwLjgxMzcwMDUzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU2NzU3MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdmlydHVhbGl6YXRpb24gYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyczpcblxuKipBbmFseXppbmcgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92ZHBhLmNgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uIGJlY2F1c2UgSSBzdXNwZWN0IGl0IGhhbmRsZXMgdGhlIGNvcmUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYSB2aXJ0dWFsIGhvc3QgKHZob3N0KSBhbmQgYSBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRvciAoVkRQQSkgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSB2aXJ0aW8gcmluZyBzZXR1cCBhbmQgY29udHJvbCBjb21tYW5kcyBhcmUgbGlrZWx5IHBhc3NlZCBiZXR3ZWVuIHRoZSB2aG9zdCBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFZEUEEgaGFyZHdhcmUuXG5cbkknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSB2YXJpb3VzIGBpb2N0bGAgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGUgdmlydGlvIHJpbmdzLCBzdWNoIGFzIGNvbmZpZ3VyaW5nIHJpbmcgc2l6ZXMsIHNldHRpbmcgdXAgc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0b3JzIGFuZCBkYXRhIGJ1ZmZlcnMsIGFuZCBwb3RlbnRpYWxseSBtYW5hZ2luZyBpbnRlcnJ1cHQgZXZlbnRzIG9yIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgVkRQQS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFyZ3VtZW50IHBhcnNpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIGJlaW5nIHBhc3NlZCB0aHJvdWdoIHRoZSBgaW9jdGxgIGNhbGxzLiBJ4oCZbGwgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBkYXRhIGNvcGllcyBpbnZvbHZlZCwgYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgY2FuIGFyaXNlIGluIHRoZXNlIGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHNlY3VyaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgcGFzc2VkLCBhcyBWRFBBIGRldmljZXMgYXJlIG9mdGVuIGNyaXRpY2FsIGNvbXBvbmVudHMuIEknbGwgcHJvYmFibHkgbG9vayBmb3IgZXJyb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgdG8gZGV0ZXJtaW5lIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHZob3N0LVZEUEEgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MDQuOTcwNDYxMDc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMyOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuIDYzMzpcXHRcXHRcXHRcXHRcXHQgICB2b2lkIF9fdXNlciAqYXJncClcXG4gNjM0OlxcdHtcXG4gNjM1OlxcdFxcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXFx1MDAzZXZkcGE7XFxuIDYzNjpcXHRcXHRjb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLVxcdTAwM2Vjb25maWc7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgdmRwYV92cV9zdGF0ZSB2cV9zdGF0ZTtcXG4gNjM4OlxcdFxcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xcbiA2Mzk6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuIDY0MDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgcztcXG4gNjQxOlxcdFxcdHUzMiBpZHg7XFxuIDY0MjpcXHRcXHRsb25nIHI7XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdFxcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XFxuIDY0NTpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDY0NjpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0aWYgKGlkeCBcXHUwMDNlPSB2LVxcdTAwM2VudnFzKVxcbiA2NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZHggPSBhcnJheV9pbmRleF9ub3NwZWMoaWR4LCB2LVxcdTAwM2VudnFzKTtcXG4gNjUyOlxcdFxcdHZxID0gXFx1MDAyNnYtXFx1MDAzZXZxc1tpZHhdO1xcbiA2NTM6XFx0XFxuIDY1NDpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA2NTU6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6XFxuIDY1NjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXFxuIDY1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjU4OlxcdFxcdFxcdG9wcy1cXHUwMDNlc2V0X3ZxX3JlYWR5KHZkcGEsIGlkeCwgcy5udW0pO1xcbiA2NTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2MDpcXHRcXHRjYXNlIFZIT1NUX1ZEUEFfR0VUX1ZSSU5HX0dST1VQOlxcbiA2NjE6XFx0XFx0XFx0aWYgKCFvcHMtXFx1MDAzZWdldF92cV9ncm91cClcXG4gNjYyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjYzOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY2NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX2dyb3VwKHZkcGEsIGlkeCk7XFxuIDY2NTpcXHRcXHRcXHRpZiAocy5udW0gXFx1MDAzZT0gdmRwYS1cXHUwMDNlbmdyb3VwcylcXG4gNjY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA2Njc6XFx0XFx0XFx0ZWxzZSBpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZzLCBzaXplb2YocykpKVxcbiA2Njg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDY2OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjcwOlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfREVTQ19HUk9VUDpcXG4gNjcxOlxcdFxcdFxcdGlmICghdmhvc3RfdmRwYV9oYXNfZGVzY19ncm91cCh2KSlcXG4gNjcyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjczOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY3NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX2Rlc2NfZ3JvdXAodmRwYSwgaWR4KTtcXG4gNjc1OlxcdFxcdFxcdGlmIChzLm51bSBcXHUwMDNlPSB2ZHBhLVxcdTAwM2VuZ3JvdXBzKVxcbiA2NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDY3NzpcXHRcXHRcXHRlbHNlIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnMsIHNpemVvZihzKSkpXFxuIDY3ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjc5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2ODA6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9HUk9VUF9BU0lEOlxcbiA2ODE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzLCBhcmdwLCBzaXplb2YocykpKVxcbiA2ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDY4MzpcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IHZkcGEtXFx1MDAzZW5ncm91cHMgfHwgcy5udW0gXFx1MDAzZT0gdmRwYS1cXHUwMDNlbmFzKVxcbiA2ODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY4NTpcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfc3RhdHVzKHZkcGEpIFxcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcXG4gNjg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY4NzpcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlc2V0X2dyb3VwX2FzaWQpXFxuIDY4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VzZXRfZ3JvdXBfYXNpZCh2ZHBhLCBpZHgsIHMubnVtKTtcXG4gNjkwOlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfU0laRTpcXG4gNjkxOlxcdFxcdFxcdGlmICghb3BzLVxcdTAwM2VnZXRfdnFfc2l6ZSlcXG4gNjkyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjkzOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY5NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX3NpemUodmRwYSwgaWR4KTtcXG4gNjk1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnMsIHNpemVvZihzKSkpXFxuIDY5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjk3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2OTg6XFx0XFx0Y2FzZSBWSE9TVF9HRVRfVlJJTkdfQkFTRTpcXG4gNjk5OlxcdFxcdFxcdHIgPSBvcHMtXFx1MDAzZWdldF92cV9zdGF0ZSh2LVxcdTAwM2V2ZHBhLCBpZHgsIFxcdTAwMjZ2cV9zdGF0ZSk7XFxuIDcwMDpcXHRcXHRcXHRpZiAocilcXG4gNzAxOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19GX1JJTkdfUEFDS0VEKSkge1xcbiA3MDQ6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4ID0gdnFfc3RhdGUucGFja2VkLmxhc3RfYXZhaWxfaWR4IHxcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKHZxX3N0YXRlLnBhY2tlZC5sYXN0X2F2YWlsX2NvdW50ZXIgXFx1MDAzY1xcdTAwM2MgMTUpO1xcbiA3MDY6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggPSB2cV9zdGF0ZS5wYWNrZWQubGFzdF91c2VkX2lkeCB8XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHZxX3N0YXRlLnBhY2tlZC5sYXN0X3VzZWRfY291bnRlciBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIDcwODpcXHRcXHRcXHR9IGVsc2Uge1xcbiA3MDk6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4ID0gdnFfc3RhdGUuc3BsaXQuYXZhaWxfaW5kZXg7XFxuIDcxMDpcXHRcXHRcXHR9XFxuIDcxMTpcXHRcXHRcXHRicmVhaztcXG4gNzEyOlxcdFxcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX0NBTEw6XFxuIDcxMzpcXHRcXHRcXHRpZiAodnEtXFx1MDAzZWNhbGxfY3R4LmN0eCkge1xcbiA3MTQ6XFx0XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X3N0YXR1cyh2ZHBhKSBcXHUwMDI2XFxuIDcxNTpcXHRcXHRcXHRcXHQgICAgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcXG4gNzE2OlxcdFxcdFxcdFxcdFxcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcXG4gNzE3OlxcdFxcdFxcdH1cXG4gNzE4OlxcdFxcdFxcdGJyZWFrO1xcbiA3MTk6XFx0XFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxcbiA3MjA6XFx0XFx0XFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cXG4gNzIxOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4gNzIyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3MjM6XFx0XFx0XFx0aWYgKHMubnVtIFxcdTAwM2Ugb3BzLVxcdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKSlcXG4gNzI0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MjU6XFx0XFx0XFx0YnJlYWs7XFxuIDcyNjpcXHRcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2di1cXHUwMDNldmRldiwgY21kLCBhcmdwKTtcXG4gNzI5OlxcdFxcdGlmIChyKVxcbiA3MzA6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDczMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MDQuOTcwNjI3ODc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjI4MTgxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIEJvdW5kcyBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBjYXNlIGluIHRoZSB2aG9zdCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gc3RlcC4gVGhlIHBhdGNoIHJldHJpZXZlcyBgcy5udW1gIGZyb20gdXNlciBzcGFjZSwgYW5kIHRoZW4gY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgdmlydHVhbCBxdWV1ZSBudW1iZXIgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBkZXZpY2UgKGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgKS5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0J3MgbG9vayBjbG9zZXIuIFRoZSB2YXJpYWJsZSBgc2AgaXMgYSBsb2NhbCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGNvcHlfZnJvbV91c2VyYCAqZnVsbHkqIGluaXRpYWxpemVzIGBzYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2UgZ2V0IGFuIGAtRUZBVUxUYCBlcnJvciwgc28gdGhlcmUgaXMgbm8gaXNzdWUgaWYgY29weSBmYWlscy4gSWYgaXQgc3VjY2VlZHMsICphbGwqIGZpZWxkcyBvZiBgc2AgYXJlIHBvcHVsYXRlZC4gQWZ0ZXIgdGhlIGNoZWNrIHBhc3NlcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gY2FsbCBgdmhvc3RfdnJpbmdfaW9jdGxgLCBhbmQgeWVzLCB0aGF0IGZ1bmN0aW9uIGFsc28gY29waWVzIGBzYCBmcm9tIHVzZXIgc3BhY2UgYmVjYXVzZSBpdCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgaGVyZS4gVGhlIHBhdGNoJ3MgcHJpbWFyeSByb2xlIGlzIHRvIHJlc3RyaWN0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhjZWVkaW5nIHRoZSB1cHBlciBib3VuZCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0J3MgYSBzdGFuZGFyZCBib3VuZHMgY2hlY2ssIGp1c3QgbWFraW5nIHN1cmUgdGhlIHZhbHVlcyBhcmUgcmVhc29uYWJsZSBiZWZvcmUgdXNpbmcgdGhlbS4gSXQncyBub3QgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LlxuXG5TbywgaWYgd2Ugd2VyZSByZWx5aW5nIG9uIEtBU0FOLCBVQlNBTiwgZXRjLiB0byBkZXRlY3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoZXkgd291bGQgbm90IGJlIHJlbGV2YW50IGhlcmUuIEJ1dCBldmVuIEtNU0FOIGlzIG5vdCB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgdmFyaWFibGUgYHNgIGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgLiBJJ3ZlIGRvdWJsZSBjaGVja2VkIHRoYXQ7IHRoZSBgc2l6ZW9mKHMpYCBieXRlcyBhcmUgY29waWVkLiBUaGVyZSdzIG5vIHNjZW5hcmlvIHdoZXJlIGBzLm51bWAgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkLiBJdCdzIGVpdGhlciBjb21wbGV0ZWx5IGluaXRpYWxpemVkLCBvciB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjUsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MTMuMjkzNDQ5Mjk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsLiBJdCBjb3BpZXMgYSBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGNvcHlfZnJvbV91c2VyLCB3aGljaCBmdWxseSBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgJ3MnIGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAncycgaWYgc3VjY2Vzc2Z1bC4gSXQgdGhlbiBjaGVja3MgaWYgcy5udW0gZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIGluIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggc29sZWx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlcywgd2hpY2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowng9qs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 10:37:59 +0000 UTC FinishedAt: 2026-08-08 10:56:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_USER", "VDPA_SIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ca10634ebcca850dec2f1507ad5bfe70b82a9c00", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_USER", "VDPA_SIM" ], "series_id": "a3040c6d-a404-41f0-9ac7-8ee65d30635d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_unlocked_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdmhvc3RfdmRwYV92cmluZ19pb2N0bC4gSXQgY29waWVzIGEgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIGZyb20gdXNlciBzcGFjZSB1c2luZyBjb3B5X2Zyb21fdXNlciwgd2hpY2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0YWNrIHZhcmlhYmxlICYjMzk7cyYjMzk7IGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB0aGUgdmhvc3QtdmRwYSBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhbiBpb2N0bCBoYW5kbGVyIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIEZ1enppbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCB3aWxsIGhlbHAgZW5zdXJlIHRoZSBuZXcgY2hlY2sgY29ycmVjdGx5IGhhbmRsZXMgaW52YWxpZCBzaXplcyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzdjYjYyMDg0ZGJlODYyOGQ2N2EzODljNjIwMjk4MmEzZWFhNDE3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTA6NTU6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTcxNiw2ICYjNDM7NzE2LDEzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdFx0XHR2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGlkeCk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuJiM0MztcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZzLCBhcmdwLCBzaXplb2YocykpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfVVNFUiYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjU1OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwppbmRleCBhYzU1Mjc1ZmEwZDBhLi5iMjA4M2UxZWYxNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwpAQCAtNzE2LDYgJiM0Mzs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl2aG9zdF92ZHBhX3Vuc2V0dXBfdnFfaXJxKHYsIGlkeCk7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTToKJiM0MzsJCS8qIFJlamVjdCBzaXplcyBhYm92ZSB0aGUgbWF4IHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtzLCBhcmdwLCBzaXplb2YocykpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWYgKHMubnVtICZndDsgb3BzLSZndDtnZXRfdnFfbnVtX21heCh2ZHBhKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwogCX0KIAogCXIgPSB2aG9zdF92cmluZ19pb2N0bCgmYW1wO3YtJmd0O3ZkZXYsIGNtZCwgYXJncCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYHZob3N0L3ZkcGEuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGZ1bmN0aW9uLiBJdCYjMzk7cyBoYW5kbGluZyBgVkhPU1RfU0VUX1ZSSU5HX05VTWAsIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHRoZSBhZGRlZCBjaGVjazogaXQmIzM5O3MgcmVqZWN0aW5nIHNpemVzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UgdXNpbmcgYG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSlgLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBpdCYjMzk7cyBhbiBpb2N0bCBoYW5kbGVyLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzIHZ1bG5lcmFiaWxpdHkgaHVudGluZy4KCkdpdmVuIHRoaXMgaXMgYW4gaW9jdGwgaGFuZGxlciBmdW5jdGlvbiwgSSByZWFsbHkgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBwb3RlbnRpYWwgZmxhd3MuIFRoZSBjaGFuZ2UgKml0c2VsZiogc2VlbXMgc291bmQsIHRoZSBwYXRjaCBpcyBhZGRpbmcgdmFsaWRhdGlvbiwgYnV0IEkgc3RpbGwgc2VlIGEgcG90ZW50aWFsIGZvciBmdXp6aW5nIHRhcmdldHMgaGVyZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBjYW4gSSBicmVhayB0aGlzPyYjMzQ7LgoKU28sIGZ1enppbmcgZWl0aGVyIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBvciBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZWxldmFudCBmdXp6aW5nLCBhbmQgbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV92cmluZ19pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYxMz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3Jlc3VtZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo2MzI6c3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTYzMy1cdFx0XHRcdCAgIHZvaWQgX191c2VyICphcmdwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTc4Mz1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTYtXHRcdGlmIChyID09IC1FTk9JT0NUTENNRClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjg5NzpcdFx0XHRyID0gdmhvc3RfdmRwYV92cmluZ19pb2N0bCh2LCBjbWQsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtODk4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEVudHJ5IFBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoaXMgbW9kdWxlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gYXBwZWFycyB0byBiZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIE1ha2VzIHNlbnNlLiBOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIG15IG1lbnRhbCBtb2RlbCBvZiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAsIHRoZSB1bmxvY2tlZCBpb2N0bCBoYW5kbGVyLCBhbmQgdGhlIG92ZXJhbGwgZHJpdmVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmRwYVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTE9b2JqLSQoQ09ORklHX1ZIT1NUX1JJTkcpICYjNDM7PSB2cmluZ2gub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICYjNDM7PSB2aG9zdF92ZHBhLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBpcyBgVkhPU1RfVkRQQWAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgc3RhcnQgbWFwcGluZyBvdXQgdGhlIGRlcGVuZGVuY2llcy4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbGwgdGhlIHN1cHBvcnRpbmcgZWxlbWVudHMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgaWYgdGhpcyBpcyBhIGhpZ2gtcGVyZm9ybWFuY2Ugb3IgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzA6Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgVkhPU1RfVkRQQWAqKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBgVkhPU1RfVkRQQWAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIHRoYXQgdGVybS4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgYW5kIHdpdGhvdXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGl0IHJlcHJlc2VudHMsIGFueSBhbmFseXNpcyBvciBhY3Rpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiBXaGF0IGxheWVycyBhcmUgaW52b2x2ZWQgaGVyZT8gV2hhdCBkb2VzIFZIT1NUIG1lYW4gaW4gY29udGV4dD8gQW5kIHdoYXQgYWJvdXQgdGhlICYjMzQ7VkRQQSYjMzQ7IHBhcnQ/IElzIHRoYXQgYSBzcGVjaWZpYyB2aXJ0dWFsIGRldmljZSwgYSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIGFyZSBhbHdheXMgdGhlIGRldmlsLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiB0byBmb3JtIGEgc3Ryb25nIGZvdW5kYXRpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIHNlZSBleGFjdGx5IHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gaGluZ2Ugb24gYm90aCBgRVZFTlRGRGAgYW5kIGBWRFBBYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgVkRQQWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNldHVwLCBpdHMgcGFyYW1ldGVycywgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbS4gIEkmIzM5O20gdGhpbmtpbmcgYW55IGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gY2FzY2FkZSwgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGVzc2VudGlhbCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiB0ZWxscyB1cy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyOm1lbnVjb25maWcgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgZHJpdmVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnPTEwPWlmIFZEUEFcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MTI6Y29uZmlnIFZEUEFfU0lNXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMy1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjAtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyMTpjb25maWcgVkRQQV9TSU1fTkVUXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI3LVxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O3ZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjM1OmNvbmZpZyBWRFBBX1VTRVJcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM2LVx0dHJpc3RhdGUgXCYjMzQ7VkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkVuYWJsaW5nIEFjY2VsZXJhdGVkIFZpcnRpby1uZXQgd2l0aCB2RFBBKioKCkFscmlnaHQsIHRoZSBjb3JlIHF1ZXN0aW9uIGlzIGFib3V0IGxldmVyYWdpbmcgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBvdXIgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXMuICBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZW5hYmxlIGBWRFBBYCBhbmQgYFZIT1NUX1ZEUEFgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGZvdW5kYXRpb25hbCBzdGVwIHRvIGJyaW5nIGluIHRoZSB2RFBBIGNhcGFiaWxpdGllcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYnJpbmdpbmcgaW4gc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgc28gdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHdoYXQgdHlwZSBvZiB2RFBBIGRldmljZSB3ZSBtaWdodCB3YW50IGZvciBpbml0aWFsIHRlc3RpbmcuIFBlcmhhcHMgYFZEUEFfU0lNYCBvciBgVkRQQV9VU0VSYCB3b3VsZCBnaXZlIHVzIGEgc29mdHdhcmUtc2ltdWxhdGVkIHZEUEEgZGV2aWNlIHRoYXQgd2UgY2FuIHVzZSB3aXRob3V0IG5lZWRpbmcgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1pZ2h0IGJlIGEgcXVpY2tlciB3YXkgdG8gdmFsaWRhdGUgdGhlIHNldHVwIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gYmVmb3JlIHdlIGRpdmUgaW50byBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlZ3JhdGlvbnMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhhdCB0aGVzZSBhcmUgZm9yIGVhcmx5IGRldmVsb3BtZW50IG9yIHRlc3Rpbmcg4oCTIHdl4oCZbGwgd2FudCB0byBtb3ZlIHRvIHRoZSByZWFsIGhhcmR3YXJlIGFzIHNvb24gYXMgcG9zc2libGUgZm9yIHJlcHJlc2VudGF0aXZlIGJlbmNobWFya3MuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBteSB1bmRlcnN0YW5kaW5nIG9mIGBWRFBBYCBpcyBjb3JyZWN0LiBJ4oCZbGwgZ28gYW5kIHJlLXJlYWQgdGhlIGRlZmluaXRpb24gdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIG92ZXJhbGwgZ29hbHMuIE1ha2luZyBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgYmFzZSBkb3duIGlzIGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uIFdlIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHNwZWMgdG8gZW5zdXJlIHdlIGtub3cgYWxsIHRoZSBjYXZlYXRzIGZvciBhIGdpdmVuIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudWNvbmZpZyBWRFBBXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHRoYXQgdXNlcyBhXG4gICA3Olx0XHQgIGRhdGFwYXRoIHdoaWNoIGNvbXBsaWVzIHdpdGggdmlydGlvIHNwZWNpZmljYXRpb25zIHdpdGhcbiAgIDg6XHRcdCAgdmVuZG9yIHNwZWNpZmljIGNvbnRyb2wgcGF0aC5cbiAgIDk6XHRcbiAgMTA6XHRpZiBWRFBBXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFZEUEFfU0lNXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuICAxNDpcdFx0ZGVwZW5kcyBvbiBSVU5USU1FX1RFU1RJTkdfTUVOVVxuICAxNTpcdFx0c2VsZWN0IFZIT1NUX1JJTkdcbiAgMTY6XHRcdHNlbGVjdCBJT01NVV9JT1ZBXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIEVuYWJsZSB0aGlzIG1vZHVsZSB0byBzdXBwb3J0IHZEUEEgZGV2aWNlIHNpbXVsYXRvcnMuIFRoZXNlIGRldmljZXNcbiAgMTk6XHRcdCAgYXJlIHVzZWQgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nIGFuZCBkZXZlbG9wbWVudCBvZiB2RFBBLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGFuZCBDb250ZXh0KioKClJpZ2h0LCBzbyBgVkRQQV9TSU1gIGlzIGNsZWFybHkgbGlua2VkIHRvIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeS4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtIGFyY2hpdGVjdHVyZSB0ZWxscyBtZSB0aGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzaW11bGF0aW9uIGNvbXBvbmVudCB0aGF0IGxpa2VseSBsZXZlcmFnZXMgYSBydW50aW1lIG1lbnUgZm9yIGl0cyBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgcHVycG9zZXMuIE9rYXksIGdvdCBpdC4KCk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBgVkRQQV9TSU1gIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdXNlciBpbnRlcmZhY2Ugc2lkZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBWRFBBX1VTRVJgLiBJcyBgVkRQQV9VU0VSYCB0aGUgVUkgbGF5ZXIgZm9yIHRoZSBWRFBBIHN5c3RlbT8gSXMgaXQgdGhlIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBydW50aW1lIG1lbnU/IExldCYjMzk7cyBxdWlja2x5IHJldmlldyB3aGVyZSB0aGlzIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFRoaXMgY29udGV4dHVhbCB1bmRlcnN0YW5kaW5nIHdpbGwgZ3VpZGUgbWUgbW9yZSBlZmZpY2llbnRseSBpbiB0aGUgbmV4dCBpbnZlc3RpZ2F0aW9uIHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFx0ZGVwZW5kcyBvbiBWRFBBX1NJTVxuICAzMTpcdFx0aGVscFxuICAzMjpcdFx0ICB2RFBBIGJsb2NrIGRldmljZSBzaW11bGF0b3Igd2hpY2ggdGVybWluYXRlcyBJTyByZXF1ZXN0IGluIGFcbiAgMzM6XHRcdCAgbWVtb3J5IGJ1ZmZlci5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgVkRQQV9VU0VSXG4gIDM2Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVWRU5URkQgXHUwMDI2XHUwMDI2IE1NVVxuICAzODpcdFx0c2VsZWN0IFZIT1NUX0lPVExCXG4gIDM5Olx0XHRzZWxlY3QgSU9NTVVfSU9WQVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBXaXRoIFZEVVNFIGl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgYSB2RFBBIERldmljZVxuICA0MjpcdFx0ICBpbiBhIHVzZXJzcGFjZSBwcm9ncmFtLlxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBJRkNWRlxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBkcml2ZSBJbnRlbCBJRkMgVkYgTklDIHRvIG9mZmxvYWRcbiAgNDk6XHRcdCAgdmlydGlvIGRhdGFwbGFuZSB0cmFmZmljIHRvIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZEUEEgSW1wbGVtZW50YXRpb24gYW5kIFByb3Bvc2VkIENoYW5nZSoqCgpPa2F5LCBzbyBiYXNlZCBvbiB0aGlzIGluZm9ybWF0aW9uLCBgVkRQQV9VU0VSYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCDigJMgYFZEUEFgLCBgVkhPU1RfVkRQQWAsIGBWRFBBX1VTRVJgLCBhbmQgYFZEUEFfU0lNYCBuZWVkIHRvIGJlIHZlcmlmaWVkLiBUaGUgY29yZSBmdW5jdGlvbiB0byBwYXkgYXR0ZW50aW9uIHRvIGlzIGRlZmluaXRlbHkgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBnZXRzIGNhbGxlZCAqZnJvbSogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGlzIGlzIHdoZXJlIHRoZXkmIzM5O3ZlIGFkZGVkIHRoZSBjcnVjaWFsIGNoZWNrIGZvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAuIFNwZWNpZmljYWxseSwgdGhlIG5ldyBjb2RlIHdpbGwgbm93IHJlamVjdCByaW5nIHNpemVzIHRoYXQgZXhjZWVkIHRoZSBtYXhpbXVtIHNpemUgcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gVGhhdCBtYWtlcyBzZW5zZSwgaXQmIzM5O3MgYSBjcml0aWNhbCBzYWZldHkgbWVjaGFuaXNtLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgZ29vZCwgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgdXNlci1hY2Nlc3NpYmxlIHZpYSBpb2N0bCBtZWFucyB0aGF0IGNyYWZ0aW5nIGlucHV0cyBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIHdlIGNhbiB0ZXN0IGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHJpbmcgc2l6ZSBvdmVyZmxvd3MsIG9yIGluY29ycmVjdCB2YWxpZGF0aW9uLgoKQmVmb3JlIEkgY29tbWl0IHRvIGZ1enppbmcsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBlbnRyeSBwb2ludC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jPTYzMj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4Mi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjc4MzpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTc4NC1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE1NjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdmRwYV9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjUtXHQud3JpdGVfaXRlclx0PSB2aG9zdF92ZHBhX2Nocl93cml0ZV9pdGVyLFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU2NjpcdC51bmxvY2tlZF9pb2N0bFx0PSB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsLFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny0jaWZkZWYgQ09ORklHX01NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI3CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIG5hcnJvd3MgZG93biB0byBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIEkgY2FuIHNlZSB0aGF0JiMzOTtzIHRoZSBpb2N0bCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdmRwYV9mb3BzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0aW9uIGlzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgd2l0aGluIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gV2hpbGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGlzIGludGVybmFsLCB0aGUgcmVhbCBlbnRyeSBwb2ludCBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIGlzIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4KCkkgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIGFjY2Vzc2libGUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgaXQgbG9va3MgbGlrZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGlvbi4KClRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9VU0VSYCwgYW5kIGBWRFBBX1NJTWAuCgpNeSByZWFzb25pbmcgaXMgdGhpczogVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHZob3N0LXZkcGEgZHJpdmVyJiMzOTtzIGhhbmRsaW5nIG9mIGFuIGlvY3RsIGNvbW1hbmQgKGBWSE9TVF9TRVRfVlJJTkdfTlVNYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBmdXp6aW5nLiBGdXp6aW5nIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBzcGVjaWZpY2FsbHkgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoaXMgbmV3IGJvdW5kIGNoZWNrIGlzIHJvYnVzdC4gSSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBuZXcgY2hlY2sgaGFuZGxlcyBhbnkgaW52YWxpZCBzaXplcyB0aGUgZnV6emVyIG1pZ2h0IHRocm93IGF0IGl0IGFuZCB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1VTRVImIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdmhvc3RfdmRwYV92cmluZ19pb2N0bC4gSXQgY29waWVzIGEgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlIGZyb20gdXNlciBzcGFjZSB1c2luZyBjb3B5X2Zyb21fdXNlciwgd2hpY2ggZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIGxvY2FsIHN0YWNrIHZhcmlhYmxlICYjMzk7cyYjMzk7IGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3N2NiNjIwODRkYmU4NjI4ZDY3YTM4OWM2MjAyOTgyYTNlYWE0MTc5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAxMDo1NTowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmMKaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTcxNiw2ICYjNDM7NzE2LDEzIEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpOwogCQl9CiAJCWJyZWFrOwomIzQzOwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CiYjNDM7CQkvKiBSZWplY3Qgc2l6ZXMgYWJvdmUgdGhlIG1heCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiAqLwomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7cywgYXJncCwgc2l6ZW9mKHMpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCWlmIChzLm51bSAmZ3Q7IG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAl9CiAKIAlyID0gdmhvc3RfdnJpbmdfaW9jdGwoJmFtcDt2LSZndDt2ZGV2LCBjbWQsIGFyZ3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZob3N0IFZEUEEgVnJpbmcgSW9jdGwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYC4gSXQgc2VlbXMgdGhlIHByaW1hcnkgY2hhbmdlIGlzIGEgY2hlY2sgZm9yIHRoZSBgVkhPU1RfU0VUX1ZSSU5HX05VTWAgaW9jdGwuIEl0IGFwcGVhcnMgdG8gYmUgY29weWluZyBhIGBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGVgLCB3aGljaCBJJiMzOTttIGFzc3VtaW5nIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2cmluZyBzdGF0ZSwgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgc2AuIEFuZCBpdCYjMzk7cyBkb2luZyBhIGJvdW5kcyBjaGVjazogbWFraW5nIHN1cmUgYHMubnVtYCBkb2VzbiYjMzk7dCBleGNlZWQgdGhlIG1heGltdW0gYWxsb3dlZCBxdWV1ZSBudW1iZXIgcmV0dXJuZWQgYnkgYG9wcy0mZ3Q7Z2V0X3ZxX251bV9tYXgodmRwYSlgLiBJZiBpdCBkb2VzLCB3ZSBnZXQgYW4gYC1FSU5WQUxgLiBPdGhlcndpc2UsIGl0IGZhbGxzIHRocm91Z2ggdG8gdGhlIHN0YW5kYXJkIGB2aG9zdF92cmluZ19pb2N0bGAgcGF0aC4KCk15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEJ1dCBob2xkIG9uLCB0aGUgY29kZSAqaXMqIGNvcHlpbmcgZnJvbSB1c2VyIHNwYWNlLiBPa2F5LCBgY29weV9mcm9tX3VzZXJgICpzaG91bGQqIGluaXRpYWxpemUgYHNgIHdpdGggdGhlIHVzZXItcHJvdmlkZWQgZGF0YS4gQW5kIGl0IGNvcGllcyBgc2l6ZW9mKHMpYCBieXRlcy4gTGV0IG1lIGNvbmZpcm0gdGhhdCBsb2dpYyBpbiBteSBoZWFkLiBJZiBgY29weV9mcm9tX3VzZXJgIHN1Y2NlZWRzLCB0aGVuIHRoZSBlbnRpcmUgc3RydWN0dXJlIGBzYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gVGhlIGNoZWNrIGl0c2VsZiBsb29rcyBhdCB0aGUgdmFsdWUgb2YgYHMubnVtYCwgYnV0IGJlY2F1c2UgdGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIHRoZXJlJiMzOTtzIG5vIHdheSBpdCYjMzk7cyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmUmIzM5O3Mgbm8ga2VybmVsIG1lbW9yeSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgYm91bmRzIGNoZWNrLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIG9uIGZpcnN0IGdsYW5jZSwgYnV0IEkgYWx3YXlzIGRpZyBkZWVwZXIuCgpJJiMzOTttIGZlZWxpbmcgZ29vZCBhYm91dCB0aGlzLCBidXQgSSYjMzk7bGwgZ2xhbmNlIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFueXdheS4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBhIGdvb2QgcHJhY3RpY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfdnJpbmdfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMxLVxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzMtXHRcdFx0XHQgICB2b2lkIF9fdXNlciAqYXJncClcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz03ODM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVx0XHRpZiAociA9PSAtRU5PSU9DVExDTUQpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XHRcdFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTg5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdmlydHVhbGl6YXRpb24gYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyczoKCioqQW5hbHl6aW5nIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92ZHBhLmNgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBzcGVjaWZpYyBpb2N0bCBmdW5jdGlvbiBiZWNhdXNlIEkgc3VzcGVjdCBpdCBoYW5kbGVzIHRoZSBjb3JlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGEgdmlydHVhbCBob3N0ICh2aG9zdCkgYW5kIGEgVmlydHVhbCBEYXRhIFBhdGggQWNjZWxlcmF0b3IgKFZEUEEpIGRldmljZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgdmlydGlvIHJpbmcgc2V0dXAgYW5kIGNvbnRyb2wgY29tbWFuZHMgYXJlIGxpa2VseSBwYXNzZWQgYmV0d2VlbiB0aGUgdmhvc3QgZHJpdmVyIGFuZCB0aGUgdW5kZXJseWluZyBWRFBBIGhhcmR3YXJlLgoKSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSB2YXJpb3VzIGBpb2N0bGAgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGUgdmlydGlvIHJpbmdzLCBzdWNoIGFzIGNvbmZpZ3VyaW5nIHJpbmcgc2l6ZXMsIHNldHRpbmcgdXAgc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0b3JzIGFuZCBkYXRhIGJ1ZmZlcnMsIGFuZCBwb3RlbnRpYWxseSBtYW5hZ2luZyBpbnRlcnJ1cHQgZXZlbnRzIG9yIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgVkRQQS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhcmd1bWVudCBwYXJzaW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQgdGhyb3VnaCB0aGUgYGlvY3RsYCBjYWxscy4gSeKAmWxsIGJlIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWwgZGF0YSBjb3BpZXMgaW52b2x2ZWQsIGFzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGNhbiBhcmlzZSBpbiB0aGVzZSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoZSBzZWN1cml0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHBhc3NlZCwgYXMgVkRQQSBkZXZpY2VzIGFyZSBvZnRlbiBjcml0aWNhbCBjb21wb25lbnRzLiBJJiMzOTtsbCBwcm9iYWJseSBsb29rIGZvciBlcnJvciBoYW5kbGluZyBhbmQgdmFsaWRhdGlvbiByb3V0aW5lcyB0byBkZXRlcm1pbmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdmhvc3QtVkRQQSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzI6XHRzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuIDYzMzpcdFx0XHRcdFx0ICAgdm9pZCBfX3VzZXIgKmFyZ3ApXG4gNjM0Olx0e1xuIDYzNTpcdFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cdTAwM2V2ZHBhO1xuIDYzNjpcdFx0Y29uc3Qgc3RydWN0IHZkcGFfY29uZmlnX29wcyAqb3BzID0gdmRwYS1cdTAwM2Vjb25maWc7XG4gNjM3Olx0XHRzdHJ1Y3QgdmRwYV92cV9zdGF0ZSB2cV9zdGF0ZTtcbiA2Mzg6XHRcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xuIDYzOTpcdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XG4gNjQwOlx0XHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgcztcbiA2NDE6XHRcdHUzMiBpZHg7XG4gNjQyOlx0XHRsb25nIHI7XG4gNjQzOlx0XG4gNjQ0Olx0XHRyID0gZ2V0X3VzZXIoaWR4LCAodTMyIF9fdXNlciAqKWFyZ3ApO1xuIDY0NTpcdFx0aWYgKHIgXHUwMDNjIDApXG4gNjQ2Olx0XHRcdHJldHVybiByO1xuIDY0NzpcdFxuIDY0ODpcdFx0aWYgKGlkeCBcdTAwM2U9IHYtXHUwMDNlbnZxcylcbiA2NDk6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDY1MDpcdFxuIDY1MTpcdFx0aWR4ID0gYXJyYXlfaW5kZXhfbm9zcGVjKGlkeCwgdi1cdTAwM2VudnFzKTtcbiA2NTI6XHRcdHZxID0gXHUwMDI2di1cdTAwM2V2cXNbaWR4XTtcbiA2NTM6XHRcbiA2NTQ6XHRcdHN3aXRjaCAoY21kKSB7XG4gNjU1Olx0XHRjYXNlIFZIT1NUX1ZEUEFfU0VUX1ZSSU5HX0VOQUJMRTpcbiA2NTY6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNjU3Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjU4Olx0XHRcdG9wcy1cdTAwM2VzZXRfdnFfcmVhZHkodmRwYSwgaWR4LCBzLm51bSk7XG4gNjU5Olx0XHRcdHJldHVybiAwO1xuIDY2MDpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9WUklOR19HUk9VUDpcbiA2NjE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlZ2V0X3ZxX2dyb3VwKVxuIDY2MjpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA2NjM6XHRcdFx0cy5pbmRleCA9IGlkeDtcbiA2NjQ6XHRcdFx0cy5udW0gPSBvcHMtXHUwMDNlZ2V0X3ZxX2dyb3VwKHZkcGEsIGlkeCk7XG4gNjY1Olx0XHRcdGlmIChzLm51bSBcdTAwM2U9IHZkcGEtXHUwMDNlbmdyb3VwcylcbiA2NjY6XHRcdFx0XHRyZXR1cm4gLUVJTztcbiA2Njc6XHRcdFx0ZWxzZSBpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnMsIHNpemVvZihzKSkpXG4gNjY4Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjY5Olx0XHRcdHJldHVybiAwO1xuIDY3MDpcdFx0Y2FzZSBWSE9TVF9WRFBBX0dFVF9WUklOR19ERVNDX0dST1VQOlxuIDY3MTpcdFx0XHRpZiAoIXZob3N0X3ZkcGFfaGFzX2Rlc2NfZ3JvdXAodikpXG4gNjcyOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY3MzpcdFx0XHRzLmluZGV4ID0gaWR4O1xuIDY3NDpcdFx0XHRzLm51bSA9IG9wcy1cdTAwM2VnZXRfdnFfZGVzY19ncm91cCh2ZHBhLCBpZHgpO1xuIDY3NTpcdFx0XHRpZiAocy5udW0gXHUwMDNlPSB2ZHBhLVx1MDAzZW5ncm91cHMpXG4gNjc2Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4gNjc3Olx0XHRcdGVsc2UgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZzLCBzaXplb2YocykpKVxuIDY3ODpcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDY3OTpcdFx0XHRyZXR1cm4gMDtcbiA2ODA6XHRcdGNhc2UgVkhPU1RfVkRQQV9TRVRfR1JPVVBfQVNJRDpcbiA2ODE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNjgyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjgzOlx0XHRcdGlmIChpZHggXHUwMDNlPSB2ZHBhLVx1MDAzZW5ncm91cHMgfHwgcy5udW0gXHUwMDNlPSB2ZHBhLVx1MDAzZW5hcylcbiA2ODQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2ODU6XHRcdFx0aWYgKG9wcy1cdTAwM2VnZXRfc3RhdHVzKHZkcGEpIFx1MDAyNiBWSVJUSU9fQ09ORklHX1NfRFJJVkVSX09LKVxuIDY4NjpcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjg3Olx0XHRcdGlmICghb3BzLVx1MDAzZXNldF9ncm91cF9hc2lkKVxuIDY4ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA2ODk6XHRcdFx0cmV0dXJuIG9wcy1cdTAwM2VzZXRfZ3JvdXBfYXNpZCh2ZHBhLCBpZHgsIHMubnVtKTtcbiA2OTA6XHRcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfU0laRTpcbiA2OTE6XHRcdFx0aWYgKCFvcHMtXHUwMDNlZ2V0X3ZxX3NpemUpXG4gNjkyOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY5MzpcdFx0XHRzLmluZGV4ID0gaWR4O1xuIDY5NDpcdFx0XHRzLm51bSA9IG9wcy1cdTAwM2VnZXRfdnFfc2l6ZSh2ZHBhLCBpZHgpO1xuIDY5NTpcdFx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnMsIHNpemVvZihzKSkpXG4gNjk2Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNjk3Olx0XHRcdHJldHVybiAwO1xuIDY5ODpcdFx0Y2FzZSBWSE9TVF9HRVRfVlJJTkdfQkFTRTpcbiA2OTk6XHRcdFx0ciA9IG9wcy1cdTAwM2VnZXRfdnFfc3RhdGUodi1cdTAwM2V2ZHBhLCBpZHgsIFx1MDAyNnZxX3N0YXRlKTtcbiA3MDA6XHRcdFx0aWYgKHIpXG4gNzAxOlx0XHRcdFx0cmV0dXJuIHI7XG4gNzAyOlx0XG4gNzAzOlx0XHRcdGlmICh2aG9zdF9oYXNfZmVhdHVyZSh2cSwgVklSVElPX0ZfUklOR19QQUNLRUQpKSB7XG4gNzA0Olx0XHRcdFx0dnEtXHUwMDNlbGFzdF9hdmFpbF9pZHggPSB2cV9zdGF0ZS5wYWNrZWQubGFzdF9hdmFpbF9pZHggfFxuIDcwNTpcdFx0XHRcdFx0XHQgICAgICh2cV9zdGF0ZS5wYWNrZWQubGFzdF9hdmFpbF9jb3VudGVyIFx1MDAzY1x1MDAzYyAxNSk7XG4gNzA2Olx0XHRcdFx0dnEtXHUwMDNlbGFzdF91c2VkX2lkeCA9IHZxX3N0YXRlLnBhY2tlZC5sYXN0X3VzZWRfaWR4IHxcbiA3MDc6XHRcdFx0XHRcdFx0ICAgICh2cV9zdGF0ZS5wYWNrZWQubGFzdF91c2VkX2NvdW50ZXIgXHUwMDNjXHUwMDNjIDE1KTtcbiA3MDg6XHRcdFx0fSBlbHNlIHtcbiA3MDk6XHRcdFx0XHR2cS1cdTAwM2VsYXN0X2F2YWlsX2lkeCA9IHZxX3N0YXRlLnNwbGl0LmF2YWlsX2luZGV4O1xuIDcxMDpcdFx0XHR9XG4gNzExOlx0XHRcdGJyZWFrO1xuIDcxMjpcdFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfQ0FMTDpcbiA3MTM6XHRcdFx0aWYgKHZxLVx1MDAzZWNhbGxfY3R4LmN0eCkge1xuIDcxNDpcdFx0XHRcdGlmIChvcHMtXHUwMDNlZ2V0X3N0YXR1cyh2ZHBhKSBcdTAwMjZcbiA3MTU6XHRcdFx0XHQgICAgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcbiA3MTY6XHRcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcbiA3MTc6XHRcdFx0fVxuIDcxODpcdFx0XHRicmVhaztcbiA3MTk6XHRcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcbiA3MjA6XHRcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbiA3MjE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4gNzIyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gNzIzOlx0XHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuIDcyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDcyNTpcdFx0XHRicmVhaztcbiA3MjY6XHRcdH1cbiA3Mjc6XHRcbiA3Mjg6XHRcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2LVx1MDAzZXZkZXYsIGNtZCwgYXJncCk7XG4gNzI5Olx0XHRpZiAocilcbiA3MzA6XHRcdFx0cmV0dXJuIHI7XG4gNzMxOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNjUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBCb3VuZHMgQ2hlY2sqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIHdpdGhpbiB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGNhc2UgaW4gdGhlIHZob3N0IGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gc3RlcC4gVGhlIHBhdGNoIHJldHJpZXZlcyBgcy5udW1gIGZyb20gdXNlciBzcGFjZSwgYW5kIHRoZW4gY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgdmlydHVhbCBxdWV1ZSBudW1iZXIgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBkZXZpY2UgKGBvcHMtJmd0O2dldF92cV9udW1fbWF4KHZkcGEpYCkuCgpXYWl0IGEgbWludXRlLCBsZXQmIzM5O3MgbG9vayBjbG9zZXIuIFRoZSB2YXJpYWJsZSBgc2AgaXMgYSBsb2NhbCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGNvcHlfZnJvbV91c2VyYCAqZnVsbHkqIGluaXRpYWxpemVzIGBzYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2UgZ2V0IGFuIGAtRUZBVUxUYCBlcnJvciwgc28gdGhlcmUgaXMgbm8gaXNzdWUgaWYgY29weSBmYWlscy4gSWYgaXQgc3VjY2VlZHMsICphbGwqIGZpZWxkcyBvZiBgc2AgYXJlIHBvcHVsYXRlZC4gQWZ0ZXIgdGhlIGNoZWNrIHBhc3NlcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gY2FsbCBgdmhvc3RfdnJpbmdfaW9jdGxgLCBhbmQgeWVzLCB0aGF0IGZ1bmN0aW9uIGFsc28gY29waWVzIGBzYCBmcm9tIHVzZXIgc3BhY2UgYmVjYXVzZSBpdCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayBoZXJlLiBUaGUgcGF0Y2gmIzM5O3MgcHJpbWFyeSByb2xlIGlzIHRvIHJlc3RyaWN0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhjZWVkaW5nIHRoZSB1cHBlciBib3VuZCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgYm91bmRzIGNoZWNrLCBqdXN0IG1ha2luZyBzdXJlIHRoZSB2YWx1ZXMgYXJlIHJlYXNvbmFibGUgYmVmb3JlIHVzaW5nIHRoZW0uIEl0JiMzOTtzIG5vdCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgpTbywgaWYgd2Ugd2VyZSByZWx5aW5nIG9uIEtBU0FOLCBVQlNBTiwgZXRjLiB0byBkZXRlY3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoZXkgd291bGQgbm90IGJlIHJlbGV2YW50IGhlcmUuIEJ1dCBldmVuIEtNU0FOIGlzIG5vdCB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgdmFyaWFibGUgYHNgIGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgLiBJJiMzOTt2ZSBkb3VibGUgY2hlY2tlZCB0aGF0OyB0aGUgYHNpemVvZihzKWAgYnl0ZXMgYXJlIGNvcGllZC4gVGhlcmUmIzM5O3Mgbm8gc2NlbmFyaW8gd2hlcmUgYHMubnVtYCBjb3VsZCBiZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGVpdGhlciBjb21wbGV0ZWx5IGluaXRpYWxpemVkLCBvciB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDEwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAmIzM5O3MmIzM5OyBpZiBzdWNjZXNzZnVsLiBJdCB0aGVuIGNoZWNrcyBpZiBzLm51bSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgcmVhZHMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UgaW4gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzb2xlbHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCB3aGljaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAmIzM5O3MmIzM5OyBpZiBzdWNjZXNzZnVsLiBJdCB0aGVuIGNoZWNrcyBpZiBzLm51bSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgcmVhZHMsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGNvcGllZCBiYWNrIHRvIHVzZXIgc3BhY2UgaW4gdGhpcyBjaGFuZ2UuIFRoZSBwYXRjaCBzb2xlbHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCB3aGljaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MDcuODM5OTQyNjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NTM1NTk2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVkRQQV9VU0VSXCIsXG4gICAgXCJWRFBBX1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAncycgaWYgc3VjY2Vzc2Z1bC4gSXQgdGhlbiBjaGVja3MgaWYgcy5udW0gZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIGluIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggc29sZWx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlcywgd2hpY2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTowNy44Mzk5NDg3NjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzM5ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgOCAxMDo1NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTcxNiw2ICs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0XFx0XFx0XFx0dmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFZIT1NUX1NFVF9WUklOR19OVU06XFxuK1xcdFxcdC8qIFJlamVjdCBzaXplcyBhYm92ZSB0aGUgbWF4IHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UuICovXFxuK1xcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChzLm51bSBcXHUwMDNlIG9wcy1cXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2LCBjbWQsIGFyZ3ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTowOC4yMTgyODMwMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjQ2ODM5MzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJWRFBBX1VTRVJcIixcbiAgICBcIlZEUEFfU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHRoZSB2aG9zdC12ZHBhIGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGFuIGlvY3RsIGhhbmRsZXIgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gRnV6emluZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsIHdpbGwgaGVscCBlbnN1cmUgdGhlIG5ldyBjaGVjayBjb3JyZWN0bHkgaGFuZGxlcyBpbnZhbGlkIHNpemVzIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzdjYjYyMDg0ZGJlODYyOGQ2N2EzODljNjIwMjk4MmEzZWFhNDE3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTA6NTU6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhLi5iMjA4M2UxZWYxNTAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5AQCAtNzE2LDYgKzcxNiwxMyBAQCBzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0XHRcdFx0dmhvc3RfdmRwYV91bnNldHVwX3ZxX2lycSh2LCBpZHgpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxuK1x0XHQvKiBSZWplY3Qgc2l6ZXMgYWJvdmUgdGhlIG1heCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiAqL1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWYgKHMubnVtIFx1MDAzZSBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0ciA9IHZob3N0X3ZyaW5nX2lvY3RsKFx1MDAyNnYtXHUwMDNldmRldiwgY21kLCBhcmdwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjA4LjIxODI4NDM1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjM1NTQ5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgYHZob3N0L3ZkcGEuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy92aG9zdC92ZHBhLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGZ1bmN0aW9uLiBJdCdzIGhhbmRsaW5nIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCwgYW5kIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGFkZGVkIGNoZWNrOiBpdCdzIHJlamVjdGluZyBzaXplcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSByZXBvcnRlZCBieSB0aGUgZGV2aWNlIHVzaW5nIGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgLiBUaGF0J3MgZ29vZCwgYnV0IGl0J3MgYW4gaW9jdGwgaGFuZGxlciwgc28gbXkgZmlyc3QgdGhvdWdodCBpcyB2dWxuZXJhYmlsaXR5IGh1bnRpbmcuXG5cbkdpdmVuIHRoaXMgaXMgYW4gaW9jdGwgaGFuZGxlciBmdW5jdGlvbiwgSSByZWFsbHkgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAg4oCTIGJvdGggb2Ygd2hpY2ggYXJlIGxpa2VseSBjYW5kaWRhdGVzIGZvciBwb3RlbnRpYWwgZmxhd3MuIFRoZSBjaGFuZ2UgKml0c2VsZiogc2VlbXMgc291bmQsIHRoZSBwYXRjaCBpcyBhZGRpbmcgdmFsaWRhdGlvbiwgYnV0IEkgc3RpbGwgc2VlIGEgcG90ZW50aWFsIGZvciBmdXp6aW5nIHRhcmdldHMgaGVyZS4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGNhbiBJIGJyZWFrIHRoaXM/XCIuXG5cblNvLCBmdXp6aW5nIGVpdGhlciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgb3IgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSByZWxldmFudCBmdXp6aW5nLCBhbmQgbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3ZkcGEuY2AgdG8gdW5kZXJzdGFuZCB0aGUgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NToxMy4wODE4NDE0NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4Mjc0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV92cmluZ19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMzLVxcdFxcdFxcdFxcdCAgIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NzgzPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjEzLjEzMTY3NzcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjAwOTA0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC12ZHBhIElvY3RsIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24sIGFuZCBpdCdzIG1hcmtlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoaXMgbW9kdWxlLiBUaGUgY3J1Y2lhbCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gYXBwZWFycyB0byBiZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIE1ha2VzIHNlbnNlLiBOb3csIEkgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlIHJlbGF0ZWQgdG8gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gbXkgbWVudGFsIG1vZGVsIG9mIHRoaXMgc3lzdGVtLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsYCwgdGhlIHVubG9ja2VkIGlvY3RsIGhhbmRsZXIsIGFuZCB0aGUgb3ZlcmFsbCBkcml2ZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjE4LjE5MTc3MDQ5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUyNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZHBhXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjE4LjI0MDMwMzY0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4OTk4NTMwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UncmUgd29ya2luZyB3aXRoIGlzIGBWSE9TVF9WRFBBYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBzdGFydCBtYXBwaW5nIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cyBpcyBhYnNvbHV0ZWx5IGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgc3VwcG9ydGluZyBlbGVtZW50cyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cyBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgZXNwZWNpYWxseSBpZiB0aGlzIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBvciBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUuIExldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MjguMTQwMTU5NTU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTk1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9WRFBBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjktXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MjguMTkxNzYxODcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0MDk3OTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBWSE9TVF9WRFBBYCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgbWVudGlvbnMgYFZIT1NUX1ZEUEFgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiB0aGF0IHRlcm0uIEl0J3MgYSBrZXkgZWxlbWVudCwgYW5kIHdpdGhvdXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGl0IHJlcHJlc2VudHMsIGFueSBhbmFseXNpcyBvciBhY3Rpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiBXaGF0IGxheWVycyBhcmUgaW52b2x2ZWQgaGVyZT8gV2hhdCBkb2VzIFZIT1NUIG1lYW4gaW4gY29udGV4dD8gQW5kIHdoYXQgYWJvdXQgdGhlIFwiVkRQQVwiIHBhcnQ/IElzIHRoYXQgYSBzcGVjaWZpYyB2aXJ0dWFsIGRldmljZSwgYSBwcm90b2NvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBudWFuY2VzIGFyZSBhbHdheXMgdGhlIGRldmlsLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgZGVmaW5pdGlvbiB0byBmb3JtIGEgc3Ryb25nIGZvdW5kYXRpb24uIExldCdzIGRpZyBkZWVwZXIgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozMS40MzI3NDQxNDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDY4OlxcdFxcdHZob3N0X3Zzb2NrLlxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgVkhPU1RfVkRQQVxcbiAgNzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbiAgNzI6XFx0XFx0ZGVwZW5kcyBvbiBFVkVOVEZEXFxuICA3MzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDc0OlxcdFxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVkRQQVxcbiAgNzY6XFx0XFx0aGVscFxcbiAgNzc6XFx0XFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXFxuICA3ODpcXHRcXHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgODE6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiQ3Jvc3MtZW5kaWFuIHN1cHBvcnQgZm9yIHZob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozMS40MzI4MTM1NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNzc1NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBoaW5nZSBvbiBib3RoIGBFVkVOVEZEYCBhbmQgYFZEUEFgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBWRFBBYCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2V0dXAsIGl0cyBwYXJhbWV0ZXJzLCBhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0uICBJJ20gdGhpbmtpbmcgYW55IGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gY2FzY2FkZSwgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGVzc2VudGlhbCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIHRlbGxzIHVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjM0Ljg1MDU3MDgxOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2MDMzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZEUEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyOm1lbnVjb25maWcgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcInZEUEEgZHJpdmVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnPTEwPWlmIFZEUEFcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyMTpjb25maWcgVkRQQV9TSU1fTkVUXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBuZXR3b3JraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI3LVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJ2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzQtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM2LVxcdHRyaXN0YXRlIFxcXCJWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTozNC45MDAxNzg1MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0ODc4NjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRW5hYmxpbmcgQWNjZWxlcmF0ZWQgVmlydGlvLW5ldCB3aXRoIHZEUEEqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBxdWVzdGlvbiBpcyBhYm91dCBsZXZlcmFnaW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBmb3Igb3VyIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLiAgTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGVuYWJsZSBgVkRQQWAgYW5kIGBWSE9TVF9WRFBBYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBmb3VuZGF0aW9uYWwgc3RlcCB0byBicmluZyBpbiB0aGUgdkRQQSBjYXBhYmlsaXRpZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYnJpbmdpbmcgaW4gc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgc28gdGhpcyBpcyB3aGVyZSB3ZSBuZWVkIHRvIHN0YXJ0LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB3aGF0IHR5cGUgb2YgdkRQQSBkZXZpY2Ugd2UgbWlnaHQgd2FudCBmb3IgaW5pdGlhbCB0ZXN0aW5nLiBQZXJoYXBzIGBWRFBBX1NJTWAgb3IgYFZEUEFfVVNFUmAgd291bGQgZ2l2ZSB1cyBhIHNvZnR3YXJlLXNpbXVsYXRlZCB2RFBBIGRldmljZSB0aGF0IHdlIGNhbiB1c2Ugd2l0aG91dCBuZWVkaW5nIHNwZWNpYWxpemVkIGhhcmR3YXJlIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtaWdodCBiZSBhIHF1aWNrZXIgd2F5IHRvIHZhbGlkYXRlIHRoZSBzZXR1cCBhbmQgaW5pdGlhbCBjb25maWd1cmF0aW9uIGJlZm9yZSB3ZSBkaXZlIGludG8gaGFyZHdhcmUtc3BlY2lmaWMgaW50ZWdyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoYXQgdGhlc2UgYXJlIGZvciBlYXJseSBkZXZlbG9wbWVudCBvciB0ZXN0aW5nIOKAkyB3ZeKAmWxsIHdhbnQgdG8gbW92ZSB0byB0aGUgcmVhbCBoYXJkd2FyZSBhcyBzb29uIGFzIHBvc3NpYmxlIGZvciByZXByZXNlbnRhdGl2ZSBiZW5jaG1hcmtzLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IG15IHVuZGVyc3RhbmRpbmcgb2YgYFZEUEFgIGlzIGNvcnJlY3QuIEnigJlsbCBnbyBhbmQgcmUtcmVhZCB0aGUgZGVmaW5pdGlvbiB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIHRoZSBjb250ZXh0IG9mIG91ciBvdmVyYWxsIGdvYWxzLiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgYmFzZSBkb3duIGlzIGFsd2F5cyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uIFdlIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIHNwZWMgdG8gZW5zdXJlIHdlIGtub3cgYWxsIHRoZSBjYXZlYXRzIGZvciBhIGdpdmVuIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MzguOTQ4OTY3OTMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmRwYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIFZEUEFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRyaXZlcnNcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgdG8gc3VwcG9ydCB2RFBBIGRldmljZSB0aGF0IHVzZXMgYVxcbiAgIDc6XFx0XFx0ICBkYXRhcGF0aCB3aGljaCBjb21wbGllcyB3aXRoIHZpcnRpbyBzcGVjaWZpY2F0aW9ucyB3aXRoXFxuICAgODpcXHRcXHQgIHZlbmRvciBzcGVjaWZpYyBjb250cm9sIHBhdGguXFxuICAgOTpcXHRcXG4gIDEwOlxcdGlmIFZEUEFcXG4gIDExOlxcdFxcbiAgMTI6XFx0Y29uZmlnIFZEUEFfU0lNXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwidkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFJVTlRJTUVfVEVTVElOR19NRU5VXFxuICAxNTpcXHRcXHRzZWxlY3QgVkhPU1RfUklOR1xcbiAgMTY6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHRvIHN1cHBvcnQgdkRQQSBkZXZpY2Ugc2ltdWxhdG9ycy4gVGhlc2UgZGV2aWNlc1xcbiAgMTk6XFx0XFx0ICBhcmUgdXNlZCBmb3IgdGVzdGluZywgcHJvdG90eXBpbmcgYW5kIGRldmVsb3BtZW50IG9mIHZEUEEuXFxuICAyMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6MzguOTQ5MDU3MzYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzM5MTg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIERlcGVuZGVuY2llcyBhbmQgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBgVkRQQV9TSU1gIGlzIGNsZWFybHkgbGlua2VkIHRvIGBSVU5USU1FX1RFU1RJTkdfTUVOVWAuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5LiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHRlbGxzIG1lIHRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgc2ltdWxhdGlvbiBjb21wb25lbnQgdGhhdCBsaWtlbHkgbGV2ZXJhZ2VzIGEgcnVudGltZSBtZW51IGZvciBpdHMgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBPa2F5LCBnb3QgaXQuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGZ1cnRoZXIgaW50byBgVkRQQV9TSU1gIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgdXNlciBpbnRlcmZhY2Ugc2lkZSwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBWRFBBX1VTRVJgLiBJcyBgVkRQQV9VU0VSYCB0aGUgVUkgbGF5ZXIgZm9yIHRoZSBWRFBBIHN5c3RlbT8gSXMgaXQgdGhlIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBydW50aW1lIG1lbnU/IExldCdzIHF1aWNrbHkgcmV2aWV3IHdoZXJlIHRoaXMgZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgd2lsbCBndWlkZSBtZSBtb3JlIGVmZmljaWVudGx5IGluIHRoZSBuZXh0IGludmVzdGlnYXRpb24gc3RlcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU1OjQyLjM4Mjk3ODIyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRkZXBlbmRzIG9uIFZEUEFfU0lNXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIHZEUEEgYmxvY2sgZGV2aWNlIHNpbXVsYXRvciB3aGljaCB0ZXJtaW5hdGVzIElPIHJlcXVlc3QgaW4gYVxcbiAgMzM6XFx0XFx0ICBtZW1vcnkgYnVmZmVyLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgVkRQQV9VU0VSXFxuICAzNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVkRVU0UgKHZEUEEgRGV2aWNlIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDM4OlxcdFxcdHNlbGVjdCBWSE9TVF9JT1RMQlxcbiAgMzk6XFx0XFx0c2VsZWN0IElPTU1VX0lPVkFcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgV2l0aCBWRFVTRSBpdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIGEgdkRQQSBEZXZpY2VcXG4gIDQyOlxcdFxcdCAgaW4gYSB1c2Vyc3BhY2UgcHJvZ3JhbS5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIElGQ1ZGXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgSUZDIFZGIHZEUEEgZHJpdmVyXFxcIlxcbiAgNDY6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gZHJpdmUgSW50ZWwgSUZDIFZGIE5JQyB0byBvZmZsb2FkXFxuICA0OTpcXHRcXHQgIHZpcnRpbyBkYXRhcGxhbmUgdHJhZmZpYyB0byBoYXJkd2FyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NDIuMzgzMDQ0NzQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA1NjQxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVkRQQSBJbXBsZW1lbnRhdGlvbiBhbmQgUHJvcG9zZWQgQ2hhbmdlKipcblxuT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgYFZEUEFfVVNFUmAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQg4oCTIGBWRFBBYCwgYFZIT1NUX1ZEUEFgLCBgVkRQQV9VU0VSYCwgYW5kIGBWRFBBX1NJTWAgbmVlZCB0byBiZSB2ZXJpZmllZC4gVGhlIGNvcmUgZnVuY3Rpb24gdG8gcGF5IGF0dGVudGlvbiB0byBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBjaGFuZ2UgbGllcyB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLCB3aGljaCBnZXRzIGNhbGxlZCAqZnJvbSogYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBUaGlzIGlzIHdoZXJlIHRoZXkndmUgYWRkZWQgdGhlIGNydWNpYWwgY2hlY2sgZm9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC4gU3BlY2lmaWNhbGx5LCB0aGUgbmV3IGNvZGUgd2lsbCBub3cgcmVqZWN0IHJpbmcgc2l6ZXMgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0IG1ha2VzIHNlbnNlLCBpdCdzIGEgY3JpdGljYWwgc2FmZXR5IG1lY2hhbmlzbS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBpb2N0bCBpbnRlcmZhY2UuIFRoYXQncyBnb29kLCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gdGVzdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIHVzZXItYWNjZXNzaWJsZSB2aWEgaW9jdGwgbWVhbnMgdGhhdCBjcmFmdGluZyBpbnB1dHMgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGFuZCB3ZSBjYW4gdGVzdCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgbGlrZSByaW5nIHNpemUgb3ZlcmZsb3dzLCBvciBpbmNvcnJlY3QgdmFsaWRhdGlvbi5cblxuQmVmb3JlIEkgY29tbWl0IHRvIGZ1enppbmcsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCBpcyBpbmRlZWQgdGhlICpvbmx5KiBlbnRyeSBwb2ludC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NDcuNjIzNjExNjU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI5ODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdmRwYS5jPTYzMj1zdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF92ZHBhICp2LCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNzgyLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjc4MzpzdGF0aWMgbG9uZyB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy03ODQtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3ZkcGFfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE1NjUtXFx0LndyaXRlX2l0ZXJcXHQ9IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTU2NjpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTU2Ny0jaWZkZWYgQ09ORklHX01NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo0Ny42Njc5MTk0NjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkzOTMzMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgdmhvc3QtdmRwYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBuYXJyb3dzIGRvd24gdG8gYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLiBJIGNhbiBzZWUgdGhhdCdzIHRoZSBpb2N0bCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBgdmhvc3RfdmRwYV9mb3BzYCwgc28gdGhhdCdzIHdoZXJlIHRoZSBhY3Rpb24gaXMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCB3aXRoaW4gYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgLiBXaGlsZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgaXMgaW50ZXJuYWwsIHRoZSByZWFsIGVudHJ5IHBvaW50IEknbSBjb25jZXJuZWQgd2l0aCBpcyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuXG5cbkkgcXVpY2tseSBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyLCBtb3JlIGFjY2Vzc2libGUgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBidXQgaXQgbG9va3MgbGlrZSBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgaXMgaW5kZWVkIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBpbnRlcmFjdGlvbi5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1VTRVJgLCBhbmQgYFZEUEFfU0lNYC5cblxuTXkgcmVhc29uaW5nIGlzIHRoaXM6IFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSB2aG9zdC12ZHBhIGRyaXZlcidzIGhhbmRsaW5nIG9mIGFuIGlvY3RsIGNvbW1hbmQgKGBWSE9TVF9TRVRfVlJJTkdfTlVNYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGl0J3MgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZnV6emluZy4gRnV6emluZyBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAgc3BlY2lmaWNhbGx5IGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGlzIG5ldyBib3VuZCBjaGVjayBpcyByb2J1c3QuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgbmV3IGNoZWNrIGhhbmRsZXMgYW55IGludmFsaWQgc2l6ZXMgdGhlIGZ1enplciBtaWdodCB0aHJvdyBhdCBpdCBhbmQgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NTQuNjA3MjUzMzg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk0MjAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiVkRQQV9TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfVVNFUlwiLFxuICAgIFwiVkRQQV9TSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIFZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgaW4gdGhlIHZob3N0LXZkcGEgZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gaW9jdGwgaGFuZGxlciByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBGdXp6aW5nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwgd2lsbCBoZWxwIGVuc3VyZSB0aGUgbmV3IGNoZWNrIGNvcnJlY3RseSBoYW5kbGVzIGludmFsaWQgc2l6ZXMgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo1NC42ODY2ODAxNDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjA2ODExMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTU6NTQuNjg3MTkxODI3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4NjA2Mjk0NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsLiBJdCBjb3BpZXMgYSBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGNvcHlfZnJvbV91c2VyLCB3aGljaCBmdWxseSBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgJ3MnIGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc3Y2I2MjA4NGRiZTg2MjhkNjdhMzg5YzYyMDI5ODJhM2VhYTQxNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDEwOjU1OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuaW5kZXggYWM1NTI3NWZhMGQwYS4uYjIwODNlMWVmMTUwMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTcxNiw2ICs3MTYsMTMgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV92cmluZ19pb2N0bChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdFx0XHRcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbitcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX05VTTpcbitcdFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGlmIChzLm51bSBcdTAwM2Ugb3BzLVx1MDAzZWdldF92cV9udW1fbWF4KHZkcGEpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbiBcdH1cbiBcbiBcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZ2LVx1MDAzZXZkZXYsIGNtZCwgYXJncCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxMDo1NTo1NC42ODcxOTI2MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3MDY4NTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFZEUEEgVnJpbmcgSW9jdGwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAuIEl0IHNlZW1zIHRoZSBwcmltYXJ5IGNoYW5nZSBpcyBhIGNoZWNrIGZvciB0aGUgYFZIT1NUX1NFVF9WUklOR19OVU1gIGlvY3RsLiBJdCBhcHBlYXJzIHRvIGJlIGNvcHlpbmcgYSBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCwgd2hpY2ggSSdtIGFzc3VtaW5nIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2cmluZyBzdGF0ZSwgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBgc2AuIEFuZCBpdCdzIGRvaW5nIGEgYm91bmRzIGNoZWNrOiBtYWtpbmcgc3VyZSBgcy5udW1gIGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcXVldWUgbnVtYmVyIHJldHVybmVkIGJ5IGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgLiBJZiBpdCBkb2VzLCB3ZSBnZXQgYW4gYC1FSU5WQUxgLiBPdGhlcndpc2UsIGl0IGZhbGxzIHRocm91Z2ggdG8gdGhlIHN0YW5kYXJkIGB2aG9zdF92cmluZ19pb2N0bGAgcGF0aC5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlICppcyogY29weWluZyBmcm9tIHVzZXIgc3BhY2UuIE9rYXksIGBjb3B5X2Zyb21fdXNlcmAgKnNob3VsZCogaW5pdGlhbGl6ZSBgc2Agd2l0aCB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBBbmQgaXQgY29waWVzIGBzaXplb2YocylgIGJ5dGVzLiBMZXQgbWUgY29uZmlybSB0aGF0IGxvZ2ljIGluIG15IGhlYWQuIElmIGBjb3B5X2Zyb21fdXNlcmAgc3VjY2VlZHMsIHRoZW4gdGhlIGVudGlyZSBzdHJ1Y3R1cmUgYHNgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYm91bmRzIGNoZWNrLiBUaGUgY2hlY2sgaXRzZWxmIGxvb2tzIGF0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBidXQgYmVjYXVzZSB0aGUgZW50aXJlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgdGhlcmUncyBubyB3YXkgaXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmUncyBubyBrZXJuZWwgbWVtb3J5IGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIGVpdGhlci4gSXQncyByZWFsbHkganVzdCBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCBvbiBmaXJzdCBnbGFuY2UsIGJ1dCBJIGFsd2F5cyBkaWcgZGVlcGVyLlxuXG5JJ20gZmVlbGluZyBnb29kIGFib3V0IHRoaXMsIGJ1dCBJJ2xsIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbnl3YXkuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgY2VydGFpbiB0aGVyZSdzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiBJJ20gbWlzc2luZy4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU2OjAwLjc1Nzg4MTY4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4MTE3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdmRwYV92cmluZ19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuYz02MTM9c3RhdGljIGxvbmcgdmhvc3RfdmRwYV9yZXN1bWUoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy02MzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6NjMyOnN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjMzLVxcdFxcdFxcdFxcdCAgIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9NzgzPXN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtODk2LVxcdFxcdGlmIChyID09IC1FTk9JT0NUTENNRClcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo4OTc6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwodiwgY21kLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy04OTgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDEwOjU2OjAwLjgxMzcwMDUzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU2NzU3MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdmlydHVhbGl6YXRpb24gYW5kIGtlcm5lbC1sZXZlbCBkZXZpY2UgZHJpdmVyczpcblxuKipBbmFseXppbmcgYHZob3N0X3ZkcGFfdnJpbmdfaW9jdGxgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgdmhvc3RfdmRwYV92cmluZ19pb2N0bGAgZnVuY3Rpb24gd2l0aGluIHRoZSBgZHJpdmVycy92aG9zdC92ZHBhLmNgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGlzIHNwZWNpZmljIGlvY3RsIGZ1bmN0aW9uIGJlY2F1c2UgSSBzdXNwZWN0IGl0IGhhbmRsZXMgdGhlIGNvcmUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYSB2aXJ0dWFsIGhvc3QgKHZob3N0KSBhbmQgYSBWaXJ0dWFsIERhdGEgUGF0aCBBY2NlbGVyYXRvciAoVkRQQSkgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSB2aXJ0aW8gcmluZyBzZXR1cCBhbmQgY29udHJvbCBjb21tYW5kcyBhcmUgbGlrZWx5IHBhc3NlZCBiZXR3ZWVuIHRoZSB2aG9zdCBkcml2ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIFZEUEEgaGFyZHdhcmUuXG5cbkknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSB2YXJpb3VzIGBpb2N0bGAgcmVxdWVzdHMgcmVsYXRlZCB0byB0aGUgdmlydGlvIHJpbmdzLCBzdWNoIGFzIGNvbmZpZ3VyaW5nIHJpbmcgc2l6ZXMsIHNldHRpbmcgdXAgc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0b3JzIGFuZCBkYXRhIGJ1ZmZlcnMsIGFuZCBwb3RlbnRpYWxseSBtYW5hZ2luZyBpbnRlcnJ1cHQgZXZlbnRzIG9yIG90aGVyIGNvbnRyb2wgb3BlcmF0aW9ucyBzcGVjaWZpYyB0byB0aGUgVkRQQS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFyZ3VtZW50IHBhcnNpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IGluZm9ybWF0aW9uIGlzIGJlaW5nIHBhc3NlZCB0aHJvdWdoIHRoZSBgaW9jdGxgIGNhbGxzLiBJ4oCZbGwgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbCBkYXRhIGNvcGllcyBpbnZvbHZlZCwgYXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgY2FuIGFyaXNlIGluIHRoZXNlIGFyZWFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHNlY3VyaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgcGFzc2VkLCBhcyBWRFBBIGRldmljZXMgYXJlIG9mdGVuIGNyaXRpY2FsIGNvbXBvbmVudHMuIEknbGwgcHJvYmFibHkgbG9vayBmb3IgZXJyb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgdG8gZGV0ZXJtaW5lIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHZob3N0LVZEUEEgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MDQuOTcwNDYxMDc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjMyOlxcdHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHVuc2lnbmVkIGludCBjbWQsXFxuIDYzMzpcXHRcXHRcXHRcXHRcXHQgICB2b2lkIF9fdXNlciAqYXJncClcXG4gNjM0OlxcdHtcXG4gNjM1OlxcdFxcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXFx1MDAzZXZkcGE7XFxuIDYzNjpcXHRcXHRjb25zdCBzdHJ1Y3QgdmRwYV9jb25maWdfb3BzICpvcHMgPSB2ZHBhLVxcdTAwM2Vjb25maWc7XFxuIDYzNzpcXHRcXHRzdHJ1Y3QgdmRwYV92cV9zdGF0ZSB2cV9zdGF0ZTtcXG4gNjM4OlxcdFxcdHN0cnVjdCB2ZHBhX2NhbGxiYWNrIGNiO1xcbiA2Mzk6XFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7XFxuIDY0MDpcXHRcXHRzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgcztcXG4gNjQxOlxcdFxcdHUzMiBpZHg7XFxuIDY0MjpcXHRcXHRsb25nIHI7XFxuIDY0MzpcXHRcXG4gNjQ0OlxcdFxcdHIgPSBnZXRfdXNlcihpZHgsICh1MzIgX191c2VyICopYXJncCk7XFxuIDY0NTpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDY0NjpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0aWYgKGlkeCBcXHUwMDNlPSB2LVxcdTAwM2VudnFzKVxcbiA2NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRpZHggPSBhcnJheV9pbmRleF9ub3NwZWMoaWR4LCB2LVxcdTAwM2VudnFzKTtcXG4gNjUyOlxcdFxcdHZxID0gXFx1MDAyNnYtXFx1MDAzZXZxc1tpZHhdO1xcbiA2NTM6XFx0XFxuIDY1NDpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA2NTU6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9WUklOR19FTkFCTEU6XFxuIDY1NjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnMsIGFyZ3AsIHNpemVvZihzKSkpXFxuIDY1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjU4OlxcdFxcdFxcdG9wcy1cXHUwMDNlc2V0X3ZxX3JlYWR5KHZkcGEsIGlkeCwgcy5udW0pO1xcbiA2NTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2MDpcXHRcXHRjYXNlIFZIT1NUX1ZEUEFfR0VUX1ZSSU5HX0dST1VQOlxcbiA2NjE6XFx0XFx0XFx0aWYgKCFvcHMtXFx1MDAzZWdldF92cV9ncm91cClcXG4gNjYyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjYzOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY2NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX2dyb3VwKHZkcGEsIGlkeCk7XFxuIDY2NTpcXHRcXHRcXHRpZiAocy5udW0gXFx1MDAzZT0gdmRwYS1cXHUwMDNlbmdyb3VwcylcXG4gNjY2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiA2Njc6XFx0XFx0XFx0ZWxzZSBpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZzLCBzaXplb2YocykpKVxcbiA2Njg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDY2OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjcwOlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfREVTQ19HUk9VUDpcXG4gNjcxOlxcdFxcdFxcdGlmICghdmhvc3RfdmRwYV9oYXNfZGVzY19ncm91cCh2KSlcXG4gNjcyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjczOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY3NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX2Rlc2NfZ3JvdXAodmRwYSwgaWR4KTtcXG4gNjc1OlxcdFxcdFxcdGlmIChzLm51bSBcXHUwMDNlPSB2ZHBhLVxcdTAwM2VuZ3JvdXBzKVxcbiA2NzY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDY3NzpcXHRcXHRcXHRlbHNlIGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnMsIHNpemVvZihzKSkpXFxuIDY3ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjc5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2ODA6XFx0XFx0Y2FzZSBWSE9TVF9WRFBBX1NFVF9HUk9VUF9BU0lEOlxcbiA2ODE6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzLCBhcmdwLCBzaXplb2YocykpKVxcbiA2ODI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDY4MzpcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IHZkcGEtXFx1MDAzZW5ncm91cHMgfHwgcy5udW0gXFx1MDAzZT0gdmRwYS1cXHUwMDNlbmFzKVxcbiA2ODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDY4NTpcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfc3RhdHVzKHZkcGEpIFxcdTAwMjYgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcXG4gNjg2OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY4NzpcXHRcXHRcXHRpZiAoIW9wcy1cXHUwMDNlc2V0X2dyb3VwX2FzaWQpXFxuIDY4ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VzZXRfZ3JvdXBfYXNpZCh2ZHBhLCBpZHgsIHMubnVtKTtcXG4gNjkwOlxcdFxcdGNhc2UgVkhPU1RfVkRQQV9HRVRfVlJJTkdfU0laRTpcXG4gNjkxOlxcdFxcdFxcdGlmICghb3BzLVxcdTAwM2VnZXRfdnFfc2l6ZSlcXG4gNjkyOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNjkzOlxcdFxcdFxcdHMuaW5kZXggPSBpZHg7XFxuIDY5NDpcXHRcXHRcXHRzLm51bSA9IG9wcy1cXHUwMDNlZ2V0X3ZxX3NpemUodmRwYSwgaWR4KTtcXG4gNjk1OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNnMsIHNpemVvZihzKSkpXFxuIDY5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gNjk3OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2OTg6XFx0XFx0Y2FzZSBWSE9TVF9HRVRfVlJJTkdfQkFTRTpcXG4gNjk5OlxcdFxcdFxcdHIgPSBvcHMtXFx1MDAzZWdldF92cV9zdGF0ZSh2LVxcdTAwM2V2ZHBhLCBpZHgsIFxcdTAwMjZ2cV9zdGF0ZSk7XFxuIDcwMDpcXHRcXHRcXHRpZiAocilcXG4gNzAxOlxcdFxcdFxcdFxcdHJldHVybiByO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRcXHRpZiAodmhvc3RfaGFzX2ZlYXR1cmUodnEsIFZJUlRJT19GX1JJTkdfUEFDS0VEKSkge1xcbiA3MDQ6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4ID0gdnFfc3RhdGUucGFja2VkLmxhc3RfYXZhaWxfaWR4IHxcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKHZxX3N0YXRlLnBhY2tlZC5sYXN0X2F2YWlsX2NvdW50ZXIgXFx1MDAzY1xcdTAwM2MgMTUpO1xcbiA3MDY6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfdXNlZF9pZHggPSB2cV9zdGF0ZS5wYWNrZWQubGFzdF91c2VkX2lkeCB8XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgKHZxX3N0YXRlLnBhY2tlZC5sYXN0X3VzZWRfY291bnRlciBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIDcwODpcXHRcXHRcXHR9IGVsc2Uge1xcbiA3MDk6XFx0XFx0XFx0XFx0dnEtXFx1MDAzZWxhc3RfYXZhaWxfaWR4ID0gdnFfc3RhdGUuc3BsaXQuYXZhaWxfaW5kZXg7XFxuIDcxMDpcXHRcXHRcXHR9XFxuIDcxMTpcXHRcXHRcXHRicmVhaztcXG4gNzEyOlxcdFxcdGNhc2UgVkhPU1RfU0VUX1ZSSU5HX0NBTEw6XFxuIDcxMzpcXHRcXHRcXHRpZiAodnEtXFx1MDAzZWNhbGxfY3R4LmN0eCkge1xcbiA3MTQ6XFx0XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlZ2V0X3N0YXR1cyh2ZHBhKSBcXHUwMDI2XFxuIDcxNTpcXHRcXHRcXHRcXHQgICAgVklSVElPX0NPTkZJR19TX0RSSVZFUl9PSylcXG4gNzE2OlxcdFxcdFxcdFxcdFxcdHZob3N0X3ZkcGFfdW5zZXR1cF92cV9pcnEodiwgaWR4KTtcXG4gNzE3OlxcdFxcdFxcdH1cXG4gNzE4OlxcdFxcdFxcdGJyZWFrO1xcbiA3MTk6XFx0XFx0Y2FzZSBWSE9TVF9TRVRfVlJJTkdfTlVNOlxcbiA3MjA6XFx0XFx0XFx0LyogUmVqZWN0IHNpemVzIGFib3ZlIHRoZSBtYXggcmVwb3J0ZWQgYnkgdGhlIGRldmljZS4gKi9cXG4gNzIxOlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cywgYXJncCwgc2l6ZW9mKHMpKSlcXG4gNzIyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiA3MjM6XFx0XFx0XFx0aWYgKHMubnVtIFxcdTAwM2Ugb3BzLVxcdTAwM2VnZXRfdnFfbnVtX21heCh2ZHBhKSlcXG4gNzI0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3MjU6XFx0XFx0XFx0YnJlYWs7XFxuIDcyNjpcXHRcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdFxcdHIgPSB2aG9zdF92cmluZ19pb2N0bChcXHUwMDI2di1cXHUwMDNldmRldiwgY21kLCBhcmdwKTtcXG4gNzI5OlxcdFxcdGlmIChyKVxcbiA3MzA6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDczMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MDQuOTcwNjI3ODc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMjI4MTgxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIEJvdW5kcyBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gdGhlIGBWSE9TVF9TRVRfVlJJTkdfTlVNYCBjYXNlIGluIHRoZSB2aG9zdCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHZhbGlkYXRpb24gc3RlcC4gVGhlIHBhdGNoIHJldHJpZXZlcyBgcy5udW1gIGZyb20gdXNlciBzcGFjZSwgYW5kIHRoZW4gY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgdmlydHVhbCBxdWV1ZSBudW1iZXIgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBkZXZpY2UgKGBvcHMtXHUwMDNlZ2V0X3ZxX251bV9tYXgodmRwYSlgKS5cblxuV2FpdCBhIG1pbnV0ZSwgbGV0J3MgbG9vayBjbG9zZXIuIFRoZSB2YXJpYWJsZSBgc2AgaXMgYSBsb2NhbCBgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlYCBvbiB0aGUgc3RhY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgYGNvcHlfZnJvbV91c2VyYCAqZnVsbHkqIGluaXRpYWxpemVzIGBzYCBiZWZvcmUgdGhlIGJvdW5kcyBjaGVjay4gSWYgYGNvcHlfZnJvbV91c2VyYCBmYWlscywgd2UgZ2V0IGFuIGAtRUZBVUxUYCBlcnJvciwgc28gdGhlcmUgaXMgbm8gaXNzdWUgaWYgY29weSBmYWlscy4gSWYgaXQgc3VjY2VlZHMsICphbGwqIGZpZWxkcyBvZiBgc2AgYXJlIHBvcHVsYXRlZC4gQWZ0ZXIgdGhlIGNoZWNrIHBhc3NlcywgdGhlIGNvZGUgcHJvY2VlZHMgdG8gY2FsbCBgdmhvc3RfdnJpbmdfaW9jdGxgLCBhbmQgeWVzLCB0aGF0IGZ1bmN0aW9uIGFsc28gY29waWVzIGBzYCBmcm9tIHVzZXIgc3BhY2UgYmVjYXVzZSBpdCBoYW5kbGVzIGBWSE9TVF9TRVRfVlJJTkdfTlVNYC5cblxuVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgaGVyZS4gVGhlIHBhdGNoJ3MgcHJpbWFyeSByb2xlIGlzIHRvIHJlc3RyaWN0IHRoZSB2YWx1ZSBvZiBgcy5udW1gLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhjZWVkaW5nIHRoZSB1cHBlciBib3VuZCByZXBvcnRlZCBieSB0aGUgZGV2aWNlLiBUaGF0J3MgYSBzdGFuZGFyZCBib3VuZHMgY2hlY2ssIGp1c3QgbWFraW5nIHN1cmUgdGhlIHZhbHVlcyBhcmUgcmVhc29uYWJsZSBiZWZvcmUgdXNpbmcgdGhlbS4gSXQncyBub3QgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LlxuXG5TbywgaWYgd2Ugd2VyZSByZWx5aW5nIG9uIEtBU0FOLCBVQlNBTiwgZXRjLiB0byBkZXRlY3QgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHRoZXkgd291bGQgbm90IGJlIHJlbGV2YW50IGhlcmUuIEJ1dCBldmVuIEtNU0FOIGlzIG5vdCB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgdmFyaWFibGUgYHNgIGlzICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgY29weV9mcm9tX3VzZXJgLiBJJ3ZlIGRvdWJsZSBjaGVja2VkIHRoYXQ7IHRoZSBgc2l6ZW9mKHMpYCBieXRlcyBhcmUgY29waWVkLiBUaGVyZSdzIG5vIHNjZW5hcmlvIHdoZXJlIGBzLm51bWAgY291bGQgYmUgcGFydGlhbGx5IGluaXRpYWxpemVkLiBJdCdzIGVpdGhlciBjb21wbGV0ZWx5IGluaXRpYWxpemVkLCBvciB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvci4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjUsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTA6NTY6MTMuMjkzNDQ5Mjk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBpbiB2aG9zdF92ZHBhX3ZyaW5nX2lvY3RsLiBJdCBjb3BpZXMgYSBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGNvcHlfZnJvbV91c2VyLCB3aGljaCBmdWxseSBpbml0aWFsaXplcyB0aGUgbG9jYWwgc3RhY2sgdmFyaWFibGUgJ3MnIGlmIHN1Y2Nlc3NmdWwuIEl0IHRoZW4gY2hlY2tzIGlmIHMubnVtIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSByZWFkcywgbm8gY29tcGxleCBhbGxvY2F0aW9ucywgYW5kIG5vIGtlcm5lbCBtZW1vcnkgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBpbiB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoIHNvbGVseSBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZXMsIHdoaWNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGluIHZob3N0X3ZkcGFfdnJpbmdfaW9jdGwuIEl0IGNvcGllcyBhIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBmcm9tIHVzZXIgc3BhY2UgdXNpbmcgY29weV9mcm9tX3VzZXIsIHdoaWNoIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBsb2NhbCBzdGFjayB2YXJpYWJsZSAncycgaWYgc3VjY2Vzc2Z1bC4gSXQgdGhlbiBjaGVja3MgaWYgcy5udW0gZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHJlYWRzLCBubyBjb21wbGV4IGFsbG9jYXRpb25zLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIGluIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2ggc29sZWx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgb3IgaW52YWxpZCBjb25maWd1cmF0aW9uIHZhbHVlcywgd2hpY2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowng9qs[1] Phase: Succeeded StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 10:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2] Phase: Succeeded StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 10:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 10:56:23 +0000 UTC FinishedAt: 2026-08-08 10:56:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowng9qs/series-workflowng9qs-convert-artifact-3810263914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 10:56:34 +0000 UTC FinishedAt: 2026-08-08 11:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 10:56:34 +0000 UTC FinishedAt: 2026-08-08 11:14:06 +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:*cc6e4281-264e-4c63-ab66-84dc2734d0f2,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-workflowng9qs/series-workflowng9qs-convert-artifact-3810263914/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": "cff6b838-ad37-4145-9448-02e7ea4efc15", "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-workflowng9qs/series-workflowng9qs-build-action-2520431064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 10:56:34 +0000 UTC FinishedAt: 2026-08-08 11:13:56 +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:*cc6e4281-264e-4c63-ab66-84dc2734d0f2,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-workflowng9qs/series-workflowng9qs-convert-artifact-3810263914/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": "cff6b838-ad37-4145-9448-02e7ea4efc15", "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-workflowng9qs/series-workflowng9qs-build-action-2520431064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 11:14:06 +0000 UTC FinishedAt: 2026-08-08 11:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 11:14:06 +0000 UTC FinishedAt: 2026-08-08 11:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 11:14:06 +0000 UTC FinishedAt: 2026-08-08 11:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 11:14:06 +0000 UTC FinishedAt: 2026-08-08 11:14:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowng9qs/series-workflowng9qs-convert-artifact-2389070981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 11:14:17 +0000 UTC FinishedAt: 2026-08-08 11:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 11:14:17 +0000 UTC FinishedAt: 2026-08-08 11:16:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cff6b838-ad37-4145-9448-02e7ea4efc15,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-workflowng9qs/series-workflowng9qs-build-action-2520431064/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-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 11:16:36 +0000 UTC FinishedAt: 2026-08-08 11:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 11:16:36 +0000 UTC FinishedAt: 2026-08-08 11:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 11:16:36 +0000 UTC FinishedAt: 2026-08-08 11:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 11:16:36 +0000 UTC FinishedAt: 2026-08-08 11:33:57 +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:*cc6e4281-264e-4c63-ab66-84dc2734d0f2,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-workflowng9qs/series-workflowng9qs-convert-artifact-2389070981/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": "c1b9371e-fb43-44e5-818f-4dfea1b7cd4f", "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-workflowng9qs/series-workflowng9qs-build-action-3750950865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 11:16:36 +0000 UTC FinishedAt: 2026-08-08 11:33:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc6e4281-264e-4c63-ab66-84dc2734d0f2,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-workflowng9qs/series-workflowng9qs-convert-artifact-2389070981/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": "c1b9371e-fb43-44e5-818f-4dfea1b7cd4f", "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-workflowng9qs/series-workflowng9qs-build-action-3750950865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 11:33:57 +0000 UTC FinishedAt: 2026-08-08 11:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 11:33:57 +0000 UTC FinishedAt: 2026-08-08 11:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 11:33:57 +0000 UTC FinishedAt: 2026-08-08 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 11:33:57 +0000 UTC FinishedAt: 2026-08-08 11:35:40 +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:*c1b9371e-fb43-44e5-818f-4dfea1b7cd4f,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-workflowng9qs/series-workflowng9qs-build-action-3750950865/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-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"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:*cff6b838-ad37-4145-9448-02e7ea4efc15,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c1b9371e-fb43-44e5-818f-4dfea1b7cd4f,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-workflowng9qs/series-workflowng9qs-build-action-2520431064/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-workflowng9qs/series-workflowng9qs-build-action-3750950865/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 11:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 11:35:54 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"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-workflowng9qs/series-workflowng9qs-convert-artifact-4177530378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 11:35:50 +0000 UTC FinishedAt: 2026-08-08 11:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 11:35:51 +0000 UTC FinishedAt: 2026-08-08 11:35:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 11:36:01 +0000 UTC FinishedAt: 2026-08-08 12:35:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_unlocked_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca10634ebcca850dec2f1507ad5bfe70b82a9c00","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_USER","VDPA_SIM"],"series_id":"a3040c6d-a404-41f0-9ac7-8ee65d30635d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 11:36:01 +0000 UTC FinishedAt: 2026-08-08 12:35:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cff6b838-ad37-4145-9448-02e7ea4efc15,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c1b9371e-fb43-44e5-818f-4dfea1b7cd4f,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-workflowng9qs/series-workflowng9qs-build-action-2520431064/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-workflowng9qs/series-workflowng9qs-build-action-3750950865/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-workflowng9qs/series-workflowng9qs-convert-artifact-4177530378/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,}