Name: series-workflowk2g26 Phase: Succeeded StartedAt: 2026-08-05 14:25:26 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[0] Phase: Succeeded StartedAt: 2026-08-05 14:25:26 +0000 UTC FinishedAt: 2026-08-05 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 14:25:26 +0000 UTC FinishedAt: 2026-08-05 15:11:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "db70eb66-ee04-4378-871b-c9785792a324" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_madvise" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21hZHZpc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBzdGVwIHNpemUgZm9yIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBkdXJpbmcgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGxvZ2ljIG9mIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY29kZSwgd2hpbGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgbmVlZGVkIHRvIHRlc3QgdGhlIGxhcmdlIGZvbGlvIGFuZCBodWdldGxiIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjEyZTE2ZjAwYWZmZjExYTcwNWY3ZWUxMWJmMTdhYmRmNTc0ZTE2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTU6MDg6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mMzdhYmVkMjk0NDViIDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNDY0LDExICYjNDM7MTQ2NCwxMiBAQCBzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuLVx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbi1cdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbiYjNDM7XHRcdCAqIE5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgYW5kIG9ubHkgdGhlIGFkZHJlc3NlZFxuJiM0MztcdFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcbiYjNDM7XHRcdCAqIHdob2xlIGFuZCBtYXkgYmUgZGlzc29sdmVkLCBzbyBzYXZlIHRoZWlyIHNpemUgYmVmb3JlaGFuZC5cbiBcdFx0ICovXG4tXHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4mIzQzO1x0XHRzaXplID0gUGFnZUh1Z2UocGFnZSkgP1xuJiM0MztcdFx0XHRwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSkgOiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tYWR2aXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxMmUxNmYwMGFmZmYxMWE3MDVmN2VlMTFiZjE3YWJkZjU3NGUxNjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE1OjA4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDA3YTIxY2EzMWJhZDQuLmYzN2FiZWQyOTQ0NWIgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTE0NjQsMTEgJiM0MzsxNDY0LDEyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpCiAJCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwogCiAJCS8qCi0JCSAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2UKLQkJICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgJiMzNDtwYWdlJiMzNDsgd2lsbAotCQkgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLgomIzQzOwkJICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkCiYjNDM7CQkgKiBiYXNlIHBhZ2UgaXMgaGFuZGxlZC4gSHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgYXMgYQomIzQzOwkJICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLgogCQkgKi8KLQkJc2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTsKJiM0MzsJCXNpemUgPSBQYWdlSHVnZShwYWdlKSA/CiYjNDM7CQkJcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFOwogCiAJCWlmIChtYWR2X2JlaGF2aW9yLSZndDtiZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkgewogCQkJcHJfaW5mbygmIzM0O1NvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcbiYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIGFmZmVjdGluZyBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2UgdG8gdGhlIGBzaXplYCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIG1vZGlmeWluZyB0aGlzLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byBgbW0vbWFkdmlzZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpdHNlbGYuIEkgd2FudCB0byBzZWUgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGFuZCBpbW1lZGlhdGVseSBpZGVudGlmeSB3aGF0IHRoZSBwYXRjaCBhbHRlcnMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhZGp1c3RlZCBzaXplIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBtYWR2aXNlYCBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9pbmplY3RfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTQ0OC17XG4tLVxubW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1MDUtXG5tbS9tYWR2aXNlLmM6MTUwNjpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE1MDcte1xuLS1cbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xODk3LVx0XHRyYW5nZS1cdTAwM2VlbmQgPSBzdGFydCAmIzQzOyBsZW5faW47XG5tbS9tYWR2aXNlLmM6MTg5ODpcdFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTE4OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IGZsYWdzIOKAkyBgbWFkdmlzZWAgaXRzZWxmIGlzIGEgbG93LWxldmVsLCBwb3dlcmZ1bCBzeXN0ZW0gY2FsbCwgYW5kIGluamVjdGluZyBlcnJvcnMgaW50byBpdCBzdWdnZXN0cyBzb21lIHBvdGVudGlhbGx5IGNvbXBsZXggZXJyb3ItaGFuZGxpbmcgc2NlbmFyaW9zIGFyZSBpbiBwbGF5LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdoYXQgZmxhZ3Mgb3Iga2VybmVsIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBldmVuICplbmFibGUqIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNvbmRpdGlvbnMuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSwgb3IgZG9lcyBpdCByZXF1aXJlIHNwZWNpZmljIGRlYnVnIGZsYWdzLCBwZXJoYXBzIGV2ZW4gYSBub24tc3RhbmRhcmQga2VybmVsIGJ1aWxkPyBLbm93aW5nIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVhbC13b3JsZCBzeXN0ZW1zLCBhbmQgZnJhbmtseSwgd2hldGhlciBJIGNhbiBldmVuICp0ZXN0KiB0aGlzIHByb3Blcmx5IHdpdGhvdXQgcmVidWlsZGluZyBldmVyeXRoaW5nLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2luamVjdF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNDQ4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mz1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNS1cbm1tL21hZHZpc2UuYzoxNTA2OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTUwNy17XG4tLVxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE4OTctXHRcdHJhbmdlLVx1MDAzZWVuZCA9IHN0YXJ0ICYjNDM7IGxlbl9pbjtcbm1tL21hZHZpc2UuYzoxODk4Olx0XHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTg5OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaW4gYG1tL21hZHZpc2UuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBrZXJuZWwmIzM5O3MgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiBpcyBvbiBteSByYWRhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGNvbnRleHQgaXQgbGl2ZXMgaW4gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgbW0vbWFkdmlzZS5jYC4gV2hhdCYjMzk7cyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoeSBpcyB0aGlzIGZ1bmN0aW9uIHJlbGV2YW50IHRvIGl0PyBXaGF0IGFyZSB0aGUgY2FsbGluZyBwYXR0ZXJucz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGVycm9yIGluamVjdGlvbiBoYXBwZW5pbmcgYXQgdGhpcyBwb2ludD8gTGV0IG1lIHN0YXJ0IGJ5IHJlbWluZGluZyBteXNlbGYgd2hlcmUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgYG1hZHZpc2VgIHdvcmtzLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRpZmZlcmVudCBgbWFkdmlzZWAgb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBhZ2Ugc3RhdGVzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIGVycm9yIGluamVjdGlvbiBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgYXJlIGhhbmRsZWQgb3IgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgZ2l2ZXMgYXdheSBhYm91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MzA6XHRcdFZNX1dBUk5fT05fT05DRShtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XG4xNDMxOlx0XG4xNDMyOlx0XHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xuMTQzMzpcdG91dDpcbjE0MzQ6XHRcdC8qXG4xNDM1Olx0XHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xuMTQzNjpcdFx0ICogc2xhYiwgYXJlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLlxuMTQzNzpcdFx0ICovXG4xNDM4Olx0XHRpZiAoZXJyb3IgPT0gLUVOT01FTSlcbjE0Mzk6XHRcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuMTQ0MDpcdFx0cmV0dXJuIGVycm9yO1xuMTQ0MTpcdH1cbjE0NDI6XHRcbjE0NDM6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDQ0Olx0LypcbjE0NDU6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ0NjpcdCAqL1xuMTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbjE0Njc6XHRcdFx0ICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkXG4xNDY4Olx0XHRcdCAqIGJhc2UgcGFnZSBpcyBoYW5kbGVkLiBIdWdldGxiIGZvbGlvcyBhcmUgaGFuZGxlZCBhcyBhXG4xNDY5Olx0XHRcdCAqIHdob2xlIGFuZCBtYXkgYmUgZGlzc29sdmVkLCBzbyBzYXZlIHRoZWlyIHNpemUgYmVmb3JlaGFuZC5cbjE0NzA6XHRcdFx0ICovXG4xNDcxOlx0XHRcdHNpemUgPSBQYWdlSHVnZShwYWdlKSA/XG4xNDcyOlx0XHRcdFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xuMTQ3MzpcdFxuMTQ3NDpcdFx0XHRpZiAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xuMTQ3NTpcdFx0XHRcdHByX2luZm8oXCYjMzQ7U29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0NzY6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbjE0Nzc6XHRcdFx0XHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XG4xNDc4Olx0XHRcdH0gZWxzZSB7XG4xNDc5Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtJbmplY3RpbmcgbWVtb3J5IGZhaWx1cmUgZm9yIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cJiMzNDssXG4xNDgwOlx0XHRcdFx0XHQgcGZuLCBzdGFydCk7XG4xNDgxOlx0XHRcdFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xuMTQ4MjpcdFx0XHRcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXG4xNDgzOlx0XHRcdFx0XHRyZXQgPSAwO1xuMTQ4NDpcdFx0XHR9XG4xNDg1Olx0XG4xNDg2Olx0XHRcdGlmIChyZXQpXG4xNDg3Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE0ODg6XHRcdH1cbjE0ODk6XHRcbjE0OTA6XHRcdHJldHVybiAwO1xuMTQ5MTpcdH1cbjE0OTI6XHRcbjE0OTM6XHRzdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE0OTQ6XHR7XG4xNDk1Olx0XHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbjE0OTY6XHRcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbjE0OTc6XHRcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4xNDk4Olx0XHRcdHJldHVybiB0cnVlO1xuMTQ5OTpcdFx0ZGVmYXVsdDpcbjE1MDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTUwMTpcdFx0fVxuMTUwMjpcdH1cbjE1MDM6XHRcbjE1MDQ6XHQjZWxzZVxuMTUwNTpcdFxuMTUwNjpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNTA3Olx0e1xuMTUwODpcdFx0cmV0dXJuIDA7XG4xNTA5Olx0fVxuMTUxMDpcdFxuMTUxMTpcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTUxMjpcdHtcbjE1MTM6XHRcdHJldHVybiBmYWxzZTtcbjE1MTQ6XHR9XG4xNTE1Olx0XG4xNTE2Olx0I2VuZGlmXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cbjE1MTc6XHRcbjE1MTg6XHRzdGF0aWMgYm9vbFxuMTUxOTpcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuMTUyMDpcdHtcbjE1MjE6XHRcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbjE1MjI6XHRcdGNhc2UgTUFEVl9ET0ZPUks6XG4xNTIzOlx0XHRjYXNlIE1BRFZfRE9OVEZPUks6XG4xNTI0Olx0XHRjYXNlIE1BRFZfTk9STUFMOlxuMTUyNTpcdFx0Y2FzZSBNQURWX1NFUVVFTlRJQUw6XG4xNTI2Olx0XHRjYXNlIE1BRFZfUkFORE9NOlxuMTUyNzpcdFx0Y2FzZSBNQURWX1JFTU9WRTpcbjE1Mjg6XHRcdGNhc2UgTUFEVl9XSUxMTkVFRDpcbjE1Mjk6XHRcdGNhc2UgTUFEVl9ET05UTkVFRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgbmVzdGxlZCB1bmRlciB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1lYW5pbmcgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbmplY3RpbmcgbWVtb3J5IGVycm9ycywgcGVyaGFwcyBmb3IgdGVzdGluZyBvciBmYXVsdCBpbmplY3Rpb24sIGNvcnJlY3Q/IEkmIzM5O3ZlIGJlZW4gaW52b2x2ZWQgaW4gc2ltaWxhciBwYXRjaGVzIGJlZm9yZSwgc28gSSBrbm93IHRoZSB0ZXJyaXRvcnkuCgpOb3csIHdoZXJlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYmVpbmcgKmNhbGxlZCogZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gZGlnIGludG8gYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGVycm9yIGluamVjdGlvbiBpcyBoYXBwZW5pbmcuIFRoYXQmIzM5O2xsIHRlbGwgbWUgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyB1cCB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0ICovXG4xODgxOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMTg4MjpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0KVxuMTg4MzpcdHtcbjE4ODQ6XHRcdHJldHVybiBjdXJyZW50LVx1MDAzZW1tID09IG1tID8gdW50YWdnZWRfYWRkcihzdGFydCkgOlxuMTg4NTpcdFx0XHRcdFx0ICAgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIHN0YXJ0KTtcbjE4ODY6XHR9XG4xODg3Olx0XG4xODg4Olx0c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4xODg5Olx0XHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBibGtfcGx1ZyBwbHVnO1xuMTg5MjpcdFx0aW50IGVycm9yO1xuMTg5MzpcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbjE4OTQ6XHRcbjE4OTU6XHRcdGlmIChpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKSkge1xuMTg5NjpcdFx0XHRyYW5nZS1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuMTg5NzpcdFx0XHRyYW5nZS1cdTAwM2VlbmQgPSBzdGFydCAmIzQzOyBsZW5faW47XG4xODk4Olx0XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbjE4OTk6XHRcdH1cbjE5MDA6XHRcbjE5MDE6XHRcdHJhbmdlLVx1MDAzZXN0YXJ0ID0gZ2V0X3VudGFnZ2VkX2FkZHIobWFkdl9iZWhhdmlvci1cdTAwM2VtbSwgc3RhcnQpO1xuMTkwMjpcdFx0cmFuZ2UtXHUwMDNlZW5kID0gcmFuZ2UtXHUwMDNlc3RhcnQgJiM0MzsgUEFHRV9BTElHTihsZW5faW4pO1xuMTkwMzpcdFxuMTkwNDpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG4xOTA1Olx0XHRpZiAoaXNfbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKSlcbjE5MDY6XHRcdFx0ZXJyb3IgPSBtYWR2aXNlX3BvcHVsYXRlKG1hZHZfYmVoYXZpb3IpO1xuMTkwNzpcdFx0ZWxzZVxuMTkwODpcdFx0XHRlcnJvciA9IG1hZHZpc2Vfd2Fsa192bWFzKG1hZHZfYmVoYXZpb3IpO1xuMTkwOTpcdFx0YmxrX2ZpbmlzaF9wbHVnKFx1MDAyNnBsdWcpO1xuMTkxMDpcdFx0cmV0dXJuIGVycm9yO1xuMTkxMTpcdH1cbjE5MTI6XHRcbjE5MTM6XHQvKlxuMTkxNDpcdCAqIFRoZSBtYWR2aXNlKDIpIHN5c3RlbSBjYWxsLlxuMTkxNTpcdCAqXG4xOTE2Olx0ICogQXBwbGljYXRpb25zIGNhbiB1c2UgbWFkdmlzZSgpIHRvIGFkdmlzZSB0aGUga2VybmVsIGhvdyBpdCBzaG91bGRcbjE5MTc6XHQgKiBoYW5kbGUgcGFnaW5nIEkvTyBpbiB0aGlzIFZNIGFyZWEuICBUaGUgaWRlYSBpcyB0byBoZWxwIHRoZSBrZXJuZWxcbjE5MTg6XHQgKiB1c2UgYXBwcm9wcmlhdGUgcmVhZC1haGVhZCBhbmQgY2FjaGluZyB0ZWNobmlxdWVzLiAgVGhlIGluZm9ybWF0aW9uXG4xOTE5Olx0ICogcHJvdmlkZWQgaXMgYWR2aXNvcnkgb25seSwgYW5kIGNhbiBiZSBzYWZlbHkgZGlzcmVnYXJkZWQgYnkgdGhlXG4xOTIwOlx0ICoga2VybmVsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uXG4xOTIxOlx0ICpcbjE5MjI6XHQgKiBiZWhhdmlvciB2YWx1ZXM6XG4xOTIzOlx0ICogIE1BRFZfTk9STUFMIC0gdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVhZCBjbHVzdGVycy4gIFRoaXNcbjE5MjQ6XHQgKlx0XHRyZXN1bHRzIGluIHNvbWUgcmVhZC1haGVhZCBhbmQgcmVhZC1iZWhpbmQuXG4xOTI1Olx0ICogIE1BRFZfUkFORE9NIC0gdGhlIHN5c3RlbSBzaG91bGQgcmVhZCB0aGUgbWluaW11bSBhbW91bnQgb2YgZGF0YVxuMTkyNjpcdCAqXHRcdG9uIGFueSBhY2Nlc3MsIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGFwcGxpLVxuMTkyNzpcdCAqXHRcdGNhdGlvbiB3aWxsIG5lZWQgbW9yZSB0aGFuIHdoYXQgaXQgYXNrcyBmb3IuXG4xOTI4Olx0ICogIE1BRFZfU0VRVUVOVElBTCAtIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSB3aWxsIHByb2JhYmx5IGJlIGFjY2Vzc2VkXG4xOTI5Olx0ICpcdFx0b25jZSwgc28gdGhleSBjYW4gYmUgYWdncmVzc2l2ZWx5IHJlYWQgYWhlYWQsIGFuZFxuMTkzMDpcdCAqXHRcdGNhbiBiZSBmcmVlZCBzb29uIGFmdGVyIHRoZXkgYXJlIGFjY2Vzc2VkLlxuMTkzMTpcdCAqICBNQURWX1dJTExORUVEIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmeWluZyB0aGUgc3lzdGVtIHRvIHJlYWRcbjE5MzI6XHQgKlx0XHRzb21lIHBhZ2VzIGFoZWFkLlxuMTkzMzpcdCAqICBNQURWX0RPTlRORUVEIC0gdGhlIGFwcGxpY2F0aW9uIGlzIGZpbmlzaGVkIHdpdGggdGhlIGdpdmVuIHJhbmdlLFxuMTkzNDpcdCAqXHRcdHNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC5cbjE5MzU6XHQgKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXG4xOTM2Olx0ICpcdFx0d2hlcmUgYWN0dWFsIHB1cmdlcyBhcmUgcG9zdHBvbmVkIHVudGlsIG1lbW9yeSBwcmVzc3VyZSBoYXBwZW5zLlxuMTkzNzpcdCAqICBNQURWX1JFTU9WRSAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBmcmVlIHVwIHRoZSBnaXZlbiByYW5nZSBvZlxuMTkzODpcdCAqXHRcdHBhZ2VzIGFuZCBhc3NvY2lhdGVkIGJhY2tpbmcgc3RvcmUuXG4xOTM5Olx0ICogIE1BRFZfRE9OVEZPUksgLSBvbWl0IHRoaXMgYXJlYSBmcm9tIGNoaWxkJiMzOTtzIGFkZHJlc3Mgc3BhY2Ugd2hlbiBmb3JraW5nOlxuMTk0MDpcdCAqXHRcdHR5cGljYWxseSwgdG8gYXZvaWQgQ09XaW5nIHBhZ2VzIHBpbm5lZCBieSBnZXRfdXNlcl9wYWdlcygpLlxuMTk0MTpcdCAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLlxuMTk0MjpcdCAqICBNQURWX1dJUEVPTkZPUksgLSBwcmVzZW50IHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggemVyby1maWxsZWQgbWVtb3J5IGluIHRoaXNcbjE5NDM6XHQgKiAgICAgICAgICAgICAgcmFuZ2UgYWZ0ZXIgYSBmb3JrLlxuMTk0NDpcdCAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG4xOTQ1Olx0ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2VcbjE5NDY6XHQgKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuMTk0NzpcdCAqICBNQURWX1NPRlRfT0ZGTElORSAtIHRyeSB0byBzb2Z0LW9mZmxpbmUgdGhlIGdpdmVuIHJhbmdlIG9mIG1lbW9yeS5cbjE5NDg6XHQgKiAgTUFEVl9NRVJHRUFCTEUgLSB0aGUgYXBwbGljYXRpb24gcmVjb21tZW5kcyB0aGF0IEtTTSB0cnkgdG8gbWVyZ2UgcGFnZXMgaW5cbjE5NDk6XHQgKlx0XHR0aGlzIGFyZWEgd2l0aCBwYWdlcyBvZiBpZGVudGljYWwgY29udGVudCBmcm9tIG90aGVyIHN1Y2ggYXJlYXMuXG4xOTUwOlx0ICogIE1BRFZfVU5NRVJHRUFCTEUtIGNhbmNlbCBNQURWX01FUkdFQUJMRTogbm8gbG9uZ2VyIG1lcmdlIHBhZ2VzIHdpdGggb3RoZXJzLlxuMTk1MTpcdCAqICBNQURWX0hVR0VQQUdFIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGJhY2sgdGhlIGdpdmVuIHJhbmdlIGJ5IHRyYW5zcGFyZW50XG4xOTUyOlx0ICpcdFx0aHVnZSBwYWdlcyBpbiB0aGUgZnV0dXJlLiBFeGlzdGluZyBwYWdlcyBtaWdodCBiZSBjb2FsZXNjZWQgYW5kXG4xOTUzOlx0ICpcdFx0bmV3IHBhZ2VzIG1pZ2h0IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG4xOTU0Olx0ICogIE1BRFZfTk9IVUdFUEFHRSAtIG1hcmsgdGhlIGdpdmVuIHJhbmdlIGFzIG5vdCB3b3J0aCBiZWluZyBiYWNrZWQgYnlcbjE5NTU6XHQgKlx0XHR0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHNvIHRoZSBleGlzdGluZyBwYWdlcyB3aWxsIG5vdCBiZVxuMTk1NjpcdCAqXHRcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG4xOTU3Olx0ICogIE1BRFZfQ09MTEFQU0UgLSBzeW5jaHJvbm91c2x5IGNvYWxlc2NlIHBhZ2VzIGludG8gbmV3IFRIUC5cbjE5NTg6XHQgKiAgTUFEVl9ET05URFVNUCAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBwcmV2ZW50IHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZVxuMTk1OTpcdCAqXHRcdGZyb20gYmVpbmcgaW5jbHVkZWQgaW4gaXRzIGNvcmUgZHVtcC5cbjE5NjA6XHQgKiAgTUFEVl9ET0RVTVAgLSBjYW5jZWwgTUFEVl9ET05URFVNUDogbm8gbG9uZ2VyIGV4Y2x1ZGUgZnJvbSBjb3JlIGR1bXAuXG4xOTYxOlx0ICogIE1BRFZfQ09MRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXG4xOTYyOlx0ICpcdFx0ZGVhY3RpdmF0ZSBwYWdlcyBpbiB0aGlzIHJhbmdlIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVjbGFpbWVkXG4xOTYzOlx0ICpcdFx0ZWFzaWx5IGlmIG1lbW9yeSBwcmVzc3VyZSBoYXBwZW5zLlxuMTk2NDpcdCAqICBNQURWX1BBR0VPVVQgLSB0aGUgYXBwbGljYXRpb24gaXMgbm90IGV4cGVjdGVkIHRvIHVzZSB0aGlzIG1lbW9yeSBzb29uLFxuMTk2NTpcdCAqXHRcdHBhZ2Ugb3V0IHRoZSBwYWdlcyBpbiB0aGlzIHJhbmdlIGltbWVkaWF0ZWx5LlxuMTk2NjpcdCAqICBNQURWX1BPUFVMQVRFX1JFQUQgLSBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2UgdGFibGVzIHJlYWRhYmxlIGJ5XG4xOTY3Olx0ICpcdFx0dHJpZ2dlcmluZyByZWFkIGZhdWx0cyBpZiByZXF1aXJlZFxuMTk2ODpcdCAqICBNQURWX1BPUFVMQVRFX1dSSVRFIC0gcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyB3cml0YWJsZSBieVxuMTk2OTpcdCAqXHRcdHRyaWdnZXJpbmcgd3JpdGUgZmF1bHRzIGlmIHJlcXVpcmVkXG4xOTcwOlx0ICpcbjE5NzE6XHQgKiByZXR1cm4gdmFsdWVzOlxuMTk3MjpcdCAqICB6ZXJvICAgIC0gc3VjY2Vzc1xuMTk3MzpcdCAqICAtRUlOVkFMIC0gc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyAwLCBzdGFydCBpcyBub3QgcGFnZS1hbGlnbmVkLFxuMTk3NDpcdCAqXHRcdFwmIzM0O2JlaGF2aW9yXCYjMzQ7IGlzIG5vdCBhIHZhbGlkIHZhbHVlLCBvciBhcHBsaWNhdGlvblxuMTk3NTpcdCAqXHRcdGlzIGF0dGVtcHRpbmcgdG8gcmVsZWFzZSBsb2NrZWQgb3Igc2hhcmVkIHBhZ2VzLFxuMTk3NjpcdCAqXHRcdG9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyByYW5nZSBpbmNsdWRlcyBmaWxlLCBIdWdlIFRMQixcbjE5Nzc6XHQgKlx0XHRNQVBfU0hBUkVEIG9yIFZNUEZOTUFQIHJhbmdlLlxuMTk3ODpcdCAqICAtRU5PTUVNIC0gYWRkcmVzc2VzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYXJlIG5vdCBjdXJyZW50bHlcbjE5Nzk6XHQgKlx0XHRtYXBwZWQsIG9yIGFyZSBvdXRzaWRlIHRoZSBBUyBvZiB0aGUgcHJvY2Vzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbWFkdmlzZWAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgbW9kaWZ5aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGBpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKWAgZXZhbHVhdGVzIHRvIHRydWUuIFJpZ2h0LCBhbmQgYGlzX21lbW9yeV9mYWlsdXJlYCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIHNpemUgY2FsY3VsYXRpb24gd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGxhcmdlIGZvbGlvcyB0aGF0IGFyZW4mIzM5O3QgaHVnZXRsYi1iYWNrZWQuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcnJlY3Rpb24gb2Ygc29tZSBzb3J0LCByaWdodCB0aGVyZSBpbiBgbW0vbWFkdmlzZS5jYC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQsIG5vIHF1ZXN0aW9uLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBlZGdlIGNhc2VzIHJlbGF0aW5nIHRvIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCwgc28gZnV6emluZyBpcyBjcml0aWNhbC4KCk5vdywgSSB3YXMgZ29pbmcgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYnV0IHRoZW4gaXQgaGl0cyBtZTogaXQmIzM5O3Mgc3RhdGljLiBIbW0uLi4gaXMgaXQgaW5saW5lZD8gTGV0JiMzOTtzIGNoZWNrLiBJdCBpc24mIzM5O3QgbWFya2VkIGFzIGlubGluZSwgYnV0IGl0IGlzIHN0YXRpYy4gT2theSwgc28gdGhhdCBtZWFucyBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZm9jdXMsIGF0IGxlYXN0IG5vdCBlYXNpbHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IG90aGVyIGVudHJ5IHBvaW50cyBsaWtlIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCwgb3IgcG90ZW50aWFsbHkgaGlnaGVyIGxldmVsIGNhbGxzIGxpa2UgYGRvX21hZHZpc2VgIG9yIGBzeXNfbWFkdmlzZWAuIEkmIzM5O2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZ2V0cyBjYWxsZWQgZnJvbSwgYXMgdGhlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWFkdmlzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTk4NT1pbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0yMDEyLVxubW0vbWFkdmlzZS5jOjIwMTM6U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcbm1tL21hZHZpc2UuYy0yMDE0LXtcbi0tXG5tbS9tYWR2aXNlLmM9MjAxOT1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL21hZHZpc2UuYy0yMDg1LVxubW0vbWFkdmlzZS5jOjIwODY6U1lTQ0FMTF9ERUZJTkU1KHByb2Nlc3NfbWFkdmlzZSwgaW50LCBwaWRmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsXG5tbS9tYWR2aXNlLmMtMjA4Ny1cdFx0c2l6ZV90LCB2bGVuLCBpbnQsIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGFwcHJvcHJpYXRlIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIGRpdmluZyBpbnRvIHRoZSBgbWFkdmlzZWAgY29kZS4gJiMzNDtkb19tYWR2aXNlJiMzNDsgc2VlbXMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIsIGEgZ29vZCwgY2xlYW4gcG9pbnQgb2YgZW50cnkuIEFsdGVybmF0aXZlbHksIHRoZXJlJiMzOTtzICYjMzQ7bWFkdmlzZV9kb19iZWhhdmlvciYjMzQ7IOKAkyB0aGF0JiMzOTtzIGEgZGVjZW50IG9wdGlvbiB0b28uIEhvbGQgb24sIGlzbiYjMzk7dCBgbWFkdmlzZV9kb19iZWhhdmlvcmAgc3RhdGljPyBBaCB5ZXMsIHRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGxpa2VseSBtYWtlcyAmIzM0O2RvX21hZHZpc2UmIzM0OyB0aGUgYmV0dGVyIHRhcmdldCB0aGVuLiBTaW5jZSBgZG9fbWFkdmlzZWAgaXNuJiMzOTt0IHN0YXRpYywgaXQmIzM5O3MgcHJvYmFibHkgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gd2UgbmVlZCB0byBleGFtaW5lLiBKdXN0IGNvbmZpcm1pbmcgdGhpczsgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBkb19tYWR2aXNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyB0byBlbnN1cmUgaXQmIzM5O3MgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGRvX21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5ODQtICovXG5tbS9tYWR2aXNlLmM6MTk4NTppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE5ODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgQ2hvb3NpbmcgdGhlIFJpZ2h0IEFQSSBFbnRyeXBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gYW5hbHl6aW5nIHdoaWNoIGZ1bmN0aW9uIHRvIHBpY2sgaGVyZSwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRvX21hZHZpc2VgIGlzIGluZGVlZCBub24tc3RhdGljLiBHb29kIHN0YXJ0LiBOb3csIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSByZWQgZmxhZywgYnV0IGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEdpdmVuIHRoYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBzZWVtcyBmYWlybHkgbGFyZ2UsIHRoZSBjb21waWxlciBtaWdodCBub3QgaW5saW5lIGl0LiBCdXQsIHRvIGJlIGNvbXBsZXRlbHkgc2FmZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQsIEkmIzM5O2xsIHN0aWNrIHdpdGggaW5jbHVkaW5nIGJvdGggZnVuY3Rpb25zLgoKSG93ZXZlciwgdGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyOiBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIFNvLCBgZG9fbWFkdmlzZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSwgYmFzZWQgb24gdGhlIHByb21wdC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhYm91dCBgbWFkdmlzZV92bWFfYmVoYXZpb3JgPyBObywgYmVjYXVzZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBtYWR2aXNlX2RvX2JlaGF2aW9yYC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGNoZWNrIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCB0aG91Z2guLi4geXVwLCB0aGF0IG9uZSYjMzk7cyBzdGF0aWMgdG9vLiBTbywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBkb19tYWR2aXNlYC4KCkFoYSwgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgZW5hYmxpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgYEtjb25maWdgIGp1c3QgdG8gYmUgc3VyZS4gQnV0LCBnaXZlbiB0aGF0IHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBkb19tYWR2aXNlYCBiZWluZyBiZXR0ZXIgZm9yIG15IHB1cnBvc2VzLCBhbmQgaXQmIzM5O3Mgbm9uLXN0YXRpYywgSSB3aWxsIGdvIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY0LVxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ni1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNRU1PUllfRkFJTFVSRSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGBNRU1PUllfRkFJTFVSRWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbiBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgaXQsIGFuZCB3aGF0IGZlYXR1cmVzIG1pZ2h0IGRlcGVuZCBvbiBpdCBiZWluZyBzZXQuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSB0cmFjaW5nIHRocm91Z2ggdGhlIGxvZ2ljIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIGl0cyB2aXNpYmlsaXR5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZSBxdWlja2x5LiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZmVhdHVyZSBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NjE6XHRcbiA3NjI6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2MzpcdFx0Ym9vbFxuIDc2NDpcdFxuIDc2NTpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc2NjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Njc6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2ODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzY5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc3MDpcdFx0aGVscFxuIDc3MTpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3NzI6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3NzM6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzc0Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzc1Olx0XG4gNzc2Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3Nzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc3OTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBNRU1PUllfRkFJTFVSRWAgYmVoYXZlcyBpbiB0aGlzIHN5c3RlbS4gSXQgc2VlbXMgaXRzIGJlaGF2aW9yIGhpbmdlcyBkaXJlY3RseSBvbiB0d28ga2V5IGVsZW1lbnRzOiB0aGUgcHJlc2VuY2Ugb2YgYW4gYE1NVWAg4oCTIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgbWFuYWdpbmcgbWVtb3J5IOKAkyBhbmQsIGludGVyZXN0aW5nbHksIHRoZSBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQgc2Vjb25kIHBvaW50IGlzIHdoYXQgSSB3YW50IHRvIGRpc3NlY3Qgbm93LiBDbGVhcmx5LCB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IGl0IHN1cHBvcnRzIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgZmFpbHVyZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlbSBhY3R1YWxseSBlbmFibGUgdGhpcyBjcml0aWNhbCBmZWF0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBsYW5kc2NhcGUgdG8gZWZmZWN0aXZlbHkgbWFuYWdlIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBwbGF5aW5nIGJhbGwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTczLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5hcmNoL2FybTY0L0tjb25maWc6NzQ6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0hBRE9XX0NBTExfU1RBQ0sgaWYgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXG5hcmNoL3BhcmlzYy9LY29uZmlnOjIzOlx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVx0ZGVmYXVsdCBcJiMzNDt5XCYjMzQ7IGlmIFBQQ19QT1dFUk5WXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxuLS1cbmFyY2gveDg2L0tjb25maWc9NzUwPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzU3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyDigJMgdGhhdCYjMzk7cyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLi4uCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZGVmaW5lLiBJbnRlcmVzdGluZywgaXTigJlzIHJlbGF0ZWQgdG8gYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgYm90aCAmIzM0O05vbi1odWdldGxiIGxhcmdlIGZvbGlvcyYjMzQ7IGFuZCAmIzM0O0h1Z2V0bGIgZm9saW9zJiMzNDsuIFNvIHRoYXQgbWVhbnMsIGZvciB0ZXN0aW5nLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGFuIGV5ZSBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9yIGBIVUdFVExCRlNgLiBCdXQgcmVhbGx5LCB0aGUgY29yZSBjb2RlIGlzIGluIGBtYWR2aXNlLmNgIGFuZCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFjdGl2ZS4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoaXMuIFRoZSBwYXRjaCB1c2VzIGBQYWdlSHVnZShwYWdlKWAuIFNvIGl0JiMzOTtzIHByb2JhYmx5IHVzaW5nIEh1Z2UgUGFnZXMuIExldCBtZSBjaGVjayB3aGVyZSBgUGFnZUh1Z2VgIGlzIGRlZmluZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGZvbGlvIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlSHVnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNDI9UEFHRV9UWVBFX09QUyhMYXJnZUttYWxsb2MsIGxhcmdlX2ttYWxsb2MsIGxhcmdlX2ttYWxsb2MpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA0NC0vKipcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNDU6ICogUGFnZUh1Z2UgLSBEZXRlcm1pbmUgaWYgdGhlIHBhZ2UgYmVsb25ncyB0byBodWdldGxiZnNcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1MS0gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTI6c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTEyOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlQW5vbkV4Y2x1c2l2ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTM0LVx0ICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM1Olx0aWYgKFBhZ2VIdWdlKHBhZ2UpKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzNi1cdFx0cGFnZSA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE0MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgU2V0UGFnZUFub25FeGNsdXNpdmUoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0Mi1cdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlQW5vbk5vdEtzbShwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTQzOlx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXHUwMDI2XHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQ0LVx0c2V0X2JpdChQR19hbm9uX2V4Y2x1c2l2ZSwgXHUwMDI2UEZfQU5ZKHBhZ2UsIDEpLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTExNDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZUFub25FeGNsdXNpdmUoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0OS1cdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlQW5vbk5vdEtzbShwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTUwOlx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXHUwMDI2XHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTUxLVx0Y2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcdTAwMjZQRl9BTlkocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19DbGVhclBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNTYtXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub24ocGFnZSksIHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTE1NzpcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VIdWdlKHBhZ2UpIFx1MDAyNlx1MDAyNiAhUGFnZUhlYWQocGFnZSksIHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1OC1cdF9fY2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcdTAwMjZQRl9BTlkocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KioKCk9rYXksIHNvIGBQYWdlSHVnZWAgaXMgYSBnaXZlbiwgdGhhdCYjMzk7cyBhbHJlYWR5IGRlZmluZWQuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGRvX21hZHZpc2VgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhvbmUgaW4gb24gYGRvX21hZHZpc2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0LCBpc24mIzM5O3QgYGRvX21hZHZpc2VgIGEgKnZlcnkqIGdlbmVyaWMsIGhvdC1wYXRoIGZ1bmN0aW9uPyBXZSB1c3VhbGx5IHdhbnQgdG8gYXZvaWQgc2tld2luZyBvdXIgdGVzdCBkaXN0cmlidXRpb24gYnkgbGlzdGluZyB0aG9zZS4KCkJ1dCB0aGVuIEkgcmVhbGl6ZWQsIGBkb19tYWR2aXNlYCAqaXMqIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIEl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIGxpa2UgYF9fa21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQmIzM5O3MgdGhlIHRvcC1sZXZlbCBzeXNjYWxsIGltcGxlbWVudGF0aW9uLiBPa2F5LCBzbyBpdOKAmXMgbm90IGEgKmdlbmVyaWMqIGhvdC1wYXRoLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZW50cnkgcG9pbnQuCgpUaGUgbmV4dCBpc3N1ZTogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIGFyZSBib3RoIHN0YXRpYy4gV2hhdCBzeW1ib2wgc2hvdWxkIEkgY2hvb3NlPyBTaG91bGQgSSBpbmNsdWRlIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLiBJdCYjMzk7cyBhIHJlYXNvbmFibHkgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IG5vdCBiZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBpbiB0aGUgYFN5c3RlbS5tYXBgLCBvciBpZiBJIGNhbiBqdXN0IHN0aWNrIHdpdGggYGRvX21hZHZpc2VgLgoKQWhhISBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIElmIEkgc3BlY2lmeSBgZG9fbWFkdmlzZWAsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgd2FudCDigJMgaXQgd2lsbCBmb2N1cyBvbiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIFdhaXQsIGJ1dCB0aGUgYG1hZHZpc2VgIHN5c2NhbGwgaGFuZGxlcyAqbWFueSogYmVoYXZpb3JzLiBGb2N1c2luZyBvbiBgZG9fbWFkdmlzZWAgd2lsbCBmdXp6IGFsbCB0aG9zZSBtYWR2aXNlIGJlaGF2aW9ycy4gT2theSwgbGV0JiMzOTtzIGFsc28gaW5jbHVkZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGJlIG1vcmUgc3BlY2lmaWMuIEkgY29uc2lkZXJlZCBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGJ1dCB0aGUgcmVsZXZhbnQgcGF0Y2ggaXMgd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgbm90IGlubGluZWQsIHNpbmNlIGl0IGlzIHN0YXRpYyBhbmQgbm90IG1hcmtlZCBpbmxpbmUuIFRoZSBmdW5jdGlvbiBpcyBxdWl0ZSBsYXJnZSwgd2l0aCBhIGBmb3JgIGxvb3AsIGNhbGxzIHRvIGBnZXRfdXNlcl9wYWdlc19mYXN0YCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBtZW1vcnlfZmFpbHVyZWAuIFRoYXQgc2V0dGxlcyBpdDogSeKAmWxsIGluY2x1ZGUgYm90aCBgZG9fbWFkdmlzZWAgYW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIElzIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZz8gWWVzLCBpdCBpcy4KClRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCAmIzM0O05vbi1odWdldGxiIGxhcmdlIGZvbGlvcyYjMzQ7IGFuZCAmIzM0O0h1Z2V0bGIgZm9saW9zJiMzNDsuIFRvIHJlYWxseSB0ZXN0IHRoaXMgcHJvcGVybHksIEkmIzM5O2xsIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFuZGxlcyB0aGUgbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zLCB3aGlsZSBgQ09ORklHX0hVR0VUTEJGU2AgaGFuZGxlcyB0aGUgaHVnZXRsYiBmb2xpb3MuIEl0JiMzOTtzIHRpbWUgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlnLgoKVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29tYmluYXRpb24gb2YgYGRvX21hZHZpc2VgIHRvIGNvdmVyIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYsIGFuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIHBhdGNoZWQgbG9naWMgcmVzaWRlcy4gSSYjMzk7bGwgYWxzbyBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgZnVsbCBjb3ZlcmFnZTogYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzMtXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU3LVxubW0vS2NvbmZpZzo4NTg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1OS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NC1cbm1tL0tjb25maWc6ODY1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY2LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3My1cbm1tL0tjb25maWc6ODc0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3NS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgxPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkwLVxubW0vS2NvbmZpZzo4OTE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTItXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMC1cbm1tL0tjb25maWc6OTAxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOC1cbm1tL0tjb25maWc6OTA5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTEwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTYtXG5tbS9LY29uZmlnOjkxNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjY9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzUtXG5tbS9LY29uZmlnOjkzNjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzNy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ0LVxubW0vS2NvbmZpZzo5NDU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ2LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUyLVxubW0vS2NvbmZpZzo5NTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTQtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MC1cbm1tL0tjb25maWc6OTYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2Mi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSBmb3IgSHVnZVRMQkZTKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gSHVnZVRMQkZTLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGF2YWlsYWJpbGl0eSBvZiBgSFVHRVRMQkZTYCBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHN5bWJvbHMsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byByZWxhdGVkIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGVudHJpZXMgd2lsbCBiZSBjcnVjaWFsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIHRyb3VibGVzaG9vdGluZyBvZiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBwb3RlbnRpYWwgaW4gaW5jb3Jwb3JhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQkZTYCBpbnRvIHRoZSBtaXguIFRob3NlIGFyZSBvZnRlbiBrZXkgZm9yIHBlcmZvcm1hbmNlIGdhaW5zIGluIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWRzLCBhbmQgSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3Igd2F5cyB0byBzcXVlZXplIG91dCBtb3JlIGVmZmljaWVuY3kuIEJlZm9yZSBJIGdldCB0b28gZmFyIGFoZWFkIG9mIG15c2VsZiB0aG91Z2gsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwcm9wZXJseSBzZXQgdXAuIEl0JiMzOTtzIGdvdCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBzaG91bGQgc2VlIGhvdyB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uLiBObyBwb2ludCBibGluZGx5IGFkZGluZyBhIGZsYWcgaWYgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZWx5IHdpdGggdGhlIGV4aXN0aW5nIHNldHVwLiBJIHNob3VsZCBnbyBjaGVjayB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRjb25maWcgTU1fSURcbiA4MzI6XHRcdGRlZl9ib29sIG5cbiA4MzM6XHRcbiA4MzQ6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM1Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4MzY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzNzpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4Mzk6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQyOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDM6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ0Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ1Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDY6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0NzpcdFxuIDg0ODpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIGFzIGFuIGV4cGVydCBpbiBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqVW5kZXJzdGFuZGluZyBIdWdlIFBhZ2UgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlLgoKYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbW9kZXJuIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIGlzIG9ubHkgZ29pbmcgdG8gYmUgZW5hYmxlZCBpZiB3ZSBoYXZlIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCAoYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWApICphbmQqIHdlJiMzOTtyZSAqbm90KiBydW5uaW5nIGEgUFJFRU1QVF9SVCBrZXJuZWwuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYFBSRUVNUFRfUlRgIGtlcm5lbHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCByZXF1aXJlbWVudHMgYW5kIG9mdGVuIGRvbiYjMzk7dCBwbGF5IHdlbGwgd2l0aCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5LiBUaGlzIHJlZmxlY3RzIGEgcHJhY3RpY2FsIGRlY2lzaW9uIGJhc2VkIG9uIHRoZSB0cmFkZS1vZmZzIG9mIHJlYWwtdGltZSBwZXJmb3JtYW5jZSB2ZXJzdXMgbWVtb3J5IGVmZmljaWVuY3kuCgpUaGVuIHdlIGhhdmUgYEhVR0VUTEJGU2AuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBpdCBoYXMgYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jeS4gSXQgZWl0aGVyIG5lZWRzIHRvIGJlIGEgY29yZSBzZXQgb2YgYXJjaGl0ZWN0dXJlcyB0aGF0IGhpc3RvcmljYWxseSBoYXZlIHN1cHBvcnRlZCBodWdlcGFnZXMgKGBYODZgLCBgSUE2NGAsIGBTUEFSQzY0YCwgYEFMUEhBYCwgZXRjLiDigJQgdGhhdCAmIzM0O29yJiMzNDsgbGlzdCBpcyBpbXBsaWNpdGx5IGEgbG9uZywgZXhoYXVzdGl2ZSBzZXQgb2YgcHJvY2Vzc29ycyksICpvciogaXQgaGFzIGEgbW9yZSBnZW5lcmFsIGZsYWcgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gVGhpcyBzdWdnZXN0cyBhIGdyYWR1YWwgbW92ZSB0b3dhcmRzIG1ha2luZyB0aGUgaHVnZXBhZ2UgZmVhdHVyZSBtb3JlIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmUuIE5ld2VyIGFyY2hpdGVjdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCB2aWEgdGhlIG1vcmUgZ2VuZXJpYyBmbGFnLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB0byBlbnN1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIG1hbmFnaW5nIGh1Z2VwYWdlcyBpcyBvbmx5IGFjdGl2YXRlZCBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBoYXMgdGhlIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgbGVnYWN5IG9yIG1vZGVybiBjb2RlLgoKSW4gc2hvcnQsIHRoZSBrZXJuZWwgbWFpbnRhaW5lcnMgYXJlIGJlaW5nIHZlcnkgc3BlY2lmaWMgYWJvdXQgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZXMgc3VwcG9ydCB0aGUgdXNlIG9mIGh1Z2VwYWdlcyAoZWl0aGVyIHRyYW5zcGFyZW50IG9yIHRocm91Z2ggdGhlIGBIVUdFVExCRlNgIGZpbGVzeXN0ZW0pLiBUaGV5IGFyZSBlbnN1cmluZyB0aGF0IHRoZXNlIGZlYXR1cmVzLCB3aGljaCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLCBhcmUgb25seSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXMgcHJlcGFyZWQgZm9yIGl0LCBhbmQgdGhhdCByZWFsLXRpbWUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIGFyZW4mIzM5O3QgY29tcHJvbWlzZWQuIFRoZSB1c2Ugb2YgZmxhZ3MgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGlzIHRoZSBhY2NlcHRlZCB3YXkgb2YgZW5zdXJpbmcgY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgbWFkdmlzZS5jIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFRoaXMgcGF0Y2ggaW4gYG1tL21hZHZpc2UuY2AgaXMgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyBgbWFkdmlzZWAgaGFuZGxlcyBsYXJnZSBmb2xpb3MsIGFuZCBpdCBoaW5nZXMgb24gdGhlIGBIVUdFVExCRlNgIGZlYXR1cmUsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLiBUaGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIHRoZXkgYXJlIHJlbGF0ZWQgdG8gaG93IGl0IGRlYWxzIHdpdGggYFBhZ2VIdWdlKHBhZ2UpYCBhbmQgYGNvbXBvdW5kX2hlYWQocGFnZSlgLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYW5kIGZvY3VzaW5nIG9uIGBkb19tYWR2aXNlYCBhbmQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gQ29uZmlnLXdpc2UsIEkmIzM5O20gdGhpbmtpbmcgYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyB0byBlbmFibGUuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBidXQgU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgd29yayB3aXRoIHRob3NlLCBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4KCkhvd2V2ZXIsIHNpbmNlIGBkb19tYWR2aXNlYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBhbmQgaXQmIzM5O3MgcHJlZmVycmVkIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIHBhdGNoIGlzIGFkZGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIEkgdGhpbmsgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3cgdGhhdCBJIHJldmlldyB0aGUgcGF0Y2gsIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCB3aGljaCBpbmZsdWVuY2VzIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgd29yayB3aGVuIGRlYWxpbmcgd2l0aCBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MuIFRoZSBrZXkgaXMgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgY2FsY3VsYXRlZCBmb3IgdGhlIGxvb3Agd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGRldGVybWluZXMgdGhlIHN0ZXAgc2l6ZSBmb3IgdHJhdmVyc2luZyBtZW1vcnkgcmVnaW9ucy4gVGhpcyAqZGVmaW5pdGVseSogc2VlbXMgd29ydGggZnV6emluZy4KCk15IGZpbmFsaXplZCBzdHJhdGVneSBpcyB0byBmb2N1cyBvbiBgZG9fbWFkdmlzZWAuIFRoZSByZWxldmFudCBjb25maWdzIHJlbWFpbjogYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHNvIHRoZSBsb29wIGluY3JlbWVudHMgY29ycmVjdGx5IHdoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGZvbGlvcyB0aGF0IGFyZW4mIzM5O3Qgc3BlY2lmaWNhbGx5IGh1Z2V0bGIgZm9saW9zLCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZCBmb3IgdGhlIGNvZGUgYmVpbmcgYWRkZWQsIGFuZCB0aGUgb3RoZXIgdHdvIGNvbmZpZ3MgYXJlIGdyZWF0IHRvIHRyaWdnZXIgbGFyZ2UgZm9saW8gY29kZSBhbmQgc2VlIHRoZSBpbXBhY3Qgb24gaHVnZXRsYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21hZHZpc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBzdGVwIHNpemUgZm9yIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBkdXJpbmcgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGxvZ2ljIG9mIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY29kZSwgd2hpbGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgbmVlZGVkIHRvIHRlc3QgdGhlIGxhcmdlIGZvbGlvIGFuZCBodWdldGxiIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tYWR2aXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQwLjgwMzQwMDkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM2MTU5MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21hZHZpc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHN0ZXAgc2l6ZSBmb3Igbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGR1cmluZyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24gbG9naWMgb2YgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBjb2RlLCB3aGlsZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBuZWVkZWQgdG8gdGVzdCB0aGUgbGFyZ2UgZm9saW8gYW5kIGh1Z2V0bGIgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQwLjgwMzQwNzQwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjI2MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxMmUxNmYwMGFmZmYxMWE3MDVmN2VlMTFiZjE3YWJkZjU3NGUxNjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNTowODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mMzdhYmVkMjk0NDViIDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0xNDY0LDExICsxNDY0LDEyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuIFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxcbi1cXHRcXHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcXFwicGFnZVxcXCIgd2lsbFxcbi1cXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbitcXHRcXHQgKiBOb24taHVnZXRsYiBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBvbmx5IHRoZSBhZGRyZXNzZWRcXG4rXFx0XFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcXG4rXFx0XFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcXG4rXFx0XFx0c2l6ZSA9IFBhZ2VIdWdlKHBhZ2UpID9cXG4rXFx0XFx0XFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xcbiBcXG4gXFx0XFx0aWYgKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQyLjIxNjY3NTA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3OTQ4MzAyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbWFkdmlzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjEyZTE2ZjAwYWZmZjExYTcwNWY3ZWUxMWJmMTdhYmRmNTc0ZTE2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTU6MDg6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDA3YTIxY2EzMWJhZDQuLmYzN2FiZWQyOTQ0NWIgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTE0NjQsMTEgKzE0NjQsMTIgQEAgc3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiBcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2Vcbi1cdFx0ICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgXCJwYWdlXCIgd2lsbFxuLVx0XHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxuK1x0XHQgKiBOb24taHVnZXRsYiBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBvbmx5IHRoZSBhZGRyZXNzZWRcbitcdFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcbitcdFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxuIFx0XHQgKi9cbi1cdFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcbitcdFx0c2l6ZSA9IFBhZ2VIdWdlKHBhZ2UpID9cbitcdFx0XHRwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSkgOiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4gXHRcdFx0cHJfaW5mbyhcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQyLjIxNjY3NzM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4ODUwNTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1hZHZpc2VfaW5qZWN0X2Vycm9yIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGFmZmVjdGluZyBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2UgdG8gdGhlIGBzaXplYCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbW9kaWZ5aW5nIHRoaXMsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL21hZHZpc2UuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhbmQgaW1tZWRpYXRlbHkgaWRlbnRpZnkgd2hhdCB0aGUgcGF0Y2ggYWx0ZXJzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWRqdXN0ZWQgc2l6ZSBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBgbWFkdmlzZWAgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowODo0Ni4wMDUxODYzODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3NzEzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MDUtXFxubW0vbWFkdmlzZS5jOjE1MDY6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTUwNy17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xODk3LVxcdFxcdHJhbmdlLVxcdTAwM2VlbmQgPSBzdGFydCArIGxlbl9pbjtcXG5tbS9tYWR2aXNlLmM6MTg5ODpcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTE4OTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowODo0Ni4wODE5NjQ5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQwMTgzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgZmxhZ3Mg4oCTIGBtYWR2aXNlYCBpdHNlbGYgaXMgYSBsb3ctbGV2ZWwsIHBvd2VyZnVsIHN5c3RlbSBjYWxsLCBhbmQgaW5qZWN0aW5nIGVycm9ycyBpbnRvIGl0IHN1Z2dlc3RzIHNvbWUgcG90ZW50aWFsbHkgY29tcGxleCBlcnJvci1oYW5kbGluZyBzY2VuYXJpb3MgYXJlIGluIHBsYXkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2hhdCBmbGFncyBvciBrZXJuZWwgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIGV2ZW4gKmVuYWJsZSogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY29uZGl0aW9ucy4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIGFsd2F5cyBhdmFpbGFibGUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBkZWJ1ZyBmbGFncywgcGVyaGFwcyBldmVuIGEgbm9uLXN0YW5kYXJkIGtlcm5lbCBidWlsZD8gS25vd2luZyB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBwb3RlbnRpYWwgaW1wYWN0IG9uIHJlYWwtd29ybGQgc3lzdGVtcywgYW5kIGZyYW5rbHksIHdoZXRoZXIgSSBjYW4gZXZlbiAqdGVzdCogdGhpcyBwcm9wZXJseSB3aXRob3V0IHJlYnVpbGRpbmcgZXZlcnl0aGluZy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjUzLjEyMjE1MTUwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgxOTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNS1cXG5tbS9tYWR2aXNlLmM6MTUwNjpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA3LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTctXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk4OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjUzLjE5Mzk3ODQ0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTcwNDI4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGluIGBtbS9tYWR2aXNlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBrZXJuZWwncyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uIGlzIG9uIG15IHJhZGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgY29udGV4dCBpdCBsaXZlcyBpbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBtbS9tYWR2aXNlLmNgLiBXaGF0J3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmcsIGFuZCB3aHkgaXMgdGhpcyBmdW5jdGlvbiByZWxldmFudCB0byBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcGF0dGVybnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBlcnJvciBpbmplY3Rpb24gaGFwcGVuaW5nIGF0IHRoaXMgcG9pbnQ/IExldCBtZSBzdGFydCBieSByZW1pbmRpbmcgbXlzZWxmIHdoZXJlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IGBtYWR2aXNlYCB3b3Jrcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwYWdlIHN0YXRlcy4gSSdsbCBmb2N1cyBvbiB0aGUgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIGVycm9yIGluamVjdGlvbiBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgYXJlIGhhbmRsZWQgb3IgZXhwZWN0ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBnaXZlcyBhd2F5IGFib3V0IGl0cyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MDQuMTY0NDA4NjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzMDpcXHRcXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTtcXG4xNDMxOlxcdFxcbjE0MzI6XFx0XFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcXG4xNDMzOlxcdG91dDpcXG4xNDM0OlxcdFxcdC8qXFxuMTQzNTpcXHRcXHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xcbjE0MzY6XFx0XFx0ICogc2xhYiwgYXJlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLlxcbjE0Mzc6XFx0XFx0ICovXFxuMTQzODpcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSlcXG4xNDM5OlxcdFxcdFxcdGVycm9yID0gLUVBR0FJTjtcXG4xNDQwOlxcdFxcdHJldHVybiBlcnJvcjtcXG4xNDQxOlxcdH1cXG4xNDQyOlxcdFxcbjE0NDM6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbjE0NDQ6XFx0LypcXG4xNDQ1OlxcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXFxuMTQ0NjpcXHQgKi9cXG4xNDQ3OlxcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ0ODpcXHR7XFxuMTQ0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuMTQ1MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2Uuc3RhcnQ7XFxuMTQ1MTpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLmVuZDtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjE0NTQ6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDU1OlxcdFxcbjE0NTY6XFx0XFx0Zm9yICg7IHN0YXJ0IFxcdTAwM2MgZW5kOyBzdGFydCArPSBzaXplKSB7XFxuMTQ1NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4xNDU4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE0NTk6XFx0XFx0XFx0aW50IHJldDtcXG4xNDYwOlxcdFxcbjE0NjE6XFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXFx1MDAyNnBhZ2UpO1xcbjE0NjI6XFx0XFx0XFx0aWYgKHJldCAhPSAxKVxcbjE0NjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDY0OlxcdFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRcXHQvKlxcbjE0Njc6XFx0XFx0XFx0ICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkXFxuMTQ2ODpcXHRcXHRcXHQgKiBiYXNlIHBhZ2UgaXMgaGFuZGxlZC4gSHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgYXMgYVxcbjE0Njk6XFx0XFx0XFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gUGFnZUh1Z2UocGFnZSkgP1xcbjE0NzI6XFx0XFx0XFx0XFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc1OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NjpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NzpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzk6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0ODA6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODI6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgzOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4NDpcXHRcXHRcXHR9XFxuMTQ4NTpcXHRcXG4xNDg2OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODg6XFx0XFx0fVxcbjE0ODk6XFx0XFxuMTQ5MDpcXHRcXHRyZXR1cm4gMDtcXG4xNDkxOlxcdH1cXG4xNDkyOlxcdFxcbjE0OTM6XFx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ5NDpcXHR7XFxuMTQ5NTpcXHRcXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxuMTQ5NjpcXHRcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuMTQ5NzpcXHRcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbjE0OTg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQ5OTpcXHRcXHRkZWZhdWx0OlxcbjE1MDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDE6XFx0XFx0fVxcbjE1MDI6XFx0fVxcbjE1MDM6XFx0XFxuMTUwNDpcXHQjZWxzZVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MDc6XFx0e1xcbjE1MDg6XFx0XFx0cmV0dXJuIDA7XFxuMTUwOTpcXHR9XFxuMTUxMDpcXHRcXG4xNTExOlxcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MTI6XFx0e1xcbjE1MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MTQ6XFx0fVxcbjE1MTU6XFx0XFxuMTUxNjpcXHQjZW5kaWZcXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cXG4xNTE3OlxcdFxcbjE1MTg6XFx0c3RhdGljIGJvb2xcXG4xNTE5OlxcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbjE1MjA6XFx0e1xcbjE1MjE6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjE1MjI6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xNTIzOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xNTI0OlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTUyNTpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xNTI2OlxcdFxcdGNhc2UgTUFEVl9SQU5ET006XFxuMTUyNzpcXHRcXHRjYXNlIE1BRFZfUkVNT1ZFOlxcbjE1Mjg6XFx0XFx0Y2FzZSBNQURWX1dJTExORUVEOlxcbjE1Mjk6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOTowNC4xNjQ1NTYyMzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTI5Nzc5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgbmVzdGxlZCB1bmRlciB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1lYW5pbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGluamVjdGluZyBtZW1vcnkgZXJyb3JzLCBwZXJoYXBzIGZvciB0ZXN0aW5nIG9yIGZhdWx0IGluamVjdGlvbiwgY29ycmVjdD8gSSd2ZSBiZWVuIGludm9sdmVkIGluIHNpbWlsYXIgcGF0Y2hlcyBiZWZvcmUsIHNvIEkga25vdyB0aGUgdGVycml0b3J5LlxuXG5Ob3csIHdoZXJlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYmVpbmcgKmNhbGxlZCogZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIHRleHQgc2F5cyBpdCdzIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2RvX2JlaGF2aW9yYC4gT2theSwgdGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBlcnJvciBpbmplY3Rpb24gaXMgaGFwcGVuaW5nLiBUaGF0J2xsIHRlbGwgbWUgdGhlIFwid2h5XCIgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToxMi4yOTQzMzg4MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHQgKi9cXG4xODgxOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4xODgyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQpXFxuMTg4MzpcXHR7XFxuMTg4NDpcXHRcXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlbW0gPT0gbW0gPyB1bnRhZ2dlZF9hZGRyKHN0YXJ0KSA6XFxuMTg4NTpcXHRcXHRcXHRcXHRcXHQgICB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgc3RhcnQpO1xcbjE4ODY6XFx0fVxcbjE4ODc6XFx0XFxuMTg4ODpcXHRzdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4xODg5OlxcdFxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XFxuMTg5MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTg5MzpcXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuMTg5NDpcXHRcXG4xODk1OlxcdFxcdGlmIChpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKSkge1xcbjE4OTY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuMTg5NzpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxuMTg5ODpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxuMTg5OTpcXHRcXHR9XFxuMTkwMDpcXHRcXG4xOTAxOlxcdFxcdHJhbmdlLVxcdTAwM2VzdGFydCA9IGdldF91bnRhZ2dlZF9hZGRyKG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tLCBzdGFydCk7XFxuMTkwMjpcXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gcmFuZ2UtXFx1MDAzZXN0YXJ0ICsgUEFHRV9BTElHTihsZW5faW4pO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuMTkwNTpcXHRcXHRpZiAoaXNfbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKSlcXG4xOTA2OlxcdFxcdFxcdGVycm9yID0gbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKTtcXG4xOTA3OlxcdFxcdGVsc2VcXG4xOTA4OlxcdFxcdFxcdGVycm9yID0gbWFkdmlzZV93YWxrX3ZtYXMobWFkdl9iZWhhdmlvcik7XFxuMTkwOTpcXHRcXHRibGtfZmluaXNoX3BsdWcoXFx1MDAyNnBsdWcpO1xcbjE5MTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjE5MTE6XFx0fVxcbjE5MTI6XFx0XFxuMTkxMzpcXHQvKlxcbjE5MTQ6XFx0ICogVGhlIG1hZHZpc2UoMikgc3lzdGVtIGNhbGwuXFxuMTkxNTpcXHQgKlxcbjE5MTY6XFx0ICogQXBwbGljYXRpb25zIGNhbiB1c2UgbWFkdmlzZSgpIHRvIGFkdmlzZSB0aGUga2VybmVsIGhvdyBpdCBzaG91bGRcXG4xOTE3OlxcdCAqIGhhbmRsZSBwYWdpbmcgSS9PIGluIHRoaXMgVk0gYXJlYS4gIFRoZSBpZGVhIGlzIHRvIGhlbHAgdGhlIGtlcm5lbFxcbjE5MTg6XFx0ICogdXNlIGFwcHJvcHJpYXRlIHJlYWQtYWhlYWQgYW5kIGNhY2hpbmcgdGVjaG5pcXVlcy4gIFRoZSBpbmZvcm1hdGlvblxcbjE5MTk6XFx0ICogcHJvdmlkZWQgaXMgYWR2aXNvcnkgb25seSwgYW5kIGNhbiBiZSBzYWZlbHkgZGlzcmVnYXJkZWQgYnkgdGhlXFxuMTkyMDpcXHQgKiBrZXJuZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi5cXG4xOTIxOlxcdCAqXFxuMTkyMjpcXHQgKiBiZWhhdmlvciB2YWx1ZXM6XFxuMTkyMzpcXHQgKiAgTUFEVl9OT1JNQUwgLSB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByZWFkIGNsdXN0ZXJzLiAgVGhpc1xcbjE5MjQ6XFx0ICpcXHRcXHRyZXN1bHRzIGluIHNvbWUgcmVhZC1haGVhZCBhbmQgcmVhZC1iZWhpbmQuXFxuMTkyNTpcXHQgKiAgTUFEVl9SQU5ET00gLSB0aGUgc3lzdGVtIHNob3VsZCByZWFkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBkYXRhXFxuMTkyNjpcXHQgKlxcdFxcdG9uIGFueSBhY2Nlc3MsIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGFwcGxpLVxcbjE5Mjc6XFx0ICpcXHRcXHRjYXRpb24gd2lsbCBuZWVkIG1vcmUgdGhhbiB3aGF0IGl0IGFza3MgZm9yLlxcbjE5Mjg6XFx0ICogIE1BRFZfU0VRVUVOVElBTCAtIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSB3aWxsIHByb2JhYmx5IGJlIGFjY2Vzc2VkXFxuMTkyOTpcXHQgKlxcdFxcdG9uY2UsIHNvIHRoZXkgY2FuIGJlIGFnZ3Jlc3NpdmVseSByZWFkIGFoZWFkLCBhbmRcXG4xOTMwOlxcdCAqXFx0XFx0Y2FuIGJlIGZyZWVkIHNvb24gYWZ0ZXIgdGhleSBhcmUgYWNjZXNzZWQuXFxuMTkzMTpcXHQgKiAgTUFEVl9XSUxMTkVFRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZnlpbmcgdGhlIHN5c3RlbSB0byByZWFkXFxuMTkzMjpcXHQgKlxcdFxcdHNvbWUgcGFnZXMgYWhlYWQuXFxuMTkzMzpcXHQgKiAgTUFEVl9ET05UTkVFRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBmaW5pc2hlZCB3aXRoIHRoZSBnaXZlbiByYW5nZSxcXG4xOTM0OlxcdCAqXFx0XFx0c28gdGhlIGtlcm5lbCBjYW4gZnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGl0LlxcbjE5MzU6XFx0ICogIE1BRFZfRlJFRSAtIHRoZSBhcHBsaWNhdGlvbiBtYXJrcyBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2UgYXMgbGF6eSBmcmVlLFxcbjE5MzY6XFx0ICpcXHRcXHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuMTkzNzpcXHQgKiAgTUFEVl9SRU1PVkUgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZnJlZSB1cCB0aGUgZ2l2ZW4gcmFuZ2Ugb2ZcXG4xOTM4OlxcdCAqXFx0XFx0cGFnZXMgYW5kIGFzc29jaWF0ZWQgYmFja2luZyBzdG9yZS5cXG4xOTM5OlxcdCAqICBNQURWX0RPTlRGT1JLIC0gb21pdCB0aGlzIGFyZWEgZnJvbSBjaGlsZCdzIGFkZHJlc3Mgc3BhY2Ugd2hlbiBmb3JraW5nOlxcbjE5NDA6XFx0ICpcXHRcXHR0eXBpY2FsbHksIHRvIGF2b2lkIENPV2luZyBwYWdlcyBwaW5uZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKS5cXG4xOTQxOlxcdCAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLlxcbjE5NDI6XFx0ICogIE1BRFZfV0lQRU9ORk9SSyAtIHByZXNlbnQgdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB6ZXJvLWZpbGxlZCBtZW1vcnkgaW4gdGhpc1xcbjE5NDM6XFx0ICogICAgICAgICAgICAgIHJhbmdlIGFmdGVyIGEgZm9yay5cXG4xOTQ0OlxcdCAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXFxuMTk0NTpcXHQgKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbjE5NDY6XFx0ICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcbjE5NDc6XFx0ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LlxcbjE5NDg6XFx0ICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXFxuMTk0OTpcXHQgKlxcdFxcdHRoaXMgYXJlYSB3aXRoIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50IGZyb20gb3RoZXIgc3VjaCBhcmVhcy5cXG4xOTUwOlxcdCAqICBNQURWX1VOTUVSR0VBQkxFLSBjYW5jZWwgTUFEVl9NRVJHRUFCTEU6IG5vIGxvbmdlciBtZXJnZSBwYWdlcyB3aXRoIG90aGVycy5cXG4xOTUxOlxcdCAqICBNQURWX0hVR0VQQUdFIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGJhY2sgdGhlIGdpdmVuIHJhbmdlIGJ5IHRyYW5zcGFyZW50XFxuMTk1MjpcXHQgKlxcdFxcdGh1Z2UgcGFnZXMgaW4gdGhlIGZ1dHVyZS4gRXhpc3RpbmcgcGFnZXMgbWlnaHQgYmUgY29hbGVzY2VkIGFuZFxcbjE5NTM6XFx0ICpcXHRcXHRuZXcgcGFnZXMgbWlnaHQgYmUgYWxsb2NhdGVkIGFzIFRIUC5cXG4xOTU0OlxcdCAqICBNQURWX05PSFVHRVBBR0UgLSBtYXJrIHRoZSBnaXZlbiByYW5nZSBhcyBub3Qgd29ydGggYmVpbmcgYmFja2VkIGJ5XFxuMTk1NTpcXHQgKlxcdFxcdHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgc28gdGhlIGV4aXN0aW5nIHBhZ2VzIHdpbGwgbm90IGJlXFxuMTk1NjpcXHQgKlxcdFxcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXFxuMTk1NzpcXHQgKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxcbjE5NTg6XFx0ICogIE1BRFZfRE9OVERVTVAgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcHJldmVudCBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2VcXG4xOTU5OlxcdCAqXFx0XFx0ZnJvbSBiZWluZyBpbmNsdWRlZCBpbiBpdHMgY29yZSBkdW1wLlxcbjE5NjA6XFx0ICogIE1BRFZfRE9EVU1QIC0gY2FuY2VsIE1BRFZfRE9OVERVTVA6IG5vIGxvbmdlciBleGNsdWRlIGZyb20gY29yZSBkdW1wLlxcbjE5NjE6XFx0ICogIE1BRFZfQ09MRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXFxuMTk2MjpcXHQgKlxcdFxcdGRlYWN0aXZhdGUgcGFnZXMgaW4gdGhpcyByYW5nZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlY2xhaW1lZFxcbjE5NjM6XFx0ICpcXHRcXHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuMTk2NDpcXHQgKiAgTUFEVl9QQUdFT1VUIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgdGhpcyBtZW1vcnkgc29vbixcXG4xOTY1OlxcdCAqXFx0XFx0cGFnZSBvdXQgdGhlIHBhZ2VzIGluIHRoaXMgcmFuZ2UgaW1tZWRpYXRlbHkuXFxuMTk2NjpcXHQgKiAgTUFEVl9QT1BVTEFURV9SRUFEIC0gcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyByZWFkYWJsZSBieVxcbjE5Njc6XFx0ICpcXHRcXHR0cmlnZ2VyaW5nIHJlYWQgZmF1bHRzIGlmIHJlcXVpcmVkXFxuMTk2ODpcXHQgKiAgTUFEVl9QT1BVTEFURV9XUklURSAtIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZSB0YWJsZXMgd3JpdGFibGUgYnlcXG4xOTY5OlxcdCAqXFx0XFx0dHJpZ2dlcmluZyB3cml0ZSBmYXVsdHMgaWYgcmVxdWlyZWRcXG4xOTcwOlxcdCAqXFxuMTk3MTpcXHQgKiByZXR1cm4gdmFsdWVzOlxcbjE5NzI6XFx0ICogIHplcm8gICAgLSBzdWNjZXNzXFxuMTk3MzpcXHQgKiAgLUVJTlZBTCAtIHN0YXJ0ICsgbGVuIFxcdTAwM2MgMCwgc3RhcnQgaXMgbm90IHBhZ2UtYWxpZ25lZCxcXG4xOTc0OlxcdCAqXFx0XFx0XFxcImJlaGF2aW9yXFxcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSwgb3IgYXBwbGljYXRpb25cXG4xOTc1OlxcdCAqXFx0XFx0aXMgYXR0ZW1wdGluZyB0byByZWxlYXNlIGxvY2tlZCBvciBzaGFyZWQgcGFnZXMsXFxuMTk3NjpcXHQgKlxcdFxcdG9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyByYW5nZSBpbmNsdWRlcyBmaWxlLCBIdWdlIFRMQixcXG4xOTc3OlxcdCAqXFx0XFx0TUFQX1NIQVJFRCBvciBWTVBGTk1BUCByYW5nZS5cXG4xOTc4OlxcdCAqICAtRU5PTUVNIC0gYWRkcmVzc2VzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYXJlIG5vdCBjdXJyZW50bHlcXG4xOTc5OlxcdCAqXFx0XFx0bWFwcGVkLCBvciBhcmUgb3V0c2lkZSB0aGUgQVMgb2YgdGhlIHByb2Nlc3MuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA5OjEyLjI5NDQ3NTM3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE4MTMyNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBtYWR2aXNlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQncyBtb2RpZnlpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBgaXNfbWVtb3J5X2ZhaWx1cmUobWFkdl9iZWhhdmlvcilgIGV2YWx1YXRlcyB0byB0cnVlLiBSaWdodCwgYW5kIGBpc19tZW1vcnlfZmFpbHVyZWAgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBgTUFEVl9IV1BPSVNPTmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBzaXplIGNhbGN1bGF0aW9uIHdpdGhpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyBsYXJnZSBmb2xpb3MgdGhhdCBhcmVuJ3QgaHVnZXRsYi1iYWNrZWQuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29ycmVjdGlvbiBvZiBzb21lIHNvcnQsIHJpZ2h0IHRoZXJlIGluIGBtbS9tYWR2aXNlLmNgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLCBubyBxdWVzdGlvbi4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBlZGdlIGNhc2VzIHJlbGF0aW5nIHRvIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCwgc28gZnV6emluZyBpcyBjcml0aWNhbC5cblxuTm93LCBJIHdhcyBnb2luZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCBidXQgdGhlbiBpdCBoaXRzIG1lOiBpdCdzIHN0YXRpYy4gSG1tLi4uIGlzIGl0IGlubGluZWQ/IExldCdzIGNoZWNrLiBJdCBpc24ndCBtYXJrZWQgYXMgaW5saW5lLCBidXQgaXQgaXMgc3RhdGljLiBPa2F5LCBzbyB0aGF0IG1lYW5zIGl0J3Mgbm90IGEgZGlyZWN0IGZvY3VzLCBhdCBsZWFzdCBub3QgZWFzaWx5LiBJJ2xsIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IG90aGVyIGVudHJ5IHBvaW50cyBsaWtlIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCwgb3IgcG90ZW50aWFsbHkgaGlnaGVyIGxldmVsIGNhbGxzIGxpa2UgYGRvX21hZHZpc2VgIG9yIGBzeXNfbWFkdmlzZWAuIEknbGwgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBnZXRzIGNhbGxlZCBmcm9tLCBhcyB0aGUgZnV6emluZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyMS42MTI2MDk2NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTE5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLiptYWR2aXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTk4NT1pbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTIwMTItXFxubW0vbWFkdmlzZS5jOjIwMTM6U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMjAxNC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MjAxOT1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTIwODUtXFxubW0vbWFkdmlzZS5jOjIwODY6U1lTQ0FMTF9ERUZJTkU1KHByb2Nlc3NfbWFkdmlzZSwgaW50LCBwaWRmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsXFxubW0vbWFkdmlzZS5jLTIwODctXFx0XFx0c2l6ZV90LCB2bGVuLCBpbnQsIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyMS42NTk1MzM2MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxMzU0MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYG1hZHZpc2VgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBkaXZpbmcgaW50byB0aGUgYG1hZHZpc2VgIGNvZGUuIFwiZG9fbWFkdmlzZVwiIHNlZW1zIGxpa2UgYSBzdHJvbmcgY29udGVuZGVyLCBhIGdvb2QsIGNsZWFuIHBvaW50IG9mIGVudHJ5LiBBbHRlcm5hdGl2ZWx5LCB0aGVyZSdzIFwibWFkdmlzZV9kb19iZWhhdmlvclwiIOKAkyB0aGF0J3MgYSBkZWNlbnQgb3B0aW9uIHRvby4gSG9sZCBvbiwgaXNuJ3QgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHN0YXRpYz8gQWggeWVzLCB0aGF0J3MgcmlnaHQsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1ha2VzIFwiZG9fbWFkdmlzZVwiIHRoZSBiZXR0ZXIgdGFyZ2V0IHRoZW4uIFNpbmNlIGBkb19tYWR2aXNlYCBpc24ndCBzdGF0aWMsIGl0J3MgcHJvYmFibHkgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gd2UgbmVlZCB0byBleGFtaW5lLiBKdXN0IGNvbmZpcm1pbmcgdGhpczsgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGRvX21hZHZpc2VgIGlzIGluZGVlZCBub24tc3RhdGljIHRvIGVuc3VyZSBpdCdzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyOC4wNzMwNzgzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjc0MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkb19tYWR2aXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTg0LSAqL1xcbm1tL21hZHZpc2UuYzoxOTg1OmludCBkb19tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE5ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyOC4xMjAzNjAyMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM5NDUxNTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIENob29zaW5nIHRoZSBSaWdodCBBUEkgRW50cnlwb2ludCoqXG5cbk9rYXksIHNvIEknbSBhbmFseXppbmcgd2hpY2ggZnVuY3Rpb24gdG8gcGljayBoZXJlLCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUuLi4gSSd2ZSBjb25maXJtZWQgdGhhdCBgZG9fbWFkdmlzZWAgaXMgaW5kZWVkIG5vbi1zdGF0aWMuIEdvb2Qgc3RhcnQuIE5vdywgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBtYXJrZWQgYXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBidXQgaXQgKm1pZ2h0KiBub3QgYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHNlZW1zIGZhaXJseSBsYXJnZSwgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBpbmxpbmUgaXQuIEJ1dCwgdG8gYmUgY29tcGxldGVseSBzYWZlLCBhbmQgY29uc2lkZXJpbmcgdGhlIHByb21wdCwgSSdsbCBzdGljayB3aXRoIGluY2x1ZGluZyBib3RoIGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyOiBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIFNvLCBgZG9fbWFkdmlzZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSwgYmFzZWQgb24gdGhlIHByb21wdC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IExldCBtZSB0aGluay4uLiB3aGF0IGFib3V0IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmA/IE5vLCBiZWNhdXNlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1hZHZpc2VfZG9fYmVoYXZpb3JgLiBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayBgbWFkdmlzZV9kb19iZWhhdmlvcmAgdGhvdWdoLi4uIHl1cCwgdGhhdCBvbmUncyBzdGF0aWMgdG9vLiBTbywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGRvX21hZHZpc2VgLlxuXG5BaGEsIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoaXMgY29uZmlnIG9wdGlvbiBpcyBuZWNlc3NhcnkgZm9yIGVuYWJsaW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBLY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIEJ1dCwgZ2l2ZW4gdGhhdCB0aGUgcHJvbXB0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZG9fbWFkdmlzZWAgYmVpbmcgYmV0dGVyIGZvciBteSBwdXJwb3NlcywgYW5kIGl0J3Mgbm9uLXN0YXRpYywgSSB3aWxsIGdvIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MzYuNTE0ODc4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzE4ODg2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MzkuMzQ2NzczNTIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjg0NzkyNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTUVNT1JZX0ZBSUxVUkUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQncyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucywgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgdmlzaWJpbGl0eS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgcXVpY2tseS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOTo1MC4wMzE1NzE1NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cXG4gNzYxOlxcdFxcbiA3NjI6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzYzOlxcdFxcdGJvb2xcXG4gNzY0OlxcdFxcbiA3NjU6XFx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxuIDc2NjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA3Njc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2ODpcXHRcXHRib29sIFxcXCJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXFxcIlxcbiA3Njk6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gNzcwOlxcdFxcdGhlbHBcXG4gNzcxOlxcdFxcdCAgRW5hYmxlcyBjb2RlIHRvIHJlY292ZXIgZnJvbSBzb21lIG1lbW9yeSBmYWlsdXJlcyBvbiBzeXN0ZW1zXFxuIDc3MjpcXHRcXHQgIHdpdGggTUNBIHJlY292ZXJ5LiBUaGlzIGFsbG93cyBhIHN5c3RlbSB0byBjb250aW51ZSBydW5uaW5nXFxuIDc3MzpcXHRcXHQgIGV2ZW4gd2hlbiBzb21lIG9mIGl0cyBtZW1vcnkgaGFzIHVuY29ycmVjdGVkIGVycm9ycy4gVGhpcyByZXF1aXJlc1xcbiA3NzQ6XFx0XFx0ICBzcGVjaWFsIGhhcmR3YXJlIHN1cHBvcnQgYW5kIHR5cGljYWxseSBFQ0MgbWVtb3J5LlxcbiA3NzU6XFx0XFxuIDc3NjpcXHRjb25maWcgSFdQT0lTT05fSU5KRUNUXFxuIDc3NzpcXHRcXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuIDc3ODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuIDc3OTpcXHRcXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6NTAuMDMxNzc5NDQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDE3MTk4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYE1FTU9SWV9GQUlMVVJFYCBiZWhhdmVzIGluIHRoaXMgc3lzdGVtLiBJdCBzZWVtcyBpdHMgYmVoYXZpb3IgaGluZ2VzIGRpcmVjdGx5IG9uIHR3byBrZXkgZWxlbWVudHM6IHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCDigJMgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBtYW5hZ2luZyBtZW1vcnkg4oCTIGFuZCwgaW50ZXJlc3RpbmdseSwgdGhlIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBzZWNvbmQgcG9pbnQgaXMgd2hhdCBJIHdhbnQgdG8gZGlzc2VjdCBub3cuIENsZWFybHksIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGRlZmluZXMgd2hldGhlciBvciBub3QgaXQgc3VwcG9ydHMgdGhlIGhhbmRsaW5nIG9mIG1lbW9yeSBmYWlsdXJlcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRldGVybWluZSB3aGljaCBvZiB0aGVtIGFjdHVhbGx5IGVuYWJsZSB0aGlzIGNyaXRpY2FsIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSB0byBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hpY2ggYXJjaGl0ZWN0dXJlcyBhcmUgcGxheWluZyBiYWxsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA5OjU4LjY3MzUwMjM3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODUxNTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctNzMtXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9hcm02NC9LY29uZmlnOjc0OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIENDX0hBVkVfU0hBRE9XX0NBTExfU1RBQ0tcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTIyLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzoyMzpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy02MjctXFx0ZGVmYXVsdCBcXFwieVxcXCIgaWYgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy02MjktXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTc1MD1jb25maWcgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNXFxuYXJjaC94ODYvS2NvbmZpZzo3NTc6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3g4Ni9LY29uZmlnLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MDAuMzcyMDI3NzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDc1NTQyMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYE1FTU9SWV9GQUlMVVJFYCBjb25maWcg4oCTIHRoYXQncyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLi4uXG5cbkFscmlnaHQsIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBkZWZpbmUuIEludGVyZXN0aW5nLCBpdOKAmXMgcmVsYXRlZCB0byBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIG1lbW9yeSBlcnJvciBoYW5kbGluZy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBoYW5kbGluZyBib3RoIFwiTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zXCIgYW5kIFwiSHVnZXRsYiBmb2xpb3NcIi4gU28gdGhhdCBtZWFucywgZm9yIHRlc3RpbmcsIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIEJ1dCByZWFsbHksIHRoZSBjb3JlIGNvZGUgaXMgaW4gYG1hZHZpc2UuY2AgYW5kIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoaXMuIFRoZSBwYXRjaCB1c2VzIGBQYWdlSHVnZShwYWdlKWAuIFNvIGl0J3MgcHJvYmFibHkgdXNpbmcgSHVnZSBQYWdlcy4gTGV0IG1lIGNoZWNrIHdoZXJlIGBQYWdlSHVnZWAgaXMgZGVmaW5lZC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBmb2xpbyBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MTAuNDQ3NTcxNjE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1NDE3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUGFnZUh1Z2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDQtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUxLSAqL1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTI6c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTEyOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlQW5vbkV4Y2x1c2l2ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMzQtXFx0ICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzNTpcXHRpZiAoUGFnZUh1Z2UocGFnZSkpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzNi1cXHRcXHRwYWdlID0gY29tcG91bmRfaGVhZChwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTExNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0Mi1cXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub25Ob3RLc20ocGFnZSksIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjExNDM6XFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXFx1MDAyNlxcdTAwMjYgIVBhZ2VIZWFkKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQ0LVxcdHNldF9iaXQoUEdfYW5vbl9leGNsdXNpdmUsIFxcdTAwMjZQRl9BTlkocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE0Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgQ2xlYXJQYWdlQW5vbkV4Y2x1c2l2ZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNDktXFx0Vk1fQlVHX09OX1BHRkxBR1MoIVBhZ2VBbm9uTm90S3NtKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTUwOlxcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VIdWdlKHBhZ2UpIFxcdTAwMjZcXHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1MS1cXHRjbGVhcl9iaXQoUEdfYW5vbl9leGNsdXNpdmUsIFxcdTAwMjZQRl9BTlkocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19DbGVhclBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1Ni1cXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub24ocGFnZSksIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjExNTc6XFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXFx1MDAyNlxcdTAwMjYgIVBhZ2VIZWFkKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTU4LVxcdF9fY2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcXHUwMDI2UEZfQU5ZKHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MTAuNTcwMTE3Mjc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjU3MDE4NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KipcblxuT2theSwgc28gYFBhZ2VIdWdlYCBpcyBhIGdpdmVuLCB0aGF0J3MgYWxyZWFkeSBkZWZpbmVkLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGRvX21hZHZpc2VgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhvbmUgaW4gb24gYGRvX21hZHZpc2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0LCBpc24ndCBgZG9fbWFkdmlzZWAgYSAqdmVyeSogZ2VuZXJpYywgaG90LXBhdGggZnVuY3Rpb24/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCBza2V3aW5nIG91ciB0ZXN0IGRpc3RyaWJ1dGlvbiBieSBsaXN0aW5nIHRob3NlLlxuXG5CdXQgdGhlbiBJIHJlYWxpemVkLCBgZG9fbWFkdmlzZWAgKmlzKiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBJdCdzIG5vdCBhIGZ1bmN0aW9uIGxpa2UgYF9fa21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQncyB0aGUgdG9wLWxldmVsIHN5c2NhbGwgaW1wbGVtZW50YXRpb24uIE9rYXksIHNvIGl04oCZcyBub3QgYSAqZ2VuZXJpYyogaG90LXBhdGgsIGl0J3MgdGhlIHNwZWNpZmljIGVudHJ5IHBvaW50LlxuXG5UaGUgbmV4dCBpc3N1ZTogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIGFyZSBib3RoIHN0YXRpYy4gV2hhdCBzeW1ib2wgc2hvdWxkIEkgY2hvb3NlPyBTaG91bGQgSSBpbmNsdWRlIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIGlubGluZWQuIEl0J3MgYSByZWFzb25hYmx5IGxhcmdlIGZ1bmN0aW9uLCBzbyBpdCBtaWdodCBub3QgYmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdG8gc2VlIGlmIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgaW4gdGhlIGBTeXN0ZW0ubWFwYCwgb3IgaWYgSSBjYW4ganVzdCBzdGljayB3aXRoIGBkb19tYWR2aXNlYC5cblxuQWhhISBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIElmIEkgc3BlY2lmeSBgZG9fbWFkdmlzZWAsIHRoYXQncyBleGFjdGx5IHdoYXQgSSB3YW50IOKAkyBpdCB3aWxsIGZvY3VzIG9uIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gV2FpdCwgYnV0IHRoZSBgbWFkdmlzZWAgc3lzY2FsbCBoYW5kbGVzICptYW55KiBiZWhhdmlvcnMuIEZvY3VzaW5nIG9uIGBkb19tYWR2aXNlYCB3aWxsIGZ1enogYWxsIHRob3NlIG1hZHZpc2UgYmVoYXZpb3JzLiBPa2F5LCBsZXQncyBhbHNvIGluY2x1ZGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBiZSBtb3JlIHNwZWNpZmljLiBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLCBidXQgdGhlIHJlbGV2YW50IHBhdGNoIGlzIHdpdGhpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJdCBsb29rcyBsaWtlIGl0IGlzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCBpcyBzdGF0aWMgYW5kIG5vdCBtYXJrZWQgaW5saW5lLiBUaGUgZnVuY3Rpb24gaXMgcXVpdGUgbGFyZ2UsIHdpdGggYSBgZm9yYCBsb29wLCBjYWxscyB0byBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiBUaGF0IHNldHRsZXMgaXQ6IEnigJlsbCBpbmNsdWRlIGJvdGggYGRvX21hZHZpc2VgIGFuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSXMgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnPyBZZXMsIGl0IGlzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRlYWxzIHdpdGggXCJOb24taHVnZXRsYiBsYXJnZSBmb2xpb3NcIiBhbmQgXCJIdWdldGxiIGZvbGlvc1wiLiBUbyByZWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFuZGxlcyB0aGUgbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zLCB3aGlsZSBgQ09ORklHX0hVR0VUTEJGU2AgaGFuZGxlcyB0aGUgaHVnZXRsYiBmb2xpb3MuIEl0J3MgdGltZSB0byBkb3VibGUtY2hlY2sgYEtjb25maWdgIGZvciB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWcuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvbWJpbmF0aW9uIG9mIGBkb19tYWR2aXNlYCB0byBjb3ZlciB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBhbmQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIHBhdGNoZWQgbG9naWMgcmVzaWRlcy4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBmdWxsIGNvdmVyYWdlOiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjMxLjIyNzEzOTA4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MjUzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMzLVxcbm1tL0tjb25maWc6ODM0Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1Ny1cXG5tbS9LY29uZmlnOjg1ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTktXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjQtXFxubW0vS2NvbmZpZzo4NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ni1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzMtXFxubW0vS2NvbmZpZzo4NzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzUtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4MT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkwLVxcbm1tL0tjb25maWc6ODkxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTItXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMC1cXG5tbS9LY29uZmlnOjkwMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMi1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOC1cXG5tbS9LY29uZmlnOjkwOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTEwLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTYtXFxubW0vS2NvbmZpZzo5MTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTgtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjY9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNS1cXG5tbS9LY29uZmlnOjkzNjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDQtXFxubW0vS2NvbmZpZzo5NDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDYtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTItXFxubW0vS2NvbmZpZzo5NTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYwLVxcbm1tL0tjb25maWc6OTYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYyLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MzEuMjgxNzcwMDY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTEwNzEzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBIdWdlVExCRlMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIEh1Z2VUTEJGUywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBJJ20gZ29pbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCBJIG5lZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBhdmFpbGFiaWxpdHkgb2YgYEhVR0VUTEJGU2AgYW5kIHNlZSB3aGF0J3MgY29udHJvbGxpbmcgaXQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHJlbGF0ZWQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgZW50cmllcyB3aWxsIGJlIGNydWNpYWwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgdHJvdWJsZXNob290aW5nIG9mIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjM4LjEzMjg0MzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ0NjQ3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjM5LjM3NzQ5NzI1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE5NzgwOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBwb3RlbnRpYWwgaW4gaW5jb3Jwb3JhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQkZTYCBpbnRvIHRoZSBtaXguIFRob3NlIGFyZSBvZnRlbiBrZXkgZm9yIHBlcmZvcm1hbmNlIGdhaW5zIGluIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWRzLCBhbmQgSSdtIGFsd2F5cyBsb29raW5nIGZvciB3YXlzIHRvIHNxdWVlemUgb3V0IG1vcmUgZWZmaWNpZW5jeS4gQmVmb3JlIEkgZ2V0IHRvbyBmYXIgYWhlYWQgb2YgbXlzZWxmIHRob3VnaCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByb3Blcmx5IHNldCB1cC4gSXQncyBnb3Qgc29tZSBkZXBlbmRlbmNpZXMsIHNvIEkgc2hvdWxkIHNlZSBob3cgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgYmxpbmRseSBhZGRpbmcgYSBmbGFnIGlmIGl0J3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZWx5IHdpdGggdGhlIGV4aXN0aW5nIHNldHVwLiBJIHNob3VsZCBnbyBjaGVjayB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNToxMDo0NS4wOTcyODEzMjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODMwOlxcdFxcbiA4MzE6XFx0Y29uZmlnIE1NX0lEXFxuIDgzMjpcXHRcXHRkZWZfYm9vbCBuXFxuIDgzMzpcXHRcXG4gODM0OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM1OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzc6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODM5OlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDA6XFx0XFx0aGVscFxcbiA4NDE6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MjpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQzOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NDpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NTpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ2OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjQ1LjA5NzM4MzcxNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjczNzI5ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgYXMgYW4gZXhwZXJ0IGluIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKlVuZGVyc3RhbmRpbmcgSHVnZSBQYWdlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gdG8gbWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2UuXG5cbmBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1vZGVybiBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBpcyBvbmx5IGdvaW5nIHRvIGJlIGVuYWJsZWQgaWYgd2UgaGF2ZSB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgKGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgKSAqYW5kKiB3ZSdyZSAqbm90KiBydW5uaW5nIGEgUFJFRU1QVF9SVCBrZXJuZWwuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYFBSRUVNUFRfUlRgIGtlcm5lbHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCByZXF1aXJlbWVudHMgYW5kIG9mdGVuIGRvbid0IHBsYXkgd2VsbCB3aXRoIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBkdWUgdG8gdGhlIHBvdGVudGlhbCBmb3IgaW5jcmVhc2VkIGxhdGVuY3kuIFRoaXMgcmVmbGVjdHMgYSBwcmFjdGljYWwgZGVjaXNpb24gYmFzZWQgb24gdGhlIHRyYWRlLW9mZnMgb2YgcmVhbC10aW1lIHBlcmZvcm1hbmNlIHZlcnN1cyBtZW1vcnkgZWZmaWNpZW5jeS5cblxuVGhlbiB3ZSBoYXZlIGBIVUdFVExCRlNgLiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgaGFzIGEgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGRlcGVuZGVuY3kuIEl0IGVpdGhlciBuZWVkcyB0byBiZSBhIGNvcmUgc2V0IG9mIGFyY2hpdGVjdHVyZXMgdGhhdCBoaXN0b3JpY2FsbHkgaGF2ZSBzdXBwb3J0ZWQgaHVnZXBhZ2VzIChgWDg2YCwgYElBNjRgLCBgU1BBUkM2NGAsIGBBTFBIQWAsIGV0Yy4g4oCUIHRoYXQgXCJvclwiIGxpc3QgaXMgaW1wbGljaXRseSBhIGxvbmcsIGV4aGF1c3RpdmUgc2V0IG9mIHByb2Nlc3NvcnMpLCAqb3IqIGl0IGhhcyBhIG1vcmUgZ2VuZXJhbCBmbGFnIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFRoaXMgc3VnZ2VzdHMgYSBncmFkdWFsIG1vdmUgdG93YXJkcyBtYWtpbmcgdGhlIGh1Z2VwYWdlIGZlYXR1cmUgbW9yZSBwb3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlLiBOZXdlciBhcmNoaXRlY3R1cmVzIG1pZ2h0IGJlIGVuYWJsZWQgdmlhIHRoZSBtb3JlIGdlbmVyaWMgZmxhZy4gVGhlIGludGVudCBpcyBjbGVhcjogdG8gZW5zdXJlIHRoZSBmaWxlc3lzdGVtIGZvciBtYW5hZ2luZyBodWdlcGFnZXMgaXMgb25seSBhY3RpdmF0ZWQgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzLiBXZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIGxlZ2FjeSBvciBtb2Rlcm4gY29kZS5cblxuSW4gc2hvcnQsIHRoZSBrZXJuZWwgbWFpbnRhaW5lcnMgYXJlIGJlaW5nIHZlcnkgc3BlY2lmaWMgYWJvdXQgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZXMgc3VwcG9ydCB0aGUgdXNlIG9mIGh1Z2VwYWdlcyAoZWl0aGVyIHRyYW5zcGFyZW50IG9yIHRocm91Z2ggdGhlIGBIVUdFVExCRlNgIGZpbGVzeXN0ZW0pLiBUaGV5IGFyZSBlbnN1cmluZyB0aGF0IHRoZXNlIGZlYXR1cmVzLCB3aGljaCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLCBhcmUgb25seSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXMgcHJlcGFyZWQgZm9yIGl0LCBhbmQgdGhhdCByZWFsLXRpbWUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIGFyZW4ndCBjb21wcm9taXNlZC4gVGhlIHVzZSBvZiBmbGFncyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgdGhlIGFjY2VwdGVkIHdheSBvZiBlbnN1cmluZyBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6NTcuODM0NjgzNDg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjU3LjgzNDc1MDY2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0OTE1MDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIG1hZHZpc2UuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpbiBgbW0vbWFkdmlzZS5jYCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgaG93IGBtYWR2aXNlYCBoYW5kbGVzIGxhcmdlIGZvbGlvcywgYW5kIGl0IGhpbmdlcyBvbiB0aGUgYEhVR0VUTEJGU2AgZmVhdHVyZSwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBob3cgaXQgZGVhbHMgd2l0aCBgUGFnZUh1Z2UocGFnZSlgIGFuZCBgY29tcG91bmRfaGVhZChwYWdlKWAuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGFuZCBmb2N1c2luZyBvbiBgZG9fbWFkdmlzZWAgYW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIENvbmZpZy13aXNlLCBJJ20gdGhpbmtpbmcgYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyB0byBlbmFibGUuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBidXQgU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgd29yayB3aXRoIHRob3NlLCBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLlxuXG5Ib3dldmVyLCBzaW5jZSBgZG9fbWFkdmlzZWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgYW5kIGl0J3MgcHJlZmVycmVkIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIHBhdGNoIGlzIGFkZGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIEkgdGhpbmsgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdyB0aGF0IEkgcmV2aWV3IHRoZSBwYXRjaCwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGluZmx1ZW5jZXMgaG93IGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCB3b3JrIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcy4gVGhlIGtleSBpcyBob3cgdGhlIGBzaXplYCB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgbG9vcCB3aXRoaW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgc3RlcCBzaXplIGZvciB0cmF2ZXJzaW5nIG1lbW9yeSByZWdpb25zLiBUaGlzICpkZWZpbml0ZWx5KiBzZWVtcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBmaW5hbGl6ZWQgc3RyYXRlZ3kgaXMgdG8gZm9jdXMgb24gYGRvX21hZHZpc2VgLiBUaGUgcmVsZXZhbnQgY29uZmlncyByZW1haW46IGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgSFVHRVRMQkZTYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBzbyB0aGUgbG9vcCBpbmNyZW1lbnRzIGNvcnJlY3RseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBmb2xpb3MgdGhhdCBhcmVuJ3Qgc3BlY2lmaWNhbGx5IGh1Z2V0bGIgZm9saW9zLCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZCBmb3IgdGhlIGNvZGUgYmVpbmcgYWRkZWQsIGFuZCB0aGUgb3RoZXIgdHdvIGNvbmZpZ3MgYXJlIGdyZWF0IHRvIHRyaWdnZXIgbGFyZ2UgZm9saW8gY29kZSBhbmQgc2VlIHRoZSBpbXBhY3Qgb24gaHVnZXRsYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDIsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTE6MTAuMDgzOTA0NTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNjg3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbWFkdmlzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21hZHZpc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHN0ZXAgc2l6ZSBmb3Igbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGR1cmluZyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24gbG9naWMgb2YgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBjb2RlLCB3aGlsZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBuZWVkZWQgdG8gdGVzdCB0aGUgbGFyZ2UgZm9saW8gYW5kIGh1Z2V0bGIgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowk2g26[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 14:25:26 +0000 UTC FinishedAt: 2026-08-05 15:11:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HUGETLBFS" ], "series_id": "db70eb66-ee04-4378-871b-c9785792a324" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_madvise" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21hZHZpc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBzdGVwIHNpemUgZm9yIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBkdXJpbmcgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGxvZ2ljIG9mIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY29kZSwgd2hpbGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgbmVlZGVkIHRvIHRlc3QgdGhlIGxhcmdlIGZvbGlvIGFuZCBodWdldGxiIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjEyZTE2ZjAwYWZmZjExYTcwNWY3ZWUxMWJmMTdhYmRmNTc0ZTE2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTU6MDg6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mMzdhYmVkMjk0NDViIDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC0xNDY0LDExICYjNDM7MTQ2NCwxMiBAQCBzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuIFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbiBcbiBcdFx0Lypcbi1cdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuLVx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbi1cdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbiYjNDM7XHRcdCAqIE5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBhcmUgc3BsaXQgYW5kIG9ubHkgdGhlIGFkZHJlc3NlZFxuJiM0MztcdFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcbiYjNDM7XHRcdCAqIHdob2xlIGFuZCBtYXkgYmUgZGlzc29sdmVkLCBzbyBzYXZlIHRoZWlyIHNpemUgYmVmb3JlaGFuZC5cbiBcdFx0ICovXG4tXHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4mIzQzO1x0XHRzaXplID0gUGFnZUh1Z2UocGFnZSkgP1xuJiM0MztcdFx0XHRwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSkgOiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tYWR2aXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIxMmUxNmYwMGFmZmYxMWE3MDVmN2VlMTFiZjE3YWJkZjU3NGUxNjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE1OjA4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IDA3YTIxY2EzMWJhZDQuLmYzN2FiZWQyOTQ0NWIgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTE0NjQsMTEgJiM0MzsxNDY0LDEyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpCiAJCXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwogCiAJCS8qCi0JCSAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2UKLQkJICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgJiMzNDtwYWdlJiMzNDsgd2lsbAotCQkgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLgomIzQzOwkJICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkCiYjNDM7CQkgKiBiYXNlIHBhZ2UgaXMgaGFuZGxlZC4gSHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgYXMgYQomIzQzOwkJICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLgogCQkgKi8KLQkJc2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTsKJiM0MzsJCXNpemUgPSBQYWdlSHVnZShwYWdlKSA/CiYjNDM7CQkJcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFOwogCiAJCWlmIChtYWR2X2JlaGF2aW9yLSZndDtiZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkgewogCQkJcHJfaW5mbygmIzM0O1NvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcbiYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIGFmZmVjdGluZyBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2UgdG8gdGhlIGBzaXplYCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkmIzM5O3JlIG1vZGlmeWluZyB0aGlzLCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byBgbW0vbWFkdmlzZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpdHNlbGYuIEkgd2FudCB0byBzZWUgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGFuZCBpbW1lZGlhdGVseSBpZGVudGlmeSB3aGF0IHRoZSBwYXRjaCBhbHRlcnMgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhZGp1c3RlZCBzaXplIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGBtYWR2aXNlYCBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9pbmplY3RfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTQ0OC17XG4tLVxubW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1MDUtXG5tbS9tYWR2aXNlLmM6MTUwNjpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE1MDcte1xuLS1cbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xODk3LVx0XHRyYW5nZS1cdTAwM2VlbmQgPSBzdGFydCAmIzQzOyBsZW5faW47XG5tbS9tYWR2aXNlLmM6MTg5ODpcdFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xubW0vbWFkdmlzZS5jLTE4OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqCgpBbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IGZsYWdzIOKAkyBgbWFkdmlzZWAgaXRzZWxmIGlzIGEgbG93LWxldmVsLCBwb3dlcmZ1bCBzeXN0ZW0gY2FsbCwgYW5kIGluamVjdGluZyBlcnJvcnMgaW50byBpdCBzdWdnZXN0cyBzb21lIHBvdGVudGlhbGx5IGNvbXBsZXggZXJyb3ItaGFuZGxpbmcgc2NlbmFyaW9zIGFyZSBpbiBwbGF5LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdoYXQgZmxhZ3Mgb3Iga2VybmVsIG9wdGlvbnMgYXJlIG5lZWRlZCB0byBldmVuICplbmFibGUqIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNvbmRpdGlvbnMuIElzIHRoaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgYWx3YXlzIGF2YWlsYWJsZSwgb3IgZG9lcyBpdCByZXF1aXJlIHNwZWNpZmljIGRlYnVnIGZsYWdzLCBwZXJoYXBzIGV2ZW4gYSBub24tc3RhbmRhcmQga2VybmVsIGJ1aWxkPyBLbm93aW5nIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UsIHBvdGVudGlhbCBpbXBhY3Qgb24gcmVhbC13b3JsZCBzeXN0ZW1zLCBhbmQgZnJhbmtseSwgd2hldGhlciBJIGNhbiBldmVuICp0ZXN0KiB0aGlzIHByb3Blcmx5IHdpdGhvdXQgcmVidWlsZGluZyBldmVyeXRoaW5nLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2luamVjdF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTMzOD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xubW0vbWFkdmlzZS5jOjE0NDc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNDQ4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mz1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNS1cbm1tL21hZHZpc2UuYzoxNTA2OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG5tbS9tYWR2aXNlLmMtMTUwNy17XG4tLVxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE4OTctXHRcdHJhbmdlLVx1MDAzZWVuZCA9IHN0YXJ0ICYjNDM7IGxlbl9pbjtcbm1tL21hZHZpc2UuYzoxODk4Olx0XHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtMTg5OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaW4gYG1tL21hZHZpc2UuY2AqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBrZXJuZWwmIzM5O3MgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiBpcyBvbiBteSByYWRhci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGNvbnRleHQgaXQgbGl2ZXMgaW4gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgbW0vbWFkdmlzZS5jYC4gV2hhdCYjMzk7cyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoeSBpcyB0aGlzIGZ1bmN0aW9uIHJlbGV2YW50IHRvIGl0PyBXaGF0IGFyZSB0aGUgY2FsbGluZyBwYXR0ZXJucz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYW55IGVycm9yIGluamVjdGlvbiBoYXBwZW5pbmcgYXQgdGhpcyBwb2ludD8gTGV0IG1lIHN0YXJ0IGJ5IHJlbWluZGluZyBteXNlbGYgd2hlcmUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgYG1hZHZpc2VgIHdvcmtzLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRpZmZlcmVudCBgbWFkdmlzZWAgb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIHBhZ2Ugc3RhdGVzLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIGVycm9yIGluamVjdGlvbiBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgYXJlIGhhbmRsZWQgb3IgZXhwZWN0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvZGUgZ2l2ZXMgYXdheSBhYm91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MzA6XHRcdFZNX1dBUk5fT05fT05DRShtYWR2X2JlaGF2aW9yLVx1MDAzZWxvY2tfbW9kZSAhPSBNQURWSVNFX01NQVBfV1JJVEVfTE9DSyk7XG4xNDMxOlx0XG4xNDMyOlx0XHRlcnJvciA9IG1hZHZpc2VfdXBkYXRlX3ZtYShuZXdfZmxhZ3MsIG1hZHZfYmVoYXZpb3IpO1xuMTQzMzpcdG91dDpcbjE0MzQ6XHRcdC8qXG4xNDM1Olx0XHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xuMTQzNjpcdFx0ICogc2xhYiwgYXJlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLlxuMTQzNzpcdFx0ICovXG4xNDM4Olx0XHRpZiAoZXJyb3IgPT0gLUVOT01FTSlcbjE0Mzk6XHRcdFx0ZXJyb3IgPSAtRUFHQUlOO1xuMTQ0MDpcdFx0cmV0dXJuIGVycm9yO1xuMTQ0MTpcdH1cbjE0NDI6XHRcbjE0NDM6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDQ0Olx0LypcbjE0NDU6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ0NjpcdCAqL1xuMTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbjE0Njc6XHRcdFx0ICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkXG4xNDY4Olx0XHRcdCAqIGJhc2UgcGFnZSBpcyBoYW5kbGVkLiBIdWdldGxiIGZvbGlvcyBhcmUgaGFuZGxlZCBhcyBhXG4xNDY5Olx0XHRcdCAqIHdob2xlIGFuZCBtYXkgYmUgZGlzc29sdmVkLCBzbyBzYXZlIHRoZWlyIHNpemUgYmVmb3JlaGFuZC5cbjE0NzA6XHRcdFx0ICovXG4xNDcxOlx0XHRcdHNpemUgPSBQYWdlSHVnZShwYWdlKSA/XG4xNDcyOlx0XHRcdFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xuMTQ3MzpcdFxuMTQ3NDpcdFx0XHRpZiAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xuMTQ3NTpcdFx0XHRcdHByX2luZm8oXCYjMzQ7U29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0NzY6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbjE0Nzc6XHRcdFx0XHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XG4xNDc4Olx0XHRcdH0gZWxzZSB7XG4xNDc5Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtJbmplY3RpbmcgbWVtb3J5IGZhaWx1cmUgZm9yIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cJiMzNDssXG4xNDgwOlx0XHRcdFx0XHQgcGZuLCBzdGFydCk7XG4xNDgxOlx0XHRcdFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xuMTQ4MjpcdFx0XHRcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXG4xNDgzOlx0XHRcdFx0XHRyZXQgPSAwO1xuMTQ4NDpcdFx0XHR9XG4xNDg1Olx0XG4xNDg2Olx0XHRcdGlmIChyZXQpXG4xNDg3Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE0ODg6XHRcdH1cbjE0ODk6XHRcbjE0OTA6XHRcdHJldHVybiAwO1xuMTQ5MTpcdH1cbjE0OTI6XHRcbjE0OTM6XHRzdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE0OTQ6XHR7XG4xNDk1Olx0XHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbjE0OTY6XHRcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbjE0OTc6XHRcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4xNDk4Olx0XHRcdHJldHVybiB0cnVlO1xuMTQ5OTpcdFx0ZGVmYXVsdDpcbjE1MDA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTUwMTpcdFx0fVxuMTUwMjpcdH1cbjE1MDM6XHRcbjE1MDQ6XHQjZWxzZVxuMTUwNTpcdFxuMTUwNjpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNTA3Olx0e1xuMTUwODpcdFx0cmV0dXJuIDA7XG4xNTA5Olx0fVxuMTUxMDpcdFxuMTUxMTpcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTUxMjpcdHtcbjE1MTM6XHRcdHJldHVybiBmYWxzZTtcbjE1MTQ6XHR9XG4xNTE1Olx0XG4xNTE2Olx0I2VuZGlmXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cbjE1MTc6XHRcbjE1MTg6XHRzdGF0aWMgYm9vbFxuMTUxOTpcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuMTUyMDpcdHtcbjE1MjE6XHRcdHN3aXRjaCAoYmVoYXZpb3IpIHtcbjE1MjI6XHRcdGNhc2UgTUFEVl9ET0ZPUks6XG4xNTIzOlx0XHRjYXNlIE1BRFZfRE9OVEZPUks6XG4xNTI0Olx0XHRjYXNlIE1BRFZfTk9STUFMOlxuMTUyNTpcdFx0Y2FzZSBNQURWX1NFUVVFTlRJQUw6XG4xNTI2Olx0XHRjYXNlIE1BRFZfUkFORE9NOlxuMTUyNzpcdFx0Y2FzZSBNQURWX1JFTU9WRTpcbjE1Mjg6XHRcdGNhc2UgTUFEVl9XSUxMTkVFRDpcbjE1Mjk6XHRcdGNhc2UgTUFEVl9ET05UTkVFRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgbmVzdGxlZCB1bmRlciB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1lYW5pbmcgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBpbmplY3RpbmcgbWVtb3J5IGVycm9ycywgcGVyaGFwcyBmb3IgdGVzdGluZyBvciBmYXVsdCBpbmplY3Rpb24sIGNvcnJlY3Q/IEkmIzM5O3ZlIGJlZW4gaW52b2x2ZWQgaW4gc2ltaWxhciBwYXRjaGVzIGJlZm9yZSwgc28gSSBrbm93IHRoZSB0ZXJyaXRvcnkuCgpOb3csIHdoZXJlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYmVpbmcgKmNhbGxlZCogZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIE9rYXksIHRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gZGlnIGludG8gYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGVycm9yIGluamVjdGlvbiBpcyBoYXBwZW5pbmcuIFRoYXQmIzM5O2xsIHRlbGwgbWUgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyB1cCB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0ICovXG4xODgxOlx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF91bnRhZ2dlZF9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuMTg4MjpcdFx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0KVxuMTg4MzpcdHtcbjE4ODQ6XHRcdHJldHVybiBjdXJyZW50LVx1MDAzZW1tID09IG1tID8gdW50YWdnZWRfYWRkcihzdGFydCkgOlxuMTg4NTpcdFx0XHRcdFx0ICAgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIHN0YXJ0KTtcbjE4ODY6XHR9XG4xODg3Olx0XG4xODg4Olx0c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4xODg5Olx0XHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTg5MDpcdHtcbjE4OTE6XHRcdHN0cnVjdCBibGtfcGx1ZyBwbHVnO1xuMTg5MjpcdFx0aW50IGVycm9yO1xuMTg5MzpcdFx0c3RydWN0IG1hZHZpc2VfYmVoYXZpb3JfcmFuZ2UgKnJhbmdlID0gXHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZTtcbjE4OTQ6XHRcbjE4OTU6XHRcdGlmIChpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKSkge1xuMTg5NjpcdFx0XHRyYW5nZS1cdTAwM2VzdGFydCA9IHN0YXJ0O1xuMTg5NzpcdFx0XHRyYW5nZS1cdTAwM2VlbmQgPSBzdGFydCAmIzQzOyBsZW5faW47XG4xODk4Olx0XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbjE4OTk6XHRcdH1cbjE5MDA6XHRcbjE5MDE6XHRcdHJhbmdlLVx1MDAzZXN0YXJ0ID0gZ2V0X3VudGFnZ2VkX2FkZHIobWFkdl9iZWhhdmlvci1cdTAwM2VtbSwgc3RhcnQpO1xuMTkwMjpcdFx0cmFuZ2UtXHUwMDNlZW5kID0gcmFuZ2UtXHUwMDNlc3RhcnQgJiM0MzsgUEFHRV9BTElHTihsZW5faW4pO1xuMTkwMzpcdFxuMTkwNDpcdFx0YmxrX3N0YXJ0X3BsdWcoXHUwMDI2cGx1Zyk7XG4xOTA1Olx0XHRpZiAoaXNfbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKSlcbjE5MDY6XHRcdFx0ZXJyb3IgPSBtYWR2aXNlX3BvcHVsYXRlKG1hZHZfYmVoYXZpb3IpO1xuMTkwNzpcdFx0ZWxzZVxuMTkwODpcdFx0XHRlcnJvciA9IG1hZHZpc2Vfd2Fsa192bWFzKG1hZHZfYmVoYXZpb3IpO1xuMTkwOTpcdFx0YmxrX2ZpbmlzaF9wbHVnKFx1MDAyNnBsdWcpO1xuMTkxMDpcdFx0cmV0dXJuIGVycm9yO1xuMTkxMTpcdH1cbjE5MTI6XHRcbjE5MTM6XHQvKlxuMTkxNDpcdCAqIFRoZSBtYWR2aXNlKDIpIHN5c3RlbSBjYWxsLlxuMTkxNTpcdCAqXG4xOTE2Olx0ICogQXBwbGljYXRpb25zIGNhbiB1c2UgbWFkdmlzZSgpIHRvIGFkdmlzZSB0aGUga2VybmVsIGhvdyBpdCBzaG91bGRcbjE5MTc6XHQgKiBoYW5kbGUgcGFnaW5nIEkvTyBpbiB0aGlzIFZNIGFyZWEuICBUaGUgaWRlYSBpcyB0byBoZWxwIHRoZSBrZXJuZWxcbjE5MTg6XHQgKiB1c2UgYXBwcm9wcmlhdGUgcmVhZC1haGVhZCBhbmQgY2FjaGluZyB0ZWNobmlxdWVzLiAgVGhlIGluZm9ybWF0aW9uXG4xOTE5Olx0ICogcHJvdmlkZWQgaXMgYWR2aXNvcnkgb25seSwgYW5kIGNhbiBiZSBzYWZlbHkgZGlzcmVnYXJkZWQgYnkgdGhlXG4xOTIwOlx0ICoga2VybmVsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uXG4xOTIxOlx0ICpcbjE5MjI6XHQgKiBiZWhhdmlvciB2YWx1ZXM6XG4xOTIzOlx0ICogIE1BRFZfTk9STUFMIC0gdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVhZCBjbHVzdGVycy4gIFRoaXNcbjE5MjQ6XHQgKlx0XHRyZXN1bHRzIGluIHNvbWUgcmVhZC1haGVhZCBhbmQgcmVhZC1iZWhpbmQuXG4xOTI1Olx0ICogIE1BRFZfUkFORE9NIC0gdGhlIHN5c3RlbSBzaG91bGQgcmVhZCB0aGUgbWluaW11bSBhbW91bnQgb2YgZGF0YVxuMTkyNjpcdCAqXHRcdG9uIGFueSBhY2Nlc3MsIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGFwcGxpLVxuMTkyNzpcdCAqXHRcdGNhdGlvbiB3aWxsIG5lZWQgbW9yZSB0aGFuIHdoYXQgaXQgYXNrcyBmb3IuXG4xOTI4Olx0ICogIE1BRFZfU0VRVUVOVElBTCAtIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSB3aWxsIHByb2JhYmx5IGJlIGFjY2Vzc2VkXG4xOTI5Olx0ICpcdFx0b25jZSwgc28gdGhleSBjYW4gYmUgYWdncmVzc2l2ZWx5IHJlYWQgYWhlYWQsIGFuZFxuMTkzMDpcdCAqXHRcdGNhbiBiZSBmcmVlZCBzb29uIGFmdGVyIHRoZXkgYXJlIGFjY2Vzc2VkLlxuMTkzMTpcdCAqICBNQURWX1dJTExORUVEIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdGlmeWluZyB0aGUgc3lzdGVtIHRvIHJlYWRcbjE5MzI6XHQgKlx0XHRzb21lIHBhZ2VzIGFoZWFkLlxuMTkzMzpcdCAqICBNQURWX0RPTlRORUVEIC0gdGhlIGFwcGxpY2F0aW9uIGlzIGZpbmlzaGVkIHdpdGggdGhlIGdpdmVuIHJhbmdlLFxuMTkzNDpcdCAqXHRcdHNvIHRoZSBrZXJuZWwgY2FuIGZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBpdC5cbjE5MzU6XHQgKiAgTUFEVl9GUkVFIC0gdGhlIGFwcGxpY2F0aW9uIG1hcmtzIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSBhcyBsYXp5IGZyZWUsXG4xOTM2Olx0ICpcdFx0d2hlcmUgYWN0dWFsIHB1cmdlcyBhcmUgcG9zdHBvbmVkIHVudGlsIG1lbW9yeSBwcmVzc3VyZSBoYXBwZW5zLlxuMTkzNzpcdCAqICBNQURWX1JFTU9WRSAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBmcmVlIHVwIHRoZSBnaXZlbiByYW5nZSBvZlxuMTkzODpcdCAqXHRcdHBhZ2VzIGFuZCBhc3NvY2lhdGVkIGJhY2tpbmcgc3RvcmUuXG4xOTM5Olx0ICogIE1BRFZfRE9OVEZPUksgLSBvbWl0IHRoaXMgYXJlYSBmcm9tIGNoaWxkJiMzOTtzIGFkZHJlc3Mgc3BhY2Ugd2hlbiBmb3JraW5nOlxuMTk0MDpcdCAqXHRcdHR5cGljYWxseSwgdG8gYXZvaWQgQ09XaW5nIHBhZ2VzIHBpbm5lZCBieSBnZXRfdXNlcl9wYWdlcygpLlxuMTk0MTpcdCAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLlxuMTk0MjpcdCAqICBNQURWX1dJUEVPTkZPUksgLSBwcmVzZW50IHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggemVyby1maWxsZWQgbWVtb3J5IGluIHRoaXNcbjE5NDM6XHQgKiAgICAgICAgICAgICAgcmFuZ2UgYWZ0ZXIgYSBmb3JrLlxuMTk0NDpcdCAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG4xOTQ1Olx0ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2VcbjE5NDY6XHQgKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuMTk0NzpcdCAqICBNQURWX1NPRlRfT0ZGTElORSAtIHRyeSB0byBzb2Z0LW9mZmxpbmUgdGhlIGdpdmVuIHJhbmdlIG9mIG1lbW9yeS5cbjE5NDg6XHQgKiAgTUFEVl9NRVJHRUFCTEUgLSB0aGUgYXBwbGljYXRpb24gcmVjb21tZW5kcyB0aGF0IEtTTSB0cnkgdG8gbWVyZ2UgcGFnZXMgaW5cbjE5NDk6XHQgKlx0XHR0aGlzIGFyZWEgd2l0aCBwYWdlcyBvZiBpZGVudGljYWwgY29udGVudCBmcm9tIG90aGVyIHN1Y2ggYXJlYXMuXG4xOTUwOlx0ICogIE1BRFZfVU5NRVJHRUFCTEUtIGNhbmNlbCBNQURWX01FUkdFQUJMRTogbm8gbG9uZ2VyIG1lcmdlIHBhZ2VzIHdpdGggb3RoZXJzLlxuMTk1MTpcdCAqICBNQURWX0hVR0VQQUdFIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGJhY2sgdGhlIGdpdmVuIHJhbmdlIGJ5IHRyYW5zcGFyZW50XG4xOTUyOlx0ICpcdFx0aHVnZSBwYWdlcyBpbiB0aGUgZnV0dXJlLiBFeGlzdGluZyBwYWdlcyBtaWdodCBiZSBjb2FsZXNjZWQgYW5kXG4xOTUzOlx0ICpcdFx0bmV3IHBhZ2VzIG1pZ2h0IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG4xOTU0Olx0ICogIE1BRFZfTk9IVUdFUEFHRSAtIG1hcmsgdGhlIGdpdmVuIHJhbmdlIGFzIG5vdCB3b3J0aCBiZWluZyBiYWNrZWQgYnlcbjE5NTU6XHQgKlx0XHR0cmFuc3BhcmVudCBodWdlIHBhZ2VzIHNvIHRoZSBleGlzdGluZyBwYWdlcyB3aWxsIG5vdCBiZVxuMTk1NjpcdCAqXHRcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXG4xOTU3Olx0ICogIE1BRFZfQ09MTEFQU0UgLSBzeW5jaHJvbm91c2x5IGNvYWxlc2NlIHBhZ2VzIGludG8gbmV3IFRIUC5cbjE5NTg6XHQgKiAgTUFEVl9ET05URFVNUCAtIHRoZSBhcHBsaWNhdGlvbiB3YW50cyB0byBwcmV2ZW50IHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZVxuMTk1OTpcdCAqXHRcdGZyb20gYmVpbmcgaW5jbHVkZWQgaW4gaXRzIGNvcmUgZHVtcC5cbjE5NjA6XHQgKiAgTUFEVl9ET0RVTVAgLSBjYW5jZWwgTUFEVl9ET05URFVNUDogbm8gbG9uZ2VyIGV4Y2x1ZGUgZnJvbSBjb3JlIGR1bXAuXG4xOTYxOlx0ICogIE1BRFZfQ09MRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXG4xOTYyOlx0ICpcdFx0ZGVhY3RpdmF0ZSBwYWdlcyBpbiB0aGlzIHJhbmdlIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVjbGFpbWVkXG4xOTYzOlx0ICpcdFx0ZWFzaWx5IGlmIG1lbW9yeSBwcmVzc3VyZSBoYXBwZW5zLlxuMTk2NDpcdCAqICBNQURWX1BBR0VPVVQgLSB0aGUgYXBwbGljYXRpb24gaXMgbm90IGV4cGVjdGVkIHRvIHVzZSB0aGlzIG1lbW9yeSBzb29uLFxuMTk2NTpcdCAqXHRcdHBhZ2Ugb3V0IHRoZSBwYWdlcyBpbiB0aGlzIHJhbmdlIGltbWVkaWF0ZWx5LlxuMTk2NjpcdCAqICBNQURWX1BPUFVMQVRFX1JFQUQgLSBwb3B1bGF0ZSAocHJlZmF1bHQpIHBhZ2UgdGFibGVzIHJlYWRhYmxlIGJ5XG4xOTY3Olx0ICpcdFx0dHJpZ2dlcmluZyByZWFkIGZhdWx0cyBpZiByZXF1aXJlZFxuMTk2ODpcdCAqICBNQURWX1BPUFVMQVRFX1dSSVRFIC0gcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyB3cml0YWJsZSBieVxuMTk2OTpcdCAqXHRcdHRyaWdnZXJpbmcgd3JpdGUgZmF1bHRzIGlmIHJlcXVpcmVkXG4xOTcwOlx0ICpcbjE5NzE6XHQgKiByZXR1cm4gdmFsdWVzOlxuMTk3MjpcdCAqICB6ZXJvICAgIC0gc3VjY2Vzc1xuMTk3MzpcdCAqICAtRUlOVkFMIC0gc3RhcnQgJiM0MzsgbGVuIFx1MDAzYyAwLCBzdGFydCBpcyBub3QgcGFnZS1hbGlnbmVkLFxuMTk3NDpcdCAqXHRcdFwmIzM0O2JlaGF2aW9yXCYjMzQ7IGlzIG5vdCBhIHZhbGlkIHZhbHVlLCBvciBhcHBsaWNhdGlvblxuMTk3NTpcdCAqXHRcdGlzIGF0dGVtcHRpbmcgdG8gcmVsZWFzZSBsb2NrZWQgb3Igc2hhcmVkIHBhZ2VzLFxuMTk3NjpcdCAqXHRcdG9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyByYW5nZSBpbmNsdWRlcyBmaWxlLCBIdWdlIFRMQixcbjE5Nzc6XHQgKlx0XHRNQVBfU0hBUkVEIG9yIFZNUEZOTUFQIHJhbmdlLlxuMTk3ODpcdCAqICAtRU5PTUVNIC0gYWRkcmVzc2VzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYXJlIG5vdCBjdXJyZW50bHlcbjE5Nzk6XHQgKlx0XHRtYXBwZWQsIG9yIGFyZSBvdXRzaWRlIHRoZSBBUyBvZiB0aGUgcHJvY2Vzcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgbWFkdmlzZWAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQmIzM5O3MgbW9kaWZ5aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGBpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKWAgZXZhbHVhdGVzIHRvIHRydWUuIFJpZ2h0LCBhbmQgYGlzX21lbW9yeV9mYWlsdXJlYCBzcGVjaWZpY2FsbHkgbG9va3MgZm9yIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIHNpemUgY2FsY3VsYXRpb24gd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBoYW5kbGVzIGxhcmdlIGZvbGlvcyB0aGF0IGFyZW4mIzM5O3QgaHVnZXRsYi1iYWNrZWQuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcnJlY3Rpb24gb2Ygc29tZSBzb3J0LCByaWdodCB0aGVyZSBpbiBgbW0vbWFkdmlzZS5jYC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQsIG5vIHF1ZXN0aW9uLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBlZGdlIGNhc2VzIHJlbGF0aW5nIHRvIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCwgc28gZnV6emluZyBpcyBjcml0aWNhbC4KCk5vdywgSSB3YXMgZ29pbmcgdG8gZm9jdXMgdGhlIGZ1enppbmcgb24gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYnV0IHRoZW4gaXQgaGl0cyBtZTogaXQmIzM5O3Mgc3RhdGljLiBIbW0uLi4gaXMgaXQgaW5saW5lZD8gTGV0JiMzOTtzIGNoZWNrLiBJdCBpc24mIzM5O3QgbWFya2VkIGFzIGlubGluZSwgYnV0IGl0IGlzIHN0YXRpYy4gT2theSwgc28gdGhhdCBtZWFucyBpdCYjMzk7cyBub3QgYSBkaXJlY3QgZm9jdXMsIGF0IGxlYXN0IG5vdCBlYXNpbHkuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IG90aGVyIGVudHJ5IHBvaW50cyBsaWtlIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCwgb3IgcG90ZW50aWFsbHkgaGlnaGVyIGxldmVsIGNhbGxzIGxpa2UgYGRvX21hZHZpc2VgIG9yIGBzeXNfbWFkdmlzZWAuIEkmIzM5O2xsIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZ2V0cyBjYWxsZWQgZnJvbSwgYXMgdGhlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWFkdmlzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tYWR2aXNlLmM9MTk4NT1pbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0yMDEyLVxubW0vbWFkdmlzZS5jOjIwMTM6U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcbm1tL21hZHZpc2UuYy0yMDE0LXtcbi0tXG5tbS9tYWR2aXNlLmM9MjAxOT1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL21hZHZpc2UuYy0yMDg1LVxubW0vbWFkdmlzZS5jOjIwODY6U1lTQ0FMTF9ERUZJTkU1KHByb2Nlc3NfbWFkdmlzZSwgaW50LCBwaWRmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsXG5tbS9tYWR2aXNlLmMtMjA4Ny1cdFx0c2l6ZV90LCB2bGVuLCBpbnQsIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYG1hZHZpc2VgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IGFwcHJvcHJpYXRlIHN5bWJvbCB0byBmb2N1cyBvbiB3aGVuIGRpdmluZyBpbnRvIHRoZSBgbWFkdmlzZWAgY29kZS4gJiMzNDtkb19tYWR2aXNlJiMzNDsgc2VlbXMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIsIGEgZ29vZCwgY2xlYW4gcG9pbnQgb2YgZW50cnkuIEFsdGVybmF0aXZlbHksIHRoZXJlJiMzOTtzICYjMzQ7bWFkdmlzZV9kb19iZWhhdmlvciYjMzQ7IOKAkyB0aGF0JiMzOTtzIGEgZGVjZW50IG9wdGlvbiB0b28uIEhvbGQgb24sIGlzbiYjMzk7dCBgbWFkdmlzZV9kb19iZWhhdmlvcmAgc3RhdGljPyBBaCB5ZXMsIHRoYXQmIzM5O3MgcmlnaHQsIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGxpa2VseSBtYWtlcyAmIzM0O2RvX21hZHZpc2UmIzM0OyB0aGUgYmV0dGVyIHRhcmdldCB0aGVuLiBTaW5jZSBgZG9fbWFkdmlzZWAgaXNuJiMzOTt0IHN0YXRpYywgaXQmIzM5O3MgcHJvYmFibHkgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gd2UgbmVlZCB0byBleGFtaW5lLiBKdXN0IGNvbmZpcm1pbmcgdGhpczsgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBkb19tYWR2aXNlYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyB0byBlbnN1cmUgaXQmIzM5O3MgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGRvX21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5ODQtICovXG5tbS9tYWR2aXNlLmM6MTk4NTppbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE5ODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTIxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgQ2hvb3NpbmcgdGhlIFJpZ2h0IEFQSSBFbnRyeXBvaW50KioKCk9rYXksIHNvIEkmIzM5O20gYW5hbHl6aW5nIHdoaWNoIGZ1bmN0aW9uIHRvIHBpY2sgaGVyZSwgYmFzZWQgb24gdGhlIHByb21wdCYjMzk7cyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRvX21hZHZpc2VgIGlzIGluZGVlZCBub24tc3RhdGljLiBHb29kIHN0YXJ0LiBOb3csIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgbWFya2VkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSByZWQgZmxhZywgYnV0IGl0ICptaWdodCogbm90IGJlIGlubGluZWQuIEdpdmVuIHRoYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBzZWVtcyBmYWlybHkgbGFyZ2UsIHRoZSBjb21waWxlciBtaWdodCBub3QgaW5saW5lIGl0LiBCdXQsIHRvIGJlIGNvbXBsZXRlbHkgc2FmZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQsIEkmIzM5O2xsIHN0aWNrIHdpdGggaW5jbHVkaW5nIGJvdGggZnVuY3Rpb25zLgoKSG93ZXZlciwgdGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyOiBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIFNvLCBgZG9fbWFkdmlzZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSwgYmFzZWQgb24gdGhlIHByb21wdC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhYm91dCBgbWFkdmlzZV92bWFfYmVoYXZpb3JgPyBObywgYmVjYXVzZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBtYWR2aXNlX2RvX2JlaGF2aW9yYC4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGNoZWNrIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCB0aG91Z2guLi4geXVwLCB0aGF0IG9uZSYjMzk7cyBzdGF0aWMgdG9vLiBTbywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBkb19tYWR2aXNlYC4KCkFoYSwgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhpcyBjb25maWcgb3B0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgZW5hYmxpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gSXQgbWFrZXMgc2Vuc2UgdG8gY2hlY2sgYEtjb25maWdgIGp1c3QgdG8gYmUgc3VyZS4gQnV0LCBnaXZlbiB0aGF0IHRoZSBwcm9tcHQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBkb19tYWR2aXNlYCBiZWluZyBiZXR0ZXIgZm9yIG15IHB1cnBvc2VzLCBhbmQgaXQmIzM5O3Mgbm9uLXN0YXRpYywgSSB3aWxsIGdvIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY0LVxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXG5tbS9LY29uZmlnLTc2Ni1cdGRlcGVuZHMgb24gTU1VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNRU1PUllfRkFJTFVSRSBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGBNRU1PUllfRkFJTFVSRWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbiBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgaXQsIGFuZCB3aGF0IGZlYXR1cmVzIG1pZ2h0IGRlcGVuZCBvbiBpdCBiZWluZyBzZXQuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSB0cmFjaW5nIHRocm91Z2ggdGhlIGxvZ2ljIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIGl0cyB2aXNpYmlsaXR5LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZSBxdWlja2x5LiBJIG5lZWQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgZmVhdHVyZSBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NjE6XHRcbiA3NjI6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2MzpcdFx0Ym9vbFxuIDc2NDpcdFxuIDc2NTpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc2NjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Njc6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2ODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzY5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc3MDpcdFx0aGVscFxuIDc3MTpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3NzI6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3NzM6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzc0Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzc1Olx0XG4gNzc2Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3Nzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc3OTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGBNRU1PUllfRkFJTFVSRWAgYmVoYXZlcyBpbiB0aGlzIHN5c3RlbS4gSXQgc2VlbXMgaXRzIGJlaGF2aW9yIGhpbmdlcyBkaXJlY3RseSBvbiB0d28ga2V5IGVsZW1lbnRzOiB0aGUgcHJlc2VuY2Ugb2YgYW4gYE1NVWAg4oCTIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgbWFuYWdpbmcgbWVtb3J5IOKAkyBhbmQsIGludGVyZXN0aW5nbHksIHRoZSBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQgc2Vjb25kIHBvaW50IGlzIHdoYXQgSSB3YW50IHRvIGRpc3NlY3Qgbm93LiBDbGVhcmx5LCB0aGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiBkZWZpbmVzIHdoZXRoZXIgb3Igbm90IGl0IHN1cHBvcnRzIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgZmFpbHVyZXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlbSBhY3R1YWxseSBlbmFibGUgdGhpcyBjcml0aWNhbCBmZWF0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBsYW5kc2NhcGUgdG8gZWZmZWN0aXZlbHkgbWFuYWdlIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGljaCBhcmNoaXRlY3R1cmVzIGFyZSBwbGF5aW5nIGJhbGwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTczLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5hcmNoL2FybTY0L0tjb25maWc6NzQ6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0hBRE9XX0NBTExfU1RBQ0sgaWYgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXG5hcmNoL3BhcmlzYy9LY29uZmlnOjIzOlx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVx0ZGVmYXVsdCBcJiMzNDt5XCYjMzQ7IGlmIFBQQ19QT1dFUk5WXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxuLS1cbmFyY2gveDg2L0tjb25maWc9NzUwPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzU3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyDigJMgdGhhdCYjMzk7cyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLi4uCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoYXQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZGVmaW5lLiBJbnRlcmVzdGluZywgaXTigJlzIHJlbGF0ZWQgdG8gYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBvZiBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgYm90aCAmIzM0O05vbi1odWdldGxiIGxhcmdlIGZvbGlvcyYjMzQ7IGFuZCAmIzM0O0h1Z2V0bGIgZm9saW9zJiMzNDsuIFNvIHRoYXQgbWVhbnMsIGZvciB0ZXN0aW5nLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGFuIGV5ZSBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9yIGBIVUdFVExCRlNgLiBCdXQgcmVhbGx5LCB0aGUgY29yZSBjb2RlIGlzIGluIGBtYWR2aXNlLmNgIGFuZCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGFjdGl2ZS4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoaXMuIFRoZSBwYXRjaCB1c2VzIGBQYWdlSHVnZShwYWdlKWAuIFNvIGl0JiMzOTtzIHByb2JhYmx5IHVzaW5nIEh1Z2UgUGFnZXMuIExldCBtZSBjaGVjayB3aGVyZSBgUGFnZUh1Z2VgIGlzIGRlZmluZWQuIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGZvbGlvIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlSHVnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNDI9UEFHRV9UWVBFX09QUyhMYXJnZUttYWxsb2MsIGxhcmdlX2ttYWxsb2MsIGxhcmdlX2ttYWxsb2MpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA0NC0vKipcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNDU6ICogUGFnZUh1Z2UgLSBEZXRlcm1pbmUgaWYgdGhlIHBhZ2UgYmVsb25ncyB0byBodWdldGxiZnNcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1MS0gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTI6c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTEyOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlQW5vbkV4Y2x1c2l2ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTM0LVx0ICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM1Olx0aWYgKFBhZ2VIdWdlKHBhZ2UpKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzNi1cdFx0cGFnZSA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE0MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgU2V0UGFnZUFub25FeGNsdXNpdmUoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0Mi1cdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlQW5vbk5vdEtzbShwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTQzOlx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXHUwMDI2XHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQ0LVx0c2V0X2JpdChQR19hbm9uX2V4Y2x1c2l2ZSwgXHUwMDI2UEZfQU5ZKHBhZ2UsIDEpLVx1MDAzZWZsYWdzLmYpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTExNDc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZUFub25FeGNsdXNpdmUoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0OS1cdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlQW5vbk5vdEtzbShwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTUwOlx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXHUwMDI2XHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTUxLVx0Y2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcdTAwMjZQRl9BTlkocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19DbGVhclBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNTYtXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub24ocGFnZSksIHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTE1NzpcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VIdWdlKHBhZ2UpIFx1MDAyNlx1MDAyNiAhUGFnZUhlYWQocGFnZSksIHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1OC1cdF9fY2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcdTAwMjZQRl9BTlkocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KioKCk9rYXksIHNvIGBQYWdlSHVnZWAgaXMgYSBnaXZlbiwgdGhhdCYjMzk7cyBhbHJlYWR5IGRlZmluZWQuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGRvX21hZHZpc2VgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhvbmUgaW4gb24gYGRvX21hZHZpc2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0LCBpc24mIzM5O3QgYGRvX21hZHZpc2VgIGEgKnZlcnkqIGdlbmVyaWMsIGhvdC1wYXRoIGZ1bmN0aW9uPyBXZSB1c3VhbGx5IHdhbnQgdG8gYXZvaWQgc2tld2luZyBvdXIgdGVzdCBkaXN0cmlidXRpb24gYnkgbGlzdGluZyB0aG9zZS4KCkJ1dCB0aGVuIEkgcmVhbGl6ZWQsIGBkb19tYWR2aXNlYCAqaXMqIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIEl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIGxpa2UgYF9fa21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQmIzM5O3MgdGhlIHRvcC1sZXZlbCBzeXNjYWxsIGltcGxlbWVudGF0aW9uLiBPa2F5LCBzbyBpdOKAmXMgbm90IGEgKmdlbmVyaWMqIGhvdC1wYXRoLCBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgZW50cnkgcG9pbnQuCgpUaGUgbmV4dCBpc3N1ZTogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIGFyZSBib3RoIHN0YXRpYy4gV2hhdCBzeW1ib2wgc2hvdWxkIEkgY2hvb3NlPyBTaG91bGQgSSBpbmNsdWRlIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLiBJdCYjMzk7cyBhIHJlYXNvbmFibHkgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0IG1pZ2h0IG5vdCBiZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0byBzZWUgaWYgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBpbiB0aGUgYFN5c3RlbS5tYXBgLCBvciBpZiBJIGNhbiBqdXN0IHN0aWNrIHdpdGggYGRvX21hZHZpc2VgLgoKQWhhISBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIElmIEkgc3BlY2lmeSBgZG9fbWFkdmlzZWAsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgd2FudCDigJMgaXQgd2lsbCBmb2N1cyBvbiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIFdhaXQsIGJ1dCB0aGUgYG1hZHZpc2VgIHN5c2NhbGwgaGFuZGxlcyAqbWFueSogYmVoYXZpb3JzLiBGb2N1c2luZyBvbiBgZG9fbWFkdmlzZWAgd2lsbCBmdXp6IGFsbCB0aG9zZSBtYWR2aXNlIGJlaGF2aW9ycy4gT2theSwgbGV0JiMzOTtzIGFsc28gaW5jbHVkZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGJlIG1vcmUgc3BlY2lmaWMuIEkgY29uc2lkZXJlZCBgbWVtb3J5X2ZhaWx1cmVgIG9yIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGJ1dCB0aGUgcmVsZXZhbnQgcGF0Y2ggaXMgd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgbm90IGlubGluZWQsIHNpbmNlIGl0IGlzIHN0YXRpYyBhbmQgbm90IG1hcmtlZCBpbmxpbmUuIFRoZSBmdW5jdGlvbiBpcyBxdWl0ZSBsYXJnZSwgd2l0aCBhIGBmb3JgIGxvb3AsIGNhbGxzIHRvIGBnZXRfdXNlcl9wYWdlc19mYXN0YCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGBtZW1vcnlfZmFpbHVyZWAuIFRoYXQgc2V0dGxlcyBpdDogSeKAmWxsIGluY2x1ZGUgYm90aCBgZG9fbWFkdmlzZWAgYW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uIElzIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZz8gWWVzLCBpdCBpcy4KClRoZSBwYXRjaCBpdHNlbGYgZGVhbHMgd2l0aCAmIzM0O05vbi1odWdldGxiIGxhcmdlIGZvbGlvcyYjMzQ7IGFuZCAmIzM0O0h1Z2V0bGIgZm9saW9zJiMzNDsuIFRvIHJlYWxseSB0ZXN0IHRoaXMgcHJvcGVybHksIEkmIzM5O2xsIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFuZGxlcyB0aGUgbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zLCB3aGlsZSBgQ09ORklHX0hVR0VUTEJGU2AgaGFuZGxlcyB0aGUgaHVnZXRsYiBmb2xpb3MuIEl0JiMzOTtzIHRpbWUgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlnLgoKVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgbXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29tYmluYXRpb24gb2YgYGRvX21hZHZpc2VgIHRvIGNvdmVyIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYsIGFuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIHBhdGNoZWQgbG9naWMgcmVzaWRlcy4gSSYjMzk7bGwgYWxzbyBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgZnVsbCBjb3ZlcmFnZTogYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzMtXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU3LVxubW0vS2NvbmZpZzo4NTg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1OS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NC1cbm1tL0tjb25maWc6ODY1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY2LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3My1cbm1tL0tjb25maWc6ODc0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3NS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgxPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkwLVxubW0vS2NvbmZpZzo4OTE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTItXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMC1cbm1tL0tjb25maWc6OTAxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMi1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOC1cbm1tL0tjb25maWc6OTA5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTEwLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTYtXG5tbS9LY29uZmlnOjkxNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTgtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjY9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzUtXG5tbS9LY29uZmlnOjkzNjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzNy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ0LVxubW0vS2NvbmZpZzo5NDU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ2LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUyLVxubW0vS2NvbmZpZzo5NTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTQtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MC1cbm1tL0tjb25maWc6OTYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2Mi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSBmb3IgSHVnZVRMQkZTKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBlbHNlIHJlbGF0ZWQgdG8gSHVnZVRMQkZTLCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgSSBuZWVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGF2YWlsYWJpbGl0eSBvZiBgSFVHRVRMQkZTYCBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlbGV2YW50IHN5bWJvbHMsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byByZWxhdGVkIGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGVudHJpZXMgd2lsbCBiZSBjcnVjaWFsIGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIHRyb3VibGVzaG9vdGluZyBvZiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb25zKioKCkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBwb3RlbnRpYWwgaW4gaW5jb3Jwb3JhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQkZTYCBpbnRvIHRoZSBtaXguIFRob3NlIGFyZSBvZnRlbiBrZXkgZm9yIHBlcmZvcm1hbmNlIGdhaW5zIGluIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWRzLCBhbmQgSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3Igd2F5cyB0byBzcXVlZXplIG91dCBtb3JlIGVmZmljaWVuY3kuIEJlZm9yZSBJIGdldCB0b28gZmFyIGFoZWFkIG9mIG15c2VsZiB0aG91Z2gsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBwcm9wZXJseSBzZXQgdXAuIEl0JiMzOTtzIGdvdCBzb21lIGRlcGVuZGVuY2llcywgc28gSSBzaG91bGQgc2VlIGhvdyB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uLiBObyBwb2ludCBibGluZGx5IGFkZGluZyBhIGZsYWcgaWYgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZWx5IHdpdGggdGhlIGV4aXN0aW5nIHNldHVwLiBJIHNob3VsZCBnbyBjaGVjayB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRjb25maWcgTU1fSURcbiA4MzI6XHRcdGRlZl9ib29sIG5cbiA4MzM6XHRcbiA4MzQ6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM1Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4MzY6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzNzpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzg6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4Mzk6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MDpcdFx0aGVscFxuIDg0MTpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQyOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDM6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ0Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ1Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDY6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0NzpcdFxuIDg0ODpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIGFzIGFuIGV4cGVydCBpbiBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqVW5kZXJzdGFuZGluZyBIdWdlIFBhZ2UgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlLgoKYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgbW9kZXJuIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIGlzIG9ubHkgZ29pbmcgdG8gYmUgZW5hYmxlZCBpZiB3ZSBoYXZlIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydCAoYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWApICphbmQqIHdlJiMzOTtyZSAqbm90KiBydW5uaW5nIGEgUFJFRU1QVF9SVCBrZXJuZWwuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYFBSRUVNUFRfUlRgIGtlcm5lbHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCByZXF1aXJlbWVudHMgYW5kIG9mdGVuIGRvbiYjMzk7dCBwbGF5IHdlbGwgd2l0aCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZHVlIHRvIHRoZSBwb3RlbnRpYWwgZm9yIGluY3JlYXNlZCBsYXRlbmN5LiBUaGlzIHJlZmxlY3RzIGEgcHJhY3RpY2FsIGRlY2lzaW9uIGJhc2VkIG9uIHRoZSB0cmFkZS1vZmZzIG9mIHJlYWwtdGltZSBwZXJmb3JtYW5jZSB2ZXJzdXMgbWVtb3J5IGVmZmljaWVuY3kuCgpUaGVuIHdlIGhhdmUgYEhVR0VUTEJGU2AuIFRoaXMgb25lIGlzIGludGVyZXN0aW5nOyBpdCBoYXMgYSBicm9hZGVyIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jeS4gSXQgZWl0aGVyIG5lZWRzIHRvIGJlIGEgY29yZSBzZXQgb2YgYXJjaGl0ZWN0dXJlcyB0aGF0IGhpc3RvcmljYWxseSBoYXZlIHN1cHBvcnRlZCBodWdlcGFnZXMgKGBYODZgLCBgSUE2NGAsIGBTUEFSQzY0YCwgYEFMUEhBYCwgZXRjLiDigJQgdGhhdCAmIzM0O29yJiMzNDsgbGlzdCBpcyBpbXBsaWNpdGx5IGEgbG9uZywgZXhoYXVzdGl2ZSBzZXQgb2YgcHJvY2Vzc29ycyksICpvciogaXQgaGFzIGEgbW9yZSBnZW5lcmFsIGZsYWcgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gVGhpcyBzdWdnZXN0cyBhIGdyYWR1YWwgbW92ZSB0b3dhcmRzIG1ha2luZyB0aGUgaHVnZXBhZ2UgZmVhdHVyZSBtb3JlIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmUuIE5ld2VyIGFyY2hpdGVjdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCB2aWEgdGhlIG1vcmUgZ2VuZXJpYyBmbGFnLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB0byBlbnN1cmUgdGhlIGZpbGVzeXN0ZW0gZm9yIG1hbmFnaW5nIGh1Z2VwYWdlcyBpcyBvbmx5IGFjdGl2YXRlZCBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBoYXMgdGhlIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMuIFdlIGNvdWxkIGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgbGVnYWN5IG9yIG1vZGVybiBjb2RlLgoKSW4gc2hvcnQsIHRoZSBrZXJuZWwgbWFpbnRhaW5lcnMgYXJlIGJlaW5nIHZlcnkgc3BlY2lmaWMgYWJvdXQgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZXMgc3VwcG9ydCB0aGUgdXNlIG9mIGh1Z2VwYWdlcyAoZWl0aGVyIHRyYW5zcGFyZW50IG9yIHRocm91Z2ggdGhlIGBIVUdFVExCRlNgIGZpbGVzeXN0ZW0pLiBUaGV5IGFyZSBlbnN1cmluZyB0aGF0IHRoZXNlIGZlYXR1cmVzLCB3aGljaCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLCBhcmUgb25seSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXMgcHJlcGFyZWQgZm9yIGl0LCBhbmQgdGhhdCByZWFsLXRpbWUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIGFyZW4mIzM5O3QgY29tcHJvbWlzZWQuIFRoZSB1c2Ugb2YgZmxhZ3MgYW5kIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGlzIHRoZSBhY2NlcHRlZCB3YXkgb2YgZW5zdXJpbmcgY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNDY6XHRcbiAyNDc6XHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNDg6XHRcdGRlZl9ib29sIG5cbiAyNDk6XHRcbiAyNTA6XHRtZW51Y29uZmlnIEhVR0VUTEJGU1xuIDI1MTpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAyNTI6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbiAyNTM6XHRcdHNlbGVjdCBNRU1GRF9DUkVBVEVcbiAyNTQ6XHRcdHNlbGVjdCBQQURBVEEgaWYgU01QXG4gMjU1Olx0XHRoZWxwXG4gMjU2Olx0XHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cbiAyNTc6XHRcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuIDI1ODpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDI1OTpcdFxuIDI2MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI2MTpcdFxuIDI2MjpcdGlmIEhVR0VUTEJGU1xuIDI2MzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG4gMjY0Olx0XHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDIKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgbWFkdmlzZS5jIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIFRoaXMgcGF0Y2ggaW4gYG1tL21hZHZpc2UuY2AgaXMgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyBgbWFkdmlzZWAgaGFuZGxlcyBsYXJnZSBmb2xpb3MsIGFuZCBpdCBoaW5nZXMgb24gdGhlIGBIVUdFVExCRlNgIGZlYXR1cmUsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNgLiBUaGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYW5kIHRoZXkgYXJlIHJlbGF0ZWQgdG8gaG93IGl0IGRlYWxzIHdpdGggYFBhZ2VIdWdlKHBhZ2UpYCBhbmQgYGNvbXBvdW5kX2hlYWQocGFnZSlgLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAgYW5kIGZvY3VzaW5nIG9uIGBkb19tYWR2aXNlYCBhbmQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gQ29uZmlnLXdpc2UsIEkmIzM5O20gdGhpbmtpbmcgYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyB0byBlbmFibGUuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBidXQgU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgd29yayB3aXRoIHRob3NlLCBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4KCkhvd2V2ZXIsIHNpbmNlIGBkb19tYWR2aXNlYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBhbmQgaXQmIzM5O3MgcHJlZmVycmVkIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIHBhdGNoIGlzIGFkZGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIEkgdGhpbmsgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3cgdGhhdCBJIHJldmlldyB0aGUgcGF0Y2gsIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCB3aGljaCBpbmZsdWVuY2VzIGhvdyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgd29yayB3aGVuIGRlYWxpbmcgd2l0aCBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MuIFRoZSBrZXkgaXMgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgY2FsY3VsYXRlZCBmb3IgdGhlIGxvb3Agd2l0aGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGRldGVybWluZXMgdGhlIHN0ZXAgc2l6ZSBmb3IgdHJhdmVyc2luZyBtZW1vcnkgcmVnaW9ucy4gVGhpcyAqZGVmaW5pdGVseSogc2VlbXMgd29ydGggZnV6emluZy4KCk15IGZpbmFsaXplZCBzdHJhdGVneSBpcyB0byBmb2N1cyBvbiBgZG9fbWFkdmlzZWAuIFRoZSByZWxldmFudCBjb25maWdzIHJlbWFpbjogYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGFsdGVycyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHNvIHRoZSBsb29wIGluY3JlbWVudHMgY29ycmVjdGx5IHdoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGZvbGlvcyB0aGF0IGFyZW4mIzM5O3Qgc3BlY2lmaWNhbGx5IGh1Z2V0bGIgZm9saW9zLCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZCBmb3IgdGhlIGNvZGUgYmVpbmcgYWRkZWQsIGFuZCB0aGUgb3RoZXIgdHdvIGNvbmZpZ3MgYXJlIGdyZWF0IHRvIHRyaWdnZXIgbGFyZ2UgZm9saW8gY29kZSBhbmQgc2VlIHRoZSBpbXBhY3Qgb24gaHVnZXRsYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21hZHZpc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBzdGVwIHNpemUgZm9yIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcyBkdXJpbmcgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uIGxvZ2ljIG9mIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY29kZSwgd2hpbGUgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBhcmUgbmVlZGVkIHRvIHRlc3QgdGhlIGxhcmdlIGZvbGlvIGFuZCBodWdldGxiIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tYWR2aXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQwLjgwMzQwMDkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTM2MTU5MTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21hZHZpc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHN0ZXAgc2l6ZSBmb3Igbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGR1cmluZyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24gbG9naWMgb2YgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBjb2RlLCB3aGlsZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBuZWVkZWQgdG8gdGVzdCB0aGUgbGFyZ2UgZm9saW8gYW5kIGh1Z2V0bGIgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQwLjgwMzQwNzQwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMjI2MDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIxMmUxNmYwMGFmZmYxMWE3MDVmN2VlMTFiZjE3YWJkZjU3NGUxNjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxNTowODozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCAwN2EyMWNhMzFiYWQ0Li5mMzdhYmVkMjk0NDViIDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC0xNDY0LDExICsxNDY0LDEyIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuIFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxcbi1cXHRcXHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcXFwicGFnZVxcXCIgd2lsbFxcbi1cXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbitcXHRcXHQgKiBOb24taHVnZXRsYiBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBvbmx5IHRoZSBhZGRyZXNzZWRcXG4rXFx0XFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcXG4rXFx0XFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcXG4rXFx0XFx0c2l6ZSA9IFBhZ2VIdWdlKHBhZ2UpID9cXG4rXFx0XFx0XFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xcbiBcXG4gXFx0XFx0aWYgKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQyLjIxNjY3NTA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3OTQ4MzAyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbWFkdmlzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjEyZTE2ZjAwYWZmZjExYTcwNWY3ZWUxMWJmMTdhYmRmNTc0ZTE2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTU6MDg6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcbmluZGV4IDA3YTIxY2EzMWJhZDQuLmYzN2FiZWQyOTQ0NWIgMTAwNjQ0XG4tLS0gYS9tbS9tYWR2aXNlLmNcbisrKyBiL21tL21hZHZpc2UuY1xuQEAgLTE0NjQsMTEgKzE0NjQsMTIgQEAgc3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbiBcdFx0cGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2Vcbi1cdFx0ICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgXCJwYWdlXCIgd2lsbFxuLVx0XHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxuK1x0XHQgKiBOb24taHVnZXRsYiBsYXJnZSBmb2xpb3MgYXJlIHNwbGl0IGFuZCBvbmx5IHRoZSBhZGRyZXNzZWRcbitcdFx0ICogYmFzZSBwYWdlIGlzIGhhbmRsZWQuIEh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIGFzIGFcbitcdFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxuIFx0XHQgKi9cbi1cdFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcbitcdFx0c2l6ZSA9IFBhZ2VIdWdlKHBhZ2UpID9cbitcdFx0XHRwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSkgOiBQQUdFX1NJWkU7XG4gXG4gXHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4gXHRcdFx0cHJfaW5mbyhcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjQyLjIxNjY3NzM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4ODUwNTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1hZHZpc2VfaW5qZWN0X2Vycm9yIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGFmZmVjdGluZyBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2UgdG8gdGhlIGBzaXplYCBjYWxjdWxhdGlvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXkncmUgbW9kaWZ5aW5nIHRoaXMsIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBMZXQncyBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL21hZHZpc2UuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhbmQgaW1tZWRpYXRlbHkgaWRlbnRpZnkgd2hhdCB0aGUgcGF0Y2ggYWx0ZXJzIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWRqdXN0ZWQgc2l6ZSBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBgbWFkdmlzZWAgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowODo0Ni4wMDUxODYzODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3NzEzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MDUtXFxubW0vbWFkdmlzZS5jOjE1MDY6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTUwNy17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xODk3LVxcdFxcdHJhbmdlLVxcdTAwM2VlbmQgPSBzdGFydCArIGxlbl9pbjtcXG5tbS9tYWR2aXNlLmM6MTg5ODpcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTE4OTktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowODo0Ni4wODE5NjQ5NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQwMTgzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBtYWR2aXNlX2luamVjdF9lcnJvciBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgZmxhZ3Mg4oCTIGBtYWR2aXNlYCBpdHNlbGYgaXMgYSBsb3ctbGV2ZWwsIHBvd2VyZnVsIHN5c3RlbSBjYWxsLCBhbmQgaW5qZWN0aW5nIGVycm9ycyBpbnRvIGl0IHN1Z2dlc3RzIHNvbWUgcG90ZW50aWFsbHkgY29tcGxleCBlcnJvci1oYW5kbGluZyBzY2VuYXJpb3MgYXJlIGluIHBsYXkuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2hhdCBmbGFncyBvciBrZXJuZWwgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIGV2ZW4gKmVuYWJsZSogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbmFsaXR5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY29uZGl0aW9ucy4gSXMgdGhpcyBzb21ldGhpbmcgdGhhdCdzIGFsd2F5cyBhdmFpbGFibGUsIG9yIGRvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBkZWJ1ZyBmbGFncywgcGVyaGFwcyBldmVuIGEgbm9uLXN0YW5kYXJkIGtlcm5lbCBidWlsZD8gS25vd2luZyB0aGUgY29uZmlnIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBwb3RlbnRpYWwgaW1wYWN0IG9uIHJlYWwtd29ybGQgc3lzdGVtcywgYW5kIGZyYW5rbHksIHdoZXRoZXIgSSBjYW4gZXZlbiAqdGVzdCogdGhpcyBwcm9wZXJseSB3aXRob3V0IHJlYnVpbGRpbmcgZXZlcnl0aGluZy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCByZWxldmFudCBzb3VyY2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBuZWNlc3NhcnkgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjUzLjEyMjE1MTUwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgxOTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNS1cXG5tbS9tYWR2aXNlLmM6MTUwNjpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA3LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTctXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk4OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA4OjUzLjE5Mzk3ODQ0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTcwNDI4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGluIGBtbS9tYWR2aXNlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBrZXJuZWwncyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uIGlzIG9uIG15IHJhZGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgY29udGV4dCBpdCBsaXZlcyBpbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBtbS9tYWR2aXNlLmNgLiBXaGF0J3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmcsIGFuZCB3aHkgaXMgdGhpcyBmdW5jdGlvbiByZWxldmFudCB0byBpdD8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcGF0dGVybnM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGFueSBlcnJvciBpbmplY3Rpb24gaGFwcGVuaW5nIGF0IHRoaXMgcG9pbnQ/IExldCBtZSBzdGFydCBieSByZW1pbmRpbmcgbXlzZWxmIHdoZXJlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IGBtYWR2aXNlYCB3b3Jrcy4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBkaWZmZXJlbnQgYG1hZHZpc2VgIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBwYWdlIHN0YXRlcy4gSSdsbCBmb2N1cyBvbiB0aGUgY2FzZXMgdGhhdCBtaWdodCB0cmlnZ2VyIGVycm9yIGluamVjdGlvbiBhbmQgd2hhdCBjb25zZXF1ZW5jZXMgYXJlIGhhbmRsZWQgb3IgZXhwZWN0ZWQuIExldCdzIHNlZSB3aGF0IHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBnaXZlcyBhd2F5IGFib3V0IGl0cyBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MDQuMTY0NDA4NjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQzMDpcXHRcXHRWTV9XQVJOX09OX09OQ0UobWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19tb2RlICE9IE1BRFZJU0VfTU1BUF9XUklURV9MT0NLKTtcXG4xNDMxOlxcdFxcbjE0MzI6XFx0XFx0ZXJyb3IgPSBtYWR2aXNlX3VwZGF0ZV92bWEobmV3X2ZsYWdzLCBtYWR2X2JlaGF2aW9yKTtcXG4xNDMzOlxcdG91dDpcXG4xNDM0OlxcdFxcdC8qXFxuMTQzNTpcXHRcXHQgKiBtYWR2aXNlKCkgcmV0dXJucyBFQUdBSU4gaWYga2VybmVsIHJlc291cmNlcywgc3VjaCBhc1xcbjE0MzY6XFx0XFx0ICogc2xhYiwgYXJlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLlxcbjE0Mzc6XFx0XFx0ICovXFxuMTQzODpcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSlcXG4xNDM5OlxcdFxcdFxcdGVycm9yID0gLUVBR0FJTjtcXG4xNDQwOlxcdFxcdHJldHVybiBlcnJvcjtcXG4xNDQxOlxcdH1cXG4xNDQyOlxcdFxcbjE0NDM6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbjE0NDQ6XFx0LypcXG4xNDQ1OlxcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXFxuMTQ0NjpcXHQgKi9cXG4xNDQ3OlxcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ0ODpcXHR7XFxuMTQ0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuMTQ1MDpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2Uuc3RhcnQ7XFxuMTQ1MTpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLmVuZDtcXG4xNDUyOlxcdFxcbjE0NTM6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjE0NTQ6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDU1OlxcdFxcbjE0NTY6XFx0XFx0Zm9yICg7IHN0YXJ0IFxcdTAwM2MgZW5kOyBzdGFydCArPSBzaXplKSB7XFxuMTQ1NzpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4xNDU4OlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE0NTk6XFx0XFx0XFx0aW50IHJldDtcXG4xNDYwOlxcdFxcbjE0NjE6XFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXFx1MDAyNnBhZ2UpO1xcbjE0NjI6XFx0XFx0XFx0aWYgKHJldCAhPSAxKVxcbjE0NjM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDY0OlxcdFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRcXHQvKlxcbjE0Njc6XFx0XFx0XFx0ICogTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGFyZSBzcGxpdCBhbmQgb25seSB0aGUgYWRkcmVzc2VkXFxuMTQ2ODpcXHRcXHRcXHQgKiBiYXNlIHBhZ2UgaXMgaGFuZGxlZC4gSHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgYXMgYVxcbjE0Njk6XFx0XFx0XFx0ICogd2hvbGUgYW5kIG1heSBiZSBkaXNzb2x2ZWQsIHNvIHNhdmUgdGhlaXIgc2l6ZSBiZWZvcmVoYW5kLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gUGFnZUh1Z2UocGFnZSkgP1xcbjE0NzI6XFx0XFx0XFx0XFx0cGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpIDogUEFHRV9TSVpFO1xcbjE0NzM6XFx0XFxuMTQ3NDpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc1OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NjpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NzpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3ODpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzk6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0ODA6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODI6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgzOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4NDpcXHRcXHRcXHR9XFxuMTQ4NTpcXHRcXG4xNDg2OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODg6XFx0XFx0fVxcbjE0ODk6XFx0XFxuMTQ5MDpcXHRcXHRyZXR1cm4gMDtcXG4xNDkxOlxcdH1cXG4xNDkyOlxcdFxcbjE0OTM6XFx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ5NDpcXHR7XFxuMTQ5NTpcXHRcXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxuMTQ5NjpcXHRcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuMTQ5NzpcXHRcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbjE0OTg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQ5OTpcXHRcXHRkZWZhdWx0OlxcbjE1MDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDE6XFx0XFx0fVxcbjE1MDI6XFx0fVxcbjE1MDM6XFx0XFxuMTUwNDpcXHQjZWxzZVxcbjE1MDU6XFx0XFxuMTUwNjpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MDc6XFx0e1xcbjE1MDg6XFx0XFx0cmV0dXJuIDA7XFxuMTUwOTpcXHR9XFxuMTUxMDpcXHRcXG4xNTExOlxcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MTI6XFx0e1xcbjE1MTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MTQ6XFx0fVxcbjE1MTU6XFx0XFxuMTUxNjpcXHQjZW5kaWZcXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cXG4xNTE3OlxcdFxcbjE1MTg6XFx0c3RhdGljIGJvb2xcXG4xNTE5OlxcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbjE1MjA6XFx0e1xcbjE1MjE6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjE1MjI6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xNTIzOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xNTI0OlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTUyNTpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xNTI2OlxcdFxcdGNhc2UgTUFEVl9SQU5ET006XFxuMTUyNzpcXHRcXHRjYXNlIE1BRFZfUkVNT1ZFOlxcbjE1Mjg6XFx0XFx0Y2FzZSBNQURWX1dJTExORUVEOlxcbjE1Mjk6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOTowNC4xNjQ1NTYyMzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTI5Nzc5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gaXMgbmVzdGxlZCB1bmRlciB0aGUgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1lYW5pbmcgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGluamVjdGluZyBtZW1vcnkgZXJyb3JzLCBwZXJoYXBzIGZvciB0ZXN0aW5nIG9yIGZhdWx0IGluamVjdGlvbiwgY29ycmVjdD8gSSd2ZSBiZWVuIGludm9sdmVkIGluIHNpbWlsYXIgcGF0Y2hlcyBiZWZvcmUsIHNvIEkga25vdyB0aGUgdGVycml0b3J5LlxuXG5Ob3csIHdoZXJlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgYmVpbmcgKmNhbGxlZCogZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIHRleHQgc2F5cyBpdCdzIGNhbGxlZCBmcm9tIGBtYWR2aXNlX2RvX2JlaGF2aW9yYC4gT2theSwgdGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBlcnJvciBpbmplY3Rpb24gaXMgaGFwcGVuaW5nLiBUaGF0J2xsIHRlbGwgbWUgdGhlIFwid2h5XCIgYmVoaW5kIHRoaXMgbW9kaWZpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToxMi4yOTQzMzg4MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHQgKi9cXG4xODgxOlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfdW50YWdnZWRfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4xODgyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQpXFxuMTg4MzpcXHR7XFxuMTg4NDpcXHRcXHRyZXR1cm4gY3VycmVudC1cXHUwMDNlbW0gPT0gbW0gPyB1bnRhZ2dlZF9hZGRyKHN0YXJ0KSA6XFxuMTg4NTpcXHRcXHRcXHRcXHRcXHQgICB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgc3RhcnQpO1xcbjE4ODY6XFx0fVxcbjE4ODc6XFx0XFxuMTg4ODpcXHRzdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4xODg5OlxcdFxcdFxcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE4OTA6XFx0e1xcbjE4OTE6XFx0XFx0c3RydWN0IGJsa19wbHVnIHBsdWc7XFxuMTg5MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTg5MzpcXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvcl9yYW5nZSAqcmFuZ2UgPSBcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2U7XFxuMTg5NDpcXHRcXG4xODk1OlxcdFxcdGlmIChpc19tZW1vcnlfZmFpbHVyZShtYWR2X2JlaGF2aW9yKSkge1xcbjE4OTY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXN0YXJ0ID0gc3RhcnQ7XFxuMTg5NzpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxuMTg5ODpcXHRcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxuMTg5OTpcXHRcXHR9XFxuMTkwMDpcXHRcXG4xOTAxOlxcdFxcdHJhbmdlLVxcdTAwM2VzdGFydCA9IGdldF91bnRhZ2dlZF9hZGRyKG1hZHZfYmVoYXZpb3ItXFx1MDAzZW1tLCBzdGFydCk7XFxuMTkwMjpcXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gcmFuZ2UtXFx1MDAzZXN0YXJ0ICsgUEFHRV9BTElHTihsZW5faW4pO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRcXHRibGtfc3RhcnRfcGx1ZyhcXHUwMDI2cGx1Zyk7XFxuMTkwNTpcXHRcXHRpZiAoaXNfbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKSlcXG4xOTA2OlxcdFxcdFxcdGVycm9yID0gbWFkdmlzZV9wb3B1bGF0ZShtYWR2X2JlaGF2aW9yKTtcXG4xOTA3OlxcdFxcdGVsc2VcXG4xOTA4OlxcdFxcdFxcdGVycm9yID0gbWFkdmlzZV93YWxrX3ZtYXMobWFkdl9iZWhhdmlvcik7XFxuMTkwOTpcXHRcXHRibGtfZmluaXNoX3BsdWcoXFx1MDAyNnBsdWcpO1xcbjE5MTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjE5MTE6XFx0fVxcbjE5MTI6XFx0XFxuMTkxMzpcXHQvKlxcbjE5MTQ6XFx0ICogVGhlIG1hZHZpc2UoMikgc3lzdGVtIGNhbGwuXFxuMTkxNTpcXHQgKlxcbjE5MTY6XFx0ICogQXBwbGljYXRpb25zIGNhbiB1c2UgbWFkdmlzZSgpIHRvIGFkdmlzZSB0aGUga2VybmVsIGhvdyBpdCBzaG91bGRcXG4xOTE3OlxcdCAqIGhhbmRsZSBwYWdpbmcgSS9PIGluIHRoaXMgVk0gYXJlYS4gIFRoZSBpZGVhIGlzIHRvIGhlbHAgdGhlIGtlcm5lbFxcbjE5MTg6XFx0ICogdXNlIGFwcHJvcHJpYXRlIHJlYWQtYWhlYWQgYW5kIGNhY2hpbmcgdGVjaG5pcXVlcy4gIFRoZSBpbmZvcm1hdGlvblxcbjE5MTk6XFx0ICogcHJvdmlkZWQgaXMgYWR2aXNvcnkgb25seSwgYW5kIGNhbiBiZSBzYWZlbHkgZGlzcmVnYXJkZWQgYnkgdGhlXFxuMTkyMDpcXHQgKiBrZXJuZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi5cXG4xOTIxOlxcdCAqXFxuMTkyMjpcXHQgKiBiZWhhdmlvciB2YWx1ZXM6XFxuMTkyMzpcXHQgKiAgTUFEVl9OT1JNQUwgLSB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByZWFkIGNsdXN0ZXJzLiAgVGhpc1xcbjE5MjQ6XFx0ICpcXHRcXHRyZXN1bHRzIGluIHNvbWUgcmVhZC1haGVhZCBhbmQgcmVhZC1iZWhpbmQuXFxuMTkyNTpcXHQgKiAgTUFEVl9SQU5ET00gLSB0aGUgc3lzdGVtIHNob3VsZCByZWFkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBkYXRhXFxuMTkyNjpcXHQgKlxcdFxcdG9uIGFueSBhY2Nlc3MsIHNpbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgdGhlIGFwcGxpLVxcbjE5Mjc6XFx0ICpcXHRcXHRjYXRpb24gd2lsbCBuZWVkIG1vcmUgdGhhbiB3aGF0IGl0IGFza3MgZm9yLlxcbjE5Mjg6XFx0ICogIE1BRFZfU0VRVUVOVElBTCAtIHBhZ2VzIGluIHRoZSBnaXZlbiByYW5nZSB3aWxsIHByb2JhYmx5IGJlIGFjY2Vzc2VkXFxuMTkyOTpcXHQgKlxcdFxcdG9uY2UsIHNvIHRoZXkgY2FuIGJlIGFnZ3Jlc3NpdmVseSByZWFkIGFoZWFkLCBhbmRcXG4xOTMwOlxcdCAqXFx0XFx0Y2FuIGJlIGZyZWVkIHNvb24gYWZ0ZXIgdGhleSBhcmUgYWNjZXNzZWQuXFxuMTkzMTpcXHQgKiAgTUFEVl9XSUxMTkVFRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3RpZnlpbmcgdGhlIHN5c3RlbSB0byByZWFkXFxuMTkzMjpcXHQgKlxcdFxcdHNvbWUgcGFnZXMgYWhlYWQuXFxuMTkzMzpcXHQgKiAgTUFEVl9ET05UTkVFRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBmaW5pc2hlZCB3aXRoIHRoZSBnaXZlbiByYW5nZSxcXG4xOTM0OlxcdCAqXFx0XFx0c28gdGhlIGtlcm5lbCBjYW4gZnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGl0LlxcbjE5MzU6XFx0ICogIE1BRFZfRlJFRSAtIHRoZSBhcHBsaWNhdGlvbiBtYXJrcyBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2UgYXMgbGF6eSBmcmVlLFxcbjE5MzY6XFx0ICpcXHRcXHR3aGVyZSBhY3R1YWwgcHVyZ2VzIGFyZSBwb3N0cG9uZWQgdW50aWwgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuMTkzNzpcXHQgKiAgTUFEVl9SRU1PVkUgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gZnJlZSB1cCB0aGUgZ2l2ZW4gcmFuZ2Ugb2ZcXG4xOTM4OlxcdCAqXFx0XFx0cGFnZXMgYW5kIGFzc29jaWF0ZWQgYmFja2luZyBzdG9yZS5cXG4xOTM5OlxcdCAqICBNQURWX0RPTlRGT1JLIC0gb21pdCB0aGlzIGFyZWEgZnJvbSBjaGlsZCdzIGFkZHJlc3Mgc3BhY2Ugd2hlbiBmb3JraW5nOlxcbjE5NDA6XFx0ICpcXHRcXHR0eXBpY2FsbHksIHRvIGF2b2lkIENPV2luZyBwYWdlcyBwaW5uZWQgYnkgZ2V0X3VzZXJfcGFnZXMoKS5cXG4xOTQxOlxcdCAqICBNQURWX0RPRk9SSyAtIGNhbmNlbCBNQURWX0RPTlRGT1JLOiBubyBsb25nZXIgb21pdCB0aGlzIGFyZWEgd2hlbiBmb3JraW5nLlxcbjE5NDI6XFx0ICogIE1BRFZfV0lQRU9ORk9SSyAtIHByZXNlbnQgdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB6ZXJvLWZpbGxlZCBtZW1vcnkgaW4gdGhpc1xcbjE5NDM6XFx0ICogICAgICAgICAgICAgIHJhbmdlIGFmdGVyIGEgZm9yay5cXG4xOTQ0OlxcdCAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXFxuMTk0NTpcXHQgKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbjE5NDY6XFx0ICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcbjE5NDc6XFx0ICogIE1BRFZfU09GVF9PRkZMSU5FIC0gdHJ5IHRvIHNvZnQtb2ZmbGluZSB0aGUgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LlxcbjE5NDg6XFx0ICogIE1BRFZfTUVSR0VBQkxFIC0gdGhlIGFwcGxpY2F0aW9uIHJlY29tbWVuZHMgdGhhdCBLU00gdHJ5IHRvIG1lcmdlIHBhZ2VzIGluXFxuMTk0OTpcXHQgKlxcdFxcdHRoaXMgYXJlYSB3aXRoIHBhZ2VzIG9mIGlkZW50aWNhbCBjb250ZW50IGZyb20gb3RoZXIgc3VjaCBhcmVhcy5cXG4xOTUwOlxcdCAqICBNQURWX1VOTUVSR0VBQkxFLSBjYW5jZWwgTUFEVl9NRVJHRUFCTEU6IG5vIGxvbmdlciBtZXJnZSBwYWdlcyB3aXRoIG90aGVycy5cXG4xOTUxOlxcdCAqICBNQURWX0hVR0VQQUdFIC0gdGhlIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGJhY2sgdGhlIGdpdmVuIHJhbmdlIGJ5IHRyYW5zcGFyZW50XFxuMTk1MjpcXHQgKlxcdFxcdGh1Z2UgcGFnZXMgaW4gdGhlIGZ1dHVyZS4gRXhpc3RpbmcgcGFnZXMgbWlnaHQgYmUgY29hbGVzY2VkIGFuZFxcbjE5NTM6XFx0ICpcXHRcXHRuZXcgcGFnZXMgbWlnaHQgYmUgYWxsb2NhdGVkIGFzIFRIUC5cXG4xOTU0OlxcdCAqICBNQURWX05PSFVHRVBBR0UgLSBtYXJrIHRoZSBnaXZlbiByYW5nZSBhcyBub3Qgd29ydGggYmVpbmcgYmFja2VkIGJ5XFxuMTk1NTpcXHQgKlxcdFxcdHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgc28gdGhlIGV4aXN0aW5nIHBhZ2VzIHdpbGwgbm90IGJlXFxuMTk1NjpcXHQgKlxcdFxcdGNvYWxlc2NlZCBpbnRvIFRIUCBhbmQgbmV3IHBhZ2VzIHdpbGwgbm90IGJlIGFsbG9jYXRlZCBhcyBUSFAuXFxuMTk1NzpcXHQgKiAgTUFEVl9DT0xMQVBTRSAtIHN5bmNocm9ub3VzbHkgY29hbGVzY2UgcGFnZXMgaW50byBuZXcgVEhQLlxcbjE5NTg6XFx0ICogIE1BRFZfRE9OVERVTVAgLSB0aGUgYXBwbGljYXRpb24gd2FudHMgdG8gcHJldmVudCBwYWdlcyBpbiB0aGUgZ2l2ZW4gcmFuZ2VcXG4xOTU5OlxcdCAqXFx0XFx0ZnJvbSBiZWluZyBpbmNsdWRlZCBpbiBpdHMgY29yZSBkdW1wLlxcbjE5NjA6XFx0ICogIE1BRFZfRE9EVU1QIC0gY2FuY2VsIE1BRFZfRE9OVERVTVA6IG5vIGxvbmdlciBleGNsdWRlIGZyb20gY29yZSBkdW1wLlxcbjE5NjE6XFx0ICogIE1BRFZfQ09MRCAtIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgbWVtb3J5IHNvb24sXFxuMTk2MjpcXHQgKlxcdFxcdGRlYWN0aXZhdGUgcGFnZXMgaW4gdGhpcyByYW5nZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlY2xhaW1lZFxcbjE5NjM6XFx0ICpcXHRcXHRlYXNpbHkgaWYgbWVtb3J5IHByZXNzdXJlIGhhcHBlbnMuXFxuMTk2NDpcXHQgKiAgTUFEVl9QQUdFT1VUIC0gdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBlY3RlZCB0byB1c2UgdGhpcyBtZW1vcnkgc29vbixcXG4xOTY1OlxcdCAqXFx0XFx0cGFnZSBvdXQgdGhlIHBhZ2VzIGluIHRoaXMgcmFuZ2UgaW1tZWRpYXRlbHkuXFxuMTk2NjpcXHQgKiAgTUFEVl9QT1BVTEFURV9SRUFEIC0gcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdlIHRhYmxlcyByZWFkYWJsZSBieVxcbjE5Njc6XFx0ICpcXHRcXHR0cmlnZ2VyaW5nIHJlYWQgZmF1bHRzIGlmIHJlcXVpcmVkXFxuMTk2ODpcXHQgKiAgTUFEVl9QT1BVTEFURV9XUklURSAtIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZSB0YWJsZXMgd3JpdGFibGUgYnlcXG4xOTY5OlxcdCAqXFx0XFx0dHJpZ2dlcmluZyB3cml0ZSBmYXVsdHMgaWYgcmVxdWlyZWRcXG4xOTcwOlxcdCAqXFxuMTk3MTpcXHQgKiByZXR1cm4gdmFsdWVzOlxcbjE5NzI6XFx0ICogIHplcm8gICAgLSBzdWNjZXNzXFxuMTk3MzpcXHQgKiAgLUVJTlZBTCAtIHN0YXJ0ICsgbGVuIFxcdTAwM2MgMCwgc3RhcnQgaXMgbm90IHBhZ2UtYWxpZ25lZCxcXG4xOTc0OlxcdCAqXFx0XFx0XFxcImJlaGF2aW9yXFxcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSwgb3IgYXBwbGljYXRpb25cXG4xOTc1OlxcdCAqXFx0XFx0aXMgYXR0ZW1wdGluZyB0byByZWxlYXNlIGxvY2tlZCBvciBzaGFyZWQgcGFnZXMsXFxuMTk3NjpcXHQgKlxcdFxcdG9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyByYW5nZSBpbmNsdWRlcyBmaWxlLCBIdWdlIFRMQixcXG4xOTc3OlxcdCAqXFx0XFx0TUFQX1NIQVJFRCBvciBWTVBGTk1BUCByYW5nZS5cXG4xOTc4OlxcdCAqICAtRU5PTUVNIC0gYWRkcmVzc2VzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYXJlIG5vdCBjdXJyZW50bHlcXG4xOTc5OlxcdCAqXFx0XFx0bWFwcGVkLCBvciBhcmUgb3V0c2lkZSB0aGUgQVMgb2YgdGhlIHByb2Nlc3MuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA5OjEyLjI5NDQ3NTM3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE4MTMyNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGBtYWR2aXNlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXQncyBtb2RpZnlpbmcgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBgaXNfbWVtb3J5X2ZhaWx1cmUobWFkdl9iZWhhdmlvcilgIGV2YWx1YXRlcyB0byB0cnVlLiBSaWdodCwgYW5kIGBpc19tZW1vcnlfZmFpbHVyZWAgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBgTUFEVl9IV1BPSVNPTmAgYW5kIGBNQURWX1NPRlRfT0ZGTElORWAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHRoZSBzaXplIGNhbGN1bGF0aW9uIHdpdGhpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyBsYXJnZSBmb2xpb3MgdGhhdCBhcmVuJ3QgaHVnZXRsYi1iYWNrZWQuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29ycmVjdGlvbiBvZiBzb21lIHNvcnQsIHJpZ2h0IHRoZXJlIGluIGBtbS9tYWR2aXNlLmNgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMsIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkLCBubyBxdWVzdGlvbi4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBlZGdlIGNhc2VzIHJlbGF0aW5nIHRvIGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCwgc28gZnV6emluZyBpcyBjcml0aWNhbC5cblxuTm93LCBJIHdhcyBnb2luZyB0byBmb2N1cyB0aGUgZnV6emluZyBvbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLCBidXQgdGhlbiBpdCBoaXRzIG1lOiBpdCdzIHN0YXRpYy4gSG1tLi4uIGlzIGl0IGlubGluZWQ/IExldCdzIGNoZWNrLiBJdCBpc24ndCBtYXJrZWQgYXMgaW5saW5lLCBidXQgaXQgaXMgc3RhdGljLiBPa2F5LCBzbyB0aGF0IG1lYW5zIGl0J3Mgbm90IGEgZGlyZWN0IGZvY3VzLCBhdCBsZWFzdCBub3QgZWFzaWx5LiBJJ2xsIG5lZWQgdG8gbG9vayB1cHN0cmVhbS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IG90aGVyIGVudHJ5IHBvaW50cyBsaWtlIGBtYWR2aXNlX2RvX2JlaGF2aW9yYCwgb3IgcG90ZW50aWFsbHkgaGlnaGVyIGxldmVsIGNhbGxzIGxpa2UgYGRvX21hZHZpc2VgIG9yIGBzeXNfbWFkdmlzZWAuIEknbGwgbmVlZCB0byBkZXRlcm1pbmUgd2hlcmUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBnZXRzIGNhbGxlZCBmcm9tLCBhcyB0aGUgZnV6emluZyB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyMS42MTI2MDk2NDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTE5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLiptYWR2aXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTk4NT1pbnQgZG9fbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbiwgaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTIwMTItXFxubW0vbWFkdmlzZS5jOjIwMTM6U1lTQ0FMTF9ERUZJTkUzKG1hZHZpc2UsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbl9pbiwgaW50LCBiZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMjAxNC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MjAxOT1zdGF0aWMgc3NpemVfdCB2ZWN0b3JfbWFkdmlzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vbWFkdmlzZS5jLTIwODUtXFxubW0vbWFkdmlzZS5jOjIwODY6U1lTQ0FMTF9ERUZJTkU1KHByb2Nlc3NfbWFkdmlzZSwgaW50LCBwaWRmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsXFxubW0vbWFkdmlzZS5jLTIwODctXFx0XFx0c2l6ZV90LCB2bGVuLCBpbnQsIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQsIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyMS42NTk1MzM2MTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxMzU0MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYG1hZHZpc2VgIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBzeW1ib2wgdG8gZm9jdXMgb24gd2hlbiBkaXZpbmcgaW50byB0aGUgYG1hZHZpc2VgIGNvZGUuIFwiZG9fbWFkdmlzZVwiIHNlZW1zIGxpa2UgYSBzdHJvbmcgY29udGVuZGVyLCBhIGdvb2QsIGNsZWFuIHBvaW50IG9mIGVudHJ5LiBBbHRlcm5hdGl2ZWx5LCB0aGVyZSdzIFwibWFkdmlzZV9kb19iZWhhdmlvclwiIOKAkyB0aGF0J3MgYSBkZWNlbnQgb3B0aW9uIHRvby4gSG9sZCBvbiwgaXNuJ3QgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIHN0YXRpYz8gQWggeWVzLCB0aGF0J3MgcmlnaHQsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbGlrZWx5IG1ha2VzIFwiZG9fbWFkdmlzZVwiIHRoZSBiZXR0ZXIgdGFyZ2V0IHRoZW4uIFNpbmNlIGBkb19tYWR2aXNlYCBpc24ndCBzdGF0aWMsIGl0J3MgcHJvYmFibHkgdGhlIG1haW4gaW1wbGVtZW50YXRpb24gd2UgbmVlZCB0byBleGFtaW5lLiBKdXN0IGNvbmZpcm1pbmcgdGhpczsgSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYGRvX21hZHZpc2VgIGlzIGluZGVlZCBub24tc3RhdGljIHRvIGVuc3VyZSBpdCdzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyOC4wNzMwNzgzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mjc0MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkb19tYWR2aXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTg4OD1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTg0LSAqL1xcbm1tL21hZHZpc2UuYzoxOTg1OmludCBkb19tYWR2aXNlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLCBpbnQgYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE5ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOToyOC4xMjAzNjAyMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM5NDUxNTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIENob29zaW5nIHRoZSBSaWdodCBBUEkgRW50cnlwb2ludCoqXG5cbk9rYXksIHNvIEknbSBhbmFseXppbmcgd2hpY2ggZnVuY3Rpb24gdG8gcGljayBoZXJlLCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyBzZWUuLi4gSSd2ZSBjb25maXJtZWQgdGhhdCBgZG9fbWFkdmlzZWAgaXMgaW5kZWVkIG5vbi1zdGF0aWMuIEdvb2Qgc3RhcnQuIE5vdywgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyBtYXJrZWQgYXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBidXQgaXQgKm1pZ2h0KiBub3QgYmUgaW5saW5lZC4gR2l2ZW4gdGhhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHNlZW1zIGZhaXJseSBsYXJnZSwgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBpbmxpbmUgaXQuIEJ1dCwgdG8gYmUgY29tcGxldGVseSBzYWZlLCBhbmQgY29uc2lkZXJpbmcgdGhlIHByb21wdCwgSSdsbCBzdGljayB3aXRoIGluY2x1ZGluZyBib3RoIGZ1bmN0aW9ucy5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyB2ZXJ5IGNsZWFyOiBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludHMuIFNvLCBgZG9fbWFkdmlzZWAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZSwgYmFzZWQgb24gdGhlIHByb21wdC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IExldCBtZSB0aGluay4uLiB3aGF0IGFib3V0IGBtYWR2aXNlX3ZtYV9iZWhhdmlvcmA/IE5vLCBiZWNhdXNlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYG1hZHZpc2VfZG9fYmVoYXZpb3JgLiBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayBgbWFkdmlzZV9kb19iZWhhdmlvcmAgdGhvdWdoLi4uIHl1cCwgdGhhdCBvbmUncyBzdGF0aWMgdG9vLiBTbywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGRvX21hZHZpc2VgLlxuXG5BaGEsIHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byBjb25zaWRlciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoaXMgY29uZmlnIG9wdGlvbiBpcyBuZWNlc3NhcnkgZm9yIGVuYWJsaW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIEl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGBLY29uZmlnYCBqdXN0IHRvIGJlIHN1cmUuIEJ1dCwgZ2l2ZW4gdGhhdCB0aGUgcHJvbXB0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZG9fbWFkdmlzZWAgYmVpbmcgYmV0dGVyIGZvciBteSBwdXJwb3NlcywgYW5kIGl0J3Mgbm9uLXN0YXRpYywgSSB3aWxsIGdvIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MzYuNTE0ODc4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzE4ODg2OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6MzkuMzQ2NzczNTIzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjg0NzkyNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBxdWVyeSwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTUVNT1JZX0ZBSUxVUkUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIHdlIG5lZWQgdG8gc2VlIHdoYXQncyBjb25uZWN0ZWQgdG8gYE1FTU9SWV9GQUlMVVJFYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucywgc28gaXQncyBhIHNhZmUgYmV0IHRoYXQgYW55IGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9GQUlMVVJFYCB3aWxsIGJlIGRlZmluZWQsIG9yIGF0IGxlYXN0IHJlZmVyZW5jZWQsIHRoZXJlLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIGFuZCBzZWUgd2hhdCB0aGUgcmVsYXRpb25zaGlwcyBhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSBpdCwgYW5kIHdoYXQgZmVhdHVyZXMgbWlnaHQgZGVwZW5kIG9uIGl0IGJlaW5nIHNldC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCB0aGUgbG9naWMgdG8gc2VlIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgdmlzaWJpbGl0eS4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgcXVpY2tseS4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNTowOTo1MC4wMzE1NzE1NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cXG4gNzYxOlxcdFxcbiA3NjI6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4gNzYzOlxcdFxcdGJvb2xcXG4gNzY0OlxcdFxcbiA3NjU6XFx0Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxuIDc2NjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA3Njc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2ODpcXHRcXHRib29sIFxcXCJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXFxcIlxcbiA3Njk6XFx0XFx0c2VsZWN0IElOVEVSVkFMX1RSRUVcXG4gNzcwOlxcdFxcdGhlbHBcXG4gNzcxOlxcdFxcdCAgRW5hYmxlcyBjb2RlIHRvIHJlY292ZXIgZnJvbSBzb21lIG1lbW9yeSBmYWlsdXJlcyBvbiBzeXN0ZW1zXFxuIDc3MjpcXHRcXHQgIHdpdGggTUNBIHJlY292ZXJ5LiBUaGlzIGFsbG93cyBhIHN5c3RlbSB0byBjb250aW51ZSBydW5uaW5nXFxuIDc3MzpcXHRcXHQgIGV2ZW4gd2hlbiBzb21lIG9mIGl0cyBtZW1vcnkgaGFzIHVuY29ycmVjdGVkIGVycm9ycy4gVGhpcyByZXF1aXJlc1xcbiA3NzQ6XFx0XFx0ICBzcGVjaWFsIGhhcmR3YXJlIHN1cHBvcnQgYW5kIHR5cGljYWxseSBFQ0MgbWVtb3J5LlxcbiA3NzU6XFx0XFxuIDc3NjpcXHRjb25maWcgSFdQT0lTT05fSU5KRUNUXFxuIDc3NzpcXHRcXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuIDc3ODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuIDc3OTpcXHRcXHRzZWxlY3QgUFJPQ19QQUdFX01PTklUT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MDk6NTAuMDMxNzc5NDQ5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDE3MTk4NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYE1FTU9SWV9GQUlMVVJFYCBiZWhhdmVzIGluIHRoaXMgc3lzdGVtLiBJdCBzZWVtcyBpdHMgYmVoYXZpb3IgaGluZ2VzIGRpcmVjdGx5IG9uIHR3byBrZXkgZWxlbWVudHM6IHRoZSBwcmVzZW5jZSBvZiBhbiBgTU1VYCDigJMgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIGZvciBtYW5hZ2luZyBtZW1vcnkg4oCTIGFuZCwgaW50ZXJlc3RpbmdseSwgdGhlIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBzZWNvbmQgcG9pbnQgaXMgd2hhdCBJIHdhbnQgdG8gZGlzc2VjdCBub3cuIENsZWFybHksIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGRlZmluZXMgd2hldGhlciBvciBub3QgaXQgc3VwcG9ydHMgdGhlIGhhbmRsaW5nIG9mIG1lbW9yeSBmYWlsdXJlcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYW5kIGRldGVybWluZSB3aGljaCBvZiB0aGVtIGFjdHVhbGx5IGVuYWJsZSB0aGlzIGNyaXRpY2FsIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGxhbmRzY2FwZSB0byBlZmZlY3RpdmVseSBtYW5hZ2UgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hpY2ggYXJjaGl0ZWN0dXJlcyBhcmUgcGxheWluZyBiYWxsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjA5OjU4LjY3MzUwMjM3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5ODUxNTc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctNzMtXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9hcm02NC9LY29uZmlnOjc0OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1NIQURPV19DQUxMX1NUQUNLIGlmIENDX0hBVkVfU0hBRE9XX0NBTExfU1RBQ0tcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTIyLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzoyMzpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy02MjctXFx0ZGVmYXVsdCBcXFwieVxcXCIgaWYgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy02MjktXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTc1MD1jb25maWcgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNXFxuYXJjaC94ODYvS2NvbmZpZzo3NTc6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3g4Ni9LY29uZmlnLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MDAuMzcyMDI3NzM5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDc1NTQyMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYE1FTU9SWV9GQUlMVVJFYCBjb25maWcg4oCTIHRoYXQncyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gSG1tLCBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLi4uXG5cbkFscmlnaHQsIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBkZWZpbmUuIEludGVyZXN0aW5nLCBpdOKAmXMgcmVsYXRlZCB0byBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIG9mIG1lbW9yeSBlcnJvciBoYW5kbGluZy4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHNwZWNpZmljYWxseSBoYW5kbGluZyBib3RoIFwiTm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zXCIgYW5kIFwiSHVnZXRsYiBmb2xpb3NcIi4gU28gdGhhdCBtZWFucywgZm9yIHRlc3RpbmcsIEkgc2hvdWxkIHByb2JhYmx5IGtlZXAgYW4gZXllIG9uIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIEJ1dCByZWFsbHksIHRoZSBjb3JlIGNvZGUgaXMgaW4gYG1hZHZpc2UuY2AgYW5kIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLlxuXG5Ob3csIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICphY3R1YWxseSogcmVxdWlyZWQgZm9yIHRoaXMuIFRoZSBwYXRjaCB1c2VzIGBQYWdlSHVnZShwYWdlKWAuIFNvIGl0J3MgcHJvYmFibHkgdXNpbmcgSHVnZSBQYWdlcy4gTGV0IG1lIGNoZWNrIHdoZXJlIGBQYWdlSHVnZWAgaXMgZGVmaW5lZC4gVGhpcyB3aWxsIGhlbHAgbWUgdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBmb2xpbyBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MTAuNDQ3NTcxNjE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1NDE3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUGFnZUh1Z2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDQtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUxLSAqL1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTI6c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTEyOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlQW5vbkV4Y2x1c2l2ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExMzQtXFx0ICovXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTEzNTpcXHRpZiAoUGFnZUh1Z2UocGFnZSkpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEzNi1cXHRcXHRwYWdlID0gY29tcG91bmRfaGVhZChwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTExNDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE0Mi1cXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub25Ob3RLc20ocGFnZSksIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjExNDM6XFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXFx1MDAyNlxcdTAwMjYgIVBhZ2VIZWFkKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQ0LVxcdHNldF9iaXQoUEdfYW5vbl9leGNsdXNpdmUsIFxcdTAwMjZQRl9BTlkocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE0Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgQ2xlYXJQYWdlQW5vbkV4Y2x1c2l2ZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNDktXFx0Vk1fQlVHX09OX1BHRkxBR1MoIVBhZ2VBbm9uTm90S3NtKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTUwOlxcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VIdWdlKHBhZ2UpIFxcdTAwMjZcXHUwMDI2ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1MS1cXHRjbGVhcl9iaXQoUEdfYW5vbl9leGNsdXNpdmUsIFxcdTAwMjZQRl9BTlkocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTE1ND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19DbGVhclBhZ2VBbm9uRXhjbHVzaXZlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTE1Ni1cXHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUFub24ocGFnZSksIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjExNTc6XFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZUh1Z2UocGFnZSkgXFx1MDAyNlxcdTAwMjYgIVBhZ2VIZWFkKHBhZ2UpLCBwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTU4LVxcdF9fY2xlYXJfYml0KFBHX2Fub25fZXhjbHVzaXZlLCBcXHUwMDI2UEZfQU5ZKHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MTAuNTcwMTE3Mjc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjU3MDE4NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgdGhlIEZ1enppbmcgRWZmb3J0KipcblxuT2theSwgc28gYFBhZ2VIdWdlYCBpcyBhIGdpdmVuLCB0aGF0J3MgYWxyZWFkeSBkZWZpbmVkLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCB3aGljaCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGRvX21hZHZpc2VgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGhvbmUgaW4gb24gYGRvX21hZHZpc2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGVuIEkgcGF1c2VkLiBXYWl0LCBpc24ndCBgZG9fbWFkdmlzZWAgYSAqdmVyeSogZ2VuZXJpYywgaG90LXBhdGggZnVuY3Rpb24/IFdlIHVzdWFsbHkgd2FudCB0byBhdm9pZCBza2V3aW5nIG91ciB0ZXN0IGRpc3RyaWJ1dGlvbiBieSBsaXN0aW5nIHRob3NlLlxuXG5CdXQgdGhlbiBJIHJlYWxpemVkLCBgZG9fbWFkdmlzZWAgKmlzKiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBJdCdzIG5vdCBhIGZ1bmN0aW9uIGxpa2UgYF9fa21hbGxvY2Agb3IgYHNjaGVkdWxlYCwgaXQncyB0aGUgdG9wLWxldmVsIHN5c2NhbGwgaW1wbGVtZW50YXRpb24uIE9rYXksIHNvIGl04oCZcyBub3QgYSAqZ2VuZXJpYyogaG90LXBhdGgsIGl0J3MgdGhlIHNwZWNpZmljIGVudHJ5IHBvaW50LlxuXG5UaGUgbmV4dCBpc3N1ZTogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgIGFyZSBib3RoIHN0YXRpYy4gV2hhdCBzeW1ib2wgc2hvdWxkIEkgY2hvb3NlPyBTaG91bGQgSSBpbmNsdWRlIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IEkgbmVlZCB0byBjaGVjayBpZiBpdCdzIGlubGluZWQuIEl0J3MgYSByZWFzb25hYmx5IGxhcmdlIGZ1bmN0aW9uLCBzbyBpdCBtaWdodCBub3QgYmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdG8gc2VlIGlmIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgaW4gdGhlIGBTeXN0ZW0ubWFwYCwgb3IgaWYgSSBjYW4ganVzdCBzdGljayB3aXRoIGBkb19tYWR2aXNlYC5cblxuQWhhISBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSBgbWFkdmlzZV9kb19iZWhhdmlvcmAuIElmIEkgc3BlY2lmeSBgZG9fbWFkdmlzZWAsIHRoYXQncyBleGFjdGx5IHdoYXQgSSB3YW50IOKAkyBpdCB3aWxsIGZvY3VzIG9uIHRoZSBgbWFkdmlzZWAgc3lzY2FsbC4gV2FpdCwgYnV0IHRoZSBgbWFkdmlzZWAgc3lzY2FsbCBoYW5kbGVzICptYW55KiBiZWhhdmlvcnMuIEZvY3VzaW5nIG9uIGBkb19tYWR2aXNlYCB3aWxsIGZ1enogYWxsIHRob3NlIG1hZHZpc2UgYmVoYXZpb3JzLiBPa2F5LCBsZXQncyBhbHNvIGluY2x1ZGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCB0byBiZSBtb3JlIHNwZWNpZmljLiBJIGNvbnNpZGVyZWQgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLCBidXQgdGhlIHJlbGV2YW50IHBhdGNoIGlzIHdpdGhpbiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiBJdCBsb29rcyBsaWtlIGl0IGlzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCBpcyBzdGF0aWMgYW5kIG5vdCBtYXJrZWQgaW5saW5lLiBUaGUgZnVuY3Rpb24gaXMgcXVpdGUgbGFyZ2UsIHdpdGggYSBgZm9yYCBsb29wLCBjYWxscyB0byBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAsIGBzb2Z0X29mZmxpbmVfcGFnZWAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiBUaGF0IHNldHRsZXMgaXQ6IEnigJlsbCBpbmNsdWRlIGJvdGggYGRvX21hZHZpc2VgIGFuZCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSXMgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnPyBZZXMsIGl0IGlzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGRlYWxzIHdpdGggXCJOb24taHVnZXRsYiBsYXJnZSBmb2xpb3NcIiBhbmQgXCJIdWdldGxiIGZvbGlvc1wiLiBUbyByZWFsbHkgdGVzdCB0aGlzIHByb3Blcmx5LCBJJ2xsIG5lZWQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFuZGxlcyB0aGUgbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zLCB3aGlsZSBgQ09ORklHX0hVR0VUTEJGU2AgaGFuZGxlcyB0aGUgaHVnZXRsYiBmb2xpb3MuIEl0J3MgdGltZSB0byBkb3VibGUtY2hlY2sgYEtjb25maWdgIGZvciB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWcuXG5cblRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvbWJpbmF0aW9uIG9mIGBkb19tYWR2aXNlYCB0byBjb3ZlciB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLCBhbmQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIHBhdGNoZWQgbG9naWMgcmVzaWRlcy4gSSdsbCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBmdWxsIGNvdmVyYWdlOiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjMxLjIyNzEzOTA4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MjUzNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMzLVxcbm1tL0tjb25maWc6ODM0Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNS1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1Ny1cXG5tbS9LY29uZmlnOjg1ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTktXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjQtXFxubW0vS2NvbmZpZzo4NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ni1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzMtXFxubW0vS2NvbmZpZzo4NzQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzUtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4MT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkwLVxcbm1tL0tjb25maWc6ODkxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTItXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMC1cXG5tbS9LY29uZmlnOjkwMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMi1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOC1cXG5tbS9LY29uZmlnOjkwOTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTEwLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTYtXFxubW0vS2NvbmZpZzo5MTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTgtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjY9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNS1cXG5tbS9LY29uZmlnOjkzNjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM3LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDQtXFxubW0vS2NvbmZpZzo5NDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDYtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTItXFxubW0vS2NvbmZpZzo5NTM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYwLVxcbm1tL0tjb25maWc6OTYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYyLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6MzEuMjgxNzcwMDY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTEwNzEzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlIGZvciBIdWdlVExCRlMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIEh1Z2VUTEJGUywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBJJ20gZ29pbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCBJIG5lZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBhdmFpbGFiaWxpdHkgb2YgYEhVR0VUTEJGU2AgYW5kIHNlZSB3aGF0J3MgY29udHJvbGxpbmcgaXQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsZXZhbnQgc3ltYm9scywgdGhlaXIgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHJlbGF0ZWQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgZW50cmllcyB3aWxsIGJlIGNydWNpYWwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgdHJvdWJsZXNob290aW5nIG9mIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk1NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjM4LjEzMjg0MzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ0NjQ3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjM5LjM3NzQ5NzI1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE5NzgwOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBwb3RlbnRpYWwgaW4gaW5jb3Jwb3JhdGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgSFVHRVRMQkZTYCBpbnRvIHRoZSBtaXguIFRob3NlIGFyZSBvZnRlbiBrZXkgZm9yIHBlcmZvcm1hbmNlIGdhaW5zIGluIG1lbW9yeS1pbnRlbnNpdmUgd29ya2xvYWRzLCBhbmQgSSdtIGFsd2F5cyBsb29raW5nIGZvciB3YXlzIHRvIHNxdWVlemUgb3V0IG1vcmUgZWZmaWNpZW5jeS4gQmVmb3JlIEkgZ2V0IHRvbyBmYXIgYWhlYWQgb2YgbXlzZWxmIHRob3VnaCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHByb3Blcmx5IHNldCB1cC4gSXQncyBnb3Qgc29tZSBkZXBlbmRlbmNpZXMsIHNvIEkgc2hvdWxkIHNlZSBob3cgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gTm8gcG9pbnQgYmxpbmRseSBhZGRpbmcgYSBmbGFnIGlmIGl0J3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZWx5IHdpdGggdGhlIGV4aXN0aW5nIHNldHVwLiBJIHNob3VsZCBnbyBjaGVjayB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNToxMDo0NS4wOTcyODEzMjVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODMwOlxcdFxcbiA4MzE6XFx0Y29uZmlnIE1NX0lEXFxuIDgzMjpcXHRcXHRkZWZfYm9vbCBuXFxuIDgzMzpcXHRcXG4gODM0OlxcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODM1OlxcdFxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuIDgzNjpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbiA4Mzc6XFx0XFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gODM4OlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4gODM5OlxcdFxcdHNlbGVjdCBNTV9JRFxcbiA4NDA6XFx0XFx0aGVscFxcbiA4NDE6XFx0XFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXFxuIDg0MjpcXHRcXHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cXG4gODQzOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXFxuIDg0NDpcXHRcXHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XFxuIDg0NTpcXHRcXHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcXG4gODQ2OlxcdFxcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxcbiA4NDc6XFx0XFxuIDg0ODpcXHRcXHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxcbiA4NDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjQ1LjA5NzM4MzcxNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjczNzI5ODAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgYXMgYW4gZXhwZXJ0IGluIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOlxuXG4qKlVuZGVyc3RhbmRpbmcgSHVnZSBQYWdlIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGxldCdzIGJyZWFrIGl0IGRvd24gdG8gbWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2UuXG5cbmBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1vZGVybiBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBpcyBvbmx5IGdvaW5nIHRvIGJlIGVuYWJsZWQgaWYgd2UgaGF2ZSB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgKGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgKSAqYW5kKiB3ZSdyZSAqbm90KiBydW5uaW5nIGEgUFJFRU1QVF9SVCBrZXJuZWwuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYFBSRUVNUFRfUlRgIGtlcm5lbHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCByZXF1aXJlbWVudHMgYW5kIG9mdGVuIGRvbid0IHBsYXkgd2VsbCB3aXRoIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBkdWUgdG8gdGhlIHBvdGVudGlhbCBmb3IgaW5jcmVhc2VkIGxhdGVuY3kuIFRoaXMgcmVmbGVjdHMgYSBwcmFjdGljYWwgZGVjaXNpb24gYmFzZWQgb24gdGhlIHRyYWRlLW9mZnMgb2YgcmVhbC10aW1lIHBlcmZvcm1hbmNlIHZlcnN1cyBtZW1vcnkgZWZmaWNpZW5jeS5cblxuVGhlbiB3ZSBoYXZlIGBIVUdFVExCRlNgLiBUaGlzIG9uZSBpcyBpbnRlcmVzdGluZzsgaXQgaGFzIGEgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGRlcGVuZGVuY3kuIEl0IGVpdGhlciBuZWVkcyB0byBiZSBhIGNvcmUgc2V0IG9mIGFyY2hpdGVjdHVyZXMgdGhhdCBoaXN0b3JpY2FsbHkgaGF2ZSBzdXBwb3J0ZWQgaHVnZXBhZ2VzIChgWDg2YCwgYElBNjRgLCBgU1BBUkM2NGAsIGBBTFBIQWAsIGV0Yy4g4oCUIHRoYXQgXCJvclwiIGxpc3QgaXMgaW1wbGljaXRseSBhIGxvbmcsIGV4aGF1c3RpdmUgc2V0IG9mIHByb2Nlc3NvcnMpLCAqb3IqIGl0IGhhcyBhIG1vcmUgZ2VuZXJhbCBmbGFnIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFRoaXMgc3VnZ2VzdHMgYSBncmFkdWFsIG1vdmUgdG93YXJkcyBtYWtpbmcgdGhlIGh1Z2VwYWdlIGZlYXR1cmUgbW9yZSBwb3J0YWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlLiBOZXdlciBhcmNoaXRlY3R1cmVzIG1pZ2h0IGJlIGVuYWJsZWQgdmlhIHRoZSBtb3JlIGdlbmVyaWMgZmxhZy4gVGhlIGludGVudCBpcyBjbGVhcjogdG8gZW5zdXJlIHRoZSBmaWxlc3lzdGVtIGZvciBtYW5hZ2luZyBodWdlcGFnZXMgaXMgb25seSBhY3RpdmF0ZWQgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaGFzIHRoZSBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzLiBXZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggZWl0aGVyIGxlZ2FjeSBvciBtb2Rlcm4gY29kZS5cblxuSW4gc2hvcnQsIHRoZSBrZXJuZWwgbWFpbnRhaW5lcnMgYXJlIGJlaW5nIHZlcnkgc3BlY2lmaWMgYWJvdXQgd2hhdCBraW5kIG9mIGFyY2hpdGVjdHVyZXMgc3VwcG9ydCB0aGUgdXNlIG9mIGh1Z2VwYWdlcyAoZWl0aGVyIHRyYW5zcGFyZW50IG9yIHRocm91Z2ggdGhlIGBIVUdFVExCRlNgIGZpbGVzeXN0ZW0pLiBUaGV5IGFyZSBlbnN1cmluZyB0aGF0IHRoZXNlIGZlYXR1cmVzLCB3aGljaCBoYXZlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlLCBhcmUgb25seSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUgaXMgcHJlcGFyZWQgZm9yIGl0LCBhbmQgdGhhdCByZWFsLXRpbWUgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIGFyZW4ndCBjb21wcm9taXNlZC4gVGhlIHVzZSBvZiBmbGFncyBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgdGhlIGFjY2VwdGVkIHdheSBvZiBlbnN1cmluZyBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTA6NTcuODM0NjgzNDg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI0ODpcXHRcXHRkZWZfYm9vbCBuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdG1lbnVjb25maWcgSFVHRVRMQkZTXFxuIDI1MTpcXHRcXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuIDI1MjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIDI1MzpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDI1NDpcXHRcXHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxcbiAyNTU6XFx0XFx0aGVscFxcbiAyNTY6XFx0XFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXFxuIDI1NzpcXHRcXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4gMjU4OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAyNTk6XFx0XFxuIDI2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI2MTpcXHRcXG4gMjYyOlxcdGlmIEhVR0VUTEJGU1xcbiAyNjM6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG4gMjY0OlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE1OjEwOjU3LjgzNDc1MDY2OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0OTE1MDExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIG1hZHZpc2UuYyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gVGhpcyBwYXRjaCBpbiBgbW0vbWFkdmlzZS5jYCBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgaG93IGBtYWR2aXNlYCBoYW5kbGVzIGxhcmdlIGZvbGlvcywgYW5kIGl0IGhpbmdlcyBvbiB0aGUgYEhVR0VUTEJGU2AgZmVhdHVyZSwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIFRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgdGhleSBhcmUgcmVsYXRlZCB0byBob3cgaXQgZGVhbHMgd2l0aCBgUGFnZUh1Z2UocGFnZSlgIGFuZCBgY29tcG91bmRfaGVhZChwYWdlKWAuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IGFib3V0IHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIGFuZCBmb2N1c2luZyBvbiBgZG9fbWFkdmlzZWAgYW5kIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIENvbmZpZy13aXNlLCBJJ20gdGhpbmtpbmcgYE1FTU9SWV9GQUlMVVJFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBIVUdFVExCRlNgIGFyZSB0aGUgcmVsZXZhbnQgb25lcyB0byBlbmFibGUuIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXMgc3RhdGljLCBidXQgU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgd29yayB3aXRoIHRob3NlLCBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLlxuXG5Ib3dldmVyLCBzaW5jZSBgZG9fbWFkdmlzZWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgYW5kIGl0J3MgcHJlZmVycmVkIHRvIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhbmQgdGhlIHBhdGNoIGlzIGFkZGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUsIEkgdGhpbmsgaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdyB0aGF0IEkgcmV2aWV3IHRoZSBwYXRjaCwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGluIGBtYWR2aXNlX2luamVjdF9lcnJvcmAsIHdoaWNoIGluZmx1ZW5jZXMgaG93IGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCB3b3JrIHdoZW4gZGVhbGluZyB3aXRoIG5vbi1odWdldGxiIGxhcmdlIGZvbGlvcy4gVGhlIGtleSBpcyBob3cgdGhlIGBzaXplYCB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgbG9vcCB3aXRoaW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgc3RlcCBzaXplIGZvciB0cmF2ZXJzaW5nIG1lbW9yeSByZWdpb25zLiBUaGlzICpkZWZpbml0ZWx5KiBzZWVtcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBmaW5hbGl6ZWQgc3RyYXRlZ3kgaXMgdG8gZm9jdXMgb24gYGRvX21hZHZpc2VgLiBUaGUgcmVsZXZhbnQgY29uZmlncyByZW1haW46IGBNRU1PUllfRkFJTFVSRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgSFVHRVRMQkZTYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBzbyB0aGUgbG9vcCBpbmNyZW1lbnRzIGNvcnJlY3RseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBmb2xpb3MgdGhhdCBhcmVuJ3Qgc3BlY2lmaWNhbGx5IGh1Z2V0bGIgZm9saW9zLCBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYE1BRFZfU09GVF9PRkZMSU5FYCBhbmQgYE1BRFZfSFdQT0lTT05gIHRocm91Z2ggdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZCBmb3IgdGhlIGNvZGUgYmVpbmcgYWRkZWQsIGFuZCB0aGUgb3RoZXIgdHdvIGNvbmZpZ3MgYXJlIGdyZWF0IHRvIHRyaWdnZXIgbGFyZ2UgZm9saW8gY29kZSBhbmQgc2VlIHRoZSBpbXBhY3Qgb24gaHVnZXRsYi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDIsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTU6MTE6MTAuMDgzOTA0NTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNjg3ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbWFkdmlzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgc3RlcCBzaXplIGZvciBub24taHVnZXRsYiBsYXJnZSBmb2xpb3MgZHVyaW5nIGBNQURWX1NPRlRfT0ZGTElORWAgYW5kIGBNQURWX0hXUE9JU09OYCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBmYWlsdXJlIGluamVjdGlvbiBsb2dpYyBvZiB0aGUgYG1hZHZpc2VgIHN5c2NhbGwuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGNvZGUsIHdoaWxlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIG5lZWRlZCB0byB0ZXN0IHRoZSBsYXJnZSBmb2xpbyBhbmQgaHVnZXRsYiBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21hZHZpc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHN0ZXAgc2l6ZSBmb3Igbm9uLWh1Z2V0bGIgbGFyZ2UgZm9saW9zIGR1cmluZyBgTUFEVl9TT0ZUX09GRkxJTkVgIGFuZCBgTUFEVl9IV1BPSVNPTmAgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24gbG9naWMgb2YgdGhlIGBtYWR2aXNlYCBzeXNjYWxsLiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBjb2RlLCB3aGlsZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBuZWVkZWQgdG8gdGVzdCB0aGUgbGFyZ2UgZm9saW8gYW5kIGh1Z2V0bGIgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowk2g26[1] Phase: Succeeded StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 15:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2] Phase: Succeeded StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 15:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 15:11:31 +0000 UTC FinishedAt: 2026-08-05 15:11:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowk2g26/series-workflowk2g26-convert-artifact-297841568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 15:11:41 +0000 UTC FinishedAt: 2026-08-05 15:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 15:11:41 +0000 UTC FinishedAt: 2026-08-05 15:28:30 +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:*ecbeced2-8915-42c8-9091-0c7074eef88e,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-workflowk2g26/series-workflowk2g26-convert-artifact-297841568/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": "2969e851-b977-430e-bd88-3da2d217a6d8", "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-workflowk2g26/series-workflowk2g26-build-action-691114598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 15:11:41 +0000 UTC FinishedAt: 2026-08-05 15:28:18 +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:*ecbeced2-8915-42c8-9091-0c7074eef88e,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-workflowk2g26/series-workflowk2g26-convert-artifact-297841568/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": "2969e851-b977-430e-bd88-3da2d217a6d8", "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-workflowk2g26/series-workflowk2g26-build-action-691114598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 15:28:30 +0000 UTC FinishedAt: 2026-08-05 15:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 15:28:30 +0000 UTC FinishedAt: 2026-08-05 15:28:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 15:28:30 +0000 UTC FinishedAt: 2026-08-05 15:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 15:28:30 +0000 UTC FinishedAt: 2026-08-05 15:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowk2g26/series-workflowk2g26-convert-artifact-3751130823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 15:28:53 +0000 UTC FinishedAt: 2026-08-05 15:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 15:28:54 +0000 UTC FinishedAt: 2026-08-05 15:30:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2969e851-b977-430e-bd88-3da2d217a6d8,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-workflowk2g26/series-workflowk2g26-build-action-691114598/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-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 15:30:58 +0000 UTC FinishedAt: 2026-08-05 15:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:30:58 +0000 UTC FinishedAt: 2026-08-05 15:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 15:30:58 +0000 UTC FinishedAt: 2026-08-05 15:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 15:30:58 +0000 UTC FinishedAt: 2026-08-05 15:51:03 +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:*ecbeced2-8915-42c8-9091-0c7074eef88e,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-workflowk2g26/series-workflowk2g26-convert-artifact-3751130823/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": "9f0527ff-fa23-4fc8-aaf4-f579d0ec5429", "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-workflowk2g26/series-workflowk2g26-build-action-3228694091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 15:30:58 +0000 UTC FinishedAt: 2026-08-05 15:50:53 +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:*ecbeced2-8915-42c8-9091-0c7074eef88e,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-workflowk2g26/series-workflowk2g26-convert-artifact-3751130823/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": "9f0527ff-fa23-4fc8-aaf4-f579d0ec5429", "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-workflowk2g26/series-workflowk2g26-build-action-3228694091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 15:51:03 +0000 UTC FinishedAt: 2026-08-05 15:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 15:51:03 +0000 UTC FinishedAt: 2026-08-05 15:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 15:51:03 +0000 UTC FinishedAt: 2026-08-05 15:53:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 15:51:03 +0000 UTC FinishedAt: 2026-08-05 15:53:00 +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:*9f0527ff-fa23-4fc8-aaf4-f579d0ec5429,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-workflowk2g26/series-workflowk2g26-build-action-3228694091/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-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +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"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},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:*2969e851-b977-430e-bd88-3da2d217a6d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9f0527ff-fa23-4fc8-aaf4-f579d0ec5429,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-workflowk2g26/series-workflowk2g26-build-action-691114598/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-workflowk2g26/series-workflowk2g26-build-action-3228694091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 15:53:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 15:53:14 +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"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},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-workflowk2g26/series-workflowk2g26-convert-artifact-2490210976/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 15:53:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 15:53:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:53:10 +0000 UTC FinishedAt: 2026-08-05 15:53:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 15:53:20 +0000 UTC FinishedAt: 2026-08-05 18:56:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk2g26[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_madvise"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HUGETLBFS"],"series_id":"db70eb66-ee04-4378-871b-c9785792a324","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 15:53:20 +0000 UTC FinishedAt: 2026-08-05 18:56:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2969e851-b977-430e-bd88-3da2d217a6d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9f0527ff-fa23-4fc8-aaf4-f579d0ec5429,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-workflowk2g26/series-workflowk2g26-build-action-691114598/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-workflowk2g26/series-workflowk2g26-build-action-3228694091/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-workflowk2g26/series-workflowk2g26-convert-artifact-2490210976/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,}