Name: series-workflowxw7np Phase: Succeeded StartedAt: 2026-08-22 08:31:57 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[0] Phase: Succeeded StartedAt: 2026-08-22 08:31:57 +0000 UTC FinishedAt: 2026-08-22 09:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 08:31:57 +0000 UTC FinishedAt: 2026-08-22 09:04:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NAMESPACES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NAMESPACES" ], "series_id": "7557d82c-279a-45dc-8091-24f718ea5873" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_net_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTQwMCwxNCAmIzQzOzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovXG4tc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuJiM0MztzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuIHtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBuc19jb21tb25faW5pdChuZXQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSwgMSk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0X3JlZmNudFwmIzM0Oyk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0X25vdHJlZmNudFwmIzM0Oyk7XG5AQCAtNDMxLDcgJiM0Mzs0MjUsNiBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfblxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX2FsbCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xuIFx0cHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbkBAIC01NzQsMTIgJiM0Mzs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRnb3RvIGRlY191Y291bnRzO1xuIFx0fVxuIFxuLVx0cnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuLVx0aWYgKHJ2IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGRlY191Y291bnRzO1xuJiM0MztcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gXHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiBcbiYjNDM7XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG4mIzQzO1x0aWYgKHJ2KVxuJiM0MztcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbiYjNDM7XG4gXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiBcdGlmIChydiBcdTAwM2MgMClcbiBcdFx0Z290byBwdXRfdXNlcm5zO1xuQEAgLTU5MSw2ICYjNDM7NTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0aWYgKHJ2IFx1MDAzYyAwKSB7XG4gcHV0X3VzZXJuczpcbiBcdFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcbiYjNDM7cHV0X3VzZXJuc19ub19jb21tb246XG4gI2lmZGVmIENPTkZJR19LRVlTXG4gXHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiAjZW5kaWZcbkBAIC0xMjkzLDcgJiM0MzsxMjg5LDggQEAgdm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbiBcdCAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKiBoYXMgYSBzdGF0aWMgaW5vZGUgbnVtYmVyLlxuIFx0ICovXG4tXHRpZiAocHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucykpXG4mIzQzO1x0cHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucyk7XG4mIzQzO1x0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0cGFuaWMoXCYjMzQ7Q291bGQgbm90IHByZWluaXRpYWxpemUgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2VcJiMzNDspO1xuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X25ldF9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA5MTY2ZjQ2NzI5M2UwLi5kYTVmODgxZmJkM2I5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC00MDAsMTQgJiM0Mzs0MDAsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKIC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqLwotc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKQomIzQzO3N0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IG5zX2NvbW1vbl9pbml0KG5ldCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXJlZmNvdW50X3NldCgmYW1wO25ldC0mZ3Q7cGFzc2l2ZSwgMSk7CiAJcmVmX3RyYWNrZXJfZGlyX2luaXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyLCAxMjgsICYjMzQ7bmV0X3JlZmNudCYjMzQ7KTsKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO25ldC0mZ3Q7bm90cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRfbm90cmVmY250JiMzNDspOwpAQCAtNDMxLDcgJiM0Mzs0MjUsNiBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbgogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9hbGwpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9zcGVjaWZpYyk7CiAJcHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NzQsMTIgJiM0Mzs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLAogCQlnb3RvIGRlY191Y291bnRzOwogCX0KIAotCXJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTsKLQlpZiAocnYgJmx0OyAwKQotCQlnb3RvIGRlY191Y291bnRzOwomIzQzOwlwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwogCW5ldC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7CiAJZ2V0X3VzZXJfbnModXNlcl9ucyk7CiAKJiM0MzsJcnYgPSBuc19jb21tb25faW5pdChuZXQpOwomIzQzOwlpZiAocnYpCiYjNDM7CQlnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uOwomIzQzOwogCXJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CiAJaWYgKHJ2ICZsdDsgMCkKIAkJZ290byBwdXRfdXNlcm5zOwpAQCAtNTkxLDYgJiM0Mzs1ODYsNyBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJaWYgKHJ2ICZsdDsgMCkgewogcHV0X3VzZXJuczoKIAkJbnNfY29tbW9uX2ZyZWUobmV0KTsKJiM0MztwdXRfdXNlcm5zX25vX2NvbW1vbjoKICNpZmRlZiBDT05GSUdfS0VZUwogCQlrZXlfcmVtb3ZlX2RvbWFpbihuZXQtJmd0O2tleV9kb21haW4pOwogI2VuZGlmCkBAIC0xMjkzLDcgJiM0MzsxMjg5LDggQEAgdm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZCkKIAkgKiBUaGlzIGN1cnJlbnRseSBjYW5ub3QgZmFpbCBhcyB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZQogCSAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuCiAJICovCi0JaWYgKHByZWluaXRfbmV0KCZhbXA7aW5pdF9uZXQsICZhbXA7aW5pdF91c2VyX25zKSkKJiM0MzsJcHJlaW5pdF9uZXQoJmFtcDtpbml0X25ldCwgJmFtcDtpbml0X3VzZXJfbnMpOwomIzQzOwlpZiAobnNfY29tbW9uX2luaXQoJmFtcDtpbml0X25ldCkpCiAJCXBhbmljKCYjMzQ7Q291bGQgbm90IHByZWluaXRpYWxpemUgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2UmIzM0Oyk7CiAKIAlkb3duX3dyaXRlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgY2hhbmdlIHRvIGBwcmVpbml0X25ldGAuIEl0IHVzZWQgdG8gcmV0dXJuIGFuIGBpbnRgLCBidXQgbm93IGl0JiMzOTtzIGB2b2lkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgdXN1YWxseSwgdGhlc2UgcmV0dXJuIHZhbHVlcyBnaXZlIHVzIHNvbWUgc3RhdHVzLCBhIHN1Y2Nlc3MvZmFpbHVyZSBpbmRpY2F0b3IuIEkgd29uZGVyIHdoeSB0aGV5IHJlbW92ZWQgaXQuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgY2hhbmdlZC4KCkFoLCB0aGV5IG1vdmVkIHRoZSBgbnNfY29tbW9uX2luaXQobmV0KWAgY2FsbC4gSXQgd2FzIGluc2lkZSBgcHJlaW5pdF9uZXRgIGFuZCBub3cgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGluIGBjb3B5X25ldF9uc2AgYW5kIGBuZXRfbnNfaW5pdGAuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGRlY291cGxlIHNvbWV0aGluZy4gVGhpcyBnaXZlcyBtZSBhIHNsaWdodGx5IGJhZCBmZWVsaW5nIGJlY2F1c2UgaXQgY291bGQgbWVhbiB0aGF0IHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbiBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBvcmRlciBpbiBtaW5kLgoKTm93LCB0aGlzIGBjb3B5X25ldF9uc2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uYCBsYWJlbC4gVGhpcyBsYWJlbCBzZWVtcyB0byBiZSBoYW5kbGluZyBhIGZhaWx1cmUgY2FzZSB3aXRoaW4gYG5zX2NvbW1vbl9pbml0KG5ldClgLiBIbW0sIGFuZCBiZWZvcmUgdGhpcyBgbnNfY29tbW9uX2ZyZWVgIGlzIGNhbGxlZCwgYnV0IHNob3VsZCBpdD8gU2hvdWxkbiYjMzk7dCB3ZSBiZSBjaGVja2luZyBpZiBgbnNfY29tbW9uX2luaXRgIHdhcyAqYWN0dWFsbHkqIHN1Y2Nlc3NmdWwgYmVmb3JlIGNhbGxpbmcgYG5zX2NvbW1vbl9mcmVlYD8gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGZpZWxkcy4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiAqZmFpbHMqLCBjYWxsaW5nIGBuc19jb21tb25fZnJlZWAgbWlnaHQgY2F1c2UgaXNzdWVzLiBUaGlzIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyEgV2UgbmVlZCB0byBleGFtaW5lIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBmdW5jdGlvbiB2ZXJ5IGNhcmVmdWxseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljIHdvcmtzLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGhhbmRsaW5nIG9mIGEgZmFpbGVkIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zX2NvbW1vbl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVzcGFjZS5jPTQyMDI9c3RhdGljIHN0cnVjdCBtbnRfbmFtZXNwYWNlICphbGxvY19tbnRfbnMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBib29sIGFub24pXG4tLVxuZnMvbmFtZXNwYWNlLmMtNDIxOC1cdGlmIChhbm9uKVxuZnMvbmFtZXNwYWNlLmM6NDIxOTpcdFx0cmV0ID0gbnNfY29tbW9uX2luaXRfaW51bShuZXdfbnMsIE1OVF9OU19BTk9OX0lOTyk7XG5mcy9uYW1lc3BhY2UuYy00MjIwLVx0ZWxzZVxuZnMvbmFtZXNwYWNlLmM6NDIyMTpcdFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV3X25zKTtcbmZzL25hbWVzcGFjZS5jLTQyMjItXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaD0xMT1ib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6MTI6aW50IF9fbnNfY29tbW9uX2luaXQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHUzMiBuc190eXBlLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMsIGludCBpbnVtKTtcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTMtdm9pZCBfX25zX2NvbW1vbl9mcmVlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oPTIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19uc19pbml0X2lkKGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDMtXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjQ0OiNkZWZpbmUgbnNfY29tbW9uX2luaXQoX19ucykgICAgICAgICAgICAgICAgICAgICBcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDo0NTpcdF9fbnNfY29tbW9uX2luaXQodG9fbnNfY29tbW9uKF9fbnMpLCAgICAgXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDYtXHRcdFx0IG5zX2NvbW1vbl90eXBlKF9fbnMpLCAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC00OS1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NTA6I2RlZmluZSBuc19jb21tb25faW5pdF9pbnVtKF9fbnMsIF9faW51bSkgICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjUxOlx0X19uc19jb21tb25faW5pdCh0b19uc19jb21tb24oX19ucyksICAgICBcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC01Mi1cdFx0XHQgbnNfY29tbW9uX3R5cGUoX19ucyksICAgXFxcbi0tXG5pcGMvbmFtZXNwYWNlLmM9Mzk9c3RhdGljIHN0cnVjdCBpcGNfbmFtZXNwYWNlICpjcmVhdGVfaXBjX25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbi0tXG5pcGMvbmFtZXNwYWNlLmMtNjQtXG5pcGMvbmFtZXNwYWNlLmM6NjU6XHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XG5pcGMvbmFtZXNwYWNlLmMtNjYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM9MjI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICphbGxvY19jZ3JvdXBfbnModm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTI5LVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6MzA6XHRyZXQgPSBuc19jb21tb25faW5pdChuZXdfbnMpO1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy0zMS1cdGlmIChyZXQpXG4tLVxua2VybmVsL25zY29tbW9uLmM9MTE9c3RhdGljIHZvaWQgbnNfZGVidWcoc3RydWN0IG5zX2NvbW1vbiAqbnMsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcylcbi0tXG5rZXJuZWwvbnNjb21tb24uYy01NS1cbmtlcm5lbC9uc2NvbW1vbi5jOjU2OmludCBfX25zX2NvbW1vbl9pbml0KHN0cnVjdCBuc19jb21tb24gKm5zLCB1MzIgbnNfdHlwZSwgY29uc3Qgc3RydWN0IHByb2NfbnNfb3BlcmF0aW9ucyAqb3BzLCBpbnQgaW51bSlcbmtlcm5lbC9uc2NvbW1vbi5jLTU3LXtcbi0tXG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jPTc2PXN0YXRpYyBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY3JlYXRlX3BpZF9uYW1lc3BhY2Uoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuLS1cbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMTA1LVxua2VybmVsL3BpZF9uYW1lc3BhY2UuYzoxMDY6XHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jLTEwNy1cdGlmIChlcnIpXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM9ODE9c3RhdGljIHN0cnVjdCB0aW1lX25hbWVzcGFjZSAqY2xvbmVfdGltZV9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTAxLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTAyOlx0ZXJyID0gbnNfY29tbW9uX2luaXQobnMpO1xua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04Mz1pbnQgY3JlYXRlX3VzZXJfbnMoc3RydWN0IGNyZWQgKm5ldylcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMjgtXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMjk6XHRyZXQgPSBuc19jb21tb25faW5pdChucyk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMzAtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC91dHNuYW1lLmM9MzY9c3RhdGljIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpjbG9uZV91dHNfbnMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuLS1cbmtlcm5lbC91dHNuYW1lLmMtNTItXG5rZXJuZWwvdXRzbmFtZS5jOjUzOlx0ZXJyID0gbnNfY29tbW9uX2luaXQobnMpO1xua2VybmVsL3V0c25hbWUuYy01NC1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU1MD1zdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU3My1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NzQ6XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTc1LVx0aWYgKHJ2KVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMjYzPXZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyOTItXHRwcmVpbml0X25ldChcdTAwMjZpbml0X25ldCwgXHUwMDI2aW5pdF91c2VyX25zKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjkzOlx0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjk0LVx0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgc2h1ZmZsaW5nIHRoaW5ncyBhcm91bmQgaW4gYGNvcHlfbmV0X25zYC4gUHJldmlvdXNseSwgaXQgd2FzIGBwcmVpbml0X25ldGAgd2hpY2ggdGhlbiBjYWxsZWQgYG5zX2NvbW1vbl9pbml0YCwgdGhlbiBhc3NpZ25lZCB0aGUgYHVjb3VudHNgLCBhbmQgKnRoZW4qIGdvdCB0aGUgdXNlciBuYW1lc3BhY2UuIE5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyB1cDogYHByZWluaXRfbmV0YCwgYXNzaWduIGB1Y291bnRzYCwgZ2V0IHRoZSB1c2VyIG5hbWVzcGFjZSwgYW5kICp0aGVuKiBjYWxsIGBuc19jb21tb25faW5pdGAuIFRoZSBjcnVjaWFsIGRpZmZlcmVuY2UgaXMgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIG5vdyBjYWxsZWQgKmFmdGVyKiBzb21lIGNydWNpYWwgc3RlcHMuCgpgcHJlaW5pdF9uZXRgIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzLgoKVGhlIHJlYWwgc2hpZnQgaGVyZSBpcyB0aGUgZXJyb3IgaGFuZGxpbmcuIElmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgcHJldmlvdXMgY29kZSBkaWRuJiMzOTt0IGhhdmUgdGhpcyBqdW1wLCBzbyBgbnNfY29tbW9uX2ZyZWVgIHdvdWxkIGFsd2F5cyBoYXZlIGJlZW4gY2FsbGVkLiBOb3csIGl0IHNraXBzIGBuc19jb21tb25fZnJlZShuZXQpYCBpbiB0aGUgZXJyb3IgY2FzZS4gVGhhdCBtZWFucyBzb21ldGhpbmcgaGFzIGhhcHBlbmVkIHRoYXQgaXMgd29ydGggYXZvaWRpbmcgZnJlZWluZywgb3IgaXNuJiMzOTt0IHNhZmUgdG8gZnJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAganVtcCBpcyBhY3R1YWxseSBkb2luZy4gV2hhdCBhcmUgdGhlIHNpZGUgZWZmZWN0cywgYW5kIHdoeSBpcyBgbnNfY29tbW9uX2ZyZWVgIGJlaW5nIHNraXBwZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHB1dF91c2VybnNfbm9fY29tbW9uYCBwYXRoIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTcxOlx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTcyOlx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbiA1NzU6XHRcdGlmIChydilcbiA1NzY6XHRcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbiA1Nzc6XHRcbiA1Nzg6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU3OTpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MDpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgxOlx0XG4gNTgyOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4MzpcdFxuIDU4NDpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4NzpcdHB1dF91c2VybnM6XG4gNTg4Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTg5Olx0cHV0X3VzZXJuc19ub19jb21tb246XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5NTpcdGRlY191Y291bnRzOlxuIDU5NjpcdFx0XHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XG4gNTk3Olx0XHRcdHJldHVybiBFUlJfUFRSKHJ2KTtcbiA1OTg6XHRcdH1cbiA1OTk6XHRcdHJldHVybiBuZXQ7XG4gNjAwOlx0fVxuIDYwMTpcdFxuIDYwMjpcdC8qKlxuIDYwMzpcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XG4gNjA0Olx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UgaW4gcXVlc3Rpb24gKGNhbiBiZSBOVUxMKVxuIDYwNTpcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjA2Olx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjA3Olx0ICpcbiA2MDg6XHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxuIDYwOTpcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxuIDYxMDpcdCAqL1xuIDYxMTpcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXG4gNjEyOlx0e1xuIDYxMzpcdFx0aWYgKG5ldCkge1xuIDYxNDpcdFx0XHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxNTpcdFx0XHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxNjpcdFxuIDYxNzpcdFx0XHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcbiA2MTg6XHRcdFx0XHQqdWlkID0gbnNfcm9vdF91aWQ7XG4gNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gYW5kIFBvdGVudGlhbCBMZWFrKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBwcmVpbml0X25ldGAgc2V0cyBgbmV0LSZndDtwYXNzaXZlYCB0byAxIHVzaW5nIGByZWZjb3VudF9zZXRgLiBTbywgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50IGlzIHNldC4gVGhlbiwgdGhlcmUmIzM5O3MgYG5zX2NvbW1vbl9pbml0YC4gSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgdGhlIGNvZGUganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgbWlnaHQgYXJpc2UuCgpgcHV0X3VzZXJuc19ub19jb21tb25gIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgLiBJZiB0aGUgY291bnQgZ29lcyB0byB6ZXJvLCB0aGUgbmFtZXNwYWNlIGlzIGZyZWVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4KCkJ1dCwgYmFjayB1cCBhIG1vbWVudC4gQmVmb3JlLCBpZiBgbnNfY29tbW9uX2luaXRgIGZhaWxlZCBpbnNpZGUgYHByZWluaXRfbmV0YCwgdGhlIGNvZGUgcmV0dXJuZWQgZnJvbSBgcHJlaW5pdF9uZXRgIGRpcmVjdGx5IGFuZCB3ZW50IHRvIGBkZWNfdWNvdW50c2AuIEFuZCBgZGVjX3Vjb3VudHNgIG9ubHkgZGVjcmVtZW50cyBgdWNvdW50c2AgYW5kIHJldHVybnMuIFRoZSBvcmlnaW5hbCBwYXRoIHdlbnQgdGhyb3VnaCBgY29weV9uZXRfbnNgIHdoZXJlIHRoZSBlcnJvciBoYW5kbGluZyB3YXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgYG5ldGAsIHdhcyBuZXZlciBmcmVlZCBpbiB0aGF0IHBhdGguCgpIbW0sIHNvIGl0IGxvb2tzIGxpa2UgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgcHJldmlvdXNseSwgYG5ldGAgd2FzIGxlYWtlZC4gTm93LCBsZXQgbWUgcmUtZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0YCB3aXRoaW4gdGhlIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG1lbW9yeSBsZWFrIGluIHRoZSBvbGRlciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzMDpcdFx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobmV0LVx1MDAzZWdlbikpO1xuIDUzMTpcdFxuIDUzMjpcdCNpZmRlZiBDT05GSUdfUkVGX1RSQUNLRVJcbiA1MzM6XHRcdFx0LyogVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhY2tlcnMgbGVmdCB0aGVyZS4gKi9cbiA1MzQ6XHRcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyKTtcbiA1MzU6XHRcdFx0aWYgKCFuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIuZGVhZClcbiA1MzY6XHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuIDUzNzpcdCNlbmRpZlxuIDUzODpcdFxuIDUzOTpcdFx0XHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xuIDU0MDpcdFx0XHRsbGlzdF9hZGQoXHUwMDI2bmV0LVx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1NDE6XHRcdH1cbiA1NDI6XHR9XG4gNTQzOlx0XG4gNTQ0Olx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1NDU6XHR7XG4gNTQ2Olx0XHRpZiAobnMpXG4gNTQ3Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcbiA1NDg6XHR9XG4gNTQ5Olx0XG4gNTUwOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1MTpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTI6XHR7XG4gNTUzOlx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTQ6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTU6XHRcdGludCBydjtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU1ODpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NTk6XHRcbiA1NjA6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTYxOlx0XHRpZiAoIXVjb3VudHMpXG4gNTYyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2MzpcdFxuIDU2NDpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY1Olx0XHRpZiAoIW5ldCkge1xuIDU2NjpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTY3Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTY4Olx0XHR9XG4gNTY5Olx0XG4gNTcwOlx0XHRwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuIDU3MTpcdFx0bmV0LVx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xuIDU3MjpcdFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XG4gNTczOlx0XG4gNTc0Olx0XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG4gNTc1Olx0XHRpZiAocnYpXG4gNTc2Olx0XHRcdGdvdG8gcHV0X3VzZXJuc19ub19jb21tb247XG4gNTc3Olx0XG4gNTc4Olx0XHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1Nzk6XHRcdGlmIChydiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgQWxsb2NhdGlvbiBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIGBuZXRfYWxsb2MoKWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGBuZXRgIHN0cnVjdHVyZS4gSG1tLCBJIHJlY2FsbCBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLiBJZiB0aGUgYHByZWluaXRfbmV0YCBmdW5jdGlvbiBoYWQgZmFpbGVkIGVhcmxpZXIsIHRoZXJlJiMzOTtzIGEganVtcCBzdHJhaWdodCB0byBgZGVjX3Vjb3VudHNgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgZGVjX3Vjb3VudHNgICpkb2VzbiYjMzk7dCogZnJlZSB0aGUgYG5ldGAgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3Mgc2tpcHBpbmcgdGhlIG5lY2Vzc2FyeSBkZWFsbG9jYXRpb24gc3RlcC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1lbW9yeSBsZWFrIGlmIGBwcmVpbml0X25ldGAgZXZlciBiYWlscyBvdXQuIExldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGxvZ2ljIHdpdGhpbiBgbmV0X2FsbG9jKClgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMsIGFzIHdlbGwgYXMgdGhlIGFzc3VtZWQgYmVoYXZpb3VyIG9mIGBkZWNfdWNvdW50c2AuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGhvdyB0aGlzIGlzIGFsbCBzdXBwb3NlZCB0byB3b3JrIGFuZCB3aGVyZSB0aGUgbGVhayBtaWdodCBiZSBoYXBwZW5pbmcuIFRoZSBhbGxvY2F0aW9uIHBhdGggbmVlZHMgdG8gYmUgZnVsbHkgZGlzc2VjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTY2PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2dlbl9wdHJzID0gSU5JVElBTF9ORVRfR0VOX1BUUlM7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNjctXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6Njg6c3RhdGljIHN0cnVjdCBuZXRfZ2VuZXJpYyAqbmV0X2FsbG9jX2dlbmVyaWModm9pZClcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy02OS17XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTgzPXN0YXRpYyBpbnQgbmV0X2Fzc2lnbl9nZW5lcmljKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLCB2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy05NS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo5NjpcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy05Ny1cdGlmICghbmcpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTQ3Nj1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldG5zX3dxO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3Ny1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0Nzg6c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3OS17XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ4Mi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0ODM6XHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDg0LVx0aWYgKCFuZylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTUwPXN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTYzLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU2NDpcdG5ldCA9IG5ldF9hbGxvYygpO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU2NS1cdGlmICghbmV0KSB7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjM9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3OC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjc5Olx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyODAtXHRpZiAoIW5nKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMzgwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM5NS1cdFx0ICogcGVybmV0X29wc19yd3NlbS4gQnV0IFdSSVRFX09OQ0UgaXMgbmVlZGVkIHRvIHByb3RlY3Rcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzk2Olx0XHQgKiBuZXRfYWxsb2NfZ2VuZXJpYy5cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzk3LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgbmV0X2FsbG9jKClgJiMzNDsgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZXRfYWxsb2MoKWAqKgoKQWxyaWdodCwgKm5ldF9hbGxvYygpKi4gVGhhdCB1c3VhbGx5IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBicmVhayBkb3duIHdoYXQgdGhhdCBpbXBsaWVzOgoKKiAgIEkgaW5zdGFudGx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGV4aGF1c3Rpb24uIElzIHRoaXMgYSBjdXN0b20gYWxsb2NhdG9yPyBJcyBpdCB1c2luZyBzbGFiPyBCdWRkeT8gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eT8KKiAgIEnigJltIGFscmVhZHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIElzIHRoaXMgZm9yIGEgc29ja2V0IGJ1ZmZlciAoc2tiKT8gQSByb3V0ZT8gQSBmbG93IHRhYmxlIGVudHJ5PyBUaGlzJiMzOTtsbCBkcml2ZSBteSBleHBlY3RhdGlvbnMgZm9yIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBsb2NrIGNvbnRlbnRpb24uCiogICBJIGFsc28gbmVlZCB0byBjaGVjayBob3cgdGhleSBoYW5kbGUgZXJyb3JzLiBEb2VzIGl0IHJldHVybiBOVUxMIG9uIGZhaWx1cmUsIG9yIGRvZXMgaXQgdHJpZ2dlciBhbiBPT00gY29uZGl0aW9uPyBIb3cgZ3JhY2VmdWxseSBpcyB0aGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjYWxsaW5nIGNvZGU/IEFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyB0byB3YXRjaCBmb3I/CiogICBJIHdhbnQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zLiBJcyB0aGVyZSBlbm91Z2ggbWVtb3J5PyBJcyB0aGVyZSBhIHNwaW5sb2NrIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbGltaXRzIGluIHBsYWNlPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgYSBmYWlsZWQgYWxsb2NhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/CiogICBGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXTigJlzIGFsbG9jYXRlZCBhbmQgd2hlcmUgaXQgaXMgZnJlZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiBgbmV0X2FsbG9jKClgIHRvIGl0cyBjb3JyZXNwb25kaW5nIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZG91YmxlLWZyZWVzLgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB0aGV5IGFyZSByZWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Nzg6XHRzdGF0aWMgc3RydWN0IG5ldCAqbmV0X2FsbG9jKHZvaWQpXG4gNDc5Olx0e1xuIDQ4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbiA0ODE6XHRcdHN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7XG4gNDgyOlx0XG4gNDgzOlx0XHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XG4gNDg0Olx0XHRpZiAoIW5nKVxuIDQ4NTpcdFx0XHRnb3RvIG91dDtcbiA0ODY6XHRcbiA0ODc6XHRcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xuIDQ4ODpcdFx0aWYgKCFuZXQpXG4gNDg5Olx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gNDkwOlx0XG4gNDkxOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNDkyOlx0XHRuZXQtXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcbiA0OTM6XHRcdGlmICghbmV0LVx1MDAzZWtleV9kb21haW4pXG4gNDk0Olx0XHRcdGdvdG8gb3V0X2ZyZWVfMjtcbiA0OTU6XHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNla2V5X2RvbWFpbi1cdTAwM2V1c2FnZSwgMSk7XG4gNDk2Olx0I2VuZGlmXG4gNDk3Olx0XG4gNDk4Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVx1MDAzZWdlbiwgbmcpO1xuIDQ5OTpcdG91dDpcbiA1MDA6XHRcdHJldHVybiBuZXQ7XG4gNTAxOlx0XG4gNTAyOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTAzOlx0b3V0X2ZyZWVfMjpcbiA1MDQ6XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUwNTpcdFx0bmV0ID0gTlVMTDtcbiA1MDY6XHQjZW5kaWZcbiA1MDc6XHRvdXRfZnJlZTpcbiA1MDg6XHRcdGtmcmVlKG5nKTtcbiA1MDk6XHRcdGdvdG8gb3V0O1xuIDUxMDpcdH1cbiA1MTE6XHRcbiA1MTI6XHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyB2b2lkIG5ldF9jb21wbGV0ZV9mcmVlKHZvaWQpXG4gNTE1Olx0e1xuIDUxNjpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcbiA1MTc6XHRcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XG4gNTE4Olx0XG4gNTE5Olx0XHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cbiA1MjA6XHRcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1MjE6XHRcbiA1MjI6XHRcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcbiA1MjM6XHRcdFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XG4gNTI0Olx0XG4gNTI1Olx0fVxuIDUyNjpcdFxuIDUyNzpcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBIENyaXRpY2FsIE92ZXJzaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHJldmlld2luZyB0aGlzIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3Mgbm90IHNpdHRpbmcgcmlnaHQuIEJlZm9yZSwgaWYgYHByZWluaXRfbmV0YCBmYWlsZWQsIGl0IHJldHVybmVkIGFuIGVycm9yLCBhbmQgdGhlIGNvZGUganVtcGVkIHRvIGBkZWNfdWNvdW50c2AuIEkgcmVtZW1iZXIgdGhhdCBtdWNoLgoKYGBgYwoJcnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwoJaWYgKHJ2ICZsdDsgMCkKCQlnb3RvIGRlY191Y291bnRzOwpgYGAKCkFuZCBgZGVjX3Vjb3VudHNgIGNvcnJlY3RseSBkZWNyZW1lbnRlZCB0aGUgdXNlciBjb3VudHMuCgpgYGBjCmRlY191Y291bnRzOgoJCWRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTsKCQlyZXR1cm4gRVJSX1BUUihydik7CmBgYAoKQnV04oCmIHdhaXQgYSBtaW51dGUuIElmIGBwcmVpbml0X25ldGAgZmFpbHMsIGFuZCBgbmV0YCB3YXMgYWxsb2NhdGVkIGVhcmxpZXIgYnkgYG5ldF9hbGxvY2AsIHRoZW4gYG5ldGAgaXMgbGVha2VkISBgZGVjX3Vjb3VudHNgIGRlY3JlbWVudHMgdWNvdW50cywgYnV0IGl0ICpkb2VzbiYjMzk7dCogZnJlZSB0aGUgYWxsb2NhdGVkIG5ldHdvcmsgbmFtZXNwYWNlLCBgbmV0YC4gVGhhdCBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSB2ZXJ5IGltcGFjdGZ1bCBtZW1vcnkgbGVhayBpZiB0aGF0IGZhaWx1cmUgbW9kZSBpcyBoaXQgb2Z0ZW4uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHByZWluaXRfbmV0YCYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbm90aGVyIGV4aXQgcGF0aCB0aGF0IGRvZXMgcHJvcGVybHkgZnJlZSBgbmV0YC4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xuIDQwMzpcdHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldC1cdTAwM2VwYXNzaXZlLCAxKTtcbiA0MDY6XHRcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRfcmVmY250XCYjMzQ7KTtcbiA0MDc6XHRcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRfbm90cmVmY250XCYjMzQ7KTtcbiA0MDg6XHRcbiA0MDk6XHRcdG5ldC1cdTAwM2VoYXNoX21peCA9IGdldF9yYW5kb21fdTMyKCk7XG4gNDEwOlx0XHRuZXQtXHUwMDNlZGV2X2Jhc2Vfc2VxID0gMTtcbiA0MTE6XHRcdG5ldC1cdTAwM2V1c2VyX25zID0gdXNlcl9ucztcbiA0MTI6XHRcbiA0MTM6XHRcdGlkcl9pbml0KFx1MDAyNm5ldC1cdTAwM2VuZXRuc19pZHMpO1xuIDQxNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZW5zaWRfbG9jayk7XG4gNDE1Olx0XHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VpcHY0LnJhX211dGV4KTtcbiA0MTY6XHRcbiA0MTc6XHQjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4gNDE4Olx0XHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiA0MTk6XHRcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCwgcnRubF9uZXRfbG9ja19jbXBfZm4sIE5VTEwpO1xuIDQyMDpcdFx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VydG5sX3dvcmssIHJ0bmxfbmV0X3dvcmtfZnVuYyk7XG4gNDIxOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuIDQyMjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiA0MjM6XHQjZW5kaWZcbiA0MjQ6XHRcbiA0MjU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9hbGwpO1xuIDQyNjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiA0Mjc6XHRcdHByZWluaXRfbmV0X3N5c2N0bChuZXQpO1xuIDQyODpcdH1cbiA0Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIE5hbWVzcGFjZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIGNvZGUgYWdhaW4uIFByZXZpb3VzbHksIGBwcmVpbml0X25ldGAgd2FzIGNhbGxpbmcgYG5zX2NvbW1vbl9pbml0KG5ldClgIGRpcmVjdGx5LCByaWdodD8gQW5kIHRoYXQgY291bGQgZmFpbC4gSWYgaXQgKmRpZCogZmFpbCwgYHByZWluaXRfbmV0YCByZXR1cm5lZCBhbiBlcnJvciwgYW5kIGBjb3B5X25ldF9uc2AgaGFkIGEgbGVhayBiZWNhdXNlIGl0IGp1bXBlZCB0byBgZGVjX3Vjb3VudHNgIGFuZCB0aGUgYG5ldGAgc3RydWN0IHdhc24mIzM5O3QgcHJvcGVybHkgY2xlYW5lZCB1cC4gQSBjbGFzc2ljIG92ZXJzaWdodCEKCk5vdywgaXQmIzM5O3MgZGlmZmVyZW50LiBgcHJlaW5pdF9uZXRgICpkb2VzbiYjMzk7dCogY2FsbCBgbnNfY29tbW9uX2luaXRgIGFueW1vcmUuIEluc3RlYWQsIGl0IHNlZW1zIHRvIGp1c3QgaW5pdGlhbGl6ZSBgbmV0LSZndDtwYXNzaXZlYCB0byAxLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIHBhc3NpdmUgaW5pdGlhbGl6YXRpb24sIEkgd29uZGVyIHdoeS4gVGhlbiwgYGNvcHlfbmV0X25zYCBjYWxscyBgbnNfY29tbW9uX2luaXRgLiBOb3csIGlmICp0aGF0KiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgcHV0X3VzZXJuc19ub19jb21tb25gLCB3aGljaCB0aGVuIGNhbGxzIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAuCgpBaGEhIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAgKmRlY3JlbWVudHMqIGBuZXQtJmd0O3Bhc3NpdmVgIHRvIDAsIHdoaWNoIHNob3VsZCB0aGVuIGZyZWUgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBpZiB0aGUgY291bnRlciBpcyBhdCAwLiBTbywgaXQgKnNob3VsZCogY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyBgbnNfY29tbW9uX2luaXRgLiBCdXQgd2FpdC4uLiBkaWQgSSByZWFkIHRoYXQgY29ycmVjdGx5PyBgbmV0X3Bhc3NpdmVfZGVjYCAqZnJlZXMqIGBuZXRgPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gdmVyaWZ5ISBJIGhhZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3Bhc3NpdmVfZGVjYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGBuZXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTI3Olx0dm9pZCBuZXRfcGFzc2l2ZV9kZWMoc3RydWN0IG5ldCAqbmV0KVxuIDUyODpcdHtcbiA1Mjk6XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bmV0LVx1MDAzZXBhc3NpdmUpKSB7XG4gNTMwOlx0XHRcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXHUwMDNlZ2VuKSk7XG4gNTMxOlx0XG4gNTMyOlx0I2lmZGVmIENPTkZJR19SRUZfVFJBQ0tFUlxuIDUzMzpcdFx0XHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xuIDUzNDpcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xuIDUzNTpcdFx0XHRpZiAoIW5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlci5kZWFkKVxuIDUzNjpcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTM3Olx0I2VuZGlmXG4gNTM4Olx0XG4gNTM5Olx0XHRcdC8qIFdhaXQgZm9yIGFuIGV4dHJhIHJjdV9iYXJyaWVyKCkgYmVmb3JlIGZpbmFsIGZyZWUuICovXG4gNTQwOlx0XHRcdGxsaXN0X2FkZChcdTAwMjZuZXQtXHUwMDNlZGVmZXJfZnJlZV9saXN0LCBcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xuIDU0MTpcdFx0fVxuIDU0MjpcdH1cbiA1NDM6XHRcbiA1NDQ6XHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDU0NTpcdHtcbiA1NDY6XHRcdGlmIChucylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIE5ldHdvcmsgTmFtZXNwYWNlcyoqCgpPa2F5LCBzbyBgbmV0X3Bhc3NpdmVfZGVjYCAqZG9lcyogZnJlZSBgbmV0YCDigJMgd2VsbCwgYWRkcyBpdCB0byBhIGRlZmVycmVkIGZyZWUgbGlzdCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZm9yIHRoaXMgcHVycG9zZS4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhhdCYjMzk7cyBnb29kLCBhIGRlZmluaXRlIGltcHJvdmVtZW50LgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIuIGBuc19jb21tb25faW5pdGAgY2FsbHMgYF9fbnNfY29tbW9uX2luaXRgLCB3aGljaCB0aGVuIGNhbGxzIGBwcm9jX2FsbG9jX2ludW1gLiBBaCwgcmlnaHQsIGBwcm9jX2FsbG9jX2ludW1gIGNhbiBmYWlsLCB1c3VhbGx5IGR1ZSB0byBtZW1vcnkgZXhoYXVzdGlvbiBvciBydW5uaW5nIG91dCBvZiBJRHMuIElmICp0aGF0KiBoYXBwZW5zLCBgY29weV9uZXRfbnNgIGxlYWtlZCB0aGUgYG5ldGAgc3RydWN0dXJlLiBTbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIGl0IHBsdWdzIGEgbWVtb3J5IGxlYWssIHdoaWNoIGlzIGEgYmlnIGRlYWwuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiB0aGlzPyBNZW1vcnkgbGVha3Mgb24gZXJyb3IgcGF0aHMgYXJlIHByaW1lIGZ1enppbmcgdGFyZ2V0cywgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGVycm9yIHBhdGg6IGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGF0IGZhaWx1cmU/IGBuc19jb21tb25faW5pdGAgaXMgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgZnJvbSBhIGdsb2JhbCBJREEuIEl0IGZhaWxzIGlmIHRoZSBJREEgYWxsb2NhdGlvbiBmYWlscyAtIHdoaWNoIGlzIGFuIGVycm9yIHBhdGguIEdvb2QuIFRoaXMgaXMgc291bmRpbmcgbGlrZSBhIHZhbHVhYmxlIHRhcmdldC4KCldhaXQsIGlmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGBjb3B5X25ldF9uc2AgbGVha3MuIFJpZ2h0LCB0aGUgZml4IGluaXRpYWxpemVzIGBuZXQtJmd0O3Bhc3NpdmVgICpiZWZvcmUqIGNhbGxpbmcgYG5zX2NvbW1vbl9pbml0YC4gVGhlbiwgaWYgdGhlIGxhdHRlciBmYWlscywgYG5ldF9wYXNzaXZlX2RlYyhuZXQpYCBnZXRzIGNhbGxlZCwgYW5kIGZyZWVzIGl0LiAgQWdhaW4sIGJ1ZyBmaXgsIHByZXZlbnRpbmcgYSBtZW1vcnkgbGVhay4KClNvLCBpcyBmdXp6aW5nIGp1c3RpZmllZD8gVGhpcyBjaGFuZ2UgbW9kaWZpZXMgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gIGBjb3B5X25ldF9uc2AgaXMgcmVhY2hhYmxlIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgYW5kIGB1bnNoYXJlKENMT05FX05FV05FVClgLiAgRGVmaW5pdGVseSByZWFjaGFibGUsIGRlZmluaXRlbHkgdGVzdGFibGUuIEZ1enppbmcgYGNvcHlfbmV0X25zYCBkaXJlY3RseSAod2hpY2ggbWFwcyB0byBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBzaG91bGQgYWJzb2x1dGVseSBiZSBkb2luZy4KCkhhbmcgb24sIGlzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gdG8gZm9jdXMgb24/IFllYWgsIGBjb3B5X25ldF9uc2Agc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3Qgc3RhdGljIGZpcnN0LiBHb3R0YSBjaGVjayB0aGUgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU0ND12b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NDktXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NTUwOnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTEtXHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNvcHlfbmV0X25zYCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYGNvcHlfbmV0X25zYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBub24tc3RhdGljIGZ1bmN0aW9uIHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBidWlsZC10aW1lIGRlY2lzaW9ucyBhcmUgYXQgcGxheS4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzaXR1YXRpb24/CgpNeSBpbnN0aW5jdHMgdGVsbCBtZSB0byBjaGVjayBmb3IgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIGlzIG5ldHdvcmtpbmcgY29kZSwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIGtleSB0byBpdCBhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmV0L2NvcmUvTWFrZWZpbGVgIGZvciBidWlsZC10aW1lIGZsYWdzIG9yIHRoZSBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBmaWxlIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxlYWQgb24gd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBiZWhhdmlvciBvZiBgY29weV9uZXRfbnNgLiBJdCYjMzk7cyBsaWtlbHkgb25lIG9mIHRob3NlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Nj1vYmoteSA6PSBzb2NrLm8gc2tidWZmLm8gZGF0YWdyYW0ubyBzdHJlYW0ubyBzY20ubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6NzpcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtOC1cdCBmbG93X2Rpc3NlY3Rvci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgbmV0X25hbWVzcGFjZS5jYCBmaWxlIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkmIzM5O20gYSBsaXR0bGUgZnV6enkgb24gd2hlbiBgY29weV9uZXRfbnNgIGdldHMgaW5jbHVkZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYENPTkZJR19ORVRfTlNgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXJlIHVzZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0yMTI9ZXh0ZXJuIHN0cnVjdCBuZXQgaW5pdF9uZXQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNC0jaWZkZWYgQ09ORklHX05FVF9OU1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjIxNTpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTYtXHRcdFx0c3RydWN0IG5ldCAqb2xkX25ldCk7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIyND1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjbGVhbnVwX25ldF90YXNrO1xuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjI5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIzMC1cdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfTlNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGNvcHlfbmV0X25zYCBhbmQgaG93IGl0IHdvcmtzLiBJIGtub3cgdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJZiB0aGF0JiMzOTtzICplbmFibGVkKiwgdGhlbiBgY29weV9uZXRfbnNgIGlzIGFjdHVhbGx5IGEgcmVhbCwgZnVuY3Rpb25pbmcgZnVuY3Rpb24uIEJ1dCwgaWYgYENPTkZJR19ORVRfTlNgIGlzICpkaXNhYmxlZCosIGl0IGVzc2VudGlhbGx5IHR1cm5zIGludG8gYSBzdGF0aWMgaW5saW5lLiBTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYE5FVF9OU2AgaXMgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGlzIHNjZW5hcmlvLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9OU2AsIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBuZXR3b3JrIG5hbWVzcGFjZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9OUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTQ1Mj1jb25maWcgUElEX05TXG4tLVxuaW5pdC9LY29uZmlnLTE0NTktXG5pbml0L0tjb25maWc6MTQ2MDpjb25maWcgTkVUX05TXG5pbml0L0tjb25maWctMTQ2MS1cdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG4tLVxubmV0L0tjb25maWcuZGVidWctMTEtXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYE5FVF9OU2AsIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIGluaXQvS2NvbmZpZzogTkVUX05TIFRlcnJpdG9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgemVyb2luZyBpbiBvbiBhbnl0aGluZyByZWxhdGVkIHRvIGBORVRfTlNgLiBUaGUgZ29hbCBpcyB0byBzZWUgaG93IHRoaXMgZmVhdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKG1lLCB1c3VhbGx5IHZpYSB0aGUgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2VzKSBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzLi4uIGVzc2VudGlhbGx5LCB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgYE5FVF9OU2AmIzM5O3MgYmVoYXZpb3IgaXMgY29udHJvbGxlZC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBBbmQgSSBob3BlIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHJlbWVtYmVyIGhvdyB0aGlzIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBncmVhdGVyIGxpbnV4IGtlcm5lbCBwaWN0dXJlLiBJIHNob3VsZCBiZSBhYmxlIHRvIG1hcCBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGl0cyByZWxldmFudCBtb2R1bGVzLCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHN0YXRpY2FsbHkgYnVpbHQsIG9yIGR5bmFtaWNhbGx5IGxvYWRlZC4KCkkgd2lsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcXVpcmtzIGluIHRoZSBmZWF0dXJlLCBtYXliZSB0aGF0IGl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHRcdGhlbHBcbjE0NTY6XHRcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcbjE0NTc6XHRcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XG4xNDU4Olx0XHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXG4xNDU5Olx0XG4xNDYwOlx0Y29uZmlnIE5FVF9OU1xuMTQ2MTpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuMTQ2MjpcdFx0ZGVwZW5kcyBvbiBORVRcbjE0NjM6XHRcdGRlZmF1bHQgeVxuMTQ2NDpcdFx0aGVscFxuMTQ2NTpcdFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcbjE0NjY6XHRcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXG4xNDY3Olx0XG4xNDY4Olx0ZW5kaWYgIyBOQU1FU1BBQ0VTXG4xNDY5Olx0XG4xNDcwOlx0Y29uZmlnIENIRUNLUE9JTlRfUkVTVE9SRVxuMTQ3MTpcdFx0Ym9vbCBcJiMzNDtDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFwmIzM0O1xuMTQ3MjpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4xNDczOlx0XHRzZWxlY3QgUFJPQ19DSElMRFJFTlxuMTQ3NDpcdFx0c2VsZWN0IEtDTVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiBgTkVUYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZmFsbHMgdW5kZXIgYE5BTUVTUEFDRVNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzLiBSaWdodCwgc28gYE5FVF9OU2AgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgdGhlIHR3byBrZXkgY29uZmlncyBJIG5lZWQgdG8gZm9jdXMgb24uIFdhaXQgYSBtaW51dGXigKYgd2FzbiYjMzk7dCBgTkFNRVNQQUNFU2AgYSBtZW51Y29uZmlnPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIGFuZCBzZWUgaG93IGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZXJlLiBOZWVkIHRvIGdldCB0aGUgaGllcmFyY2h5IHN0cmFpZ2h0IGJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkFNRVNQQUNFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM5OT1lbmRpZiAjIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xNDAwLVxuaW5pdC9LY29uZmlnOjE0MDE6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXG5pbml0L0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TmFtZXNwYWNlcyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNwoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA1MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBpbiBgY29weV9uZXRfbnNgLiBTcGVjaWZpY2FsbHksIHRoZSBsZWFrIG9jY3VycyB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMgd2l0aGluIGBjb3B5X25ldF9uc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY3JpdGljYWwgZml4IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGlzIHdvcnRoIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKSSB0aGluayBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGNvcHlfbmV0X25zYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYXMgSSBrbm93IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcmVpbml0X25ldGAgYW5kIGBuZXRfbnNfaW5pdGAgYXJlIGluIHRoYXQgc3BhY2UuIEhvd2V2ZXIsIGBwcmVpbml0X25ldGAgaXMgc3RhdGljLCBhbmQgYG5ldF9uc19pbml0YCBpcyBvbmx5IGNhbGxlZCBhdCBib290LiBTbywgYGNvcHlfbmV0X25zYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAsIGlzIHRoZSBrZXkuIEFuZCwgSSBzZWUgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5ldF9uc19pbml0YCwgYnV0IHRoYXQgaXMgYXQgYm9vdCB0aW1lIGluaXRpYWxpemF0aW9uLCBzbyBpdOKAmXMgbm90IHJlYWxseSByZWxldmFudCBoZXJlLCBpdCYjMzk7cyBqdXN0IHRoZSBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmlyc3QgbmFtZXNwYWNlLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBgTkVUX05TYCBhbmQgYE5BTUVTUEFDRVNgIGFyZSB0aGUgZW5hYmxpbmcgZmFjdG9ycywgYW5kIGFyZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGUgY29kZSBwYXRoLiBJIG1pZ2h0IG5lZWQgYFVTRVJfTlNgIHRvIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLCBidXQgYE5FVF9OU2AgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHM6KiogXFsmIzM0O2NvcHlcX25ldFxfbnMmIzM0O10KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcWyYjMzQ7TkVUXF9OUyYjMzQ7LCAmIzM0O05BTUVTUEFDRVMmIzM0O10KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBieSBtb3ZpbmcgYG5zX2NvbW1vbl9pbml0KClgIG91dCBvZiBgcHJlaW5pdF9uZXQoKWAgYW5kIGludG8gaXRzIGNhbGxlcnMgKGBjb3B5X25ldF9ucygpYCBhbmQgYG5ldF9uc19pbml0KClgKS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb3B5X25ldF9ucygpYCB0byBwcm9wZXJseSBjbGVhbiB1cCByZXNvdXJjZXMgaWYgYG5zX2NvbW1vbl9pbml0KClgIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGR1cmluZyBuYW1lc3BhY2UgY3JlYXRpb24uIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgYW5kIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzM0MDQzZDI2ZTZjMTBiNjNkZDVlZDJjZTJiNGMyMDlhZjlhNzdiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA4OjU4OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTQwMCwxNCAmIzQzOzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiYjNDM7c3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucykKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcmVmY291bnRfc2V0KCZhbXA7bmV0LSZndDtwYXNzaXZlLCAxKTsKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRfcmVmY250JiMzNDspOwogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7bmV0LSZndDtub3RyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldF9ub3RyZWZjbnQmIzM0Oyk7CkBAIC00MzEsNyAmIzQzOzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXQtJmd0O3B0eXBlX2FsbCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXQtJmd0O3B0eXBlX3NwZWNpZmljKTsKIAlwcmVpbml0X25ldF9zeXNjdGwobmV0KTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU3NCwxMiAmIzQzOzU2NywxNCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWdvdG8gZGVjX3Vjb3VudHM7CiAJfQogCi0JcnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwotCWlmIChydiAmbHQ7IDApCi0JCWdvdG8gZGVjX3Vjb3VudHM7CiYjNDM7CXByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7CiAJbmV0LSZndDt1Y291bnRzID0gdWNvdW50czsKIAlnZXRfdXNlcl9ucyh1c2VyX25zKTsKIAomIzQzOwlydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7CiYjNDM7CWlmIChydikKJiM0MzsJCWdvdG8gcHV0X3VzZXJuc19ub19jb21tb247CiYjNDM7CiAJcnYgPSBkb3duX3JlYWRfa2lsbGFibGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKIAlpZiAocnYgJmx0OyAwKQogCQlnb3RvIHB1dF91c2VybnM7CkBAIC01OTEsNiAmIzQzOzU4Niw3IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywKIAlpZiAocnYgJmx0OyAwKSB7CiBwdXRfdXNlcm5zOgogCQluc19jb21tb25fZnJlZShuZXQpOwomIzQzO3B1dF91c2VybnNfbm9fY29tbW9uOgogI2lmZGVmIENPTkZJR19LRVlTCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKQEAgLTEyOTMsNyAmIzQzOzEyODksOCBAQCB2b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKQogCSAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlCiAJICogaGFzIGEgc3RhdGljIGlub2RlIG51bWJlci4KIAkgKi8KLQlpZiAocHJlaW5pdF9uZXQoJmFtcDtpbml0X25ldCwgJmFtcDtpbml0X3VzZXJfbnMpKQomIzQzOwlwcmVpbml0X25ldCgmYW1wO2luaXRfbmV0LCAmYW1wO2luaXRfdXNlcl9ucyk7CiYjNDM7CWlmIChuc19jb21tb25faW5pdCgmYW1wO2luaXRfbmV0KSkKIAkJcGFuaWMoJiMzNDtDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZSYjMzQ7KTsKIAogCWRvd25fd3JpdGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTYKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gUmVmYWN0b3JpbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcHJlaW5pdF9uZXRgIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGUgb2YgYHByZWluaXRfbmV0YCB0byBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gSG1tLCBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxzbyBtb3ZpbmcgdGhlIGNhbGwgdG8gYG5zX2NvbW1vbl9pbml0KG5ldClgIG91dCBvZiBgcHJlaW5pdF9uZXRgIGFuZCBpbnRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4KCkluIHRoZSBgY29weV9uZXRfbnNgIGZ1bmN0aW9uLCBgbnNfY29tbW9uX2luaXQobmV0KWAgaXMgbm93IGNhbGxlZCAqYWZ0ZXIqIGBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpYCwgYWZ0ZXIgYG5ldC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7YCBhbmQgYGdldF91c2VyX25zKHVzZXJfbnMpYC4gQW5kLCBpZiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLCBpdCBub3cganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBuZXcgZXJyb3IgcGF0aCBza2lwcyBgbnNfY29tbW9uX2ZyZWUobmV0KWAgYnV0IHN0aWxsIGNhbGxzIGBrZXlfcmVtb3ZlX2RvbWFpbmAsIGBwdXRfdXNlcl9ucyh1c2VyX25zKWAsIGBuZXRfZHJvcF9ucyhuZXQpYCwgYGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKWAsIGFuZCBga21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBvZiB0aGUgcmVvcmRlcmluZy4gQnV0IHdhaXQsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCByZWZhY3RvcmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCYjMzk7cyBwcm9iYWJseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgIHdhcyBsZWFkaW5nIHRvIGluY29ycmVjdCBjbGVhbnVwIG9yIG1heWJlIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsZWFrLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIGluIGBuZXRfYWxsb2NgIChjYWxsZWQgYmVmb3JlIGBjb3B5X25ldF9uc2Agb3IgaW5zaWRlIGl0KS4gTGV0JiMzOTtzIGNoZWNrIGBjb3B5X25ldF9uc2AuLi4gYWgsIHllcywgYGNvcHlfbmV0X25zYCBkb2VzIGluZGVlZCBjYWxsIGBuZXRfYWxsb2MoKWAsIGFuZCB0aGF0IHVzZXMgYGttZW1fY2FjaGVfemFsbG9jYC4KClJpZ2h0LCBzbyBgbmV0YCBpcyAqemVyb2VkKi4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaGVyZS4gU28sIHRoZSBidWcgaXMgbW9zdCBsaWtlbHkgcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVhaywgb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHBlcmhhcHMgZXZlbiByZWZjb3VudCBwcm9ibGVtcy4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IGBuc19jb21tb25faW5pdGAgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4KCk5vIEtNU0FOIG5lZWRlZCBoZXJlLiBUaGlzIGlzIGEgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgZml4LiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgYGNvcHlfbmV0X25zYCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYnkgbW92aW5nIGBuc19jb21tb25faW5pdCgpYCBvdXQgb2YgYHByZWluaXRfbmV0KClgIGFuZCBpbnRvIGl0cyBjYWxsZXJzIChgY29weV9uZXRfbnMoKWAgYW5kIGBuZXRfbnNfaW5pdCgpYCkuIEl0IGFsc28gdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29weV9uZXRfbnMoKWAgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGlmIGBuc19jb21tb25faW5pdCgpYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBkdXJpbmcgbmFtZXNwYWNlIGNyZWF0aW9uLiBUaGUgYG5ldGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODoxMS4xNDA4MDM4NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU0Njk4MTcwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJOQU1FU1BBQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYnkgbW92aW5nIGBuc19jb21tb25faW5pdCgpYCBvdXQgb2YgYHByZWluaXRfbmV0KClgIGFuZCBpbnRvIGl0cyBjYWxsZXJzIChgY29weV9uZXRfbnMoKWAgYW5kIGBuZXRfbnNfaW5pdCgpYCkuIEl0IGFsc28gdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29weV9uZXRfbnMoKWAgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGlmIGBuc19jb21tb25faW5pdCgpYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBkdXJpbmcgbmFtZXNwYWNlIGNyZWF0aW9uLiBUaGUgYG5ldGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjExLjE0MDgxMTAwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQzNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM0MDQzZDI2ZTZjMTBiNjNkZDVlZDJjZTJiNGMyMDlhZjlhNzdiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5pbmRleCA5MTY2ZjQ2NzI5M2UwLi5kYTVmODgxZmJkM2I5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbkBAIC00MDAsMTQgKzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4gfVxcbiBcXG4gLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovXFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4rc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlLCAxKTtcXG4gXFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXFxcIm5ldF9yZWZjbnRcXFwiKTtcXG4gXFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIDEyOCwgXFxcIm5ldF9ub3RyZWZjbnRcXFwiKTtcXG5AQCAtNDMxLDcgKzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX2FsbCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX3NwZWNpZmljKTtcXG4gXFx0cHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7XFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01NzQsMTIgKzU2NywxNCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIFxcdH1cXG4gXFxuLVxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4tXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBkZWNfdWNvdW50cztcXG4rXFx0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gXFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gXFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XFxuIFxcbitcXHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XFxuK1xcdGlmIChydilcXG4rXFx0XFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcXG4rXFxuIFxcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbkBAIC01OTEsNiArNTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiBcXHRpZiAocnYgXFx1MDAzYyAwKSB7XFxuIHB1dF91c2VybnM6XFxuIFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuK3B1dF91c2VybnNfbm9fY29tbW9uOlxcbiAjaWZkZWYgQ09ORklHX0tFWVNcXG4gXFx0XFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVxcdTAwM2VrZXlfZG9tYWluKTtcXG4gI2VuZGlmXFxuQEAgLTEyOTMsNyArMTI4OSw4IEBAIHZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXFxuIFxcdCAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxuIFxcdCAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuXFxuIFxcdCAqL1xcbi1cXHRpZiAocHJlaW5pdF9uZXQoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2aW5pdF91c2VyX25zKSlcXG4rXFx0cHJlaW5pdF9uZXQoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2aW5pdF91c2VyX25zKTtcXG4rXFx0aWYgKG5zX2NvbW1vbl9pbml0KFxcdTAwMjZpbml0X25ldCkpXFxuIFxcdFxcdHBhbmljKFxcXCJDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVxcXCIpO1xcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjExLjYyMTMzNDU2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1MjcyNjEyNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSBpbiBgY29weV9uZXRfbnNgIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIHBhdGguIEZ1enppbmcgYGNvcHlfbmV0X25zYCAocmVhY2hhYmxlIHZpYSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZXMgZXhpc3QgaW4gdGhpcyBlcnJvciBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzQwNDNkMjZlNmMxMGI2M2RkNWVkMmNlMmI0YzIwOWFmOWE3N2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NTg6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTQwMCwxNCArNDAwLDggQEAgc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAvKiBpbml0IGNvZGUgdGhhdCBtdXN0IG9jY3VyIGV2ZW4gaWYgc2V0dXBfbmV0KCkgaXMgbm90IGNhbGxlZC4gKi9cbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4rc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbiB7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV0LVx1MDAzZXBhc3NpdmUsIDEpO1xuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0X3JlZmNudFwiKTtcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldF9ub3RyZWZjbnRcIik7XG5AQCAtNDMxLDcgKzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfYWxsKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9zcGVjaWZpYyk7XG4gXHRwcmVpbml0X25ldF9zeXNjdGwobmV0KTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuQEAgLTU3NCwxMiArNTY3LDE0IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdFx0Z290byBkZWNfdWNvdW50cztcbiBcdH1cbiBcbi1cdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcbi1cdGlmIChydiBcdTAwM2MgMClcbi1cdFx0Z290byBkZWNfdWNvdW50cztcbitcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gXHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiBcbitcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbitcdGlmIChydilcbitcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbitcbiBcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIFx0aWYgKHJ2IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHB1dF91c2VybnM7XG5AQCAtNTkxLDYgKzU4Niw3IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdGlmIChydiBcdTAwM2MgMCkge1xuIHB1dF91c2VybnM6XG4gXHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4rcHV0X3VzZXJuc19ub19jb21tb246XG4gI2lmZGVmIENPTkZJR19LRVlTXG4gXHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiAjZW5kaWZcbkBAIC0xMjkzLDcgKzEyODksOCBAQCB2b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxuIFx0ICogVGhpcyBjdXJyZW50bHkgY2Fubm90IGZhaWwgYXMgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2VcbiBcdCAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuXG4gXHQgKi9cbi1cdGlmIChwcmVpbml0X25ldChcdTAwMjZpbml0X25ldCwgXHUwMDI2aW5pdF91c2VyX25zKSlcbitcdHByZWluaXRfbmV0KFx1MDAyNmluaXRfbmV0LCBcdTAwMjZpbml0X3VzZXJfbnMpO1xuK1x0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0cGFuaWMoXCJDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVwiKTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODoxMS42MjEzMzU4NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTkwMzQ3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSB0byBgcHJlaW5pdF9uZXRgLiBJdCB1c2VkIHRvIHJldHVybiBhbiBgaW50YCwgYnV0IG5vdyBpdCdzIGB2b2lkYC4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5LCB0aGVzZSByZXR1cm4gdmFsdWVzIGdpdmUgdXMgc29tZSBzdGF0dXMsIGEgc3VjY2Vzcy9mYWlsdXJlIGluZGljYXRvci4gSSB3b25kZXIgd2h5IHRoZXkgcmVtb3ZlZCBpdC4uLiBMZXQncyBzZWUgd2hhdCBlbHNlIGNoYW5nZWQuXG5cbkFoLCB0aGV5IG1vdmVkIHRoZSBgbnNfY29tbW9uX2luaXQobmV0KWAgY2FsbC4gSXQgd2FzIGluc2lkZSBgcHJlaW5pdF9uZXRgIGFuZCBub3cgaXQncyBkaXJlY3RseSBjYWxsZWQgaW4gYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gU2VlbXMgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBkZWNvdXBsZSBzb21ldGhpbmcuIFRoaXMgZ2l2ZXMgbWUgYSBzbGlnaHRseSBiYWQgZmVlbGluZyBiZWNhdXNlIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgb3JkZXIgb2YgaW5pdGlhbGl6YXRpb24gaXMgc2lnbmlmaWNhbnQuIEkgbmVlZCB0byBrZWVwIHRoaXMgb3JkZXIgaW4gbWluZC5cblxuTm93LCB0aGlzIGBjb3B5X25ldF9uc2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGEgYGdvdG8gcHV0X3VzZXJuc19ub19jb21tb25gIGxhYmVsLiBUaGlzIGxhYmVsIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGEgZmFpbHVyZSBjYXNlIHdpdGhpbiBgbnNfY29tbW9uX2luaXQobmV0KWAuIEhtbSwgYW5kIGJlZm9yZSB0aGlzIGBuc19jb21tb25fZnJlZWAgaXMgY2FsbGVkLCBidXQgc2hvdWxkIGl0PyBTaG91bGRuJ3Qgd2UgYmUgY2hlY2tpbmcgaWYgYG5zX2NvbW1vbl9pbml0YCB3YXMgKmFjdHVhbGx5KiBzdWNjZXNzZnVsIGJlZm9yZSBjYWxsaW5nIGBuc19jb21tb25fZnJlZWA/IEl0J3MgaW5pdGlhbGl6aW5nIGZpZWxkcy4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiAqZmFpbHMqLCBjYWxsaW5nIGBuc19jb21tb25fZnJlZWAgbWlnaHQgY2F1c2UgaXNzdWVzLiBUaGlzIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyEgV2UgbmVlZCB0byBleGFtaW5lIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBmdW5jdGlvbiB2ZXJ5IGNhcmVmdWxseS4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMgd29ya3MsIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBoYW5kbGluZyBvZiBhIGZhaWxlZCBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjMxLjUyNDgxMTg0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwNDYzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zX2NvbW1vbl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1lc3BhY2UuYz00MjAyPXN0YXRpYyBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqYWxsb2NfbW50X25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgYm9vbCBhbm9uKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDIxOC1cXHRpZiAoYW5vbilcXG5mcy9uYW1lc3BhY2UuYzo0MjE5OlxcdFxcdHJldCA9IG5zX2NvbW1vbl9pbml0X2ludW0obmV3X25zLCBNTlRfTlNfQU5PTl9JTk8pO1xcbmZzL25hbWVzcGFjZS5jLTQyMjAtXFx0ZWxzZVxcbmZzL25hbWVzcGFjZS5jOjQyMjE6XFx0XFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV3X25zKTtcXG5mcy9uYW1lc3BhY2UuYy00MjIyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg9MTE9Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucyk7XFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDoxMjppbnQgX19uc19jb21tb25faW5pdChzdHJ1Y3QgbnNfY29tbW9uICpucywgdTMyIG5zX3R5cGUsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcywgaW50IGludW0pO1xcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTMtdm9pZCBfX25zX2NvbW1vbl9mcmVlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg9MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX25zX2luaXRfaWQoY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oLTQzLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NDQ6I2RlZmluZSBuc19jb21tb25faW5pdChfX25zKSAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjQ1OlxcdF9fbnNfY29tbW9uX2luaXQodG9fbnNfY29tbW9uKF9fbnMpLCAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDYtXFx0XFx0XFx0IG5zX2NvbW1vbl90eXBlKF9fbnMpLCAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDktXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDo1MDojZGVmaW5lIG5zX2NvbW1vbl9pbml0X2ludW0oX19ucywgX19pbnVtKSAgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NTE6XFx0X19uc19jb21tb25faW5pdCh0b19uc19jb21tb24oX19ucyksICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC01Mi1cXHRcXHRcXHQgbnNfY29tbW9uX3R5cGUoX19ucyksICAgXFxcXFxcbi0tXFxuaXBjL25hbWVzcGFjZS5jPTM5PXN0YXRpYyBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqY3JlYXRlX2lwY19ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuLS1cXG5pcGMvbmFtZXNwYWNlLmMtNjQtXFxuaXBjL25hbWVzcGFjZS5jOjY1OlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5pcGMvbmFtZXNwYWNlLmMtNjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM9MjI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICphbGxvY19jZ3JvdXBfbnModm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtMjktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzozMDpcXHRyZXQgPSBuc19jb21tb25faW5pdChuZXdfbnMpO1xcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtMzEtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9uc2NvbW1vbi5jPTExPXN0YXRpYyB2b2lkIG5zX2RlYnVnKHN0cnVjdCBuc19jb21tb24gKm5zLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMpXFxuLS1cXG5rZXJuZWwvbnNjb21tb24uYy01NS1cXG5rZXJuZWwvbnNjb21tb24uYzo1NjppbnQgX19uc19jb21tb25faW5pdChzdHJ1Y3QgbnNfY29tbW9uICpucywgdTMyIG5zX3R5cGUsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcywgaW50IGludW0pXFxua2VybmVsL25zY29tbW9uLmMtNTcte1xcbi0tXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYz03Nj1zdGF0aWMgc3RydWN0IHBpZF9uYW1lc3BhY2UgKmNyZWF0ZV9waWRfbmFtZXNwYWNlKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4tLVxcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMTA1LVxcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmM6MTA2OlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jLTEwNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM9ODE9c3RhdGljIHN0cnVjdCB0aW1lX25hbWVzcGFjZSAqY2xvbmVfdGltZV9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xMDEtXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTAyOlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xMDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTgzPWludCBjcmVhdGVfdXNlcl9ucyhzdHJ1Y3QgY3JlZCAqbmV3KVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTI4LVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjEyOTpcXHRyZXQgPSBuc19jb21tb25faW5pdChucyk7XFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTMwLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvdXRzbmFtZS5jPTM2PXN0YXRpYyBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY2xvbmVfdXRzX25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4tLVxcbmtlcm5lbC91dHNuYW1lLmMtNTItXFxua2VybmVsL3V0c25hbWUuYzo1MzpcXHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XFxua2VybmVsL3V0c25hbWUuYy01NC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU1MD1zdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTczLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NzQ6XFx0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NzUtXFx0aWYgKHJ2KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjM9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjkyLVxcdHByZWluaXRfbmV0KFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNmluaXRfdXNlcl9ucyk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyOTM6XFx0aWYgKG5zX2NvbW1vbl9pbml0KFxcdTAwMjZpbml0X25ldCkpXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyOTQtXFx0XFx0cGFuaWMoXFxcIkNvdWxkIG5vdCBwcmVpbml0aWFsaXplIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjMzLjMzNTI4Mzk5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDM2ODkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIHNodWZmbGluZyB0aGluZ3MgYXJvdW5kIGluIGBjb3B5X25ldF9uc2AuIFByZXZpb3VzbHksIGl0IHdhcyBgcHJlaW5pdF9uZXRgIHdoaWNoIHRoZW4gY2FsbGVkIGBuc19jb21tb25faW5pdGAsIHRoZW4gYXNzaWduZWQgdGhlIGB1Y291bnRzYCwgYW5kICp0aGVuKiBnb3QgdGhlIHVzZXIgbmFtZXNwYWNlLiBOb3csIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGluZ3MgdXA6IGBwcmVpbml0X25ldGAsIGFzc2lnbiBgdWNvdW50c2AsIGdldCB0aGUgdXNlciBuYW1lc3BhY2UsIGFuZCAqdGhlbiogY2FsbCBgbnNfY29tbW9uX2luaXRgLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlzIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBpcyBub3cgY2FsbGVkICphZnRlciogc29tZSBjcnVjaWFsIHN0ZXBzLlxuXG5gcHJlaW5pdF9uZXRgIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzLlxuXG5UaGUgcmVhbCBzaGlmdCBoZXJlIGlzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYG5zX2NvbW1vbl9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBwcmV2aW91cyBjb2RlIGRpZG4ndCBoYXZlIHRoaXMganVtcCwgc28gYG5zX2NvbW1vbl9mcmVlYCB3b3VsZCBhbHdheXMgaGF2ZSBiZWVuIGNhbGxlZC4gTm93LCBpdCBza2lwcyBgbnNfY29tbW9uX2ZyZWUobmV0KWAgaW4gdGhlIGVycm9yIGNhc2UuIFRoYXQgbWVhbnMgc29tZXRoaW5nIGhhcyBoYXBwZW5lZCB0aGF0IGlzIHdvcnRoIGF2b2lkaW5nIGZyZWVpbmcsIG9yIGlzbid0IHNhZmUgdG8gZnJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAganVtcCBpcyBhY3R1YWxseSBkb2luZy4gV2hhdCBhcmUgdGhlIHNpZGUgZWZmZWN0cywgYW5kIHdoeSBpcyBgbnNfY29tbW9uX2ZyZWVgIGJlaW5nIHNraXBwZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHB1dF91c2VybnNfbm9fY29tbW9uYCBwYXRoIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjM5Ljk3ODk3NjE3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XFxuIDU3MTpcXHRcXHRuZXQtXFx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xcbiA1NzI6XFx0XFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcXG4gNTc1OlxcdFxcdGlmIChydilcXG4gNTc2OlxcdFxcdFxcdGdvdG8gcHV0X3VzZXJuc19ub19jb21tb247XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTc5OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU4MDpcXHRcXHRcXHRnb3RvIHB1dF91c2VybnM7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJ2ID0gc2V0dXBfbmV0KG5ldCk7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdHVwX3JlYWQoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKSB7XFxuIDU4NzpcXHRwdXRfdXNlcm5zOlxcbiA1ODg6XFx0XFx0XFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcXG4gNTg5OlxcdHB1dF91c2VybnNfbm9fY29tbW9uOlxcbiA1OTA6XFx0I2lmZGVmIENPTkZJR19LRVlTXFxuIDU5MTpcXHRcXHRcXHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXFx1MDAzZWtleV9kb21haW4pO1xcbiA1OTI6XFx0I2VuZGlmXFxuIDU5MzpcXHRcXHRcXHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcXG4gNTk0OlxcdFxcdFxcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xcbiA1OTU6XFx0ZGVjX3Vjb3VudHM6XFxuIDU5NjpcXHRcXHRcXHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XFxuIDU5NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihydik7XFxuIDU5ODpcXHRcXHR9XFxuIDU5OTpcXHRcXHRyZXR1cm4gbmV0O1xcbiA2MDA6XFx0fVxcbiA2MDE6XFx0XFxuIDYwMjpcXHQvKipcXG4gNjAzOlxcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XFxuIDYwNDpcXHQgKiBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZSBpbiBxdWVzdGlvbiAoY2FuIGJlIE5VTEwpXFxuIDYwNTpcXHQgKiBAdWlkOiBrZXJuZWwgdXNlciBJRCBmb3Igc3lzZnMgb2JqZWN0c1xcbiA2MDY6XFx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXFxuIDYwNzpcXHQgKlxcbiA2MDg6XFx0ICogUmV0dXJucyB0aGUgdWlkL2dpZCBwYWlyIG9mIHJvb3QgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGVcXG4gNjA5OlxcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxcbiA2MTA6XFx0ICovXFxuIDYxMTpcXHR2b2lkIG5ldF9uc19nZXRfb3duZXJzaGlwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwga3VpZF90ICp1aWQsIGtnaWRfdCAqZ2lkKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0aWYgKG5ldCkge1xcbiA2MTQ6XFx0XFx0XFx0a3VpZF90IG5zX3Jvb3RfdWlkID0gbWFrZV9rdWlkKG5ldC1cXHUwMDNldXNlcl9ucywgMCk7XFxuIDYxNTpcXHRcXHRcXHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVxcdTAwM2V1c2VyX25zLCAwKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0aWYgKHVpZF92YWxpZChuc19yb290X3VpZCkpXFxuIDYxODpcXHRcXHRcXHRcXHQqdWlkID0gbnNfcm9vdF91aWQ7XFxuIDYxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MzkuOTc5MTg0NDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTM1NjQyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIGFuZCBQb3RlbnRpYWwgTGVhayoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBwcmVpbml0X25ldGAgc2V0cyBgbmV0LVx1MDAzZXBhc3NpdmVgIHRvIDEgdXNpbmcgYHJlZmNvdW50X3NldGAuIFNvLCB0aGUgaW5pdGlhbCByZWZlcmVuY2UgY291bnQgaXMgc2V0LiBUaGVuLCB0aGVyZSdzIGBuc19jb21tb25faW5pdGAuIElmIHRoYXQgZnVuY3Rpb24gZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAuIFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGFyaXNlLlxuXG5gcHV0X3VzZXJuc19ub19jb21tb25gIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgLiBJZiB0aGUgY291bnQgZ29lcyB0byB6ZXJvLCB0aGUgbmFtZXNwYWNlIGlzIGZyZWVkLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5CdXQsIGJhY2sgdXAgYSBtb21lbnQuIEJlZm9yZSwgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgaW5zaWRlIGBwcmVpbml0X25ldGAsIHRoZSBjb2RlIHJldHVybmVkIGZyb20gYHByZWluaXRfbmV0YCBkaXJlY3RseSBhbmQgd2VudCB0byBgZGVjX3Vjb3VudHNgLiBBbmQgYGRlY191Y291bnRzYCBvbmx5IGRlY3JlbWVudHMgYHVjb3VudHNgIGFuZCByZXR1cm5zLiBUaGUgb3JpZ2luYWwgcGF0aCB3ZW50IHRocm91Z2ggYGNvcHlfbmV0X25zYCB3aGVyZSB0aGUgZXJyb3IgaGFuZGxpbmcgd2FzIGRpZmZlcmVudC4gSXQgbG9va3MgbGlrZSB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGBuZXRgLCB3YXMgbmV2ZXIgZnJlZWQgaW4gdGhhdCBwYXRoLlxuXG5IbW0sIHNvIGl0IGxvb2tzIGxpa2UgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgcHJldmlvdXNseSwgYG5ldGAgd2FzIGxlYWtlZC4gTm93LCBsZXQgbWUgcmUtZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0YCB3aXRoaW4gdGhlIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIG9sZGVyIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjI3LjMzMjc1Mjg3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHQjaWZkZWYgQ09ORklHX1JFRl9UUkFDS0VSXFxuIDUzMzpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1MzQ6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1MzU6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLmRlYWQpXFxuIDUzNjpcXHRcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0XFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cXG4gNTQwOlxcdFxcdFxcdGxsaXN0X2FkZChcXHUwMDI2bmV0LVxcdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFxcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0aWYgKG5zKVxcbiA1NDc6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKHRvX25ldF9ucyhucykpO1xcbiA1NDg6XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIDU1MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXFxuIDU1MjpcXHR7XFxuIDU1MzpcXHRcXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcXG4gNTU0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gNTU1OlxcdFxcdGludCBydjtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBDTE9ORV9ORVdORVQpKVxcbiA1NTg6XFx0XFx0XFx0cmV0dXJuIGdldF9uZXQob2xkX25ldCk7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XFxuIDU2MTpcXHRcXHRpZiAoIXVjb3VudHMpXFxuIDU2MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0bmV0ID0gbmV0X2FsbG9jKCk7XFxuIDU2NTpcXHRcXHRpZiAoIW5ldCkge1xcbiA1NjY6XFx0XFx0XFx0cnYgPSAtRU5PTUVNO1xcbiA1Njc6XFx0XFx0XFx0Z290byBkZWNfdWNvdW50cztcXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTcxOlxcdFxcdG5ldC1cXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XFxuIDU3MjpcXHRcXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xcbiA1NzU6XFx0XFx0aWYgKHJ2KVxcbiA1NzY6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0cnYgPSBkb3duX3JlYWRfa2lsbGFibGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiA1Nzk6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6MjcuMzMyODk5MjMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyMTgyMDkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgQWxsb2NhdGlvbiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gYG5ldF9hbGxvYygpYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgYG5ldGAgc3RydWN0dXJlLiBIbW0sIEkgcmVjYWxsIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmIHRoZSBgcHJlaW5pdF9uZXRgIGZ1bmN0aW9uIGhhZCBmYWlsZWQgZWFybGllciwgdGhlcmUncyBhIGp1bXAgc3RyYWlnaHQgdG8gYGRlY191Y291bnRzYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGRlY191Y291bnRzYCAqZG9lc24ndCogZnJlZSB0aGUgYG5ldGAgc3RydWN0dXJlIGl0c2VsZi4gSXQncyBza2lwcGluZyB0aGUgbmVjZXNzYXJ5IGRlYWxsb2NhdGlvbiBzdGVwLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbWVtb3J5IGxlYWsgaWYgYHByZWluaXRfbmV0YCBldmVyIGJhaWxzIG91dC4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbG9naWMgd2l0aGluIGBuZXRfYWxsb2MoKWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gZGV0YWlscywgYXMgd2VsbCBhcyB0aGUgYXNzdW1lZCBiZWhhdmlvdXIgb2YgYGRlY191Y291bnRzYC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgaG93IHRoaXMgaXMgYWxsIHN1cHBvc2VkIHRvIHdvcmsgYW5kIHdoZXJlIHRoZSBsZWFrIG1pZ2h0IGJlIGhhcHBlbmluZy4gVGhlIGFsbG9jYXRpb24gcGF0aCBuZWVkcyB0byBiZSBmdWxseSBkaXNzZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjM1LjY1NDcyNDI0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MjE3NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTY2PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2dlbl9wdHJzID0gSU5JVElBTF9ORVRfR0VOX1BUUlM7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTY3LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo2ODpzdGF0aWMgc3RydWN0IG5ldF9nZW5lcmljICpuZXRfYWxsb2NfZ2VuZXJpYyh2b2lkKVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy02OS17XFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODM9c3RhdGljIGludCBuZXRfYXNzaWduX2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaWQsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtOTUtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjk2OlxcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtOTctXFx0aWYgKCFuZylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NzY9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRuc193cTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDc3LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0Nzg6c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00Nzkte1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ4Mi1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDgzOlxcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDg0LVxcdGlmICghbmcpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTUwPXN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NjMtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU2NDpcXHRuZXQgPSBuZXRfYWxsb2MoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTY1LVxcdGlmICghbmV0KSB7XFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTI2Mz12b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzgtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyNzk6XFx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjgwLVxcdGlmICghbmcpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTM4MD1zdGF0aWMgaW50IHJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM5NS1cXHRcXHQgKiBwZXJuZXRfb3BzX3J3c2VtLiBCdXQgV1JJVEVfT05DRSBpcyBuZWVkZWQgdG8gcHJvdGVjdFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzk2OlxcdFxcdCAqIG5ldF9hbGxvY19nZW5lcmljLlxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzk3LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTozNi4xMDk5NDc0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUxOTE1MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYG5ldF9hbGxvYygpYFwiIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5ldF9hbGxvYygpYCoqXG5cbkFscmlnaHQsICpuZXRfYWxsb2MoKSouIFRoYXQgdXN1YWxseSBtZWFucyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBicmVhayBkb3duIHdoYXQgdGhhdCBpbXBsaWVzOlxuXG4qICAgSSBpbnN0YW50bHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBtZW1vcnkgZXhoYXVzdGlvbi4gSXMgdGhpcyBhIGN1c3RvbSBhbGxvY2F0b3I/IElzIGl0IHVzaW5nIHNsYWI/IEJ1ZGR5PyBXaGF0J3MgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHk/XG4qICAgSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSXMgdGhpcyBmb3IgYSBzb2NrZXQgYnVmZmVyIChza2IpPyBBIHJvdXRlPyBBIGZsb3cgdGFibGUgZW50cnk/IFRoaXMnbGwgZHJpdmUgbXkgZXhwZWN0YXRpb25zIGZvciB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbG9jayBjb250ZW50aW9uLlxuKiAgIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBlcnJvcnMuIERvZXMgaXQgcmV0dXJuIE5VTEwgb24gZmFpbHVyZSwgb3IgZG9lcyBpdCB0cmlnZ2VyIGFuIE9PTSBjb25kaXRpb24/IEhvdyBncmFjZWZ1bGx5IGlzIHRoaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGNhbGxpbmcgY29kZT8gQW55IHNwZWNpZmljIGVycm9yIGNvZGVzIHRvIHdhdGNoIGZvcj9cbiogICBJIHdhbnQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zLiBJcyB0aGVyZSBlbm91Z2ggbWVtb3J5PyBJcyB0aGVyZSBhIHNwaW5sb2NrIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbGltaXRzIGluIHBsYWNlPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgYSBmYWlsZWQgYWxsb2NhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/XG4qICAgRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWZlcmVuY2UgY291bnRlci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXTigJlzIGFsbG9jYXRlZCBhbmQgd2hlcmUgaXQgaXMgZnJlZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiBgbmV0X2FsbG9jKClgIHRvIGl0cyBjb3JyZXNwb25kaW5nIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZG91YmxlLWZyZWVzLlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBhcmUgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6NDAuNTYxODY1NTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDc4OlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ICpuZXRfYWxsb2Modm9pZClcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuIDQ4MTpcXHRcXHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XFxuIDQ4NDpcXHRcXHRpZiAoIW5nKVxcbiA0ODU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ4NjpcXHRcXG4gNDg3OlxcdFxcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0ODg6XFx0XFx0aWYgKCFuZXQpXFxuIDQ4OTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNDkyOlxcdFxcdG5ldC1cXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcXG4gNDkzOlxcdFxcdGlmICghbmV0LVxcdTAwM2VrZXlfZG9tYWluKVxcbiA0OTQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV8yO1xcbiA0OTU6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXQtXFx1MDAzZWtleV9kb21haW4tXFx1MDAzZXVzYWdlLCAxKTtcXG4gNDk2OlxcdCNlbmRpZlxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVxcdTAwM2VnZW4sIG5nKTtcXG4gNDk5OlxcdG91dDpcXG4gNTAwOlxcdFxcdHJldHVybiBuZXQ7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdCNpZmRlZiBDT05GSUdfS0VZU1xcbiA1MDM6XFx0b3V0X2ZyZWVfMjpcXG4gNTA0OlxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MDU6XFx0XFx0bmV0ID0gTlVMTDtcXG4gNTA2OlxcdCNlbmRpZlxcbiA1MDc6XFx0b3V0X2ZyZWU6XFxuIDUwODpcXHRcXHRrZnJlZShuZyk7XFxuIDUwOTpcXHRcXHRnb3RvIG91dDtcXG4gNTEwOlxcdH1cXG4gNTExOlxcdFxcbiA1MTI6XFx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcXG4gNTEzOlxcdFxcbiA1MTQ6XFx0c3RhdGljIHZvaWQgbmV0X2NvbXBsZXRlX2ZyZWUodm9pZClcXG4gNTE1OlxcdHtcXG4gNTE2OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XFxuIDUxNzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cXG4gNTIwOlxcdFxcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcXG4gNTIzOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MjQ6XFx0XFxuIDUyNTpcXHR9XFxuIDUyNjpcXHRcXG4gNTI3OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6NDAuNTYxOTg1NjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjExMDcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBDcml0aWNhbCBPdmVyc2lnaHQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIHNvbWV0aGluZydzIG5vdCBzaXR0aW5nIHJpZ2h0LiBCZWZvcmUsIGlmIGBwcmVpbml0X25ldGAgZmFpbGVkLCBpdCByZXR1cm5lZCBhbiBlcnJvciwgYW5kIHRoZSBjb2RlIGp1bXBlZCB0byBgZGVjX3Vjb3VudHNgLiBJIHJlbWVtYmVyIHRoYXQgbXVjaC5cblxuYGBgY1xuXHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG5cdGlmIChydiBcdTAwM2MgMClcblx0XHRnb3RvIGRlY191Y291bnRzO1xuYGBgXG5cbkFuZCBgZGVjX3Vjb3VudHNgIGNvcnJlY3RseSBkZWNyZW1lbnRlZCB0aGUgdXNlciBjb3VudHMuXG5cbmBgYGNcbmRlY191Y291bnRzOlxuXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcblx0XHRyZXR1cm4gRVJSX1BUUihydik7XG5gYGBcblxuQnV04oCmIHdhaXQgYSBtaW51dGUuIElmIGBwcmVpbml0X25ldGAgZmFpbHMsIGFuZCBgbmV0YCB3YXMgYWxsb2NhdGVkIGVhcmxpZXIgYnkgYG5ldF9hbGxvY2AsIHRoZW4gYG5ldGAgaXMgbGVha2VkISBgZGVjX3Vjb3VudHNgIGRlY3JlbWVudHMgdWNvdW50cywgYnV0IGl0ICpkb2Vzbid0KiBmcmVlIHRoZSBhbGxvY2F0ZWQgbmV0d29yayBuYW1lc3BhY2UsIGBuZXRgLiBUaGF0IGlzIGEgc2VyaW91cyBidWcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgaW1wYWN0ZnVsIG1lbW9yeSBsZWFrIGlmIHRoYXQgZmFpbHVyZSBtb2RlIGlzIGhpdCBvZnRlbi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcHJlaW5pdF9uZXRgJ3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBleGl0IHBhdGggdGhhdCBkb2VzIHByb3Blcmx5IGZyZWUgYG5ldGAuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBpbW1lZGlhdGVseSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjQ1LjE4MzA5NjE0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xcbiA0MDM6XFx0c3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlLCAxKTtcXG4gNDA2OlxcdFxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJuZXRfcmVmY250XFxcIik7XFxuIDQwNzpcXHRcXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcXFwibmV0X25vdHJlZmNudFxcXCIpO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRuZXQtXFx1MDAzZWhhc2hfbWl4ID0gZ2V0X3JhbmRvbV91MzIoKTtcXG4gNDEwOlxcdFxcdG5ldC1cXHUwMDNlZGV2X2Jhc2Vfc2VxID0gMTtcXG4gNDExOlxcdFxcdG5ldC1cXHUwMDNldXNlcl9ucyA9IHVzZXJfbnM7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlkcl9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZW5ldG5zX2lkcyk7XFxuIDQxNDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2Vuc2lkX2xvY2spO1xcbiA0MTU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LnJhX211dGV4KTtcXG4gNDE2OlxcdFxcbiA0MTc6XFx0I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiA0MTg6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG4gNDE5OlxcdFxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XFxuIDQyMDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbiA0MjE6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xcbiA0MjI6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbiA0MjM6XFx0I2VuZGlmXFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX2FsbCk7XFxuIDQyNjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VwdHlwZV9zcGVjaWZpYyk7XFxuIDQyNzpcXHRcXHRwcmVpbml0X25ldF9zeXNjdGwobmV0KTtcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTo0NS4xODMyMTgxMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMzg4MjAwNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gY29kZSBhZ2Fpbi4gUHJldmlvdXNseSwgYHByZWluaXRfbmV0YCB3YXMgY2FsbGluZyBgbnNfY29tbW9uX2luaXQobmV0KWAgZGlyZWN0bHksIHJpZ2h0PyBBbmQgdGhhdCBjb3VsZCBmYWlsLiBJZiBpdCAqZGlkKiBmYWlsLCBgcHJlaW5pdF9uZXRgIHJldHVybmVkIGFuIGVycm9yLCBhbmQgYGNvcHlfbmV0X25zYCBoYWQgYSBsZWFrIGJlY2F1c2UgaXQganVtcGVkIHRvIGBkZWNfdWNvdW50c2AgYW5kIHRoZSBgbmV0YCBzdHJ1Y3Qgd2Fzbid0IHByb3Blcmx5IGNsZWFuZWQgdXAuIEEgY2xhc3NpYyBvdmVyc2lnaHQhXG5cbk5vdywgaXQncyBkaWZmZXJlbnQuIGBwcmVpbml0X25ldGAgKmRvZXNuJ3QqIGNhbGwgYG5zX2NvbW1vbl9pbml0YCBhbnltb3JlLiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBqdXN0IGluaXRpYWxpemUgYG5ldC1cdTAwM2VwYXNzaXZlYCB0byAxLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGEgcGFzc2l2ZSBpbml0aWFsaXphdGlvbiwgSSB3b25kZXIgd2h5LiBUaGVuLCBgY29weV9uZXRfbnNgIGNhbGxzIGBuc19jb21tb25faW5pdGAuIE5vdywgaWYgKnRoYXQqIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAsIHdoaWNoIHRoZW4gY2FsbHMgYG5ldF9wYXNzaXZlX2RlYyhuZXQpYC5cblxuQWhhISBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgICpkZWNyZW1lbnRzKiBgbmV0LVx1MDAzZXBhc3NpdmVgIHRvIDAsIHdoaWNoIHNob3VsZCB0aGVuIGZyZWUgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBpZiB0aGUgY291bnRlciBpcyBhdCAwLiBTbywgaXQgKnNob3VsZCogY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyBgbnNfY29tbW9uX2luaXRgLiBCdXQgd2FpdC4uLiBkaWQgSSByZWFkIHRoYXQgY29ycmVjdGx5PyBgbmV0X3Bhc3NpdmVfZGVjYCAqZnJlZXMqIGBuZXRgPyBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byB2ZXJpZnkhIEkgaGFkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBuZXRfcGFzc2l2ZV9kZWNgIHRvIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSB0aGluayBpdCBpcy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdG8gYG5ldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MjYuNTcxNDIxNzMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI3OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm5ldC1cXHUwMDNlcGFzc2l2ZSkpIHtcXG4gNTMwOlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHQjaWZkZWYgQ09ORklHX1JFRl9UUkFDS0VSXFxuIDUzMzpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1MzQ6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1MzU6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLmRlYWQpXFxuIDUzNjpcXHRcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0XFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cXG4gNTQwOlxcdFxcdFxcdGxsaXN0X2FkZChcXHUwMDI2bmV0LVxcdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFxcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0aWYgKG5zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNi41NzE1MjQ2NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4NDc3NDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gTmV0d29yayBOYW1lc3BhY2VzKipcblxuT2theSwgc28gYG5ldF9wYXNzaXZlX2RlY2AgKmRvZXMqIGZyZWUgYG5ldGAg4oCTIHdlbGwsIGFkZHMgaXQgdG8gYSBkZWZlcnJlZCBmcmVlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZvciB0aGlzIHB1cnBvc2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoYXQncyBnb29kLCBhIGRlZmluaXRlIGltcHJvdmVtZW50LlxuXG5MZXQncyBkaWcgZGVlcGVyLiBgbnNfY29tbW9uX2luaXRgIGNhbGxzIGBfX25zX2NvbW1vbl9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgcHJvY19hbGxvY19pbnVtYC4gQWgsIHJpZ2h0LCBgcHJvY19hbGxvY19pbnVtYCBjYW4gZmFpbCwgdXN1YWxseSBkdWUgdG8gbWVtb3J5IGV4aGF1c3Rpb24gb3IgcnVubmluZyBvdXQgb2YgSURzLiBJZiAqdGhhdCogaGFwcGVucywgYGNvcHlfbmV0X25zYCBsZWFrZWQgdGhlIGBuZXRgIHN0cnVjdHVyZS4gU28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IOKAkyBpdCBwbHVncyBhIG1lbW9yeSBsZWFrLCB3aGljaCBpcyBhIGJpZyBkZWFsLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiB0aGlzPyBNZW1vcnkgbGVha3Mgb24gZXJyb3IgcGF0aHMgYXJlIHByaW1lIGZ1enppbmcgdGFyZ2V0cywgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGVycm9yIHBhdGg6IGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGF0IGZhaWx1cmU/IGBuc19jb21tb25faW5pdGAgaXMgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgZnJvbSBhIGdsb2JhbCBJREEuIEl0IGZhaWxzIGlmIHRoZSBJREEgYWxsb2NhdGlvbiBmYWlscyAtIHdoaWNoIGlzIGFuIGVycm9yIHBhdGguIEdvb2QuIFRoaXMgaXMgc291bmRpbmcgbGlrZSBhIHZhbHVhYmxlIHRhcmdldC5cblxuV2FpdCwgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlscywgYGNvcHlfbmV0X25zYCBsZWFrcy4gUmlnaHQsIHRoZSBmaXggaW5pdGlhbGl6ZXMgYG5ldC1cdTAwM2VwYXNzaXZlYCAqYmVmb3JlKiBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIFRoZW4sIGlmIHRoZSBsYXR0ZXIgZmFpbHMsIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAgZ2V0cyBjYWxsZWQsIGFuZCBmcmVlcyBpdC4gIEFnYWluLCBidWcgZml4LCBwcmV2ZW50aW5nIGEgbWVtb3J5IGxlYWsuXG5cblNvLCBpcyBmdXp6aW5nIGp1c3RpZmllZD8gVGhpcyBjaGFuZ2UgbW9kaWZpZXMgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gIGBjb3B5X25ldF9uc2AgaXMgcmVhY2hhYmxlIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgYW5kIGB1bnNoYXJlKENMT05FX05FV05FVClgLiAgRGVmaW5pdGVseSByZWFjaGFibGUsIGRlZmluaXRlbHkgdGVzdGFibGUuIEZ1enppbmcgYGNvcHlfbmV0X25zYCBkaXJlY3RseSAod2hpY2ggbWFwcyB0byBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0J3Mgc29tZXRoaW5nIHdlIHNob3VsZCBhYnNvbHV0ZWx5IGJlIGRvaW5nLlxuXG5IYW5nIG9uLCBpcyB0aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGZvY3VzIG9uPyBZZWFoLCBgY29weV9uZXRfbnNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY2FuZGlkYXRlIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCBzdGF0aWMgZmlyc3QuIEdvdHRhIGNoZWNrIHRoZSB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjM0LjI1NjMwMTk0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjQyODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ0PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTQ5LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTA6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTEtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozNC43NDU1NDk4MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NDMwMDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgY29weV9uZXRfbnNgIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBjb3B5X25ldF9uc2AgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBub24tc3RhdGljIGZ1bmN0aW9uIHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBidWlsZC10aW1lIGRlY2lzaW9ucyBhcmUgYXQgcGxheS4gRmlyc3QgdGhpbmcncyBmaXJzdDogYXJlIHdlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNpdHVhdGlvbj9cblxuTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gY2hlY2sgZm9yIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhpcyBpcyBuZXR3b3JraW5nIGNvZGUsIEknbSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIGtleSB0byBpdCBhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEknbGwgc3RhcnQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBuZXQvY29yZS9NYWtlZmlsZWAgZm9yIGJ1aWxkLXRpbWUgZmxhZ3Mgb3IgdGhlIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGZpbGUgaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbGVhZCBvbiB3aGF0J3MgZHJpdmluZyB0aGUgYmVoYXZpb3Igb2YgYGNvcHlfbmV0X25zYC4gSXQncyBsaWtlbHkgb25lIG9mIHRob3NlIHR3by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0OTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozOC41Mzk4NTMxOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDYxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT02PW9iai15IDo9IHNvY2subyBza2J1ZmYubyBkYXRhZ3JhbS5vIHN0cmVhbS5vIHNjbS5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZTo3OlxcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtOC1cXHQgZmxvd19kaXNzZWN0b3Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozOC41ODUzMjA0NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NjIyMzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBOYW1lc3BhY2UgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgbmV0X25hbWVzcGFjZS5jYCBmaWxlIGFuZCBob3cgaXQncyBjb21waWxlZC4gSXQgc2VlbXMgbGlrZSBpdCdzICphbHdheXMqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBuZXR3b3JraW5nIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJJ20gYSBsaXR0bGUgZnV6enkgb24gd2hlbiBgY29weV9uZXRfbnNgIGdldHMgaW5jbHVkZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYENPTkZJR19ORVRfTlNgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgaWYgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hY3JvcyBhcmUgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo0MS45NjE1NDYxNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTcwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjEyPWV4dGVybiBzdHJ1Y3QgbmV0IGluaXRfbmV0O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNC0jaWZkZWYgQ09ORklHX05FVF9OU1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoyMTU6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNi1cXHRcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0yMjQ9ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2xlYW51cF9uZXRfdGFzaztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMjgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zcHJveHkuaFxcdTAwM2VcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjI5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMzAtXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo0Mi4wMDY3MjIyODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDI4NDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfTlNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBjb3B5X25ldF9uc2AgYW5kIGhvdyBpdCB3b3Jrcy4gSSBrbm93IHRoYXQgYENPTkZJR19ORVRfTlNgIGlzIGFic29sdXRlbHkgY3JpdGljYWwgaGVyZS4gSWYgdGhhdCdzICplbmFibGVkKiwgdGhlbiBgY29weV9uZXRfbnNgIGlzIGFjdHVhbGx5IGEgcmVhbCwgZnVuY3Rpb25pbmcgZnVuY3Rpb24uIEJ1dCwgaWYgYENPTkZJR19ORVRfTlNgIGlzICpkaXNhYmxlZCosIGl0IGVzc2VudGlhbGx5IHR1cm5zIGludG8gYSBzdGF0aWMgaW5saW5lLiBTbywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgTkVUX05TYCBpcyBhIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoaXMgc2NlbmFyaW8sIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGZvciBgTkVUX05TYCwganVzdCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCByZWxpZXMgb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoaXMgbmV0d29yayBuYW1lc3BhY2UgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzUxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6NDUuNTMxMDEzNDIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwMjAwMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDU5LVxcbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcXG5pbml0L0tjb25maWctMTQ2MS1cXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTExLVxcbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuLS1cXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcXG5uZXQvbnNoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6NDcuMjUxMjE5NDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDc5NDAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBORVRfTlNgLCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggaXQ6XG5cbioqRGl2aW5nIGludG8gaW5pdC9LY29uZmlnOiBORVRfTlMgVGVycml0b3J5KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byBgTkVUX05TYC4gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIGZlYXR1cmUncyBjb25maWd1cmF0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKG1lLCB1c3VhbGx5IHZpYSB0aGUgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2VzKSBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcy4uLiBlc3NlbnRpYWxseSwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IGBORVRfTlNgJ3MgYmVoYXZpb3IgaXMgY29udHJvbGxlZC4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0J3MgZGVmaW5lZC4gQW5kIEkgaG9wZSB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGluaXRpYWxpemF0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSByZW1lbWJlciBob3cgdGhpcyBmZWF0dXJlIGZpdHMgaW50byB0aGUgZ3JlYXRlciBsaW51eCBrZXJuZWwgcGljdHVyZS4gSSBzaG91bGQgYmUgYWJsZSB0byBtYXAgYW55IGRlcGVuZGVuY2llcyBvbiB0aGlzIGZlYXR1cmUgYmFjayB0byBpdHMgcmVsZXZhbnQgbW9kdWxlcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBzdGF0aWNhbGx5IGJ1aWx0LCBvciBkeW5hbWljYWxseSBsb2FkZWQuXG5cbkkgd2lsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcXVpcmtzIGluIHRoZSBmZWF0dXJlLCBtYXliZSB0aGF0IGl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo1Mi44OTkxNjI3ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdFxcdGhlbHBcXG4xNDU2OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG4xNDU3OlxcdFxcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XFxuMTQ1ODpcXHRcXHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXFxuMTQ1OTpcXHRcXG4xNDYwOlxcdGNvbmZpZyBORVRfTlNcXG4xNDYxOlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgbmFtZXNwYWNlXFxcIlxcbjE0NjI6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4xNDYzOlxcdFxcdGRlZmF1bHQgeVxcbjE0NjQ6XFx0XFx0aGVscFxcbjE0NjU6XFx0XFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG4xNDY2OlxcdFxcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXFxuMTQ2NzpcXHRcXG4xNDY4OlxcdGVuZGlmICMgTkFNRVNQQUNFU1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXFxuMTQ3MTpcXHRcXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG4xNDcyOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbjE0NzM6XFx0XFx0c2VsZWN0IFBST0NfQ0hJTERSRU5cXG4xNDc0OlxcdFxcdHNlbGVjdCBLQ01QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjUyLjg5OTMzMjg0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1NjMyNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGZhbGxzIHVuZGVyIGBOQU1FU1BBQ0VTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcy4gUmlnaHQsIHNvIGBORVRfTlNgIGFuZCBgTkFNRVNQQUNFU2AgYXJlIHRoZSB0d28ga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGZvY3VzIG9uLiBXYWl0IGEgbWludXRl4oCmIHdhc24ndCBgTkFNRVNQQUNFU2AgYSBtZW51Y29uZmlnPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBoZWFkIG92ZXIgdG8gYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGhvdyBgTkFNRVNQQUNFU2AgaXMgZGVmaW5lZCBpbiB0aGVyZS4gTmVlZCB0byBnZXQgdGhlIGhpZXJhcmNoeSBzdHJhaWdodCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjU2LjAxNDk2ODgwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTI4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5BTUVTUEFDRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzk5PWVuZGlmICMgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xNDAwLVxcbmluaXQvS2NvbmZpZzoxNDAxOm1lbnVjb25maWcgTkFNRVNQQUNFU1xcbmluaXQvS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk5hbWVzcGFjZXMgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjU2LjA2Mjk4ODExMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjA3NzE3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGNvcHlfbmV0X25zYC4gU3BlY2lmaWNhbGx5LCB0aGUgbGVhayBvY2N1cnMgd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzIHdpdGhpbiBgY29weV9uZXRfbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIGZpeCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyB3b3J0aCBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuSSB0aGluayBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGNvcHlfbmV0X25zYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYXMgSSBrbm93IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcmVpbml0X25ldGAgYW5kIGBuZXRfbnNfaW5pdGAgYXJlIGluIHRoYXQgc3BhY2UuIEhvd2V2ZXIsIGBwcmVpbml0X25ldGAgaXMgc3RhdGljLCBhbmQgYG5ldF9uc19pbml0YCBpcyBvbmx5IGNhbGxlZCBhdCBib290LiBTbywgYGNvcHlfbmV0X25zYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAsIGlzIHRoZSBrZXkuIEFuZCwgSSBzZWUgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5ldF9uc19pbml0YCwgYnV0IHRoYXQgaXMgYXQgYm9vdCB0aW1lIGluaXRpYWxpemF0aW9uLCBzbyBpdOKAmXMgbm90IHJlYWxseSByZWxldmFudCBoZXJlLCBpdCdzIGp1c3QgdGhlIGVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBmaXJzdCBuYW1lc3BhY2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgYE5FVF9OU2AgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgdGhlIGVuYWJsaW5nIGZhY3RvcnMsIGFuZCBhcmUga2V5IHRvIHRyaWdnZXJpbmcgdGhlIGNvZGUgcGF0aC4gSSBtaWdodCBuZWVkIGBVU0VSX05TYCB0byBjcmVhdGUgdGhlIG5hbWVzcGFjZSBhcyBhbiB1bnByaXZpbGVnZWQgdXNlciwgYnV0IGBORVRfTlNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipGb2N1c1N5bWJvbHM6KiogXFxbXCJjb3B5XFxfbmV0XFxfbnNcIl1cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFxbXCJORVRcXF9OU1wiLCBcIk5BTUVTUEFDRVNcIl1cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE3LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowNDowNC4yNzA3MDgyNzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc0ODU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJOQU1FU1BBQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSBpbiBgY29weV9uZXRfbnNgIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIHBhdGguIEZ1enppbmcgYGNvcHlfbmV0X25zYCAocmVhY2hhYmxlIHZpYSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZXMgZXhpc3QgaW4gdGhpcyBlcnJvciBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowNDowNC4zNDc0NjI4NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYzMTQ3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDQ6MDQuMzQ3OTYyMjk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMjYyNjQzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggOTE2NmY0NjcyOTNlMC4uZGE1Zjg4MWZiZDNiOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtNDAwLDE0ICs0MDAsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xuLXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbitzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuIHtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBuc19jb21tb25faW5pdChuZXQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSwgMSk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCJuZXRfcmVmY250XCIpO1xuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0X25vdHJlZmNudFwiKTtcbkBAIC00MzEsNyArNDI1LDYgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9hbGwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiBcdHByZWluaXRfbmV0X3N5c2N0bChuZXQpO1xuLVx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5AQCAtNTc0LDEyICs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRnb3RvIGRlY191Y291bnRzO1xuIFx0fVxuIFxuLVx0cnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuLVx0aWYgKHJ2IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGRlY191Y291bnRzO1xuK1x0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcbiBcdG5ldC1cdTAwM2V1Y291bnRzID0gdWNvdW50cztcbiBcdGdldF91c2VyX25zKHVzZXJfbnMpO1xuIFxuK1x0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xuK1x0aWYgKHJ2KVxuK1x0XHRnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uO1xuK1xuIFx0cnYgPSBkb3duX3JlYWRfa2lsbGFibGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4gXHRpZiAocnYgXHUwMDNjIDApXG4gXHRcdGdvdG8gcHV0X3VzZXJucztcbkBAIC01OTEsNiArNTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0aWYgKHJ2IFx1MDAzYyAwKSB7XG4gcHV0X3VzZXJuczpcbiBcdFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcbitwdXRfdXNlcm5zX25vX2NvbW1vbjpcbiAjaWZkZWYgQ09ORklHX0tFWVNcbiBcdFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVx1MDAzZWtleV9kb21haW4pO1xuICNlbmRpZlxuQEAgLTEyOTMsNyArMTI4OSw4IEBAIHZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXG4gXHQgKiBUaGlzIGN1cnJlbnRseSBjYW5ub3QgZmFpbCBhcyB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVxuIFx0ICogaGFzIGEgc3RhdGljIGlub2RlIG51bWJlci5cbiBcdCAqL1xuLVx0aWYgKHByZWluaXRfbmV0KFx1MDAyNmluaXRfbmV0LCBcdTAwMjZpbml0X3VzZXJfbnMpKVxuK1x0cHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucyk7XG4rXHRpZiAobnNfY29tbW9uX2luaXQoXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRwYW5pYyhcIkNvdWxkIG5vdCBwcmVpbml0aWFsaXplIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXCIpO1xuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjA0OjA0LjM0Nzk2MzM1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2MjYxNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcHJlaW5pdF9uZXRgIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCdzIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSBvZiBgcHJlaW5pdF9uZXRgIHRvIGB2b2lkYCBpbnN0ZWFkIG9mIGBpbnRgLiBIbW0sIGludGVyZXN0aW5nLiBUaGV5J3JlIGFsc28gbW92aW5nIHRoZSBjYWxsIHRvIGBuc19jb21tb25faW5pdChuZXQpYCBvdXQgb2YgYHByZWluaXRfbmV0YCBhbmQgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGBjb3B5X25ldF9uc2AgYW5kIGBuZXRfbnNfaW5pdGAuXG5cbkluIHRoZSBgY29weV9uZXRfbnNgIGZ1bmN0aW9uLCBgbnNfY29tbW9uX2luaXQobmV0KWAgaXMgbm93IGNhbGxlZCAqYWZ0ZXIqIGBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpYCwgYWZ0ZXIgYG5ldC1cdTAwM2V1Y291bnRzID0gdWNvdW50cztgIGFuZCBgZ2V0X3VzZXJfbnModXNlcl9ucylgLiBBbmQsIGlmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IG5vdyBqdW1wcyB0byBgcHV0X3VzZXJuc19ub19jb21tb25gLiBUaGlzIG5ldyBlcnJvciBwYXRoIHNraXBzIGBuc19jb21tb25fZnJlZShuZXQpYCBidXQgc3RpbGwgY2FsbHMgYGtleV9yZW1vdmVfZG9tYWluYCwgYHB1dF91c2VyX25zKHVzZXJfbnMpYCwgYG5ldF9kcm9wX25zKG5ldClgLCBgZGVjX25ldF9uYW1lc3BhY2VzKHVjb3VudHMpYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2Ugb2YgdGhlIHJlb3JkZXJpbmcuIEJ1dCB3YWl0LCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCByZWZhY3RvcmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCdzIHByb2JhYmx5IGZpeGluZyBhIHN1YnRsZSBidWcgd2hlcmUgYSBmYWlsdXJlIGluIGBuc19jb21tb25faW5pdGAgd2FzIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGNsZWFudXAgb3IgbWF5YmUgc29tZSBzb3J0IG9mIHJlc291cmNlIGxlYWsuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCBpbiBgbmV0X2FsbG9jYCAoY2FsbGVkIGJlZm9yZSBgY29weV9uZXRfbnNgIG9yIGluc2lkZSBpdCkuIExldCdzIGNoZWNrIGBjb3B5X25ldF9uc2AuLi4gYWgsIHllcywgYGNvcHlfbmV0X25zYCBkb2VzIGluZGVlZCBjYWxsIGBuZXRfYWxsb2MoKWAsIGFuZCB0aGF0IHVzZXMgYGttZW1fY2FjaGVfemFsbG9jYC5cblxuUmlnaHQsIHNvIGBuZXRgIGlzICp6ZXJvZWQqLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGhlcmUuIFNvLCB0aGUgYnVnIGlzIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWssIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBwZXJoYXBzIGV2ZW4gcmVmY291bnQgcHJvYmxlbXMuIE5vdywgbGV0J3MgbG9vayBhdCB3aGF0IGBuc19jb21tb25faW5pdGAgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuIGlub2RlIG51bWJlciBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLlxuXG5ObyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGZpeC4gTGV0J3MgcXVpY2tseSB2ZXJpZnkgYGNvcHlfbmV0X25zYCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjA0OjE2LjYxMDU4NTA2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBieSBtb3ZpbmcgYG5zX2NvbW1vbl9pbml0KClgIG91dCBvZiBgcHJlaW5pdF9uZXQoKWAgYW5kIGludG8gaXRzIGNhbGxlcnMgKGBjb3B5X25ldF9ucygpYCBhbmQgYG5ldF9uc19pbml0KClgKS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb3B5X25ldF9ucygpYCB0byBwcm9wZXJseSBjbGVhbiB1cCByZXNvdXJjZXMgaWYgYG5zX2NvbW1vbl9pbml0KClgIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGR1cmluZyBuYW1lc3BhY2UgY3JlYXRpb24uIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgYW5kIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxw7np[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 08:31:57 +0000 UTC FinishedAt: 2026-08-22 09:04:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NAMESPACES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_NS", "NAMESPACES" ], "series_id": "7557d82c-279a-45dc-8091-24f718ea5873" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "copy_net_ns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTQwMCwxNCAmIzQzOzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcbiB9XG4gXG4gLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovXG4tc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuJiM0MztzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuIHtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBuc19jb21tb25faW5pdChuZXQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSwgMSk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0X3JlZmNudFwmIzM0Oyk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIDEyOCwgXCYjMzQ7bmV0X25vdHJlZmNudFwmIzM0Oyk7XG5AQCAtNDMxLDcgJiM0Mzs0MjUsNiBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfblxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX2FsbCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xuIFx0cHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbkBAIC01NzQsMTIgJiM0Mzs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRnb3RvIGRlY191Y291bnRzO1xuIFx0fVxuIFxuLVx0cnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuLVx0aWYgKHJ2IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGRlY191Y291bnRzO1xuJiM0MztcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gXHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiBcbiYjNDM7XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG4mIzQzO1x0aWYgKHJ2KVxuJiM0MztcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbiYjNDM7XG4gXHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiBcdGlmIChydiBcdTAwM2MgMClcbiBcdFx0Z290byBwdXRfdXNlcm5zO1xuQEAgLTU5MSw2ICYjNDM7NTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0aWYgKHJ2IFx1MDAzYyAwKSB7XG4gcHV0X3VzZXJuczpcbiBcdFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcbiYjNDM7cHV0X3VzZXJuc19ub19jb21tb246XG4gI2lmZGVmIENPTkZJR19LRVlTXG4gXHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiAjZW5kaWZcbkBAIC0xMjkzLDcgJiM0MzsxMjg5LDggQEAgdm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbiBcdCAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXG4gXHQgKiBoYXMgYSBzdGF0aWMgaW5vZGUgbnVtYmVyLlxuIFx0ICovXG4tXHRpZiAocHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucykpXG4mIzQzO1x0cHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucyk7XG4mIzQzO1x0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0cGFuaWMoXCYjMzQ7Q291bGQgbm90IHByZWluaXRpYWxpemUgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2VcJiMzNDspO1xuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX05TJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb3B5X25ldF9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCA5MTY2ZjQ2NzI5M2UwLi5kYTVmODgxZmJkM2I5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC00MDAsMTQgJiM0Mzs0MDAsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpCiB9CiAKIC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqLwotc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKQomIzQzO3N0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IG5zX2NvbW1vbl9pbml0KG5ldCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXJlZmNvdW50X3NldCgmYW1wO25ldC0mZ3Q7cGFzc2l2ZSwgMSk7CiAJcmVmX3RyYWNrZXJfZGlyX2luaXQoJmFtcDtuZXQtJmd0O3JlZmNudF90cmFja2VyLCAxMjgsICYjMzQ7bmV0X3JlZmNudCYjMzQ7KTsKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO25ldC0mZ3Q7bm90cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRfbm90cmVmY250JiMzNDspOwpAQCAtNDMxLDcgJiM0Mzs0MjUsNiBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbgogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9hbGwpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bmV0LSZndDtwdHlwZV9zcGVjaWZpYyk7CiAJcHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NzQsMTIgJiM0Mzs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLAogCQlnb3RvIGRlY191Y291bnRzOwogCX0KIAotCXJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTsKLQlpZiAocnYgJmx0OyAwKQotCQlnb3RvIGRlY191Y291bnRzOwomIzQzOwlwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwogCW5ldC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7CiAJZ2V0X3VzZXJfbnModXNlcl9ucyk7CiAKJiM0MzsJcnYgPSBuc19jb21tb25faW5pdChuZXQpOwomIzQzOwlpZiAocnYpCiYjNDM7CQlnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uOwomIzQzOwogCXJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CiAJaWYgKHJ2ICZsdDsgMCkKIAkJZ290byBwdXRfdXNlcm5zOwpAQCAtNTkxLDYgJiM0Mzs1ODYsNyBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJaWYgKHJ2ICZsdDsgMCkgewogcHV0X3VzZXJuczoKIAkJbnNfY29tbW9uX2ZyZWUobmV0KTsKJiM0MztwdXRfdXNlcm5zX25vX2NvbW1vbjoKICNpZmRlZiBDT05GSUdfS0VZUwogCQlrZXlfcmVtb3ZlX2RvbWFpbihuZXQtJmd0O2tleV9kb21haW4pOwogI2VuZGlmCkBAIC0xMjkzLDcgJiM0MzsxMjg5LDggQEAgdm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZCkKIAkgKiBUaGlzIGN1cnJlbnRseSBjYW5ub3QgZmFpbCBhcyB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZQogCSAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuCiAJICovCi0JaWYgKHByZWluaXRfbmV0KCZhbXA7aW5pdF9uZXQsICZhbXA7aW5pdF91c2VyX25zKSkKJiM0MzsJcHJlaW5pdF9uZXQoJmFtcDtpbml0X25ldCwgJmFtcDtpbml0X3VzZXJfbnMpOwomIzQzOwlpZiAobnNfY29tbW9uX2luaXQoJmFtcDtpbml0X25ldCkpCiAJCXBhbmljKCYjMzQ7Q291bGQgbm90IHByZWluaXRpYWxpemUgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2UmIzM0Oyk7CiAKIAlkb3duX3dyaXRlKCZhbXA7cGVybmV0X29wc19yd3NlbSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgY2hhbmdlIHRvIGBwcmVpbml0X25ldGAuIEl0IHVzZWQgdG8gcmV0dXJuIGFuIGBpbnRgLCBidXQgbm93IGl0JiMzOTtzIGB2b2lkYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgdXN1YWxseSwgdGhlc2UgcmV0dXJuIHZhbHVlcyBnaXZlIHVzIHNvbWUgc3RhdHVzLCBhIHN1Y2Nlc3MvZmFpbHVyZSBpbmRpY2F0b3IuIEkgd29uZGVyIHdoeSB0aGV5IHJlbW92ZWQgaXQuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgY2hhbmdlZC4KCkFoLCB0aGV5IG1vdmVkIHRoZSBgbnNfY29tbW9uX2luaXQobmV0KWAgY2FsbC4gSXQgd2FzIGluc2lkZSBgcHJlaW5pdF9uZXRgIGFuZCBub3cgaXQmIzM5O3MgZGlyZWN0bHkgY2FsbGVkIGluIGBjb3B5X25ldF9uc2AgYW5kIGBuZXRfbnNfaW5pdGAuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGRlY291cGxlIHNvbWV0aGluZy4gVGhpcyBnaXZlcyBtZSBhIHNsaWdodGx5IGJhZCBmZWVsaW5nIGJlY2F1c2UgaXQgY291bGQgbWVhbiB0aGF0IHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbiBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGtlZXAgdGhpcyBvcmRlciBpbiBtaW5kLgoKTm93LCB0aGlzIGBjb3B5X25ldF9uc2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uYCBsYWJlbC4gVGhpcyBsYWJlbCBzZWVtcyB0byBiZSBoYW5kbGluZyBhIGZhaWx1cmUgY2FzZSB3aXRoaW4gYG5zX2NvbW1vbl9pbml0KG5ldClgLiBIbW0sIGFuZCBiZWZvcmUgdGhpcyBgbnNfY29tbW9uX2ZyZWVgIGlzIGNhbGxlZCwgYnV0IHNob3VsZCBpdD8gU2hvdWxkbiYjMzk7dCB3ZSBiZSBjaGVja2luZyBpZiBgbnNfY29tbW9uX2luaXRgIHdhcyAqYWN0dWFsbHkqIHN1Y2Nlc3NmdWwgYmVmb3JlIGNhbGxpbmcgYG5zX2NvbW1vbl9mcmVlYD8gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGZpZWxkcy4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiAqZmFpbHMqLCBjYWxsaW5nIGBuc19jb21tb25fZnJlZWAgbWlnaHQgY2F1c2UgaXNzdWVzLiBUaGlzIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyEgV2UgbmVlZCB0byBleGFtaW5lIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBmdW5jdGlvbiB2ZXJ5IGNhcmVmdWxseS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljIHdvcmtzLCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IGhhbmRsaW5nIG9mIGEgZmFpbGVkIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zX2NvbW1vbl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVzcGFjZS5jPTQyMDI9c3RhdGljIHN0cnVjdCBtbnRfbmFtZXNwYWNlICphbGxvY19tbnRfbnMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBib29sIGFub24pXG4tLVxuZnMvbmFtZXNwYWNlLmMtNDIxOC1cdGlmIChhbm9uKVxuZnMvbmFtZXNwYWNlLmM6NDIxOTpcdFx0cmV0ID0gbnNfY29tbW9uX2luaXRfaW51bShuZXdfbnMsIE1OVF9OU19BTk9OX0lOTyk7XG5mcy9uYW1lc3BhY2UuYy00MjIwLVx0ZWxzZVxuZnMvbmFtZXNwYWNlLmM6NDIyMTpcdFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV3X25zKTtcbmZzL25hbWVzcGFjZS5jLTQyMjItXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaD0xMT1ib29sIGlzX2N1cnJlbnRfbmFtZXNwYWNlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6MTI6aW50IF9fbnNfY29tbW9uX2luaXQoc3RydWN0IG5zX2NvbW1vbiAqbnMsIHUzMiBuc190eXBlLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMsIGludCBpbnVtKTtcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTMtdm9pZCBfX25zX2NvbW1vbl9mcmVlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oPTIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19uc19pbml0X2lkKGNvbnN0IHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDMtXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjQ0OiNkZWZpbmUgbnNfY29tbW9uX2luaXQoX19ucykgICAgICAgICAgICAgICAgICAgICBcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDo0NTpcdF9fbnNfY29tbW9uX2luaXQodG9fbnNfY29tbW9uKF9fbnMpLCAgICAgXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDYtXHRcdFx0IG5zX2NvbW1vbl90eXBlKF9fbnMpLCAgIFxcXG4tLVxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC00OS1cbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NTA6I2RlZmluZSBuc19jb21tb25faW5pdF9pbnVtKF9fbnMsIF9faW51bSkgICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjUxOlx0X19uc19jb21tb25faW5pdCh0b19uc19jb21tb24oX19ucyksICAgICBcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC01Mi1cdFx0XHQgbnNfY29tbW9uX3R5cGUoX19ucyksICAgXFxcbi0tXG5pcGMvbmFtZXNwYWNlLmM9Mzk9c3RhdGljIHN0cnVjdCBpcGNfbmFtZXNwYWNlICpjcmVhdGVfaXBjX25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbi0tXG5pcGMvbmFtZXNwYWNlLmMtNjQtXG5pcGMvbmFtZXNwYWNlLmM6NjU6XHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XG5pcGMvbmFtZXNwYWNlLmMtNjYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM9MjI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICphbGxvY19jZ3JvdXBfbnModm9pZClcbi0tXG5rZXJuZWwvY2dyb3VwL25hbWVzcGFjZS5jLTI5LVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM6MzA6XHRyZXQgPSBuc19jb21tb25faW5pdChuZXdfbnMpO1xua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYy0zMS1cdGlmIChyZXQpXG4tLVxua2VybmVsL25zY29tbW9uLmM9MTE9c3RhdGljIHZvaWQgbnNfZGVidWcoc3RydWN0IG5zX2NvbW1vbiAqbnMsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcylcbi0tXG5rZXJuZWwvbnNjb21tb24uYy01NS1cbmtlcm5lbC9uc2NvbW1vbi5jOjU2OmludCBfX25zX2NvbW1vbl9pbml0KHN0cnVjdCBuc19jb21tb24gKm5zLCB1MzIgbnNfdHlwZSwgY29uc3Qgc3RydWN0IHByb2NfbnNfb3BlcmF0aW9ucyAqb3BzLCBpbnQgaW51bSlcbmtlcm5lbC9uc2NvbW1vbi5jLTU3LXtcbi0tXG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jPTc2PXN0YXRpYyBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY3JlYXRlX3BpZF9uYW1lc3BhY2Uoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuLS1cbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMTA1LVxua2VybmVsL3BpZF9uYW1lc3BhY2UuYzoxMDY6XHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jLTEwNy1cdGlmIChlcnIpXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM9ODE9c3RhdGljIHN0cnVjdCB0aW1lX25hbWVzcGFjZSAqY2xvbmVfdGltZV9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTAxLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTAyOlx0ZXJyID0gbnNfY29tbW9uX2luaXQobnMpO1xua2VybmVsL3RpbWUvbmFtZXNwYWNlLmMtMTAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYz04Mz1pbnQgY3JlYXRlX3VzZXJfbnMoc3RydWN0IGNyZWQgKm5ldylcbi0tXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMjgtXG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYzoxMjk6XHRyZXQgPSBuc19jb21tb25faW5pdChucyk7XG5rZXJuZWwvdXNlcl9uYW1lc3BhY2UuYy0xMzAtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC91dHNuYW1lLmM9MzY9c3RhdGljIHN0cnVjdCB1dHNfbmFtZXNwYWNlICpjbG9uZV91dHNfbnMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuLS1cbmtlcm5lbC91dHNuYW1lLmMtNTItXG5rZXJuZWwvdXRzbmFtZS5jOjUzOlx0ZXJyID0gbnNfY29tbW9uX2luaXQobnMpO1xua2VybmVsL3V0c25hbWUuYy01NC1cdGlmIChlcnIpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU1MD1zdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU3My1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NzQ6XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTc1LVx0aWYgKHJ2KVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMjYzPXZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyOTItXHRwcmVpbml0X25ldChcdTAwMjZpbml0X25ldCwgXHUwMDI2aW5pdF91c2VyX25zKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjkzOlx0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjk0LVx0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIganVtcHMgb3V0IGF0IG1lLiBXZSYjMzk7cmUgc2h1ZmZsaW5nIHRoaW5ncyBhcm91bmQgaW4gYGNvcHlfbmV0X25zYC4gUHJldmlvdXNseSwgaXQgd2FzIGBwcmVpbml0X25ldGAgd2hpY2ggdGhlbiBjYWxsZWQgYG5zX2NvbW1vbl9pbml0YCwgdGhlbiBhc3NpZ25lZCB0aGUgYHVjb3VudHNgLCBhbmQgKnRoZW4qIGdvdCB0aGUgdXNlciBuYW1lc3BhY2UuIE5vdywgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoaW5ncyB1cDogYHByZWluaXRfbmV0YCwgYXNzaWduIGB1Y291bnRzYCwgZ2V0IHRoZSB1c2VyIG5hbWVzcGFjZSwgYW5kICp0aGVuKiBjYWxsIGBuc19jb21tb25faW5pdGAuIFRoZSBjcnVjaWFsIGRpZmZlcmVuY2UgaXMgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIG5vdyBjYWxsZWQgKmFmdGVyKiBzb21lIGNydWNpYWwgc3RlcHMuCgpgcHJlaW5pdF9uZXRgIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzLgoKVGhlIHJlYWwgc2hpZnQgaGVyZSBpcyB0aGUgZXJyb3IgaGFuZGxpbmcuIElmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGUgcHJldmlvdXMgY29kZSBkaWRuJiMzOTt0IGhhdmUgdGhpcyBqdW1wLCBzbyBgbnNfY29tbW9uX2ZyZWVgIHdvdWxkIGFsd2F5cyBoYXZlIGJlZW4gY2FsbGVkLiBOb3csIGl0IHNraXBzIGBuc19jb21tb25fZnJlZShuZXQpYCBpbiB0aGUgZXJyb3IgY2FzZS4gVGhhdCBtZWFucyBzb21ldGhpbmcgaGFzIGhhcHBlbmVkIHRoYXQgaXMgd29ydGggYXZvaWRpbmcgZnJlZWluZywgb3IgaXNuJiMzOTt0IHNhZmUgdG8gZnJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAganVtcCBpcyBhY3R1YWxseSBkb2luZy4gV2hhdCBhcmUgdGhlIHNpZGUgZWZmZWN0cywgYW5kIHdoeSBpcyBgbnNfY29tbW9uX2ZyZWVgIGJlaW5nIHNraXBwZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHB1dF91c2VybnNfbm9fY29tbW9uYCBwYXRoIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gNTcxOlx0XHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gNTcyOlx0XHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiA1NzM6XHRcbiA1NzQ6XHRcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbiA1NzU6XHRcdGlmIChydilcbiA1NzY6XHRcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbiA1Nzc6XHRcbiA1Nzg6XHRcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIDU3OTpcdFx0aWYgKHJ2IFx1MDAzYyAwKVxuIDU4MDpcdFx0XHRnb3RvIHB1dF91c2VybnM7XG4gNTgxOlx0XG4gNTgyOlx0XHRydiA9IHNldHVwX25ldChuZXQpO1xuIDU4MzpcdFxuIDU4NDpcdFx0dXBfcmVhZChcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1ODU6XHRcbiA1ODY6XHRcdGlmIChydiBcdTAwM2MgMCkge1xuIDU4NzpcdHB1dF91c2VybnM6XG4gNTg4Olx0XHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4gNTg5Olx0cHV0X3VzZXJuc19ub19jb21tb246XG4gNTkwOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTkxOlx0XHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiA1OTI6XHQjZW5kaWZcbiA1OTM6XHRcdFx0cHV0X3VzZXJfbnModXNlcl9ucyk7XG4gNTk0Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xuIDU5NTpcdGRlY191Y291bnRzOlxuIDU5NjpcdFx0XHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XG4gNTk3Olx0XHRcdHJldHVybiBFUlJfUFRSKHJ2KTtcbiA1OTg6XHRcdH1cbiA1OTk6XHRcdHJldHVybiBuZXQ7XG4gNjAwOlx0fVxuIDYwMTpcdFxuIDYwMjpcdC8qKlxuIDYwMzpcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XG4gNjA0Olx0ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UgaW4gcXVlc3Rpb24gKGNhbiBiZSBOVUxMKVxuIDYwNTpcdCAqIEB1aWQ6IGtlcm5lbCB1c2VyIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjA2Olx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXG4gNjA3Olx0ICpcbiA2MDg6XHQgKiBSZXR1cm5zIHRoZSB1aWQvZ2lkIHBhaXIgb2Ygcm9vdCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZVxuIDYwOTpcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxuIDYxMDpcdCAqL1xuIDYxMTpcdHZvaWQgbmV0X25zX2dldF9vd25lcnNoaXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBrdWlkX3QgKnVpZCwga2dpZF90ICpnaWQpXG4gNjEyOlx0e1xuIDYxMzpcdFx0aWYgKG5ldCkge1xuIDYxNDpcdFx0XHRrdWlkX3QgbnNfcm9vdF91aWQgPSBtYWtlX2t1aWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxNTpcdFx0XHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVx1MDAzZXVzZXJfbnMsIDApO1xuIDYxNjpcdFxuIDYxNzpcdFx0XHRpZiAodWlkX3ZhbGlkKG5zX3Jvb3RfdWlkKSlcbiA2MTg6XHRcdFx0XHQqdWlkID0gbnNfcm9vdF91aWQ7XG4gNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gYW5kIFBvdGVudGlhbCBMZWFrKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBwcmVpbml0X25ldGAgc2V0cyBgbmV0LSZndDtwYXNzaXZlYCB0byAxIHVzaW5nIGByZWZjb3VudF9zZXRgLiBTbywgdGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50IGlzIHNldC4gVGhlbiwgdGhlcmUmIzM5O3MgYG5zX2NvbW1vbl9pbml0YC4gSWYgdGhhdCBmdW5jdGlvbiBmYWlscywgdGhlIGNvZGUganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBpcyB3aGVyZSB0aGUgaXNzdWUgbWlnaHQgYXJpc2UuCgpgcHV0X3VzZXJuc19ub19jb21tb25gIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgLiBJZiB0aGUgY291bnQgZ29lcyB0byB6ZXJvLCB0aGUgbmFtZXNwYWNlIGlzIGZyZWVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBiZWhhdmlvci4KCkJ1dCwgYmFjayB1cCBhIG1vbWVudC4gQmVmb3JlLCBpZiBgbnNfY29tbW9uX2luaXRgIGZhaWxlZCBpbnNpZGUgYHByZWluaXRfbmV0YCwgdGhlIGNvZGUgcmV0dXJuZWQgZnJvbSBgcHJlaW5pdF9uZXRgIGRpcmVjdGx5IGFuZCB3ZW50IHRvIGBkZWNfdWNvdW50c2AuIEFuZCBgZGVjX3Vjb3VudHNgIG9ubHkgZGVjcmVtZW50cyBgdWNvdW50c2AgYW5kIHJldHVybnMuIFRoZSBvcmlnaW5hbCBwYXRoIHdlbnQgdGhyb3VnaCBgY29weV9uZXRfbnNgIHdoZXJlIHRoZSBlcnJvciBoYW5kbGluZyB3YXMgZGlmZmVyZW50LiBJdCBsb29rcyBsaWtlIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgYG5ldGAsIHdhcyBuZXZlciBmcmVlZCBpbiB0aGF0IHBhdGguCgpIbW0sIHNvIGl0IGxvb2tzIGxpa2UgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgcHJldmlvdXNseSwgYG5ldGAgd2FzIGxlYWtlZC4gTm93LCBsZXQgbWUgcmUtZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0YCB3aXRoaW4gdGhlIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhIG1lbW9yeSBsZWFrIGluIHRoZSBvbGRlciBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzMDpcdFx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobmV0LVx1MDAzZWdlbikpO1xuIDUzMTpcdFxuIDUzMjpcdCNpZmRlZiBDT05GSUdfUkVGX1RSQUNLRVJcbiA1MzM6XHRcdFx0LyogVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhY2tlcnMgbGVmdCB0aGVyZS4gKi9cbiA1MzQ6XHRcdFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyKTtcbiA1MzU6XHRcdFx0aWYgKCFuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIuZGVhZClcbiA1MzY6XHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIpO1xuIDUzNzpcdCNlbmRpZlxuIDUzODpcdFxuIDUzOTpcdFx0XHQvKiBXYWl0IGZvciBhbiBleHRyYSByY3VfYmFycmllcigpIGJlZm9yZSBmaW5hbCBmcmVlLiAqL1xuIDU0MDpcdFx0XHRsbGlzdF9hZGQoXHUwMDI2bmV0LVx1MDAzZWRlZmVyX2ZyZWVfbGlzdCwgXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1NDE6XHRcdH1cbiA1NDI6XHR9XG4gNTQzOlx0XG4gNTQ0Olx0dm9pZCBuZXRfZHJvcF9ucyhzdHJ1Y3QgbnNfY29tbW9uICpucylcbiA1NDU6XHR7XG4gNTQ2Olx0XHRpZiAobnMpXG4gNTQ3Olx0XHRcdG5ldF9wYXNzaXZlX2RlYyh0b19uZXRfbnMobnMpKTtcbiA1NDg6XHR9XG4gNTQ5Olx0XG4gNTUwOlx0c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIDU1MTpcdFx0XHRcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiA1NTI6XHR7XG4gNTUzOlx0XHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcbiA1NTQ6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiA1NTU6XHRcdGludCBydjtcbiA1NTY6XHRcbiA1NTc6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBDTE9ORV9ORVdORVQpKVxuIDU1ODpcdFx0XHRyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTtcbiA1NTk6XHRcbiA1NjA6XHRcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XG4gNTYxOlx0XHRpZiAoIXVjb3VudHMpXG4gNTYyOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9TUEMpO1xuIDU2MzpcdFxuIDU2NDpcdFx0bmV0ID0gbmV0X2FsbG9jKCk7XG4gNTY1Olx0XHRpZiAoIW5ldCkge1xuIDU2NjpcdFx0XHRydiA9IC1FTk9NRU07XG4gNTY3Olx0XHRcdGdvdG8gZGVjX3Vjb3VudHM7XG4gNTY4Olx0XHR9XG4gNTY5Olx0XG4gNTcwOlx0XHRwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuIDU3MTpcdFx0bmV0LVx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xuIDU3MjpcdFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XG4gNTczOlx0XG4gNTc0Olx0XHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XG4gNTc1Olx0XHRpZiAocnYpXG4gNTc2Olx0XHRcdGdvdG8gcHV0X3VzZXJuc19ub19jb21tb247XG4gNTc3Olx0XG4gNTc4Olx0XHRydiA9IGRvd25fcmVhZF9raWxsYWJsZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiA1Nzk6XHRcdGlmIChydiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgQWxsb2NhdGlvbiBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIGBuZXRfYWxsb2MoKWAgaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGBuZXRgIHN0cnVjdHVyZS4gSG1tLCBJIHJlY2FsbCBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLiBJZiB0aGUgYHByZWluaXRfbmV0YCBmdW5jdGlvbiBoYWQgZmFpbGVkIGVhcmxpZXIsIHRoZXJlJiMzOTtzIGEganVtcCBzdHJhaWdodCB0byBgZGVjX3Vjb3VudHNgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgZGVjX3Vjb3VudHNgICpkb2VzbiYjMzk7dCogZnJlZSB0aGUgYG5ldGAgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3Mgc2tpcHBpbmcgdGhlIG5lY2Vzc2FyeSBkZWFsbG9jYXRpb24gc3RlcC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIG1lbW9yeSBsZWFrIGlmIGBwcmVpbml0X25ldGAgZXZlciBiYWlscyBvdXQuIExldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IGxvZ2ljIHdpdGhpbiBgbmV0X2FsbG9jKClgIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uIGRldGFpbHMsIGFzIHdlbGwgYXMgdGhlIGFzc3VtZWQgYmVoYXZpb3VyIG9mIGBkZWNfdWNvdW50c2AuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGhvdyB0aGlzIGlzIGFsbCBzdXBwb3NlZCB0byB3b3JrIGFuZCB3aGVyZSB0aGUgbGVhayBtaWdodCBiZSBoYXBwZW5pbmcuIFRoZSBhbGxvY2F0aW9uIHBhdGggbmVlZHMgdG8gYmUgZnVsbHkgZGlzc2VjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTY2PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2dlbl9wdHJzID0gSU5JVElBTF9ORVRfR0VOX1BUUlM7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNjctXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6Njg6c3RhdGljIHN0cnVjdCBuZXRfZ2VuZXJpYyAqbmV0X2FsbG9jX2dlbmVyaWModm9pZClcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy02OS17XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTgzPXN0YXRpYyBpbnQgbmV0X2Fzc2lnbl9nZW5lcmljKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGlkLCB2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy05NS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo5NjpcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy05Ny1cdGlmICghbmcpXG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTQ3Nj1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm5ldG5zX3dxO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3Ny1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0Nzg6c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ3OS17XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ4Mi1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0ODM6XHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDg0LVx0aWYgKCFuZylcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTUwPXN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTYzLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU2NDpcdG5ldCA9IG5ldF9hbGxvYygpO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTU2NS1cdGlmICghbmV0KSB7XG4tLVxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjM9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTI3OC1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMjc5Olx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyODAtXHRpZiAoIW5nKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz0xMzgwPXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGVybmV0X29wZXJhdGlvbnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM5NS1cdFx0ICogcGVybmV0X29wc19yd3NlbS4gQnV0IFdSSVRFX09OQ0UgaXMgbmVlZGVkIHRvIHByb3RlY3Rcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzk2Olx0XHQgKiBuZXRfYWxsb2NfZ2VuZXJpYy5cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzk3LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgbmV0X2FsbG9jKClgJiMzNDsgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBuZXRfYWxsb2MoKWAqKgoKQWxyaWdodCwgKm5ldF9hbGxvYygpKi4gVGhhdCB1c3VhbGx5IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBicmVhayBkb3duIHdoYXQgdGhhdCBpbXBsaWVzOgoKKiAgIEkgaW5zdGFudGx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24gb3IgbWVtb3J5IGV4aGF1c3Rpb24uIElzIHRoaXMgYSBjdXN0b20gYWxsb2NhdG9yPyBJcyBpdCB1c2luZyBzbGFiPyBCdWRkeT8gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLCBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eT8KKiAgIEnigJltIGFscmVhZHkgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIElzIHRoaXMgZm9yIGEgc29ja2V0IGJ1ZmZlciAoc2tiKT8gQSByb3V0ZT8gQSBmbG93IHRhYmxlIGVudHJ5PyBUaGlzJiMzOTtsbCBkcml2ZSBteSBleHBlY3RhdGlvbnMgZm9yIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCB0aGUgcG90ZW50aWFsIGZvciBsb2NrIGNvbnRlbnRpb24uCiogICBJIGFsc28gbmVlZCB0byBjaGVjayBob3cgdGhleSBoYW5kbGUgZXJyb3JzLiBEb2VzIGl0IHJldHVybiBOVUxMIG9uIGZhaWx1cmUsIG9yIGRvZXMgaXQgdHJpZ2dlciBhbiBPT00gY29uZGl0aW9uPyBIb3cgZ3JhY2VmdWxseSBpcyB0aGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjYWxsaW5nIGNvZGU/IEFueSBzcGVjaWZpYyBlcnJvciBjb2RlcyB0byB3YXRjaCBmb3I/CiogICBJIHdhbnQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zLiBJcyB0aGVyZSBlbm91Z2ggbWVtb3J5PyBJcyB0aGVyZSBhIHNwaW5sb2NrIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbGltaXRzIGluIHBsYWNlPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgYSBmYWlsZWQgYWxsb2NhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/CiogICBGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlZmVyZW5jZSBjb3VudGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXTigJlzIGFsbG9jYXRlZCBhbmQgd2hlcmUgaXQgaXMgZnJlZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiBgbmV0X2FsbG9jKClgIHRvIGl0cyBjb3JyZXNwb25kaW5nIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZG91YmxlLWZyZWVzLgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCB0aGV5IGFyZSByZWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA4OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0Nzg6XHRzdGF0aWMgc3RydWN0IG5ldCAqbmV0X2FsbG9jKHZvaWQpXG4gNDc5Olx0e1xuIDQ4MDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gTlVMTDtcbiA0ODE6XHRcdHN0cnVjdCBuZXRfZ2VuZXJpYyAqbmc7XG4gNDgyOlx0XG4gNDgzOlx0XHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XG4gNDg0Olx0XHRpZiAoIW5nKVxuIDQ4NTpcdFx0XHRnb3RvIG91dDtcbiA0ODY6XHRcbiA0ODc6XHRcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xuIDQ4ODpcdFx0aWYgKCFuZXQpXG4gNDg5Olx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gNDkwOlx0XG4gNDkxOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNDkyOlx0XHRuZXQtXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcbiA0OTM6XHRcdGlmICghbmV0LVx1MDAzZWtleV9kb21haW4pXG4gNDk0Olx0XHRcdGdvdG8gb3V0X2ZyZWVfMjtcbiA0OTU6XHRcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNla2V5X2RvbWFpbi1cdTAwM2V1c2FnZSwgMSk7XG4gNDk2Olx0I2VuZGlmXG4gNDk3Olx0XG4gNDk4Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVx1MDAzZWdlbiwgbmcpO1xuIDQ5OTpcdG91dDpcbiA1MDA6XHRcdHJldHVybiBuZXQ7XG4gNTAxOlx0XG4gNTAyOlx0I2lmZGVmIENPTkZJR19LRVlTXG4gNTAzOlx0b3V0X2ZyZWVfMjpcbiA1MDQ6XHRcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xuIDUwNTpcdFx0bmV0ID0gTlVMTDtcbiA1MDY6XHQjZW5kaWZcbiA1MDc6XHRvdXRfZnJlZTpcbiA1MDg6XHRcdGtmcmVlKG5nKTtcbiA1MDk6XHRcdGdvdG8gb3V0O1xuIDUxMDpcdH1cbiA1MTE6XHRcbiA1MTI6XHRzdGF0aWMgTExJU1RfSEVBRChkZWZlcl9mcmVlX2xpc3QpO1xuIDUxMzpcdFxuIDUxNDpcdHN0YXRpYyB2b2lkIG5ldF9jb21wbGV0ZV9mcmVlKHZvaWQpXG4gNTE1Olx0e1xuIDUxNjpcdFx0c3RydWN0IGxsaXN0X25vZGUgKmtpbGxfbGlzdDtcbiA1MTc6XHRcdHN0cnVjdCBuZXQgKm5ldCwgKm5leHQ7XG4gNTE4Olx0XG4gNTE5Olx0XHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cbiA1MjA6XHRcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2ZGVmZXJfZnJlZV9saXN0KTtcbiA1MjE6XHRcbiA1MjI6XHRcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcbiA1MjM6XHRcdFx0a21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7XG4gNTI0Olx0XG4gNTI1Olx0fVxuIDUyNjpcdFxuIDUyNzpcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBIENyaXRpY2FsIE92ZXJzaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIHJldmlld2luZyB0aGlzIGNvZGUsIGFuZCBzb21ldGhpbmcmIzM5O3Mgbm90IHNpdHRpbmcgcmlnaHQuIEJlZm9yZSwgaWYgYHByZWluaXRfbmV0YCBmYWlsZWQsIGl0IHJldHVybmVkIGFuIGVycm9yLCBhbmQgdGhlIGNvZGUganVtcGVkIHRvIGBkZWNfdWNvdW50c2AuIEkgcmVtZW1iZXIgdGhhdCBtdWNoLgoKYGBgYwoJcnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwoJaWYgKHJ2ICZsdDsgMCkKCQlnb3RvIGRlY191Y291bnRzOwpgYGAKCkFuZCBgZGVjX3Vjb3VudHNgIGNvcnJlY3RseSBkZWNyZW1lbnRlZCB0aGUgdXNlciBjb3VudHMuCgpgYGBjCmRlY191Y291bnRzOgoJCWRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTsKCQlyZXR1cm4gRVJSX1BUUihydik7CmBgYAoKQnV04oCmIHdhaXQgYSBtaW51dGUuIElmIGBwcmVpbml0X25ldGAgZmFpbHMsIGFuZCBgbmV0YCB3YXMgYWxsb2NhdGVkIGVhcmxpZXIgYnkgYG5ldF9hbGxvY2AsIHRoZW4gYG5ldGAgaXMgbGVha2VkISBgZGVjX3Vjb3VudHNgIGRlY3JlbWVudHMgdWNvdW50cywgYnV0IGl0ICpkb2VzbiYjMzk7dCogZnJlZSB0aGUgYWxsb2NhdGVkIG5ldHdvcmsgbmFtZXNwYWNlLCBgbmV0YC4gVGhhdCBpcyBhIHNlcmlvdXMgYnVnLCBhbmQgcG90ZW50aWFsbHkgYSB2ZXJ5IGltcGFjdGZ1bCBtZW1vcnkgbGVhayBpZiB0aGF0IGZhaWx1cmUgbW9kZSBpcyBoaXQgb2Z0ZW4uIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHByZWluaXRfbmV0YCYjMzk7cyBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbm90aGVyIGV4aXQgcGF0aCB0aGF0IGRvZXMgcHJvcGVybHkgZnJlZSBgbmV0YC4gVGhpcyBuZWVkcyB0byBiZSBjaGVja2VkIGltbWVkaWF0ZWx5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0fVxuIDQwMTpcdFxuIDQwMjpcdC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xuIDQwMzpcdHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4gNDA0Olx0e1xuIDQwNTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNm5ldC1cdTAwM2VwYXNzaXZlLCAxKTtcbiA0MDY6XHRcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRfcmVmY250XCYjMzQ7KTtcbiA0MDc6XHRcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRfbm90cmVmY250XCYjMzQ7KTtcbiA0MDg6XHRcbiA0MDk6XHRcdG5ldC1cdTAwM2VoYXNoX21peCA9IGdldF9yYW5kb21fdTMyKCk7XG4gNDEwOlx0XHRuZXQtXHUwMDNlZGV2X2Jhc2Vfc2VxID0gMTtcbiA0MTE6XHRcdG5ldC1cdTAwM2V1c2VyX25zID0gdXNlcl9ucztcbiA0MTI6XHRcbiA0MTM6XHRcdGlkcl9pbml0KFx1MDAyNm5ldC1cdTAwM2VuZXRuc19pZHMpO1xuIDQxNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZW5zaWRfbG9jayk7XG4gNDE1Olx0XHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VpcHY0LnJhX211dGV4KTtcbiA0MTY6XHRcbiA0MTc6XHQjaWZkZWYgQ09ORklHX0RFQlVHX05FVF9TTUFMTF9SVE5MXG4gNDE4Olx0XHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbiA0MTk6XHRcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZuZXQtXHUwMDNlcnRubF9tdXRleCwgcnRubF9uZXRfbG9ja19jbXBfZm4sIE5VTEwpO1xuIDQyMDpcdFx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VydG5sX3dvcmssIHJ0bmxfbmV0X3dvcmtfZnVuYyk7XG4gNDIxOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xuIDQyMjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZWRldl91bnJlZ19sb2NrKTtcbiA0MjM6XHQjZW5kaWZcbiA0MjQ6XHRcbiA0MjU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9hbGwpO1xuIDQyNjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiA0Mjc6XHRcdHByZWluaXRfbmV0X3N5c2N0bChuZXQpO1xuIDQyODpcdH1cbiA0Mjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIE5hbWVzcGFjZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIGNvZGUgYWdhaW4uIFByZXZpb3VzbHksIGBwcmVpbml0X25ldGAgd2FzIGNhbGxpbmcgYG5zX2NvbW1vbl9pbml0KG5ldClgIGRpcmVjdGx5LCByaWdodD8gQW5kIHRoYXQgY291bGQgZmFpbC4gSWYgaXQgKmRpZCogZmFpbCwgYHByZWluaXRfbmV0YCByZXR1cm5lZCBhbiBlcnJvciwgYW5kIGBjb3B5X25ldF9uc2AgaGFkIGEgbGVhayBiZWNhdXNlIGl0IGp1bXBlZCB0byBgZGVjX3Vjb3VudHNgIGFuZCB0aGUgYG5ldGAgc3RydWN0IHdhc24mIzM5O3QgcHJvcGVybHkgY2xlYW5lZCB1cC4gQSBjbGFzc2ljIG92ZXJzaWdodCEKCk5vdywgaXQmIzM5O3MgZGlmZmVyZW50LiBgcHJlaW5pdF9uZXRgICpkb2VzbiYjMzk7dCogY2FsbCBgbnNfY29tbW9uX2luaXRgIGFueW1vcmUuIEluc3RlYWQsIGl0IHNlZW1zIHRvIGp1c3QgaW5pdGlhbGl6ZSBgbmV0LSZndDtwYXNzaXZlYCB0byAxLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIHBhc3NpdmUgaW5pdGlhbGl6YXRpb24sIEkgd29uZGVyIHdoeS4gVGhlbiwgYGNvcHlfbmV0X25zYCBjYWxscyBgbnNfY29tbW9uX2luaXRgLiBOb3csIGlmICp0aGF0KiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLCBpdCBqdW1wcyB0byBgcHV0X3VzZXJuc19ub19jb21tb25gLCB3aGljaCB0aGVuIGNhbGxzIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAuCgpBaGEhIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAgKmRlY3JlbWVudHMqIGBuZXQtJmd0O3Bhc3NpdmVgIHRvIDAsIHdoaWNoIHNob3VsZCB0aGVuIGZyZWUgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBpZiB0aGUgY291bnRlciBpcyBhdCAwLiBTbywgaXQgKnNob3VsZCogY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyBgbnNfY29tbW9uX2luaXRgLiBCdXQgd2FpdC4uLiBkaWQgSSByZWFkIHRoYXQgY29ycmVjdGx5PyBgbmV0X3Bhc3NpdmVfZGVjYCAqZnJlZXMqIGBuZXRgPyBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gdmVyaWZ5ISBJIGhhZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmV0X3Bhc3NpdmVfZGVjYCB0byBtYWtlIHN1cmUgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHRvIGBuZXRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTI3Olx0dm9pZCBuZXRfcGFzc2l2ZV9kZWMoc3RydWN0IG5ldCAqbmV0KVxuIDUyODpcdHtcbiA1Mjk6XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bmV0LVx1MDAzZXBhc3NpdmUpKSB7XG4gNTMwOlx0XHRcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXHUwMDNlZ2VuKSk7XG4gNTMxOlx0XG4gNTMyOlx0I2lmZGVmIENPTkZJR19SRUZfVFJBQ0tFUlxuIDUzMzpcdFx0XHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xuIDUzNDpcdFx0XHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcdTAwMjZuZXQtXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xuIDUzNTpcdFx0XHRpZiAoIW5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlci5kZWFkKVxuIDUzNjpcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9leGl0KFx1MDAyNm5ldC1cdTAwM2VyZWZjbnRfdHJhY2tlcik7XG4gNTM3Olx0I2VuZGlmXG4gNTM4Olx0XG4gNTM5Olx0XHRcdC8qIFdhaXQgZm9yIGFuIGV4dHJhIHJjdV9iYXJyaWVyKCkgYmVmb3JlIGZpbmFsIGZyZWUuICovXG4gNTQwOlx0XHRcdGxsaXN0X2FkZChcdTAwMjZuZXQtXHUwMDNlZGVmZXJfZnJlZV9saXN0LCBcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xuIDU0MTpcdFx0fVxuIDU0MjpcdH1cbiA1NDM6XHRcbiA1NDQ6XHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuIDU0NTpcdHtcbiA1NDY6XHRcdGlmIChucylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzOTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgRml4IGluIE5ldHdvcmsgTmFtZXNwYWNlcyoqCgpPa2F5LCBzbyBgbmV0X3Bhc3NpdmVfZGVjYCAqZG9lcyogZnJlZSBgbmV0YCDigJMgd2VsbCwgYWRkcyBpdCB0byBhIGRlZmVycmVkIGZyZWUgbGlzdCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZm9yIHRoaXMgcHVycG9zZS4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhhdCYjMzk7cyBnb29kLCBhIGRlZmluaXRlIGltcHJvdmVtZW50LgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIuIGBuc19jb21tb25faW5pdGAgY2FsbHMgYF9fbnNfY29tbW9uX2luaXRgLCB3aGljaCB0aGVuIGNhbGxzIGBwcm9jX2FsbG9jX2ludW1gLiBBaCwgcmlnaHQsIGBwcm9jX2FsbG9jX2ludW1gIGNhbiBmYWlsLCB1c3VhbGx5IGR1ZSB0byBtZW1vcnkgZXhoYXVzdGlvbiBvciBydW5uaW5nIG91dCBvZiBJRHMuIElmICp0aGF0KiBoYXBwZW5zLCBgY29weV9uZXRfbnNgIGxlYWtlZCB0aGUgYG5ldGAgc3RydWN0dXJlLiBTbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBmaXgg4oCTIGl0IHBsdWdzIGEgbWVtb3J5IGxlYWssIHdoaWNoIGlzIGEgYmlnIGRlYWwuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiB0aGlzPyBNZW1vcnkgbGVha3Mgb24gZXJyb3IgcGF0aHMgYXJlIHByaW1lIGZ1enppbmcgdGFyZ2V0cywgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGVycm9yIHBhdGg6IGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGF0IGZhaWx1cmU/IGBuc19jb21tb25faW5pdGAgaXMgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgZnJvbSBhIGdsb2JhbCBJREEuIEl0IGZhaWxzIGlmIHRoZSBJREEgYWxsb2NhdGlvbiBmYWlscyAtIHdoaWNoIGlzIGFuIGVycm9yIHBhdGguIEdvb2QuIFRoaXMgaXMgc291bmRpbmcgbGlrZSBhIHZhbHVhYmxlIHRhcmdldC4KCldhaXQsIGlmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGBjb3B5X25ldF9uc2AgbGVha3MuIFJpZ2h0LCB0aGUgZml4IGluaXRpYWxpemVzIGBuZXQtJmd0O3Bhc3NpdmVgICpiZWZvcmUqIGNhbGxpbmcgYG5zX2NvbW1vbl9pbml0YC4gVGhlbiwgaWYgdGhlIGxhdHRlciBmYWlscywgYG5ldF9wYXNzaXZlX2RlYyhuZXQpYCBnZXRzIGNhbGxlZCwgYW5kIGZyZWVzIGl0LiAgQWdhaW4sIGJ1ZyBmaXgsIHByZXZlbnRpbmcgYSBtZW1vcnkgbGVhay4KClNvLCBpcyBmdXp6aW5nIGp1c3RpZmllZD8gVGhpcyBjaGFuZ2UgbW9kaWZpZXMgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gIGBjb3B5X25ldF9uc2AgaXMgcmVhY2hhYmxlIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgYW5kIGB1bnNoYXJlKENMT05FX05FV05FVClgLiAgRGVmaW5pdGVseSByZWFjaGFibGUsIGRlZmluaXRlbHkgdGVzdGFibGUuIEZ1enppbmcgYGNvcHlfbmV0X25zYCBkaXJlY3RseSAod2hpY2ggbWFwcyB0byBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBzaG91bGQgYWJzb2x1dGVseSBiZSBkb2luZy4KCkhhbmcgb24sIGlzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gdG8gZm9jdXMgb24/IFllYWgsIGBjb3B5X25ldF9uc2Agc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBjYW5kaWRhdGUgaGVyZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3Qgc3RhdGljIGZpcnN0LiBHb3R0YSBjaGVjayB0aGUgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9uZXRfbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU0ND12b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NDktXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NTUwOnN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTEtXHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGNvcHlfbmV0X25zYCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYGNvcHlfbmV0X25zYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBub24tc3RhdGljIGZ1bmN0aW9uIHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBidWlsZC10aW1lIGRlY2lzaW9ucyBhcmUgYXQgcGxheS4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IGFyZSB3ZSBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzaXR1YXRpb24/CgpNeSBpbnN0aW5jdHMgdGVsbCBtZSB0byBjaGVjayBmb3IgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGlzIGlzIG5ldHdvcmtpbmcgY29kZSwgSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIGtleSB0byBpdCBhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIHVzdWFsIHN1c3BlY3RzOiBgbmV0L2NvcmUvTWFrZWZpbGVgIGZvciBidWlsZC10aW1lIGZsYWdzIG9yIHRoZSBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBmaWxlIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxlYWQgb24gd2hhdCYjMzk7cyBkcml2aW5nIHRoZSBiZWhhdmlvciBvZiBgY29weV9uZXRfbnNgLiBJdCYjMzk7cyBsaWtlbHkgb25lIG9mIHRob3NlIHR3by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X25hbWVzcGFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9Nj1vYmoteSA6PSBzb2NrLm8gc2tidWZmLm8gZGF0YWdyYW0ubyBzdHJlYW0ubyBzY20ubyBcXFxubmV0L2NvcmUvTWFrZWZpbGU6NzpcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtOC1cdCBmbG93X2Rpc3NlY3Rvci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIE5ldHdvcmsgTmFtZXNwYWNlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgbmV0X25hbWVzcGFjZS5jYCBmaWxlIGFuZCBob3cgaXQmIzM5O3MgY29tcGlsZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIG5ldHdvcmtpbmcgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIEkmIzM5O20gYSBsaXR0bGUgZnV6enkgb24gd2hlbiBgY29weV9uZXRfbnNgIGdldHMgaW5jbHVkZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYENPTkZJR19ORVRfTlNgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYGluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaGAgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIGlmIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBtYWNyb3MgYXJlIHVzZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvcHlfbmV0X25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0yMTI9ZXh0ZXJuIHN0cnVjdCBuZXQgaW5pdF9uZXQ7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNC0jaWZkZWYgQ09ORklHX05FVF9OU1xuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oOjIxNTpzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMTYtXHRcdFx0c3RydWN0IG5ldCAqb2xkX25ldCk7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oPTIyND1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjbGVhbnVwX25ldF90YXNrO1xuLS1cbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjI5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIzMC1cdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IG5ldCAqb2xkX25ldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNTEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfTlNgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGNvcHlfbmV0X25zYCBhbmQgaG93IGl0IHdvcmtzLiBJIGtub3cgdGhhdCBgQ09ORklHX05FVF9OU2AgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJZiB0aGF0JiMzOTtzICplbmFibGVkKiwgdGhlbiBgY29weV9uZXRfbnNgIGlzIGFjdHVhbGx5IGEgcmVhbCwgZnVuY3Rpb25pbmcgZnVuY3Rpb24uIEJ1dCwgaWYgYENPTkZJR19ORVRfTlNgIGlzICpkaXNhYmxlZCosIGl0IGVzc2VudGlhbGx5IHR1cm5zIGludG8gYSBzdGF0aWMgaW5saW5lLiBTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYE5FVF9OU2AgaXMgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGlzIHNjZW5hcmlvLCBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBmb3IgYE5FVF9OU2AsIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBuZXR3b3JrIG5hbWVzcGFjZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9OUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTQ1Mj1jb25maWcgUElEX05TXG4tLVxuaW5pdC9LY29uZmlnLTE0NTktXG5pbml0L0tjb25maWc6MTQ2MDpjb25maWcgTkVUX05TXG5pbml0L0tjb25maWctMTQ2MS1cdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbi0tXG5uZXQvS2NvbmZpZy5kZWJ1Zz0zPWNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG4tLVxubmV0L0tjb25maWcuZGVidWctMTEtXG5uZXQvS2NvbmZpZy5kZWJ1ZzoxMjpjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIHJlZmNvdW50IHRyYWNraW5nXCYjMzQ7XG4tLVxubmV0L25zaC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcbm5ldC9uc2gvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYE5FVF9OU2AsIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIGluaXQvS2NvbmZpZzogTkVUX05TIFRlcnJpdG9yeSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgemVyb2luZyBpbiBvbiBhbnl0aGluZyByZWxhdGVkIHRvIGBORVRfTlNgLiBUaGUgZ29hbCBpcyB0byBzZWUgaG93IHRoaXMgZmVhdHVyZSYjMzk7cyBjb25maWd1cmF0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKG1lLCB1c3VhbGx5IHZpYSB0aGUgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2VzKSBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzLi4uIGVzc2VudGlhbGx5LCB0aGUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgYE5FVF9OU2AmIzM5O3MgYmVoYXZpb3IgaXMgY29udHJvbGxlZC4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBBbmQgSSBob3BlIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2sgaW5pdGlhbGl6YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHJlbWVtYmVyIGhvdyB0aGlzIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBncmVhdGVyIGxpbnV4IGtlcm5lbCBwaWN0dXJlLiBJIHNob3VsZCBiZSBhYmxlIHRvIG1hcCBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGl0cyByZWxldmFudCBtb2R1bGVzLCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHN0YXRpY2FsbHkgYnVpbHQsIG9yIGR5bmFtaWNhbGx5IGxvYWRlZC4KCkkgd2lsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcXVpcmtzIGluIHRoZSBmZWF0dXJlLCBtYXliZSB0aGF0IGl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHRcdGhlbHBcbjE0NTY6XHRcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcbjE0NTc6XHRcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XG4xNDU4Olx0XHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXG4xNDU5Olx0XG4xNDYwOlx0Y29uZmlnIE5FVF9OU1xuMTQ2MTpcdFx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuMTQ2MjpcdFx0ZGVwZW5kcyBvbiBORVRcbjE0NjM6XHRcdGRlZmF1bHQgeVxuMTQ2NDpcdFx0aGVscFxuMTQ2NTpcdFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcbjE0NjY6XHRcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXG4xNDY3Olx0XG4xNDY4Olx0ZW5kaWYgIyBOQU1FU1BBQ0VTXG4xNDY5Olx0XG4xNDcwOlx0Y29uZmlnIENIRUNLUE9JTlRfUkVTVE9SRVxuMTQ3MTpcdFx0Ym9vbCBcJiMzNDtDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFwmIzM0O1xuMTQ3MjpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4xNDczOlx0XHRzZWxlY3QgUFJPQ19DSElMRFJFTlxuMTQ3NDpcdFx0c2VsZWN0IEtDTVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiBgTkVUYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZmFsbHMgdW5kZXIgYE5BTUVTUEFDRVNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGlzLiBSaWdodCwgc28gYE5FVF9OU2AgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgdGhlIHR3byBrZXkgY29uZmlncyBJIG5lZWQgdG8gZm9jdXMgb24uIFdhaXQgYSBtaW51dGXigKYgd2FzbiYjMzk7dCBgTkFNRVNQQUNFU2AgYSBtZW51Y29uZmlnPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIGFuZCBzZWUgaG93IGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZXJlLiBOZWVkIHRvIGdldCB0aGUgaGllcmFyY2h5IHN0cmFpZ2h0IGJlZm9yZSBJIG1ha2UgYW55IGRlY2lzaW9ucyBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkFNRVNQQUNFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTM5OT1lbmRpZiAjIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xNDAwLVxuaW5pdC9LY29uZmlnOjE0MDE6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXG5pbml0L0tjb25maWctMTQwMi1cdGJvb2wgXCYjMzQ7TmFtZXNwYWNlcyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNwoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA1MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBpbiBgY29weV9uZXRfbnNgLiBTcGVjaWZpY2FsbHksIHRoZSBsZWFrIG9jY3VycyB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMgd2l0aGluIGBjb3B5X25ldF9uc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY3JpdGljYWwgZml4IGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGlzIGlzIHdvcnRoIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKSSB0aGluayBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGNvcHlfbmV0X25zYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYXMgSSBrbm93IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcmVpbml0X25ldGAgYW5kIGBuZXRfbnNfaW5pdGAgYXJlIGluIHRoYXQgc3BhY2UuIEhvd2V2ZXIsIGBwcmVpbml0X25ldGAgaXMgc3RhdGljLCBhbmQgYG5ldF9uc19pbml0YCBpcyBvbmx5IGNhbGxlZCBhdCBib290LiBTbywgYGNvcHlfbmV0X25zYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAsIGlzIHRoZSBrZXkuIEFuZCwgSSBzZWUgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5ldF9uc19pbml0YCwgYnV0IHRoYXQgaXMgYXQgYm9vdCB0aW1lIGluaXRpYWxpemF0aW9uLCBzbyBpdOKAmXMgbm90IHJlYWxseSByZWxldmFudCBoZXJlLCBpdCYjMzk7cyBqdXN0IHRoZSBlYXJseSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZmlyc3QgbmFtZXNwYWNlLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBgTkVUX05TYCBhbmQgYE5BTUVTUEFDRVNgIGFyZSB0aGUgZW5hYmxpbmcgZmFjdG9ycywgYW5kIGFyZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGUgY29kZSBwYXRoLiBJIG1pZ2h0IG5lZWQgYFVTRVJfTlNgIHRvIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLCBidXQgYE5FVF9OU2AgaXMgdGhlIHByaW1hcnkgb25lLCBvZiBjb3Vyc2UuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHM6KiogXFsmIzM0O2NvcHlcX25ldFxfbnMmIzM0O10KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcWyYjMzQ7TkVUXF9OUyYjMzQ7LCAmIzM0O05BTUVTUEFDRVMmIzM0O10KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9OUyYjMzQ7LAogICAgJiMzNDtOQU1FU1BBQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29weV9uZXRfbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBieSBtb3ZpbmcgYG5zX2NvbW1vbl9pbml0KClgIG91dCBvZiBgcHJlaW5pdF9uZXQoKWAgYW5kIGludG8gaXRzIGNhbGxlcnMgKGBjb3B5X25ldF9ucygpYCBhbmQgYG5ldF9uc19pbml0KClgKS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb3B5X25ldF9ucygpYCB0byBwcm9wZXJseSBjbGVhbiB1cCByZXNvdXJjZXMgaWYgYG5zX2NvbW1vbl9pbml0KClgIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGR1cmluZyBuYW1lc3BhY2UgY3JlYXRpb24uIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgYW5kIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzM0MDQzZDI2ZTZjMTBiNjNkZDVlZDJjZTJiNGMyMDlhZjlhNzdiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA4OjU4OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTQwMCwxNCAmIzQzOzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldCkKIH0KIAogLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovCi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpCiYjNDM7c3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucykKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJcmVmY291bnRfc2V0KCZhbXA7bmV0LSZndDtwYXNzaXZlLCAxKTsKIAlyZWZfdHJhY2tlcl9kaXJfaW5pdCgmYW1wO25ldC0mZ3Q7cmVmY250X3RyYWNrZXIsIDEyOCwgJiMzNDtuZXRfcmVmY250JiMzNDspOwogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7bmV0LSZndDtub3RyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldF9ub3RyZWZjbnQmIzM0Oyk7CkBAIC00MzEsNyAmIzQzOzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXQtJmd0O3B0eXBlX2FsbCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXQtJmd0O3B0eXBlX3NwZWNpZmljKTsKIAlwcmVpbml0X25ldF9zeXNjdGwobmV0KTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTU3NCwxMiAmIzQzOzU2NywxNCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsCiAJCWdvdG8gZGVjX3Vjb3VudHM7CiAJfQogCi0JcnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpOwotCWlmIChydiAmbHQ7IDApCi0JCWdvdG8gZGVjX3Vjb3VudHM7CiYjNDM7CXByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7CiAJbmV0LSZndDt1Y291bnRzID0gdWNvdW50czsKIAlnZXRfdXNlcl9ucyh1c2VyX25zKTsKIAomIzQzOwlydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7CiYjNDM7CWlmIChydikKJiM0MzsJCWdvdG8gcHV0X3VzZXJuc19ub19jb21tb247CiYjNDM7CiAJcnYgPSBkb3duX3JlYWRfa2lsbGFibGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKIAlpZiAocnYgJmx0OyAwKQogCQlnb3RvIHB1dF91c2VybnM7CkBAIC01OTEsNiAmIzQzOzU4Niw3IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncywKIAlpZiAocnYgJmx0OyAwKSB7CiBwdXRfdXNlcm5zOgogCQluc19jb21tb25fZnJlZShuZXQpOwomIzQzO3B1dF91c2VybnNfbm9fY29tbW9uOgogI2lmZGVmIENPTkZJR19LRVlTCiAJCWtleV9yZW1vdmVfZG9tYWluKG5ldC0mZ3Q7a2V5X2RvbWFpbik7CiAjZW5kaWYKQEAgLTEyOTMsNyAmIzQzOzEyODksOCBAQCB2b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKQogCSAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlCiAJICogaGFzIGEgc3RhdGljIGlub2RlIG51bWJlci4KIAkgKi8KLQlpZiAocHJlaW5pdF9uZXQoJmFtcDtpbml0X25ldCwgJmFtcDtpbml0X3VzZXJfbnMpKQomIzQzOwlwcmVpbml0X25ldCgmYW1wO2luaXRfbmV0LCAmYW1wO2luaXRfdXNlcl9ucyk7CiYjNDM7CWlmIChuc19jb21tb25faW5pdCgmYW1wO2luaXRfbmV0KSkKIAkJcGFuaWMoJiMzNDtDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZSYjMzQ7KTsKIAogCWRvd25fd3JpdGUoJmFtcDtwZXJuZXRfb3BzX3J3c2VtKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTYKCQkJCQkJCW91dHB1dDogMjE2CgkJCQkJCQl0aG91Z2h0czogNzA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24gUmVmYWN0b3JpbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcHJlaW5pdF9uZXRgIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGUgb2YgYHByZWluaXRfbmV0YCB0byBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gSG1tLCBpbnRlcmVzdGluZy4gVGhleSYjMzk7cmUgYWxzbyBtb3ZpbmcgdGhlIGNhbGwgdG8gYG5zX2NvbW1vbl9pbml0KG5ldClgIG91dCBvZiBgcHJlaW5pdF9uZXRgIGFuZCBpbnRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4KCkluIHRoZSBgY29weV9uZXRfbnNgIGZ1bmN0aW9uLCBgbnNfY29tbW9uX2luaXQobmV0KWAgaXMgbm93IGNhbGxlZCAqYWZ0ZXIqIGBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpYCwgYWZ0ZXIgYG5ldC0mZ3Q7dWNvdW50cyA9IHVjb3VudHM7YCBhbmQgYGdldF91c2VyX25zKHVzZXJfbnMpYC4gQW5kLCBpZiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLCBpdCBub3cganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBuZXcgZXJyb3IgcGF0aCBza2lwcyBgbnNfY29tbW9uX2ZyZWUobmV0KWAgYnV0IHN0aWxsIGNhbGxzIGBrZXlfcmVtb3ZlX2RvbWFpbmAsIGBwdXRfdXNlcl9ucyh1c2VyX25zKWAsIGBuZXRfZHJvcF9ucyhuZXQpYCwgYGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKWAsIGFuZCBga21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldClgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYmVjYXVzZSBvZiB0aGUgcmVvcmRlcmluZy4gQnV0IHdhaXQsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCByZWZhY3RvcmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCYjMzk7cyBwcm9iYWJseSBmaXhpbmcgYSBzdWJ0bGUgYnVnIHdoZXJlIGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgIHdhcyBsZWFkaW5nIHRvIGluY29ycmVjdCBjbGVhbnVwIG9yIG1heWJlIHNvbWUgc29ydCBvZiByZXNvdXJjZSBsZWFrLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2NgIGluIGBuZXRfYWxsb2NgIChjYWxsZWQgYmVmb3JlIGBjb3B5X25ldF9uc2Agb3IgaW5zaWRlIGl0KS4gTGV0JiMzOTtzIGNoZWNrIGBjb3B5X25ldF9uc2AuLi4gYWgsIHllcywgYGNvcHlfbmV0X25zYCBkb2VzIGluZGVlZCBjYWxsIGBuZXRfYWxsb2MoKWAsIGFuZCB0aGF0IHVzZXMgYGttZW1fY2FjaGVfemFsbG9jYC4KClJpZ2h0LCBzbyBgbmV0YCBpcyAqemVyb2VkKi4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaGVyZS4gU28sIHRoZSBidWcgaXMgbW9zdCBsaWtlbHkgcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVhaywgb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHBlcmhhcHMgZXZlbiByZWZjb3VudCBwcm9ibGVtcy4gTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGF0IGBuc19jb21tb25faW5pdGAgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4KCk5vIEtNU0FOIG5lZWRlZCBoZXJlLiBUaGlzIGlzIGEgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmcgZml4LiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgYGNvcHlfbmV0X25zYCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYnkgbW92aW5nIGBuc19jb21tb25faW5pdCgpYCBvdXQgb2YgYHByZWluaXRfbmV0KClgIGFuZCBpbnRvIGl0cyBjYWxsZXJzIChgY29weV9uZXRfbnMoKWAgYW5kIGBuZXRfbnNfaW5pdCgpYCkuIEl0IGFsc28gdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29weV9uZXRfbnMoKWAgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGlmIGBuc19jb21tb25faW5pdCgpYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBkdXJpbmcgbmFtZXNwYWNlIGNyZWF0aW9uLiBUaGUgYG5ldGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODoxMS4xNDA4MDM4NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjU0Njk4MTcwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJOQU1FU1BBQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiBuZXR3b3JrIG5hbWVzcGFjZXMgYnkgbW92aW5nIGBuc19jb21tb25faW5pdCgpYCBvdXQgb2YgYHByZWluaXRfbmV0KClgIGFuZCBpbnRvIGl0cyBjYWxsZXJzIChgY29weV9uZXRfbnMoKWAgYW5kIGBuZXRfbnNfaW5pdCgpYCkuIEl0IGFsc28gdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgY29weV9uZXRfbnMoKWAgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGlmIGBuc19jb21tb25faW5pdCgpYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsbHkgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBkdXJpbmcgbmFtZXNwYWNlIGNyZWF0aW9uLiBUaGUgYG5ldGAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWVtX2NhY2hlX3phbGxvYygpYCAoemVyby1pbml0aWFsaXplZCksIGFuZCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNvZGUgKHN1Y2ggYXMgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjExLjE0MDgxMTAwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQzNjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM0MDQzZDI2ZTZjMTBiNjNkZDVlZDJjZTJiNGMyMDlhZjlhNzdiNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcXG5pbmRleCA5MTY2ZjQ2NzI5M2UwLi5kYTVmODgxZmJkM2I5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xcbkBAIC00MDAsMTQgKzQwMCw4IEBAIHN0YXRpYyBfX25ldF9pbml0IHZvaWQgcHJlaW5pdF9uZXRfc3lzY3RsKHN0cnVjdCBuZXQgKm5ldClcXG4gfVxcbiBcXG4gLyogaW5pdCBjb2RlIHRoYXQgbXVzdCBvY2N1ciBldmVuIGlmIHNldHVwX25ldCgpIGlzIG5vdCBjYWxsZWQuICovXFxuLXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4rc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlLCAxKTtcXG4gXFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXFxcIm5ldF9yZWZjbnRcXFwiKTtcXG4gXFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIsIDEyOCwgXFxcIm5ldF9ub3RyZWZjbnRcXFwiKTtcXG5AQCAtNDMxLDcgKzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX2FsbCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX3NwZWNpZmljKTtcXG4gXFx0cHJlaW5pdF9uZXRfc3lzY3RsKG5ldCk7XFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01NzQsMTIgKzU2NywxNCBAQCBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIFxcdFxcdGdvdG8gZGVjX3Vjb3VudHM7XFxuIFxcdH1cXG4gXFxuLVxcdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4tXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBkZWNfdWNvdW50cztcXG4rXFx0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gXFx0bmV0LVxcdTAwM2V1Y291bnRzID0gdWNvdW50cztcXG4gXFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XFxuIFxcbitcXHRydiA9IG5zX2NvbW1vbl9pbml0KG5ldCk7XFxuK1xcdGlmIChydilcXG4rXFx0XFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcXG4rXFxuIFxcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gXFx0aWYgKHJ2IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwdXRfdXNlcm5zO1xcbkBAIC01OTEsNiArNTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbiBcXHRpZiAocnYgXFx1MDAzYyAwKSB7XFxuIHB1dF91c2VybnM6XFxuIFxcdFxcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XFxuK3B1dF91c2VybnNfbm9fY29tbW9uOlxcbiAjaWZkZWYgQ09ORklHX0tFWVNcXG4gXFx0XFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVxcdTAwM2VrZXlfZG9tYWluKTtcXG4gI2VuZGlmXFxuQEAgLTEyOTMsNyArMTI4OSw4IEBAIHZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXFxuIFxcdCAqIFRoaXMgY3VycmVudGx5IGNhbm5vdCBmYWlsIGFzIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxuIFxcdCAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuXFxuIFxcdCAqL1xcbi1cXHRpZiAocHJlaW5pdF9uZXQoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2aW5pdF91c2VyX25zKSlcXG4rXFx0cHJlaW5pdF9uZXQoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2aW5pdF91c2VyX25zKTtcXG4rXFx0aWYgKG5zX2NvbW1vbl9pbml0KFxcdTAwMjZpbml0X25ldCkpXFxuIFxcdFxcdHBhbmljKFxcXCJDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVxcXCIpO1xcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjExLjYyMTMzNDU2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM1MjcyNjEyNDU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSBpbiBgY29weV9uZXRfbnNgIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIHBhdGguIEZ1enppbmcgYGNvcHlfbmV0X25zYCAocmVhY2hhYmxlIHZpYSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZXMgZXhpc3QgaW4gdGhpcyBlcnJvciBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMzQwNDNkMjZlNmMxMGI2M2RkNWVkMmNlMmI0YzIwOWFmOWE3N2I2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDg6NTg6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbmluZGV4IDkxNjZmNDY3MjkzZTAuLmRhNWY4ODFmYmQzYjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcbisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuQEAgLTQwMCwxNCArNDAwLDggQEAgc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldF9zeXNjdGwoc3RydWN0IG5ldCAqbmV0KVxuIH1cbiBcbiAvKiBpbml0IGNvZGUgdGhhdCBtdXN0IG9jY3VyIGV2ZW4gaWYgc2V0dXBfbmV0KCkgaXMgbm90IGNhbGxlZC4gKi9cbi1zdGF0aWMgX19uZXRfaW5pdCBpbnQgcHJlaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMpXG4rc3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbiB7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2bmV0LVx1MDAzZXBhc3NpdmUsIDEpO1xuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2bmV0LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0X3JlZmNudFwiKTtcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNm5ldC1cdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldF9ub3RyZWZjbnRcIik7XG5AQCAtNDMxLDcgKzQyNSw2IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNlcHR5cGVfYWxsKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9zcGVjaWZpYyk7XG4gXHRwcmVpbml0X25ldF9zeXNjdGwobmV0KTtcbi1cdHJldHVybiAwO1xuIH1cbiBcbiAvKlxuQEAgLTU3NCwxMiArNTY3LDE0IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdFx0Z290byBkZWNfdWNvdW50cztcbiBcdH1cbiBcbi1cdHJ2ID0gcHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcbi1cdGlmIChydiBcdTAwM2MgMClcbi1cdFx0Z290byBkZWNfdWNvdW50cztcbitcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG4gXHRuZXQtXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XG4gXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcbiBcbitcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcbitcdGlmIChydilcbitcdFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcbitcbiBcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xuIFx0aWYgKHJ2IFx1MDAzYyAwKVxuIFx0XHRnb3RvIHB1dF91c2VybnM7XG5AQCAtNTkxLDYgKzU4Niw3IEBAIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcbiBcdGlmIChydiBcdTAwM2MgMCkge1xuIHB1dF91c2VybnM6XG4gXHRcdG5zX2NvbW1vbl9mcmVlKG5ldCk7XG4rcHV0X3VzZXJuc19ub19jb21tb246XG4gI2lmZGVmIENPTkZJR19LRVlTXG4gXHRcdGtleV9yZW1vdmVfZG9tYWluKG5ldC1cdTAwM2VrZXlfZG9tYWluKTtcbiAjZW5kaWZcbkBAIC0xMjkzLDcgKzEyODksOCBAQCB2b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxuIFx0ICogVGhpcyBjdXJyZW50bHkgY2Fubm90IGZhaWwgYXMgdGhlIGluaXRpYWwgbmV0d29yayBuYW1lc3BhY2VcbiBcdCAqIGhhcyBhIHN0YXRpYyBpbm9kZSBudW1iZXIuXG4gXHQgKi9cbi1cdGlmIChwcmVpbml0X25ldChcdTAwMjZpbml0X25ldCwgXHUwMDI2aW5pdF91c2VyX25zKSlcbitcdHByZWluaXRfbmV0KFx1MDAyNmluaXRfbmV0LCBcdTAwMjZpbml0X3VzZXJfbnMpO1xuK1x0aWYgKG5zX2NvbW1vbl9pbml0KFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0cGFuaWMoXCJDb3VsZCBub3QgcHJlaW5pdGlhbGl6ZSB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVwiKTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1ODoxMS42MjEzMzU4NzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTkwMzQ3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTmV0d29yayBOYW1lc3BhY2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGNoYW5nZSB0byBgcHJlaW5pdF9uZXRgLiBJdCB1c2VkIHRvIHJldHVybiBhbiBgaW50YCwgYnV0IG5vdyBpdCdzIGB2b2lkYC4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5LCB0aGVzZSByZXR1cm4gdmFsdWVzIGdpdmUgdXMgc29tZSBzdGF0dXMsIGEgc3VjY2Vzcy9mYWlsdXJlIGluZGljYXRvci4gSSB3b25kZXIgd2h5IHRoZXkgcmVtb3ZlZCBpdC4uLiBMZXQncyBzZWUgd2hhdCBlbHNlIGNoYW5nZWQuXG5cbkFoLCB0aGV5IG1vdmVkIHRoZSBgbnNfY29tbW9uX2luaXQobmV0KWAgY2FsbC4gSXQgd2FzIGluc2lkZSBgcHJlaW5pdF9uZXRgIGFuZCBub3cgaXQncyBkaXJlY3RseSBjYWxsZWQgaW4gYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gU2VlbXMgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBkZWNvdXBsZSBzb21ldGhpbmcuIFRoaXMgZ2l2ZXMgbWUgYSBzbGlnaHRseSBiYWQgZmVlbGluZyBiZWNhdXNlIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgb3JkZXIgb2YgaW5pdGlhbGl6YXRpb24gaXMgc2lnbmlmaWNhbnQuIEkgbmVlZCB0byBrZWVwIHRoaXMgb3JkZXIgaW4gbWluZC5cblxuTm93LCB0aGlzIGBjb3B5X25ldF9uc2AgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5J3ZlIGFkZGVkIGEgYGdvdG8gcHV0X3VzZXJuc19ub19jb21tb25gIGxhYmVsLiBUaGlzIGxhYmVsIHNlZW1zIHRvIGJlIGhhbmRsaW5nIGEgZmFpbHVyZSBjYXNlIHdpdGhpbiBgbnNfY29tbW9uX2luaXQobmV0KWAuIEhtbSwgYW5kIGJlZm9yZSB0aGlzIGBuc19jb21tb25fZnJlZWAgaXMgY2FsbGVkLCBidXQgc2hvdWxkIGl0PyBTaG91bGRuJ3Qgd2UgYmUgY2hlY2tpbmcgaWYgYG5zX2NvbW1vbl9pbml0YCB3YXMgKmFjdHVhbGx5KiBzdWNjZXNzZnVsIGJlZm9yZSBjYWxsaW5nIGBuc19jb21tb25fZnJlZWA/IEl0J3MgaW5pdGlhbGl6aW5nIGZpZWxkcy4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiAqZmFpbHMqLCBjYWxsaW5nIGBuc19jb21tb25fZnJlZWAgbWlnaHQgY2F1c2UgaXNzdWVzLiBUaGlzIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyEgV2UgbmVlZCB0byBleGFtaW5lIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBmdW5jdGlvbiB2ZXJ5IGNhcmVmdWxseS4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gbG9naWMgd29ya3MsIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBoYW5kbGluZyBvZiBhIGZhaWxlZCBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjMxLjUyNDgxMTg0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwNDYzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zX2NvbW1vbl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1lc3BhY2UuYz00MjAyPXN0YXRpYyBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqYWxsb2NfbW50X25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgYm9vbCBhbm9uKVxcbi0tXFxuZnMvbmFtZXNwYWNlLmMtNDIxOC1cXHRpZiAoYW5vbilcXG5mcy9uYW1lc3BhY2UuYzo0MjE5OlxcdFxcdHJldCA9IG5zX2NvbW1vbl9pbml0X2ludW0obmV3X25zLCBNTlRfTlNfQU5PTl9JTk8pO1xcbmZzL25hbWVzcGFjZS5jLTQyMjAtXFx0ZWxzZVxcbmZzL25hbWVzcGFjZS5jOjQyMjE6XFx0XFx0cmV0ID0gbnNfY29tbW9uX2luaXQobmV3X25zKTtcXG5mcy9uYW1lc3BhY2UuYy00MjIyLVxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg9MTE9Ym9vbCBpc19jdXJyZW50X25hbWVzcGFjZShzdHJ1Y3QgbnNfY29tbW9uICpucyk7XFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDoxMjppbnQgX19uc19jb21tb25faW5pdChzdHJ1Y3QgbnNfY29tbW9uICpucywgdTMyIG5zX3R5cGUsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcywgaW50IGludW0pO1xcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtMTMtdm9pZCBfX25zX2NvbW1vbl9mcmVlKHN0cnVjdCBuc19jb21tb24gKm5zKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg9MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX25zX2luaXRfaWQoY29uc3Qgc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oLTQzLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NDQ6I2RlZmluZSBuc19jb21tb25faW5pdChfX25zKSAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25zX2NvbW1vbi5oOjQ1OlxcdF9fbnNfY29tbW9uX2luaXQodG9fbnNfY29tbW9uKF9fbnMpLCAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDYtXFx0XFx0XFx0IG5zX2NvbW1vbl90eXBlKF9fbnMpLCAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmgtNDktXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaDo1MDojZGVmaW5lIG5zX2NvbW1vbl9pbml0X2ludW0oX19ucywgX19pbnVtKSAgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvbnNfY29tbW9uLmg6NTE6XFx0X19uc19jb21tb25faW5pdCh0b19uc19jb21tb24oX19ucyksICAgICBcXFxcXFxuaW5jbHVkZS9saW51eC9uc19jb21tb24uaC01Mi1cXHRcXHRcXHQgbnNfY29tbW9uX3R5cGUoX19ucyksICAgXFxcXFxcbi0tXFxuaXBjL25hbWVzcGFjZS5jPTM5PXN0YXRpYyBzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqY3JlYXRlX2lwY19ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuLS1cXG5pcGMvbmFtZXNwYWNlLmMtNjQtXFxuaXBjL25hbWVzcGFjZS5jOjY1OlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5pcGMvbmFtZXNwYWNlLmMtNjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmM9MjI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICphbGxvY19jZ3JvdXBfbnModm9pZClcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtMjktXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxua2VybmVsL2Nncm91cC9uYW1lc3BhY2UuYzozMDpcXHRyZXQgPSBuc19jb21tb25faW5pdChuZXdfbnMpO1xcbmtlcm5lbC9jZ3JvdXAvbmFtZXNwYWNlLmMtMzEtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9uc2NvbW1vbi5jPTExPXN0YXRpYyB2b2lkIG5zX2RlYnVnKHN0cnVjdCBuc19jb21tb24gKm5zLCBjb25zdCBzdHJ1Y3QgcHJvY19uc19vcGVyYXRpb25zICpvcHMpXFxuLS1cXG5rZXJuZWwvbnNjb21tb24uYy01NS1cXG5rZXJuZWwvbnNjb21tb24uYzo1NjppbnQgX19uc19jb21tb25faW5pdChzdHJ1Y3QgbnNfY29tbW9uICpucywgdTMyIG5zX3R5cGUsIGNvbnN0IHN0cnVjdCBwcm9jX25zX29wZXJhdGlvbnMgKm9wcywgaW50IGludW0pXFxua2VybmVsL25zY29tbW9uLmMtNTcte1xcbi0tXFxua2VybmVsL3BpZF9uYW1lc3BhY2UuYz03Nj1zdGF0aWMgc3RydWN0IHBpZF9uYW1lc3BhY2UgKmNyZWF0ZV9waWRfbmFtZXNwYWNlKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4tLVxcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmMtMTA1LVxcbmtlcm5lbC9waWRfbmFtZXNwYWNlLmM6MTA2OlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5rZXJuZWwvcGlkX25hbWVzcGFjZS5jLTEwNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM9ODE9c3RhdGljIHN0cnVjdCB0aW1lX25hbWVzcGFjZSAqY2xvbmVfdGltZV9ucyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuLS1cXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xMDEtXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlLmM6MTAyOlxcdGVyciA9IG5zX2NvbW1vbl9pbml0KG5zKTtcXG5rZXJuZWwvdGltZS9uYW1lc3BhY2UuYy0xMDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jPTgzPWludCBjcmVhdGVfdXNlcl9ucyhzdHJ1Y3QgY3JlZCAqbmV3KVxcbi0tXFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTI4LVxcbmtlcm5lbC91c2VyX25hbWVzcGFjZS5jOjEyOTpcXHRyZXQgPSBuc19jb21tb25faW5pdChucyk7XFxua2VybmVsL3VzZXJfbmFtZXNwYWNlLmMtMTMwLVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvdXRzbmFtZS5jPTM2PXN0YXRpYyBzdHJ1Y3QgdXRzX25hbWVzcGFjZSAqY2xvbmVfdXRzX25zKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4tLVxcbmtlcm5lbC91dHNuYW1lLmMtNTItXFxua2VybmVsL3V0c25hbWUuYzo1MzpcXHRlcnIgPSBuc19jb21tb25faW5pdChucyk7XFxua2VybmVsL3V0c25hbWUuYy01NC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTU1MD1zdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTczLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NzQ6XFx0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NzUtXFx0aWYgKHJ2KVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTEyNjM9dm9pZCBfX2luaXQgbmV0X25zX2luaXQodm9pZClcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjkyLVxcdHByZWluaXRfbmV0KFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNmluaXRfdXNlcl9ucyk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyOTM6XFx0aWYgKG5zX2NvbW1vbl9pbml0KFxcdTAwMjZpbml0X25ldCkpXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyOTQtXFx0XFx0cGFuaWMoXFxcIkNvdWxkIG5vdCBwcmVpbml0aWFsaXplIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjMzLjMzNTI4Mzk5MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDM2ODkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBqdW1wcyBvdXQgYXQgbWUuIFdlJ3JlIHNodWZmbGluZyB0aGluZ3MgYXJvdW5kIGluIGBjb3B5X25ldF9uc2AuIFByZXZpb3VzbHksIGl0IHdhcyBgcHJlaW5pdF9uZXRgIHdoaWNoIHRoZW4gY2FsbGVkIGBuc19jb21tb25faW5pdGAsIHRoZW4gYXNzaWduZWQgdGhlIGB1Y291bnRzYCwgYW5kICp0aGVuKiBnb3QgdGhlIHVzZXIgbmFtZXNwYWNlLiBOb3csIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGluZ3MgdXA6IGBwcmVpbml0X25ldGAsIGFzc2lnbiBgdWNvdW50c2AsIGdldCB0aGUgdXNlciBuYW1lc3BhY2UsIGFuZCAqdGhlbiogY2FsbCBgbnNfY29tbW9uX2luaXRgLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlzIHRoYXQgYG5zX2NvbW1vbl9pbml0YCBpcyBub3cgY2FsbGVkICphZnRlciogc29tZSBjcnVjaWFsIHN0ZXBzLlxuXG5gcHJlaW5pdF9uZXRgIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyBpdCBhcHBlYXJzIHRvIGJlIHByaW1hcmlseSBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzLlxuXG5UaGUgcmVhbCBzaGlmdCBoZXJlIGlzIHRoZSBlcnJvciBoYW5kbGluZy4gSWYgYG5zX2NvbW1vbl9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYHB1dF91c2VybnNfbm9fY29tbW9uYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBwcmV2aW91cyBjb2RlIGRpZG4ndCBoYXZlIHRoaXMganVtcCwgc28gYG5zX2NvbW1vbl9mcmVlYCB3b3VsZCBhbHdheXMgaGF2ZSBiZWVuIGNhbGxlZC4gTm93LCBpdCBza2lwcyBgbnNfY29tbW9uX2ZyZWUobmV0KWAgaW4gdGhlIGVycm9yIGNhc2UuIFRoYXQgbWVhbnMgc29tZXRoaW5nIGhhcyBoYXBwZW5lZCB0aGF0IGlzIHdvcnRoIGF2b2lkaW5nIGZyZWVpbmcsIG9yIGlzbid0IHNhZmUgdG8gZnJlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAganVtcCBpcyBhY3R1YWxseSBkb2luZy4gV2hhdCBhcmUgdGhlIHNpZGUgZWZmZWN0cywgYW5kIHdoeSBpcyBgbnNfY29tbW9uX2ZyZWVgIGJlaW5nIHNraXBwZWQ/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHB1dF91c2VybnNfbm9fY29tbW9uYCBwYXRoIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTM2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU4OjM5Ljk3ODk3NjE3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XFxuIDU3MTpcXHRcXHRuZXQtXFx1MDAzZXVjb3VudHMgPSB1Y291bnRzO1xcbiA1NzI6XFx0XFx0Z2V0X3VzZXJfbnModXNlcl9ucyk7XFxuIDU3MzpcXHRcXG4gNTc0OlxcdFxcdHJ2ID0gbnNfY29tbW9uX2luaXQobmV0KTtcXG4gNTc1OlxcdFxcdGlmIChydilcXG4gNTc2OlxcdFxcdFxcdGdvdG8gcHV0X3VzZXJuc19ub19jb21tb247XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdHJ2ID0gZG93bl9yZWFkX2tpbGxhYmxlKFxcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcXG4gNTc5OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuIDU4MDpcXHRcXHRcXHRnb3RvIHB1dF91c2VybnM7XFxuIDU4MTpcXHRcXG4gNTgyOlxcdFxcdHJ2ID0gc2V0dXBfbmV0KG5ldCk7XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdHVwX3JlYWQoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRpZiAocnYgXFx1MDAzYyAwKSB7XFxuIDU4NzpcXHRwdXRfdXNlcm5zOlxcbiA1ODg6XFx0XFx0XFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcXG4gNTg5OlxcdHB1dF91c2VybnNfbm9fY29tbW9uOlxcbiA1OTA6XFx0I2lmZGVmIENPTkZJR19LRVlTXFxuIDU5MTpcXHRcXHRcXHRrZXlfcmVtb3ZlX2RvbWFpbihuZXQtXFx1MDAzZWtleV9kb21haW4pO1xcbiA1OTI6XFx0I2VuZGlmXFxuIDU5MzpcXHRcXHRcXHRwdXRfdXNlcl9ucyh1c2VyX25zKTtcXG4gNTk0OlxcdFxcdFxcdG5ldF9wYXNzaXZlX2RlYyhuZXQpO1xcbiA1OTU6XFx0ZGVjX3Vjb3VudHM6XFxuIDU5NjpcXHRcXHRcXHRkZWNfbmV0X25hbWVzcGFjZXModWNvdW50cyk7XFxuIDU5NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihydik7XFxuIDU5ODpcXHRcXHR9XFxuIDU5OTpcXHRcXHRyZXR1cm4gbmV0O1xcbiA2MDA6XFx0fVxcbiA2MDE6XFx0XFxuIDYwMjpcXHQvKipcXG4gNjAzOlxcdCAqIG5ldF9uc19nZXRfb3duZXJzaGlwIC0gZ2V0IHN5c2ZzIG93bmVyc2hpcCBkYXRhIGZvciBAbmV0XFxuIDYwNDpcXHQgKiBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZSBpbiBxdWVzdGlvbiAoY2FuIGJlIE5VTEwpXFxuIDYwNTpcXHQgKiBAdWlkOiBrZXJuZWwgdXNlciBJRCBmb3Igc3lzZnMgb2JqZWN0c1xcbiA2MDY6XFx0ICogQGdpZDoga2VybmVsIGdyb3VwIElEIGZvciBzeXNmcyBvYmplY3RzXFxuIDYwNzpcXHQgKlxcbiA2MDg6XFx0ICogUmV0dXJucyB0aGUgdWlkL2dpZCBwYWlyIG9mIHJvb3QgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGVcXG4gNjA5OlxcdCAqIGdpdmVuIG5ldHdvcmsgbmFtZXNwYWNlLlxcbiA2MTA6XFx0ICovXFxuIDYxMTpcXHR2b2lkIG5ldF9uc19nZXRfb3duZXJzaGlwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwga3VpZF90ICp1aWQsIGtnaWRfdCAqZ2lkKVxcbiA2MTI6XFx0e1xcbiA2MTM6XFx0XFx0aWYgKG5ldCkge1xcbiA2MTQ6XFx0XFx0XFx0a3VpZF90IG5zX3Jvb3RfdWlkID0gbWFrZV9rdWlkKG5ldC1cXHUwMDNldXNlcl9ucywgMCk7XFxuIDYxNTpcXHRcXHRcXHRrZ2lkX3QgbnNfcm9vdF9naWQgPSBtYWtlX2tnaWQobmV0LVxcdTAwM2V1c2VyX25zLCAwKTtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0aWYgKHVpZF92YWxpZChuc19yb290X3VpZCkpXFxuIDYxODpcXHRcXHRcXHRcXHQqdWlkID0gbnNfcm9vdF91aWQ7XFxuIDYxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTg6MzkuOTc5MTg0NDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczNTM1NjQyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIGFuZCBQb3RlbnRpYWwgTGVhayoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBwcmVpbml0X25ldGAgc2V0cyBgbmV0LVx1MDAzZXBhc3NpdmVgIHRvIDEgdXNpbmcgYHJlZmNvdW50X3NldGAuIFNvLCB0aGUgaW5pdGlhbCByZWZlcmVuY2UgY291bnQgaXMgc2V0LiBUaGVuLCB0aGVyZSdzIGBuc19jb21tb25faW5pdGAuIElmIHRoYXQgZnVuY3Rpb24gZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAuIFRoaXMgaXMgd2hlcmUgdGhlIGlzc3VlIG1pZ2h0IGFyaXNlLlxuXG5gcHV0X3VzZXJuc19ub19jb21tb25gIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhyb3VnaCBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgLiBJZiB0aGUgY291bnQgZ29lcyB0byB6ZXJvLCB0aGUgbmFtZXNwYWNlIGlzIGZyZWVkLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5CdXQsIGJhY2sgdXAgYSBtb21lbnQuIEJlZm9yZSwgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgaW5zaWRlIGBwcmVpbml0X25ldGAsIHRoZSBjb2RlIHJldHVybmVkIGZyb20gYHByZWluaXRfbmV0YCBkaXJlY3RseSBhbmQgd2VudCB0byBgZGVjX3Vjb3VudHNgLiBBbmQgYGRlY191Y291bnRzYCBvbmx5IGRlY3JlbWVudHMgYHVjb3VudHNgIGFuZCByZXR1cm5zLiBUaGUgb3JpZ2luYWwgcGF0aCB3ZW50IHRocm91Z2ggYGNvcHlfbmV0X25zYCB3aGVyZSB0aGUgZXJyb3IgaGFuZGxpbmcgd2FzIGRpZmZlcmVudC4gSXQgbG9va3MgbGlrZSB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGBuZXRgLCB3YXMgbmV2ZXIgZnJlZWQgaW4gdGhhdCBwYXRoLlxuXG5IbW0sIHNvIGl0IGxvb2tzIGxpa2UgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlsZWQgcHJldmlvdXNseSwgYG5ldGAgd2FzIGxlYWtlZC4gTm93LCBsZXQgbWUgcmUtZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBgbmV0YCB3aXRoaW4gdGhlIGBjb3B5X25ldF9uc2AgZnVuY3Rpb24gdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbi4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIG9sZGVyIGNvZGUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkwMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjI3LjMzMjc1Mjg3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHQjaWZkZWYgQ09ORklHX1JFRl9UUkFDS0VSXFxuIDUzMzpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1MzQ6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1MzU6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLmRlYWQpXFxuIDUzNjpcXHRcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0XFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cXG4gNTQwOlxcdFxcdFxcdGxsaXN0X2FkZChcXHUwMDI2bmV0LVxcdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFxcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0aWYgKG5zKVxcbiA1NDc6XFx0XFx0XFx0bmV0X3Bhc3NpdmVfZGVjKHRvX25ldF9ucyhucykpO1xcbiA1NDg6XFx0fVxcbiA1NDk6XFx0XFxuIDU1MDpcXHRzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1NjQgZmxhZ3MsXFxuIDU1MTpcXHRcXHRcXHRcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBuZXQgKm9sZF9uZXQpXFxuIDU1MjpcXHR7XFxuIDU1MzpcXHRcXHRzdHJ1Y3QgdWNvdW50cyAqdWNvdW50cztcXG4gNTU0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gNTU1OlxcdFxcdGludCBydjtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBDTE9ORV9ORVdORVQpKVxcbiA1NTg6XFx0XFx0XFx0cmV0dXJuIGdldF9uZXQob2xkX25ldCk7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHVjb3VudHMgPSBpbmNfbmV0X25hbWVzcGFjZXModXNlcl9ucyk7XFxuIDU2MTpcXHRcXHRpZiAoIXVjb3VudHMpXFxuIDU2MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0bmV0ID0gbmV0X2FsbG9jKCk7XFxuIDU2NTpcXHRcXHRpZiAoIW5ldCkge1xcbiA1NjY6XFx0XFx0XFx0cnYgPSAtRU5PTUVNO1xcbiA1Njc6XFx0XFx0XFx0Z290byBkZWNfdWNvdW50cztcXG4gNTY4OlxcdFxcdH1cXG4gNTY5OlxcdFxcbiA1NzA6XFx0XFx0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcXG4gNTcxOlxcdFxcdG5ldC1cXHUwMDNldWNvdW50cyA9IHVjb3VudHM7XFxuIDU3MjpcXHRcXHRnZXRfdXNlcl9ucyh1c2VyX25zKTtcXG4gNTczOlxcdFxcbiA1NzQ6XFx0XFx0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xcbiA1NzU6XFx0XFx0aWYgKHJ2KVxcbiA1NzY6XFx0XFx0XFx0Z290byBwdXRfdXNlcm5zX25vX2NvbW1vbjtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0cnYgPSBkb3duX3JlYWRfa2lsbGFibGUoXFx1MDAyNnBlcm5ldF9vcHNfcndzZW0pO1xcbiA1Nzk6XFx0XFx0aWYgKHJ2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6MjcuMzMyODk5MjMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyMTgyMDkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNZW1vcnkgQWxsb2NhdGlvbiBEZWVwIERpdmUqKlxuXG5SaWdodCwgc28gYG5ldF9hbGxvYygpYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgYG5ldGAgc3RydWN0dXJlLiBIbW0sIEkgcmVjYWxsIGEgcG90ZW50aWFsIGlzc3VlIGhlcmUuIElmIHRoZSBgcHJlaW5pdF9uZXRgIGZ1bmN0aW9uIGhhZCBmYWlsZWQgZWFybGllciwgdGhlcmUncyBhIGp1bXAgc3RyYWlnaHQgdG8gYGRlY191Y291bnRzYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGRlY191Y291bnRzYCAqZG9lc24ndCogZnJlZSB0aGUgYG5ldGAgc3RydWN0dXJlIGl0c2VsZi4gSXQncyBza2lwcGluZyB0aGUgbmVjZXNzYXJ5IGRlYWxsb2NhdGlvbiBzdGVwLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgbWVtb3J5IGxlYWsgaWYgYHByZWluaXRfbmV0YCBldmVyIGJhaWxzIG91dC4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGUgZXhhY3QgbG9naWMgd2l0aGluIGBuZXRfYWxsb2MoKWAgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGFsbG9jYXRpb24gZGV0YWlscywgYXMgd2VsbCBhcyB0aGUgYXNzdW1lZCBiZWhhdmlvdXIgb2YgYGRlY191Y291bnRzYC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgaG93IHRoaXMgaXMgYWxsIHN1cHBvc2VkIHRvIHdvcmsgYW5kIHdoZXJlIHRoZSBsZWFrIG1pZ2h0IGJlIGhhcHBlbmluZy4gVGhlIGFsbG9jYXRpb24gcGF0aCBuZWVkcyB0byBiZSBmdWxseSBkaXNzZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjM1LjY1NDcyNDI0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MjE3NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jPTY2PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2dlbl9wdHJzID0gSU5JVElBTF9ORVRfR0VOX1BUUlM7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTY3LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo2ODpzdGF0aWMgc3RydWN0IG5ldF9nZW5lcmljICpuZXRfYWxsb2NfZ2VuZXJpYyh2b2lkKVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy02OS17XFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9ODM9c3RhdGljIGludCBuZXRfYXNzaWduX2dlbmVyaWMoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgaWQsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtOTUtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjk2OlxcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtOTctXFx0aWYgKCFuZylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00NzY9c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRuc193cTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDc3LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0Nzg6c3RhdGljIHN0cnVjdCBuZXQgKm5ldF9hbGxvYyh2b2lkKVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00Nzkte1xcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQ4Mi1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDgzOlxcdG5nID0gbmV0X2FsbG9jX2dlbmVyaWMoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNDg0LVxcdGlmICghbmcpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTUwPXN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHU2NCBmbGFncyxcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NjMtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjU2NDpcXHRuZXQgPSBuZXRfYWxsb2MoKTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTY1LVxcdGlmICghbmV0KSB7XFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTI2Mz12b2lkIF9faW5pdCBuZXRfbnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTEyNzgtXFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jOjEyNzk6XFx0bmcgPSBuZXRfYWxsb2NfZ2VuZXJpYygpO1xcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMjgwLVxcdGlmICghbmcpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9MTM4MD1zdGF0aWMgaW50IHJlZ2lzdGVyX3Blcm5ldF9vcGVyYXRpb25zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtMTM5NS1cXHRcXHQgKiBwZXJuZXRfb3BzX3J3c2VtLiBCdXQgV1JJVEVfT05DRSBpcyBuZWVkZWQgdG8gcHJvdGVjdFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzoxMzk2OlxcdFxcdCAqIG5ldF9hbGxvY19nZW5lcmljLlxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy0xMzk3LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTozNi4xMDk5NDc0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUxOTE1MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYG5ldF9hbGxvYygpYFwiIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG5ldF9hbGxvYygpYCoqXG5cbkFscmlnaHQsICpuZXRfYWxsb2MoKSouIFRoYXQgdXN1YWxseSBtZWFucyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgcmVzb3VyY2UgYWxsb2NhdGlvbiwgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBicmVhayBkb3duIHdoYXQgdGhhdCBpbXBsaWVzOlxuXG4qICAgSSBpbnN0YW50bHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbiBvciBtZW1vcnkgZXhoYXVzdGlvbi4gSXMgdGhpcyBhIGN1c3RvbSBhbGxvY2F0b3I/IElzIGl0IHVzaW5nIHNsYWI/IEJ1ZGR5PyBXaGF0J3MgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaGVyZSwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHk/XG4qICAgSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gSXMgdGhpcyBmb3IgYSBzb2NrZXQgYnVmZmVyIChza2IpPyBBIHJvdXRlPyBBIGZsb3cgdGFibGUgZW50cnk/IFRoaXMnbGwgZHJpdmUgbXkgZXhwZWN0YXRpb25zIGZvciB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgbG9jayBjb250ZW50aW9uLlxuKiAgIEkgYWxzbyBuZWVkIHRvIGNoZWNrIGhvdyB0aGV5IGhhbmRsZSBlcnJvcnMuIERvZXMgaXQgcmV0dXJuIE5VTEwgb24gZmFpbHVyZSwgb3IgZG9lcyBpdCB0cmlnZ2VyIGFuIE9PTSBjb25kaXRpb24/IEhvdyBncmFjZWZ1bGx5IGlzIHRoaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGNhbGxpbmcgY29kZT8gQW55IHNwZWNpZmljIGVycm9yIGNvZGVzIHRvIHdhdGNoIGZvcj9cbiogICBJIHdhbnQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW9zLiBJcyB0aGVyZSBlbm91Z2ggbWVtb3J5PyBJcyB0aGVyZSBhIHNwaW5sb2NrIGNvbnRlbnRpb24/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgbGltaXRzIGluIHBsYWNlPyBXaGF0IGlzIHRoZSBpbXBhY3Qgb2YgYSBmYWlsZWQgYWxsb2NhdGlvbiBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0/XG4qICAgRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWZlcmVuY2UgY291bnRlci4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmVjYXVzZSBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXTigJlzIGFsbG9jYXRlZCBhbmQgd2hlcmUgaXQgaXMgZnJlZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiBgbmV0X2FsbG9jKClgIHRvIGl0cyBjb3JyZXNwb25kaW5nIGRlYWxsb2NhdGlvbiB0byBlbnN1cmUgbm8gbGVha3Mgb3IgZG91YmxlLWZyZWVzLlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgdGhleSBhcmUgcmVhbGx5IGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6NDAuNTYxODY1NTUzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDc4OlxcdHN0YXRpYyBzdHJ1Y3QgbmV0ICpuZXRfYWxsb2Modm9pZClcXG4gNDc5OlxcdHtcXG4gNDgwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IE5VTEw7XFxuIDQ4MTpcXHRcXHRzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nO1xcbiA0ODI6XFx0XFxuIDQ4MzpcXHRcXHRuZyA9IG5ldF9hbGxvY19nZW5lcmljKCk7XFxuIDQ4NDpcXHRcXHRpZiAoIW5nKVxcbiA0ODU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ4NjpcXHRcXG4gNDg3OlxcdFxcdG5ldCA9IGttZW1fY2FjaGVfemFsbG9jKG5ldF9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0ODg6XFx0XFx0aWYgKCFuZXQpXFxuIDQ4OTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gNDkyOlxcdFxcdG5ldC1cXHUwMDNla2V5X2RvbWFpbiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrZXlfdGFnKTtcXG4gNDkzOlxcdFxcdGlmICghbmV0LVxcdTAwM2VrZXlfZG9tYWluKVxcbiA0OTQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV8yO1xcbiA0OTU6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZuZXQtXFx1MDAzZWtleV9kb21haW4tXFx1MDAzZXVzYWdlLCAxKTtcXG4gNDk2OlxcdCNlbmRpZlxcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmV0LVxcdTAwM2VnZW4sIG5nKTtcXG4gNDk5OlxcdG91dDpcXG4gNTAwOlxcdFxcdHJldHVybiBuZXQ7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdCNpZmRlZiBDT05GSUdfS0VZU1xcbiA1MDM6XFx0b3V0X2ZyZWVfMjpcXG4gNTA0OlxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MDU6XFx0XFx0bmV0ID0gTlVMTDtcXG4gNTA2OlxcdCNlbmRpZlxcbiA1MDc6XFx0b3V0X2ZyZWU6XFxuIDUwODpcXHRcXHRrZnJlZShuZyk7XFxuIDUwOTpcXHRcXHRnb3RvIG91dDtcXG4gNTEwOlxcdH1cXG4gNTExOlxcdFxcbiA1MTI6XFx0c3RhdGljIExMSVNUX0hFQUQoZGVmZXJfZnJlZV9saXN0KTtcXG4gNTEzOlxcdFxcbiA1MTQ6XFx0c3RhdGljIHZvaWQgbmV0X2NvbXBsZXRlX2ZyZWUodm9pZClcXG4gNTE1OlxcdHtcXG4gNTE2OlxcdFxcdHN0cnVjdCBsbGlzdF9ub2RlICpraWxsX2xpc3Q7XFxuIDUxNzpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsICpuZXh0O1xcbiA1MTg6XFx0XFxuIDUxOTpcXHRcXHQvKiBHZXQgdGhlIGxpc3Qgb2YgbmFtZXNwYWNlcyB0byBmcmVlIGZyb20gbGFzdCByb3VuZC4gKi9cXG4gNTIwOlxcdFxcdGtpbGxfbGlzdCA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmRlZmVyX2ZyZWVfbGlzdCk7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCBuZXh0LCBraWxsX2xpc3QsIGRlZmVyX2ZyZWVfbGlzdClcXG4gNTIzOlxcdFxcdFxcdGttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpO1xcbiA1MjQ6XFx0XFxuIDUyNTpcXHR9XFxuIDUyNjpcXHRcXG4gNTI3OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDg6NTk6NDAuNTYxOTg1NjQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjExMDcyMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBDcml0aWNhbCBPdmVyc2lnaHQqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIHNvbWV0aGluZydzIG5vdCBzaXR0aW5nIHJpZ2h0LiBCZWZvcmUsIGlmIGBwcmVpbml0X25ldGAgZmFpbGVkLCBpdCByZXR1cm5lZCBhbiBlcnJvciwgYW5kIHRoZSBjb2RlIGp1bXBlZCB0byBgZGVjX3Vjb3VudHNgLiBJIHJlbWVtYmVyIHRoYXQgbXVjaC5cblxuYGBgY1xuXHRydiA9IHByZWluaXRfbmV0KG5ldCwgdXNlcl9ucyk7XG5cdGlmIChydiBcdTAwM2MgMClcblx0XHRnb3RvIGRlY191Y291bnRzO1xuYGBgXG5cbkFuZCBgZGVjX3Vjb3VudHNgIGNvcnJlY3RseSBkZWNyZW1lbnRlZCB0aGUgdXNlciBjb3VudHMuXG5cbmBgYGNcbmRlY191Y291bnRzOlxuXHRcdGRlY19uZXRfbmFtZXNwYWNlcyh1Y291bnRzKTtcblx0XHRyZXR1cm4gRVJSX1BUUihydik7XG5gYGBcblxuQnV04oCmIHdhaXQgYSBtaW51dGUuIElmIGBwcmVpbml0X25ldGAgZmFpbHMsIGFuZCBgbmV0YCB3YXMgYWxsb2NhdGVkIGVhcmxpZXIgYnkgYG5ldF9hbGxvY2AsIHRoZW4gYG5ldGAgaXMgbGVha2VkISBgZGVjX3Vjb3VudHNgIGRlY3JlbWVudHMgdWNvdW50cywgYnV0IGl0ICpkb2Vzbid0KiBmcmVlIHRoZSBhbGxvY2F0ZWQgbmV0d29yayBuYW1lc3BhY2UsIGBuZXRgLiBUaGF0IGlzIGEgc2VyaW91cyBidWcsIGFuZCBwb3RlbnRpYWxseSBhIHZlcnkgaW1wYWN0ZnVsIG1lbW9yeSBsZWFrIGlmIHRoYXQgZmFpbHVyZSBtb2RlIGlzIGhpdCBvZnRlbi4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcHJlaW5pdF9uZXRgJ3MgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgYWxsb2NhdGlvbiBmYWlsdXJlcyB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBleGl0IHBhdGggdGhhdCBkb2VzIHByb3Blcmx5IGZyZWUgYG5ldGAuIFRoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZCBpbW1lZGlhdGVseSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA4OjU5OjQ1LjE4MzA5NjE0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHR9XFxuIDQwMTpcXHRcXG4gNDAyOlxcdC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xcbiA0MDM6XFx0c3RhdGljIF9fbmV0X2luaXQgdm9pZCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4gNDA0OlxcdHtcXG4gNDA1OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2bmV0LVxcdTAwM2VwYXNzaXZlLCAxKTtcXG4gNDA2OlxcdFxcdHJlZl90cmFja2VyX2Rpcl9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFxcXCJuZXRfcmVmY250XFxcIik7XFxuIDQwNzpcXHRcXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2Vub3RyZWZjbnRfdHJhY2tlciwgMTI4LCBcXFwibmV0X25vdHJlZmNudFxcXCIpO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRuZXQtXFx1MDAzZWhhc2hfbWl4ID0gZ2V0X3JhbmRvbV91MzIoKTtcXG4gNDEwOlxcdFxcdG5ldC1cXHUwMDNlZGV2X2Jhc2Vfc2VxID0gMTtcXG4gNDExOlxcdFxcdG5ldC1cXHUwMDNldXNlcl9ucyA9IHVzZXJfbnM7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlkcl9pbml0KFxcdTAwMjZuZXQtXFx1MDAzZW5ldG5zX2lkcyk7XFxuIDQxNDpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2Vuc2lkX2xvY2spO1xcbiA0MTU6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VpcHY0LnJhX211dGV4KTtcXG4gNDE2OlxcdFxcbiA0MTc6XFx0I2lmZGVmIENPTkZJR19ERUJVR19ORVRfU01BTExfUlROTFxcbiA0MTg6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG4gNDE5OlxcdFxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XFxuIDQyMDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbiA0MjE6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2hlYWQpO1xcbiA0MjI6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5ldC1cXHUwMDNlZGV2X3VucmVnX2xvY2spO1xcbiA0MjM6XFx0I2VuZGlmXFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXB0eXBlX2FsbCk7XFxuIDQyNjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmV0LVxcdTAwM2VwdHlwZV9zcGVjaWZpYyk7XFxuIDQyNzpcXHRcXHRwcmVpbml0X25ldF9zeXNjdGwobmV0KTtcXG4gNDI4OlxcdH1cXG4gNDI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwODo1OTo0NS4xODMyMTgxMzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMzg4MjAwNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBOYW1lc3BhY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gY29kZSBhZ2Fpbi4gUHJldmlvdXNseSwgYHByZWluaXRfbmV0YCB3YXMgY2FsbGluZyBgbnNfY29tbW9uX2luaXQobmV0KWAgZGlyZWN0bHksIHJpZ2h0PyBBbmQgdGhhdCBjb3VsZCBmYWlsLiBJZiBpdCAqZGlkKiBmYWlsLCBgcHJlaW5pdF9uZXRgIHJldHVybmVkIGFuIGVycm9yLCBhbmQgYGNvcHlfbmV0X25zYCBoYWQgYSBsZWFrIGJlY2F1c2UgaXQganVtcGVkIHRvIGBkZWNfdWNvdW50c2AgYW5kIHRoZSBgbmV0YCBzdHJ1Y3Qgd2Fzbid0IHByb3Blcmx5IGNsZWFuZWQgdXAuIEEgY2xhc3NpYyBvdmVyc2lnaHQhXG5cbk5vdywgaXQncyBkaWZmZXJlbnQuIGBwcmVpbml0X25ldGAgKmRvZXNuJ3QqIGNhbGwgYG5zX2NvbW1vbl9pbml0YCBhbnltb3JlLiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBqdXN0IGluaXRpYWxpemUgYG5ldC1cdTAwM2VwYXNzaXZlYCB0byAxLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGEgcGFzc2l2ZSBpbml0aWFsaXphdGlvbiwgSSB3b25kZXIgd2h5LiBUaGVuLCBgY29weV9uZXRfbnNgIGNhbGxzIGBuc19jb21tb25faW5pdGAuIE5vdywgaWYgKnRoYXQqIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IGp1bXBzIHRvIGBwdXRfdXNlcm5zX25vX2NvbW1vbmAsIHdoaWNoIHRoZW4gY2FsbHMgYG5ldF9wYXNzaXZlX2RlYyhuZXQpYC5cblxuQWhhISBgbmV0X3Bhc3NpdmVfZGVjKG5ldClgICpkZWNyZW1lbnRzKiBgbmV0LVx1MDAzZXBhc3NpdmVgIHRvIDAsIHdoaWNoIHNob3VsZCB0aGVuIGZyZWUgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBpZiB0aGUgY291bnRlciBpcyBhdCAwLiBTbywgaXQgKnNob3VsZCogY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmIGluIGNhc2Ugb2YgYSBmYWlsdXJlIGR1cmluZyBgbnNfY29tbW9uX2luaXRgLiBCdXQgd2FpdC4uLiBkaWQgSSByZWFkIHRoYXQgY29ycmVjdGx5PyBgbmV0X3Bhc3NpdmVfZGVjYCAqZnJlZXMqIGBuZXRgPyBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCB0byB2ZXJpZnkhIEkgaGFkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBuZXRfcGFzc2l2ZV9kZWNgIHRvIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IGRvaW5nIHdoYXQgSSB0aGluayBpdCBpcy4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdG8gYG5ldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6MjYuNTcxNDIxNzMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTI3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTI3OlxcdHZvaWQgbmV0X3Bhc3NpdmVfZGVjKHN0cnVjdCBuZXQgKm5ldClcXG4gNTI4OlxcdHtcXG4gNTI5OlxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm5ldC1cXHUwMDNlcGFzc2l2ZSkpIHtcXG4gNTMwOlxcdFxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihuZXQtXFx1MDAzZWdlbikpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHQjaWZkZWYgQ09ORklHX1JFRl9UUkFDS0VSXFxuIDUzMzpcXHRcXHRcXHQvKiBUaGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFja2VycyBsZWZ0IHRoZXJlLiAqL1xcbiA1MzQ6XFx0XFx0XFx0cmVmX3RyYWNrZXJfZGlyX2V4aXQoXFx1MDAyNm5ldC1cXHUwMDNlbm90cmVmY250X3RyYWNrZXIpO1xcbiA1MzU6XFx0XFx0XFx0aWYgKCFuZXQtXFx1MDAzZXJlZmNudF90cmFja2VyLmRlYWQpXFxuIDUzNjpcXHRcXHRcXHRcXHRyZWZfdHJhY2tlcl9kaXJfZXhpdChcXHUwMDI2bmV0LVxcdTAwM2VyZWZjbnRfdHJhY2tlcik7XFxuIDUzNzpcXHQjZW5kaWZcXG4gNTM4OlxcdFxcbiA1Mzk6XFx0XFx0XFx0LyogV2FpdCBmb3IgYW4gZXh0cmEgcmN1X2JhcnJpZXIoKSBiZWZvcmUgZmluYWwgZnJlZS4gKi9cXG4gNTQwOlxcdFxcdFxcdGxsaXN0X2FkZChcXHUwMDI2bmV0LVxcdTAwM2VkZWZlcl9mcmVlX2xpc3QsIFxcdTAwMjZkZWZlcl9mcmVlX2xpc3QpO1xcbiA1NDE6XFx0XFx0fVxcbiA1NDI6XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHR2b2lkIG5ldF9kcm9wX25zKHN0cnVjdCBuc19jb21tb24gKm5zKVxcbiA1NDU6XFx0e1xcbiA1NDY6XFx0XFx0aWYgKG5zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzoyNi41NzE1MjQ2NzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4NDc3NDU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gTmV0d29yayBOYW1lc3BhY2VzKipcblxuT2theSwgc28gYG5ldF9wYXNzaXZlX2RlY2AgKmRvZXMqIGZyZWUgYG5ldGAg4oCTIHdlbGwsIGFkZHMgaXQgdG8gYSBkZWZlcnJlZCBmcmVlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZvciB0aGlzIHB1cnBvc2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoYXQncyBnb29kLCBhIGRlZmluaXRlIGltcHJvdmVtZW50LlxuXG5MZXQncyBkaWcgZGVlcGVyLiBgbnNfY29tbW9uX2luaXRgIGNhbGxzIGBfX25zX2NvbW1vbl9pbml0YCwgd2hpY2ggdGhlbiBjYWxscyBgcHJvY19hbGxvY19pbnVtYC4gQWgsIHJpZ2h0LCBgcHJvY19hbGxvY19pbnVtYCBjYW4gZmFpbCwgdXN1YWxseSBkdWUgdG8gbWVtb3J5IGV4aGF1c3Rpb24gb3IgcnVubmluZyBvdXQgb2YgSURzLiBJZiAqdGhhdCogaGFwcGVucywgYGNvcHlfbmV0X25zYCBsZWFrZWQgdGhlIGBuZXRgIHN0cnVjdHVyZS4gU28gdGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IOKAkyBpdCBwbHVncyBhIG1lbW9yeSBsZWFrLCB3aGljaCBpcyBhIGJpZyBkZWFsLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiB0aGlzPyBNZW1vcnkgbGVha3Mgb24gZXJyb3IgcGF0aHMgYXJlIHByaW1lIGZ1enppbmcgdGFyZ2V0cywgYnV0IHRoaXMgaXMgYSAqc3BlY2lmaWMqIGVycm9yIHBhdGg6IGEgZmFpbHVyZSBpbiBgbnNfY29tbW9uX2luaXRgLiBDYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGF0IGZhaWx1cmU/IGBuc19jb21tb25faW5pdGAgaXMgYWxsb2NhdGluZyBhbiBpbm9kZSBudW1iZXIgZnJvbSBhIGdsb2JhbCBJREEuIEl0IGZhaWxzIGlmIHRoZSBJREEgYWxsb2NhdGlvbiBmYWlscyAtIHdoaWNoIGlzIGFuIGVycm9yIHBhdGguIEdvb2QuIFRoaXMgaXMgc291bmRpbmcgbGlrZSBhIHZhbHVhYmxlIHRhcmdldC5cblxuV2FpdCwgaWYgYG5zX2NvbW1vbl9pbml0YCBmYWlscywgYGNvcHlfbmV0X25zYCBsZWFrcy4gUmlnaHQsIHRoZSBmaXggaW5pdGlhbGl6ZXMgYG5ldC1cdTAwM2VwYXNzaXZlYCAqYmVmb3JlKiBjYWxsaW5nIGBuc19jb21tb25faW5pdGAuIFRoZW4sIGlmIHRoZSBsYXR0ZXIgZmFpbHMsIGBuZXRfcGFzc2l2ZV9kZWMobmV0KWAgZ2V0cyBjYWxsZWQsIGFuZCBmcmVlcyBpdC4gIEFnYWluLCBidWcgZml4LCBwcmV2ZW50aW5nIGEgbWVtb3J5IGxlYWsuXG5cblNvLCBpcyBmdXp6aW5nIGp1c3RpZmllZD8gVGhpcyBjaGFuZ2UgbW9kaWZpZXMgYGNvcHlfbmV0X25zYCBhbmQgYG5ldF9uc19pbml0YC4gIGBjb3B5X25ldF9uc2AgaXMgcmVhY2hhYmxlIHZpYSBgY2xvbmUoQ0xPTkVfTkVXTkVUKWAgYW5kIGB1bnNoYXJlKENMT05FX05FV05FVClgLiAgRGVmaW5pdGVseSByZWFjaGFibGUsIGRlZmluaXRlbHkgdGVzdGFibGUuIEZ1enppbmcgYGNvcHlfbmV0X25zYCBkaXJlY3RseSAod2hpY2ggbWFwcyB0byBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgaXMgYSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0J3Mgc29tZXRoaW5nIHdlIHNob3VsZCBhYnNvbHV0ZWx5IGJlIGRvaW5nLlxuXG5IYW5nIG9uLCBpcyB0aGVyZSBhIHNwZWNpZmljIGZ1bmN0aW9uIHRvIGZvY3VzIG9uPyBZZWFoLCBgY29weV9uZXRfbnNgIHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY2FuZGlkYXRlIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBpdCdzIG5vdCBzdGF0aWMgZmlyc3QuIEdvdHRhIGNoZWNrIHRoZSB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjM0LjI1NjMwMTk0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MjQyODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NTQ0PXZvaWQgbmV0X2Ryb3BfbnMoc3RydWN0IG5zX2NvbW1vbiAqbnMpXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMtNTQ5LVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo1NTA6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy01NTEtXFx0XFx0XFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozNC43NDU1NDk4MDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NDMwMDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgY29weV9uZXRfbnNgIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBjb3B5X25ldF9uc2AgaXNuJ3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gQSBub24tc3RhdGljIGZ1bmN0aW9uIHN1Z2dlc3RzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBidWlsZC10aW1lIGRlY2lzaW9ucyBhcmUgYXQgcGxheS4gRmlyc3QgdGhpbmcncyBmaXJzdDogYXJlIHdlIGRlYWxpbmcgd2l0aCBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNpdHVhdGlvbj9cblxuTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gY2hlY2sgZm9yIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gR2l2ZW4gdGhpcyBpcyBuZXR3b3JraW5nIGNvZGUsIEknbSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19ORVRfTlNgLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoaXMgaXMgdGhlIGtleSB0byBpdCBhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEknbGwgc3RhcnQgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBuZXQvY29yZS9NYWtlZmlsZWAgZm9yIGJ1aWxkLXRpbWUgZmxhZ3Mgb3IgdGhlIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgIGZpbGUgaXRzZWxmLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgbGVhZCBvbiB3aGF0J3MgZHJpdmluZyB0aGUgYmVoYXZpb3Igb2YgYGNvcHlfbmV0X25zYC4gSXQncyBsaWtlbHkgb25lIG9mIHRob3NlIHR3by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0OTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozOC41Mzk4NTMxOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDYxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldF9uYW1lc3BhY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9NYWtlZmlsZT02PW9iai15IDo9IHNvY2subyBza2J1ZmYubyBkYXRhZ3JhbS5vIHN0cmVhbS5vIHNjbS5vIFxcXFxcXG5uZXQvY29yZS9NYWtlZmlsZTo3OlxcdCBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGUtOC1cXHQgZmxvd19kaXNzZWN0b3Iub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzozOC41ODUzMjA0NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NjIyMzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgTmV0d29yayBOYW1lc3BhY2UgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgbmV0X25hbWVzcGFjZS5jYCBmaWxlIGFuZCBob3cgaXQncyBjb21waWxlZC4gSXQgc2VlbXMgbGlrZSBpdCdzICphbHdheXMqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBuZXR3b3JraW5nIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBIb3dldmVyLCBJJ20gYSBsaXR0bGUgZnV6enkgb24gd2hlbiBgY29weV9uZXRfbnNgIGdldHMgaW5jbHVkZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgaXQgbWlnaHQgYmUgY29uZGl0aW9uYWwsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYENPTkZJR19ORVRfTlNgIG9wdGlvbi4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oYCB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgaWYgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hY3JvcyBhcmUgdXNlZC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo0MS45NjE1NDYxNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTcwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcHlfbmV0X25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg9MjEyPWV4dGVybiBzdHJ1Y3QgbmV0IGluaXRfbmV0O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNC0jaWZkZWYgQ09ORklHX05FVF9OU1xcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaDoyMTU6c3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oLTIxNi1cXHRcXHRcXHRzdHJ1Y3QgbmV0ICpvbGRfbmV0KTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaD0yMjQ9ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2xlYW51cF9uZXRfdGFzaztcXG4tLVxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMjgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25zcHJveHkuaFxcdTAwM2VcXG5pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmg6MjI5OnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxcbmluY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaC0yMzAtXFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo0Mi4wMDY3MjIyODVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNDI4NDM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBORVRfTlNgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBjb3B5X25ldF9uc2AgYW5kIGhvdyBpdCB3b3Jrcy4gSSBrbm93IHRoYXQgYENPTkZJR19ORVRfTlNgIGlzIGFic29sdXRlbHkgY3JpdGljYWwgaGVyZS4gSWYgdGhhdCdzICplbmFibGVkKiwgdGhlbiBgY29weV9uZXRfbnNgIGlzIGFjdHVhbGx5IGEgcmVhbCwgZnVuY3Rpb25pbmcgZnVuY3Rpb24uIEJ1dCwgaWYgYENPTkZJR19ORVRfTlNgIGlzICpkaXNhYmxlZCosIGl0IGVzc2VudGlhbGx5IHR1cm5zIGludG8gYSBzdGF0aWMgaW5saW5lLiBTbywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgTkVUX05TYCBpcyBhIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIHRoaXMgc2NlbmFyaW8sIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGZvciBgTkVUX05TYCwganVzdCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCByZWxpZXMgb24uIEkgd2FudCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZyByZWxhdGVkIHRvIHRoaXMgbmV0d29yayBuYW1lc3BhY2UgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzUxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6NDUuNTMxMDEzNDIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIwMjAwMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDUyPWNvbmZpZyBQSURfTlNcXG4tLVxcbmluaXQvS2NvbmZpZy0xNDU5LVxcbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBORVRfTlNcXG5pbml0L0tjb25maWctMTQ2MS1cXHRib29sIFxcXCJOZXR3b3JrIG5hbWVzcGFjZVxcXCJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnPTM9Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG4tLVxcbm5ldC9LY29uZmlnLmRlYnVnLTExLVxcbm5ldC9LY29uZmlnLmRlYnVnOjEyOmNvbmZpZyBORVRfTlNfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy0xMy1cXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuLS1cXG5uZXQvbnNoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbnNoL0tjb25maWc6MjptZW51Y29uZmlnIE5FVF9OU0hcXG5uZXQvbnNoL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKSBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDM6NDcuMjUxMjE5NDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDc5NDAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBORVRfTlNgLCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggaXQ6XG5cbioqRGl2aW5nIGludG8gaW5pdC9LY29uZmlnOiBORVRfTlMgVGVycml0b3J5KipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIG5hbWVzcGFjZXMgYXJlIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHplcm9pbmcgaW4gb24gYW55dGhpbmcgcmVsYXRlZCB0byBgTkVUX05TYC4gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyB0aGlzIGZlYXR1cmUncyBjb25maWd1cmF0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKG1lLCB1c3VhbGx5IHZpYSB0aGUgYG1ha2UgbWVudWNvbmZpZ2Agb3Igc2ltaWxhciBpbnRlcmZhY2VzKSBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgbWF5YmUgc29tZSBkZWZhdWx0IHZhbHVlcy4uLiBlc3NlbnRpYWxseSwgdGhlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IGBORVRfTlNgJ3MgYmVoYXZpb3IgaXMgY29udHJvbGxlZC4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIGl0J3MgZGVmaW5lZC4gQW5kIEkgaG9wZSB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrIGluaXRpYWxpemF0aW9uLiBUaGlzIHdpbGwgaGVscCBtZSByZW1lbWJlciBob3cgdGhpcyBmZWF0dXJlIGZpdHMgaW50byB0aGUgZ3JlYXRlciBsaW51eCBrZXJuZWwgcGljdHVyZS4gSSBzaG91bGQgYmUgYWJsZSB0byBtYXAgYW55IGRlcGVuZGVuY2llcyBvbiB0aGlzIGZlYXR1cmUgYmFjayB0byBpdHMgcmVsZXZhbnQgbW9kdWxlcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBzdGF0aWNhbGx5IGJ1aWx0LCBvciBkeW5hbWljYWxseSBsb2FkZWQuXG5cbkkgd2lsbCBhbHNvIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgcXVpcmtzIGluIHRoZSBmZWF0dXJlLCBtYXliZSB0aGF0IGl0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowMzo1Mi44OTkxNjI3ODlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDU1OlxcdFxcdGhlbHBcXG4xNDU2OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG4xNDU3OlxcdFxcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XFxuMTQ1ODpcXHRcXHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXFxuMTQ1OTpcXHRcXG4xNDYwOlxcdGNvbmZpZyBORVRfTlNcXG4xNDYxOlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgbmFtZXNwYWNlXFxcIlxcbjE0NjI6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4xNDYzOlxcdFxcdGRlZmF1bHQgeVxcbjE0NjQ6XFx0XFx0aGVscFxcbjE0NjU6XFx0XFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG4xNDY2OlxcdFxcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXFxuMTQ2NzpcXHRcXG4xNDY4OlxcdGVuZGlmICMgTkFNRVNQQUNFU1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXFxuMTQ3MTpcXHRcXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG4xNDcyOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbjE0NzM6XFx0XFx0c2VsZWN0IFBST0NfQ0hJTERSRU5cXG4xNDc0OlxcdFxcdHNlbGVjdCBLQ01QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjUyLjg5OTMzMjg0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1NjMyNTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gYE5FVGAsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGZhbGxzIHVuZGVyIGBOQU1FU1BBQ0VTYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcy4gUmlnaHQsIHNvIGBORVRfTlNgIGFuZCBgTkFNRVNQQUNFU2AgYXJlIHRoZSB0d28ga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGZvY3VzIG9uLiBXYWl0IGEgbWludXRl4oCmIHdhc24ndCBgTkFNRVNQQUNFU2AgYSBtZW51Y29uZmlnPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBoZWFkIG92ZXIgdG8gYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGhvdyBgTkFNRVNQQUNFU2AgaXMgZGVmaW5lZCBpbiB0aGVyZS4gTmVlZCB0byBnZXQgdGhlIGhpZXJhcmNoeSBzdHJhaWdodCBiZWZvcmUgSSBtYWtlIGFueSBkZWNpc2lvbnMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjU2LjAxNDk2ODgwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTI4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5BTUVTUEFDRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzk5PWVuZGlmICMgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xNDAwLVxcbmluaXQvS2NvbmZpZzoxNDAxOm1lbnVjb25maWcgTkFNRVNQQUNFU1xcbmluaXQvS2NvbmZpZy0xNDAyLVxcdGJvb2wgXFxcIk5hbWVzcGFjZXMgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjAzOjU2LjA2Mjk4ODExMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjA3NzE3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgaW4gYGNvcHlfbmV0X25zYC4gU3BlY2lmaWNhbGx5LCB0aGUgbGVhayBvY2N1cnMgd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzIHdpdGhpbiBgY29weV9uZXRfbnNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNyaXRpY2FsIGZpeCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhpcyBpcyB3b3J0aCBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuSSB0aGluayBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGNvcHlfbmV0X25zYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgd2FzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiwgYXMgSSBrbm93IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBwcmVpbml0X25ldGAgYW5kIGBuZXRfbnNfaW5pdGAgYXJlIGluIHRoYXQgc3BhY2UuIEhvd2V2ZXIsIGBwcmVpbml0X25ldGAgaXMgc3RhdGljLCBhbmQgYG5ldF9uc19pbml0YCBpcyBvbmx5IGNhbGxlZCBhdCBib290LiBTbywgYGNvcHlfbmV0X25zYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHRocm91Z2ggYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWAsIGlzIHRoZSBrZXkuIEFuZCwgSSBzZWUgdGhhdCBgbnNfY29tbW9uX2luaXRgIGlzIGFsc28gY2FsbGVkIGZyb20gYG5ldF9uc19pbml0YCwgYnV0IHRoYXQgaXMgYXQgYm9vdCB0aW1lIGluaXRpYWxpemF0aW9uLCBzbyBpdOKAmXMgbm90IHJlYWxseSByZWxldmFudCBoZXJlLCBpdCdzIGp1c3QgdGhlIGVhcmx5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBmaXJzdCBuYW1lc3BhY2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgYE5FVF9OU2AgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgdGhlIGVuYWJsaW5nIGZhY3RvcnMsIGFuZCBhcmUga2V5IHRvIHRyaWdnZXJpbmcgdGhlIGNvZGUgcGF0aC4gSSBtaWdodCBuZWVkIGBVU0VSX05TYCB0byBjcmVhdGUgdGhlIG5hbWVzcGFjZSBhcyBhbiB1bnByaXZpbGVnZWQgdXNlciwgYnV0IGBORVRfTlNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgb2YgY291cnNlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFzc2Vzc21lbnQgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlXG4qICAgKipGb2N1c1N5bWJvbHM6KiogXFxbXCJjb3B5XFxfbmV0XFxfbnNcIl1cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFxbXCJORVRcXF9OU1wiLCBcIk5BTUVTUEFDRVNcIl1cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBvZiB0aGUgYG5ldGAgc3RydWN0dXJlIGluIGBjb3B5X25ldF9uc2Agd2hlbiBgbnNfY29tbW9uX2luaXRgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgaW5pdGlhbGl6YXRpb24gcGF0aC4gRnV6emluZyBgY29weV9uZXRfbnNgIChyZWFjaGFibGUgdmlhIGB1bnNoYXJlKENMT05FX05FV05FVClgKSBjYW4gaGVscCB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlcyBleGlzdCBpbiB0aGlzIGVycm9yIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE3LCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowNDowNC4yNzA3MDgyNzdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc0ODU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX05TXCIsXG4gICAgXCJOQU1FU1BBQ0VTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29weV9uZXRfbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIG9mIHRoZSBgbmV0YCBzdHJ1Y3R1cmUgaW4gYGNvcHlfbmV0X25zYCB3aGVuIGBuc19jb21tb25faW5pdGAgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBpbml0aWFsaXphdGlvbiBwYXRoLiBGdXp6aW5nIGBjb3B5X25ldF9uc2AgKHJlYWNoYWJsZSB2aWEgYHVuc2hhcmUoQ0xPTkVfTkVXTkVUKWApIGNhbiBoZWxwIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWVzIGV4aXN0IGluIHRoaXMgZXJyb3IgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfTlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb3B5X25ldF9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgb2YgdGhlIGBuZXRgIHN0cnVjdHVyZSBpbiBgY29weV9uZXRfbnNgIHdoZW4gYG5zX2NvbW1vbl9pbml0YCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGluaXRpYWxpemF0aW9uIHBhdGguIEZ1enppbmcgYGNvcHlfbmV0X25zYCAocmVhY2hhYmxlIHZpYSBgdW5zaGFyZShDTE9ORV9ORVdORVQpYCkgY2FuIGhlbHAgdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZXMgZXhpc3QgaW4gdGhpcyBlcnJvciBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTowNDowNC4zNDc0NjI4NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYzMTQ3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6MDQ6MDQuMzQ3OTYyMjk1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMjYyNjQzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMzNDA0M2QyNmU2YzEwYjYzZGQ1ZWQyY2UyYjRjMjA5YWY5YTc3YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwODo1ODoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuaW5kZXggOTE2NmY0NjcyOTNlMC4uZGE1Zjg4MWZiZDNiOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuY1xuKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jXG5AQCAtNDAwLDE0ICs0MDAsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0X3N5c2N0bChzdHJ1Y3QgbmV0ICpuZXQpXG4gfVxuIFxuIC8qIGluaXQgY29kZSB0aGF0IG11c3Qgb2NjdXIgZXZlbiBpZiBzZXR1cF9uZXQoKSBpcyBub3QgY2FsbGVkLiAqL1xuLXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcbitzdGF0aWMgX19uZXRfaW5pdCB2b2lkIHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuIHtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBuc19jb21tb25faW5pdChuZXQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdHJlZmNvdW50X3NldChcdTAwMjZuZXQtXHUwMDNlcGFzc2l2ZSwgMSk7XG4gXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcdTAwMjZuZXQtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEyOCwgXCJuZXRfcmVmY250XCIpO1xuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2bmV0LVx1MDAzZW5vdHJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0X25vdHJlZmNudFwiKTtcbkBAIC00MzEsNyArNDI1LDYgQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ldC1cdTAwM2VwdHlwZV9hbGwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV0LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiBcdHByZWluaXRfbmV0X3N5c2N0bChuZXQpO1xuLVx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG5AQCAtNTc0LDEyICs1NjcsMTQgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0XHRnb3RvIGRlY191Y291bnRzO1xuIFx0fVxuIFxuLVx0cnYgPSBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpO1xuLVx0aWYgKHJ2IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGRlY191Y291bnRzO1xuK1x0cHJlaW5pdF9uZXQobmV0LCB1c2VyX25zKTtcbiBcdG5ldC1cdTAwM2V1Y291bnRzID0gdWNvdW50cztcbiBcdGdldF91c2VyX25zKHVzZXJfbnMpO1xuIFxuK1x0cnYgPSBuc19jb21tb25faW5pdChuZXQpO1xuK1x0aWYgKHJ2KVxuK1x0XHRnb3RvIHB1dF91c2VybnNfbm9fY29tbW9uO1xuK1xuIFx0cnYgPSBkb3duX3JlYWRfa2lsbGFibGUoXHUwMDI2cGVybmV0X29wc19yd3NlbSk7XG4gXHRpZiAocnYgXHUwMDNjIDApXG4gXHRcdGdvdG8gcHV0X3VzZXJucztcbkBAIC01OTEsNiArNTg2LDcgQEAgc3RydWN0IG5ldCAqY29weV9uZXRfbnModTY0IGZsYWdzLFxuIFx0aWYgKHJ2IFx1MDAzYyAwKSB7XG4gcHV0X3VzZXJuczpcbiBcdFx0bnNfY29tbW9uX2ZyZWUobmV0KTtcbitwdXRfdXNlcm5zX25vX2NvbW1vbjpcbiAjaWZkZWYgQ09ORklHX0tFWVNcbiBcdFx0a2V5X3JlbW92ZV9kb21haW4obmV0LVx1MDAzZWtleV9kb21haW4pO1xuICNlbmRpZlxuQEAgLTEyOTMsNyArMTI4OSw4IEBAIHZvaWQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpXG4gXHQgKiBUaGlzIGN1cnJlbnRseSBjYW5ub3QgZmFpbCBhcyB0aGUgaW5pdGlhbCBuZXR3b3JrIG5hbWVzcGFjZVxuIFx0ICogaGFzIGEgc3RhdGljIGlub2RlIG51bWJlci5cbiBcdCAqL1xuLVx0aWYgKHByZWluaXRfbmV0KFx1MDAyNmluaXRfbmV0LCBcdTAwMjZpbml0X3VzZXJfbnMpKVxuK1x0cHJlaW5pdF9uZXQoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNmluaXRfdXNlcl9ucyk7XG4rXHRpZiAobnNfY29tbW9uX2luaXQoXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRwYW5pYyhcIkNvdWxkIG5vdCBwcmVpbml0aWFsaXplIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlXCIpO1xuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZwZXJuZXRfb3BzX3J3c2VtKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjA0OjA0LjM0Nzk2MzM1NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI2MjYxNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgTmFtZXNwYWNlIEluaXRpYWxpemF0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcHJlaW5pdF9uZXRgIGluIGBuZXQvY29yZS9uZXRfbmFtZXNwYWNlLmNgLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBpdCdzIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSBvZiBgcHJlaW5pdF9uZXRgIHRvIGB2b2lkYCBpbnN0ZWFkIG9mIGBpbnRgLiBIbW0sIGludGVyZXN0aW5nLiBUaGV5J3JlIGFsc28gbW92aW5nIHRoZSBjYWxsIHRvIGBuc19jb21tb25faW5pdChuZXQpYCBvdXQgb2YgYHByZWluaXRfbmV0YCBhbmQgaW50byB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGBjb3B5X25ldF9uc2AgYW5kIGBuZXRfbnNfaW5pdGAuXG5cbkluIHRoZSBgY29weV9uZXRfbnNgIGZ1bmN0aW9uLCBgbnNfY29tbW9uX2luaXQobmV0KWAgaXMgbm93IGNhbGxlZCAqYWZ0ZXIqIGBwcmVpbml0X25ldChuZXQsIHVzZXJfbnMpYCwgYWZ0ZXIgYG5ldC1cdTAwM2V1Y291bnRzID0gdWNvdW50cztgIGFuZCBgZ2V0X3VzZXJfbnModXNlcl9ucylgLiBBbmQsIGlmIGBuc19jb21tb25faW5pdGAgZmFpbHMsIGl0IG5vdyBqdW1wcyB0byBgcHV0X3VzZXJuc19ub19jb21tb25gLiBUaGlzIG5ldyBlcnJvciBwYXRoIHNraXBzIGBuc19jb21tb25fZnJlZShuZXQpYCBidXQgc3RpbGwgY2FsbHMgYGtleV9yZW1vdmVfZG9tYWluYCwgYHB1dF91c2VyX25zKHVzZXJfbnMpYCwgYG5ldF9kcm9wX25zKG5ldClgLCBgZGVjX25ldF9uYW1lc3BhY2VzKHVjb3VudHMpYCwgYW5kIGBrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGJlY2F1c2Ugb2YgdGhlIHJlb3JkZXJpbmcuIEJ1dCB3YWl0LCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCByZWZhY3RvcmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCdzIHByb2JhYmx5IGZpeGluZyBhIHN1YnRsZSBidWcgd2hlcmUgYSBmYWlsdXJlIGluIGBuc19jb21tb25faW5pdGAgd2FzIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGNsZWFudXAgb3IgbWF5YmUgc29tZSBzb3J0IG9mIHJlc291cmNlIGxlYWsuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYmVpbmcgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jYCBpbiBgbmV0X2FsbG9jYCAoY2FsbGVkIGJlZm9yZSBgY29weV9uZXRfbnNgIG9yIGluc2lkZSBpdCkuIExldCdzIGNoZWNrIGBjb3B5X25ldF9uc2AuLi4gYWgsIHllcywgYGNvcHlfbmV0X25zYCBkb2VzIGluZGVlZCBjYWxsIGBuZXRfYWxsb2MoKWAsIGFuZCB0aGF0IHVzZXMgYGttZW1fY2FjaGVfemFsbG9jYC5cblxuUmlnaHQsIHNvIGBuZXRgIGlzICp6ZXJvZWQqLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGhlcmUuIFNvLCB0aGUgYnVnIGlzIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWssIG9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBwZXJoYXBzIGV2ZW4gcmVmY291bnQgcHJvYmxlbXMuIE5vdywgbGV0J3MgbG9vayBhdCB3aGF0IGBuc19jb21tb25faW5pdGAgYWN0dWFsbHkgZG9lcy4gSXQgbG9va3MgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuIGlub2RlIG51bWJlciBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLlxuXG5ObyBLTVNBTiBuZWVkZWQgaGVyZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIGZpeC4gTGV0J3MgcXVpY2tseSB2ZXJpZnkgYGNvcHlfbmV0X25zYCBpbiBgbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jYCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIEknbSBjb25maWRlbnQuIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2LCJPdXRwdXRUb2tlbnMiOjIxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjA0OjE2LjYxMDU4NTA2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIG5ldHdvcmsgbmFtZXNwYWNlcyBieSBtb3ZpbmcgYG5zX2NvbW1vbl9pbml0KClgIG91dCBvZiBgcHJlaW5pdF9uZXQoKWAgYW5kIGludG8gaXRzIGNhbGxlcnMgKGBjb3B5X25ldF9ucygpYCBhbmQgYG5ldF9uc19pbml0KClgKS4gSXQgYWxzbyB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBjb3B5X25ldF9ucygpYCB0byBwcm9wZXJseSBjbGVhbiB1cCByZXNvdXJjZXMgaWYgYG5zX2NvbW1vbl9pbml0KClgIGZhaWxzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGR1cmluZyBuYW1lc3BhY2UgY3JlYXRpb24uIFRoZSBgbmV0YCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGggYGttZW1fY2FjaGVfemFsbG9jKClgICh6ZXJvLWluaXRpYWxpemVkKSwgYW5kIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY29kZSAoc3VjaCBhcyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugb2YgbmV0d29yayBuYW1lc3BhY2VzIGJ5IG1vdmluZyBgbnNfY29tbW9uX2luaXQoKWAgb3V0IG9mIGBwcmVpbml0X25ldCgpYCBhbmQgaW50byBpdHMgY2FsbGVycyAoYGNvcHlfbmV0X25zKClgIGFuZCBgbmV0X25zX2luaXQoKWApLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGNvcHlfbmV0X25zKClgIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlc291cmNlcyBpZiBgbnNfY29tbW9uX2luaXQoKWAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgYW5kIHBvdGVudGlhbGx5IG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgZHVyaW5nIG5hbWVzcGFjZSBjcmVhdGlvbi4gVGhlIGBuZXRgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgd2l0aCBga21lbV9jYWNoZV96YWxsb2MoKWAgKHplcm8taW5pdGlhbGl6ZWQpLCBhbmQgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjb2RlIChzdWNoIGFzIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxw7np[1] Phase: Succeeded StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 09:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 09:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2] Phase: Succeeded StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 09:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 09:04:27 +0000 UTC FinishedAt: 2026-08-22 09:04:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxw7np/series-workflowxw7np-convert-artifact-4259618705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 09:04:37 +0000 UTC FinishedAt: 2026-08-22 09:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 09:04:37 +0000 UTC FinishedAt: 2026-08-22 09:21:19 +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:*6393a1a5-ddd5-452c-a962-daa302a38f6d,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-workflowxw7np/series-workflowxw7np-convert-artifact-4259618705/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": "e0692b53-ac05-4ada-8fd3-791a2fc9d02b", "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-workflowxw7np/series-workflowxw7np-build-action-186024255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 09:04:37 +0000 UTC FinishedAt: 2026-08-22 09:21:09 +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:*6393a1a5-ddd5-452c-a962-daa302a38f6d,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-workflowxw7np/series-workflowxw7np-convert-artifact-4259618705/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": "e0692b53-ac05-4ada-8fd3-791a2fc9d02b", "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-workflowxw7np/series-workflowxw7np-build-action-186024255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 09:21:19 +0000 UTC FinishedAt: 2026-08-22 09:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 09:21:19 +0000 UTC FinishedAt: 2026-08-22 09:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 09:21:19 +0000 UTC FinishedAt: 2026-08-22 09:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 09:21:19 +0000 UTC FinishedAt: 2026-08-22 09:21:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxw7np/series-workflowxw7np-convert-artifact-1562365796/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 09:21:29 +0000 UTC FinishedAt: 2026-08-22 09:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 09:21:29 +0000 UTC FinishedAt: 2026-08-22 09:23:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0692b53-ac05-4ada-8fd3-791a2fc9d02b,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-workflowxw7np/series-workflowxw7np-build-action-186024255/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-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 09:23:47 +0000 UTC FinishedAt: 2026-08-22 09:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 09:23:47 +0000 UTC FinishedAt: 2026-08-22 09:23:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 09:23:47 +0000 UTC FinishedAt: 2026-08-22 09:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 09:23:47 +0000 UTC FinishedAt: 2026-08-22 09:40:34 +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:*6393a1a5-ddd5-452c-a962-daa302a38f6d,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-workflowxw7np/series-workflowxw7np-convert-artifact-1562365796/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": "7df822d2-dbb7-461b-a547-ae46da2a2b25", "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-workflowxw7np/series-workflowxw7np-build-action-1008589040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 09:23:47 +0000 UTC FinishedAt: 2026-08-22 09:40:24 +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:*6393a1a5-ddd5-452c-a962-daa302a38f6d,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-workflowxw7np/series-workflowxw7np-convert-artifact-1562365796/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": "7df822d2-dbb7-461b-a547-ae46da2a2b25", "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-workflowxw7np/series-workflowxw7np-build-action-1008589040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 09:40:34 +0000 UTC FinishedAt: 2026-08-22 09:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 09:40:34 +0000 UTC FinishedAt: 2026-08-22 09:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 09:40:34 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 09:40:34 +0000 UTC FinishedAt: 2026-08-22 09:42:19 +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:*7df822d2-dbb7-461b-a547-ae46da2a2b25,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-workflowxw7np/series-workflowxw7np-build-action-1008589040/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-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e0692b53-ac05-4ada-8fd3-791a2fc9d02b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7df822d2-dbb7-461b-a547-ae46da2a2b25,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-workflowxw7np/series-workflowxw7np-build-action-186024255/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-workflowxw7np/series-workflowxw7np-build-action-1008589040/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxw7np/series-workflowxw7np-convert-artifact-3422574317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 09:42:30 +0000 UTC FinishedAt: 2026-08-22 09:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 09:42:40 +0000 UTC FinishedAt: 2026-08-22 12:44:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxw7np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["copy_net_ns"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_NS","NAMESPACES"],"series_id":"7557d82c-279a-45dc-8091-24f718ea5873","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 09:42:40 +0000 UTC FinishedAt: 2026-08-22 12:44:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0692b53-ac05-4ada-8fd3-791a2fc9d02b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7df822d2-dbb7-461b-a547-ae46da2a2b25,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-workflowxw7np/series-workflowxw7np-build-action-186024255/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-workflowxw7np/series-workflowxw7np-build-action-1008589040/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-workflowxw7np/series-workflowxw7np-convert-artifact-3422574317/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,}