Name: series-workflowthj9n Phase: Succeeded StartedAt: 2026-08-10 19:04:44 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[0] Phase: Succeeded StartedAt: 2026-08-10 19:04:44 +0000 UTC FinishedAt: 2026-08-10 20:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 19:04:44 +0000 UTC FinishedAt: 2026-08-10 20:26:36 +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": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL", "NET_L3_MASTER_DEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL", "NET_L3_MASTER_DEV" ], "series_id": "5718ebb8-e152-4ad8-8460-01323c28f48a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_local_input", "input_action_end_dx4", "input_action_end_dt4" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfTDNfTUFTVEVSX0RFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9keDQmIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9kdDQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIwOjIyOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuaW5kZXggMmI0MWU0YzBkZGRkMS4uOTVlYTBiNjI3MjlhYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRpbnQgaWlmID0gSVA2Q0Ioc2tiKS1cdTAwM2VpaWY7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcbiYjNDM7XHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBpaWY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSBpcyBub3QgcHJvcGVybHkgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHNlZ21lbnQgcm91dGluZyBoZWFkZXIgKFNSdjYpIGluIGRlY2FwX2FuZF92YWxpZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHNlZ21lbnQgcm91dGluZyBsb2NhbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5MmZiNmQzZjRhNjU2N2I1OWFmZTRmNmRmODlmNDVjZjk3YTBmNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMDoyMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwppbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCkBAIC0yNTYsNiAmIzQzOzI1NiwxMyBAQCBzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKQogCWlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlpbnQgaWlmID0gSVA2Q0Ioc2tiKS0mZ3Q7aWlmOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWc2IExvY2FsIERlY2Fwc3VsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGUgY29kZSBhZGRzIGEgZmV3IGxpbmVzLCByaWdodCBhZnRlciB0aGUgYGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKWAgY2FsbC4gVGhlIGFkZGVkIGxpbmVzIGRlYWwgd2l0aCBhIGBwcm90byA9PSBJUFBST1RPX0lQSVBgIGNoZWNrLiBJdCYjMzk7cyBpbml0aWFsaXppbmcgdGhlIGBJUENCKHNrYilgIHN0cnVjdC4gTGV0IG1lIHNlZS4uLml0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJlc2VydmluZyB0aGUgaW5wdXQgaW50ZXJmYWNlIChgaWlmYCkgZnJvbSBgSVA2Q0Ioc2tiKWAgYW5kIHN0b3JpbmcgaXQgaW4gYElQQ0Ioc2tiKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdoeSBhcmUgdGhleSBkb2luZyB0aGlzPyBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGVuY2Fwc3VsYXRlZCBJUC1pbi1JUCB0cmFmZmljIHRoYXQgaXMgZGVjYXBzdWxhdGVkIGJ5IFNFRzYsIHdoaWxlIGtlZXBpbmcgdGhlIGluY29taW5nIGludGVyZmFjZSBzZXQuIEkmIzM5O2QgbmVlZCB0byBsb29rIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSBjb250ZXh0IG9mIHdoeSB0aGUgaW5wdXQgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIHN0b3JlZCBvbiBJUCBjb250cm9sIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYElQQ0JgIG5lZWRzIHRvIGhhdmUgaXRzIGBpaWZgIHNldC4gSXMgdGhpcyB0byBwcmVzZXJ2ZSByb3V0aW5nIGNvbnRleHQsIHBlcmhhcHM/IE9yIGlzIGl0IGZvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyOnN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg2MzpcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NDM6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTI2NT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNjg6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250cm9sIEZsb3cgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gSXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBwbGFjZXMgd2l0aGluIHRoaXMgY29kZTogYGlucHV0X2FjdGlvbl9lbmRfZHgyYCwgYGlucHV0X2FjdGlvbl9lbmRfZHg2YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDZgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIHBpcGVsaW5lLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrIGBwcm90byA9PSBJUFBST1RPX0lQSVBgLCBhcyB0aGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgcHJvdG9jb2wgY29udGV4dC4gSSBub3RpY2UgdGhhdCB0aGUgc3BlY2lmaWMgY2FzZXMgb2YgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBhcmUgdGhlIG9uZXMgcGFzc2luZyB0aGUgcmVsZXZhbnQgcHJvdG9jb2wuCgpOb3csIGdpdmVuIHRoZSBwcm90b2NvbCBjaGVjaywgSSB0aGluayBpdCYjMzk7cyBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbnZvbHZlbWVudCBvZiBJUElQLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LCB0byBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IG9wZXJhdGlvbmFsIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgU0VHNiBMV1QgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBJUFY2X1NFRzZfTFdUVU5ORUxgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGRlc2NyaXB0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXRhaWxlZCBleHBsYW5hdGlvbiwgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbnkgcmVsZXZhbnQgaGVscCB0ZXh0LCBhbmQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgZGVwZW5kIG9uIG9yIGNvbmZsaWN0IHdpdGguIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGhhcyB0byBzYXkgYWJvdXQgaXQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIGZpbGUgd2lsbCBpbGx1bWluYXRlIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIHR1bm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUFY2X1NFRzZfTFdUVU5ORUwqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBzdXBwb3J0cyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgb3B0aW9uOyBJIG5lZWQgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgZGlnZ2luZyBkZWVwIHRvIHNlZSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBtb2R1bGVzLCBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2Ugc3BlY2lmaWMgbmV0d29ya2luZyBzdGFjayBvcHRpb25zIGJlaW5nIGVuYWJsZWQsIHBvdGVudGlhbGx5IHJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGluIHBsYWNlIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBldmVuIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0IGFsb25lIGJlIGNvbXBpbGVkIGFuZCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBJIGtub3cgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlcywgZXhwbG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBwb3NzaWJseSB0cmFjaW5nIHRocm91Z2ggc29tZSBjb2RlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGaWxlIFJlYWRpbmVzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IEkgbmVlZCB0byBwcm9jZXNzIHRoaXMgZmlsZS4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHdpdGggdGhlb3J5IG9yIHByZWNvbmNlcHRpb25zLiBHb3R0YSBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSByYXcgZGF0YS4gVGhlIHNwZWNpZmljcyBvZiB0aGUgZmlsZeKAlGZvcm1hdCwgc2l6ZSwgb3JpZ2lu4oCUYXJlIHN0aWxsIHVua25vd24sIGJ1dCB0aGUgaW1tZWRpYXRlIGltcGVyYXRpdmUgaXMgdG8gYmVnaW4gdGhlIHJlYWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBHZXQgYSBiYXNlbGluZSBvZiB3aGF0JiMzOTtzIHByZXNlbnQgYmVmb3JlIGZvcm11bGF0aW5nIGEgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjgxOlx0XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG4gMjgyOlx0XHRoZWxwXG4gMjgzOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxuIDI4NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVjZfU0VHNl9MV1RVTk5FTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgaGVyZS4gSXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhpcyB0aGluZyByZWxpZXMgb24gYElQVjZgLCBzbyB0aGF0JiMzOTtzIHRoZSBiYXNlIEkmIzM5O20gd29ya2luZyBmcm9tLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgaW4gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZy4KCldhaXQgYSBzZWNvbmTigKZhcmUgdGhlc2UgZnVuY3Rpb25zICpzdGF0aWMqPyBSaWdodCwgdGhleSBhcmUuIFRoYXQgbWVhbnMgdGhleSBhcmVuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseS4gT2theSwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkmIzM5O3JlIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIG1vZHVsZS4gVGhleSBtdXN0IGJlIHJlZmVyZW5jZWQgdGhyb3VnaCBhIHN0cnVjdCBvciBzb21lIG90aGVyIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBvYnZpb3VzIHN0cnVjdCB0aGF0IGV4cG9zZXMgdGhlbSwgb3Igc29tZSBvdGhlciBtZXRob2QuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9keDQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4OC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5ODk6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XHRcdFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDA3Olx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDgtZHJvcDpcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTE2Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byBwaW5wb2ludCB0aGUgdXNhZ2Ugb2YgdGhpcyB0YWJsZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHNlZzZfYWN0aW9uX3RhYmxlYCBsZXZlcmFnZWQgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaz8mIzM0OyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBpcyBrZXkuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcG9uZW50cyBhbmQgZnVuY3Rpb25zLiBJcyBpdCBhIGNlbnRyYWwgbG9va3VwLCBhIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZSwgb3IgbW9yZSBvZiBhIHRyYW5zaXRpb25hbCBkYXRhIHN0cnVjdHVyZT8gS25vd2luZyBob3cgaXQmIzM5O3MgKnVzZWQqIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgbGVnIHVwIGluIGV2YWx1YXRpbmcgaXRzIGRlc2lnbiwgZWZmaWNpZW5jeSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gTGV0JiMzOTtzIHN0YXJ0IHRyYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfYWN0aW9uX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXHR7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XHRjb3VudCA9IEFSUkFZX1NJWkUoc2VnNl9hY3Rpb25fdGFibGUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1Olx0XHRkZXNjID0gXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ni1cdFx0aWYgKGRlc2MtXHUwMDNlYWN0aW9uID09IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDY4Olx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2NlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXHQgKiBiZWhhdmlvcnMgdG8gd29yayBwcm9wZXJseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBJbnB1dCBQYXRoKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0mIzM5O3MganVzdCBmbGFnZ2VkIHRoYXQgYW4gaW5wdXQgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYSBmdW5jdGlvbiBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCwgb3IgYSByZWxhdGVkIG9uZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGlzIGFjdGlvbiBpcyBiZWluZyAqZGVzY3JpYmVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmlnaHQgcGxhY2UgZm9yIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24gaXRzZWxmIHJlc2lkZXMgd2l0aGluIHRoZSBgc2VnNl9hY3Rpb25fZGVzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYGlucHV0YCBmaWVsZCBvZiB0aGlzIGRlc2NyaXB0b3IuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MsIGNvbnN0cmFpbnRzLCBvciB0aGUgcHJvY2Vzc2luZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gdGhlIGlucHV0IGlzIHN0b3JlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpZWxkIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFjdGlvbiBpdHNlbGYuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ4My1cdFx0XHRcdCAgU0VHNl9GX0xPQ0FMX0ZMQVZPUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4NDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDg1LVx0fSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5MS1cdFx0XHRcdCAgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9PSUYpLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0OTI6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfeCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkzLVx0fSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5Ny1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDk4Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5OS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDMtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUwNDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDIsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUwNS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDktXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxMDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxMS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjItI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MjM6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjQtXHRcdC5zbHd0X29wc1x0PSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NDItI2VuZGlmXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU0MzpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9kdDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0NC1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NDktI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NTA6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0Nixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTUxLVx0XHQuc2x3dF9vcHNcdD0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTU5LVx0XHQub3B0YXR0cnNcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NjA6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfYjYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2MS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NjUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2NjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVx0XHQuc3RhdGljX2hlYWRyb29tXHQ9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NzItXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU3MzpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9icGYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3NC1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4MTpcdC5pbnB1dFx0XHQ9IHNlZzZfbG9jYWxfaW5wdXQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4Mi1cdC5maWxsX2VuY2FwXHQ9IHNlZzZfbG9jYWxfZmlsbF9lbmNhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIElucHV0IEZsb3c6IGBzZWc2X2xvY2FsX2lucHV0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBzcGVjaWZpYyBhY3Rpb24gaXMgb3JpZ2luYXRpbmcgZnJvbSBgc2VnNl9sb2NhbF9pbnB1dGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhcnRpY3VsYXIgaW5wdXQuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCB0aHJvdWdoIGl0PyBJcyBpdCBhIGNvbnRyb2wgbWVzc2FnZSwgYSBkYXRhIHBhY2tldCwgYSBzcGVjaWZpYyBjb21tYW5kPyBUaGUgZnVuY3Rpb24gbmFtZSwgYHNlZzZfbG9jYWxfaW5wdXRgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZyB2NiBhbmQgc29tZSBmb3JtIG9mIGxvY2FsIGlucHV0IHByb2Nlc3NpbmcuIFNvLCB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBpbnB1dCBoYW5kbGVyLiBJdCYjMzk7cyBhIHNwZWNpYWxpemVkIHBvaW50LgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGNhbGwgY2hhaW4gcmVsYXRlZCB0byBgc2VnNl9sb2NhbF9pbnB1dGAuIFdoYXQgYXJlIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnM/IFdoYXQgYXJlIHRoZSBkb3duc3RyZWFtIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLCBhbmQgaG93IGRvZXMgdGhpcyBhY3Rpb24gaW50ZXJhY3Qgd2l0aCB0aGVtPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgaW5wdXQgaXMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCBwcm9jZXNzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgb2YgdnVsbmVyYWJpbGl0eSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIEFueSBpbW1lZGlhdGUgaW5zaWdodHMgaW50byB0aGUgZXhwZWN0ZWQgZGF0YSBmb3JtYXQsIHBvdGVudGlhbCBmb3IgZXJyb3JzLCBvciB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24gb2YgdGhpcyBpbnB1dCB3aWxsIGJlIGNyaXRpY2FsLiBVbmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBoZWxwcyB3aXRoIHRoaXMgYXNzZXNzbWVudCBhcyB3ZWxsLCBpbiBvcmRlciB0byBpZGVudGlmeSB0aGUgbG9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTU5OD1zdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYxNjpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjM5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjUwOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTEtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfbG9jYWxfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVx0LmRlc3Ryb3lfc3RhdGVcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XHQuaW5wdXRcdFx0PSBzZWc2X2xvY2FsX2lucHV0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODItXHQuZmlsbF9lbmNhcFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGludGVybmFscyBhbmQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUc2IExvY2FsIElucHV0IFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIFNFRzYgbG9jYWwgaW5wdXQgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhcjogYHNlZzZfbG9jYWxfaW5wdXRgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcywgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgLiAgVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgcGFydCBub3cgaXMgdGhpcyBjYWxsIHRvIGBkZXNjLSZndDtpbnB1dChza2IsIHNsd3QpYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRlc2NgIGlzLCBhbmQgd2hhdCBpdHMgYGlucHV0YCBmdW5jdGlvbiBkb2VzIHdpdGggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgYHNsd3RgIChsaWtlbHkgc29tZSBzb3J0IG9mIHNlZ21lbnQgbGlzdCB3ZWlnaHQgdGFibGUpIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuICBUaGlzIGBkZXNjYCBzdHJ1Y3R1cmUgaXMga2V5IOKAkyBJIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byBpdCB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldCBpcyBhY3R1YWxseSBwcm9jZXNzZWQgbG9jYWxseS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgIGFuZCB0aGUgYGRlc2NgIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MTY6XHRzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbjE2MTc6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTYxODpcdHtcbjE2MTk6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xuMTYyMDpcdFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XG4xNjIxOlx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG4xNjIyOlx0XHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbjE2MjM6XHRcdGludCByYztcbjE2MjQ6XHRcbjE2MjU6XHRcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbjE2MjY6XHRcdGRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG4xNjI3Olx0XG4xNjI4Olx0XHRyYyA9IGRlc2MtXHUwMDNlaW5wdXQoc2tiLCBzbHd0KTtcbjE2Mjk6XHRcbjE2MzA6XHRcdGlmICghc2VnNl9sd3R1bm5lbF9jb3VudGVyc19lbmFibGVkKHNsd3QpKVxuMTYzMTpcdFx0XHRyZXR1cm4gcmM7XG4xNjMyOlx0XG4xNjMzOlx0XHRzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzbHd0LCBsZW4sIHJjKTtcbjE2MzQ6XHRcbjE2MzU6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFRzYgTFdUdW5uZWwgSW5wdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIExXVHVubmVsIGlucHV0LCBzcGVjaWZpY2FsbHkgdGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgTFdUdW5uZWwgaW5wdXQgcHJvY2Vzcy4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYGRlY2FwX2FuZF92YWxpZGF0ZWAsIHdoaWNoLCBvZiBjb3Vyc2UsIGlzIGNhbGxlZCBieSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBhbW9uZyBvdGhlcnMuIEkga25vdyB0aGlzIGFyZWEgd2VsbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gYElQUFJPVE9fSVBJUGAsIHRoZSBJUHY0IG92ZXIgSVB2NiBwcm90b2NvbC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgSVBDQihza2IpYCBpc24mIzM5O3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLiBXaGVuIHlvdSYjMzk7cmUgZGVjYXBzdWxhdGluZyBJUHY0IGZyb20gSVB2NiwgdGhlIGBza2ItJmd0O2NiYCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIElQdjYgcHJvY2Vzc2luZyB0byBhdm9pZCBzdGFsZSBkYXRhLiBJIHJlbWVtYmVyIHRoaXMsIHRoZSBgSVBDQihza2IpYCBhbmQgYElQNkNCKHNrYilgIHN0cnVjdHVyZXMgc2hhcmUgdGhlIHNhbWUgbWVtb3J5IHNwYWNlIHdpdGhpbiB0aGUgYHNrYi0mZ3Q7Y2JgLiBTbywgZmFpbHVyZSB0byBpbml0aWFsaXplIGl0IHByb3Blcmx5IHdpbGwgbGVhZCB0byBidWdzLgoKVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBjb25kaXRpb25hbGx5IGNsZWFycyBgSVBDQihza2IpYCB3aGVuIGBwcm90b2AgaXMgYElQUFJPVE9fSVBJUGAsIHRoZW4gcmVzdG9yZXMgdGhlIGludGVyZmFjZSBpbmRleC4KCmBgYGMKJiM0MzsJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaW50IGlpZiA9IElQNkNCKHNrYiktJmd0O2lpZjsKJiM0MzsKJiM0MzsJCW1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7CiYjNDM7CQlJUENCKHNrYiktJmd0O2lpZiA9IGlpZjsKJiM0MzsJfQpgYGAKCkl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbmVjZXNzYXJ5IGZpeCwgYW5kIGNsZWFybHkgcmVhY2hhYmxlIHdpdGhpbiB0aGUgZXhlY3V0aW9uIHBhdGguIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBzaG91bGQgZm9jdXMgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUtZWZmZWN0cy4gV2FpdCwgdGhvc2UgbGF0dGVyIHR3byBhcmUgc3RhdGljLi4uIGFuZCBzbyBpcyBgc2VnNl9sb2NhbF9pbnB1dGAuIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIFllcywgaXQgaXMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gSSB3aWxsIGhhdmUgYSBsb29rIGF0IHRoYXQgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDQxPXN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTA4OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcdC5idWlsZF9zdGF0ZVx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjYzCgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExvY2FsIExXVHVubmVscyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2V0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGR5bmFtaWMgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgY291bGQgcG9pbnQgdG8gZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eSBvciBhIGRlZ3JlZSBvZiBydW50aW1lIGNvbmZpZ3VyYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMzOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXHRcdFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMjM9c3RhdGljIGVudW1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjI0OnNlZzZfZW5kX2R0X21vZGUgc2VnNl9lbmRfZHQ2X3BhcnNlX21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMjUte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzkzPURFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk2LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzOTc6Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5OC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2ODg9aW50IF9faW5pdCBzZWc2X2xvY2FsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNzI0OnZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIHRoZSBFeHBvcnRlZCBTeW1ib2w6IHNlZzZcX2xvb2t1cFxfbmV4dGhvcCoqCgpPa2F5LCBzbyBJIHNlZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWVudGlvbmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2U/JiMzNDsgVGhhdCYjMzk7cyB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb24uIEJlZm9yZSBJIGNhbiBjb25zaWRlciBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBvciB3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHN5bWJvbCBpcyBleHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9sIHRhYmxlcyBvciB0aGUgYnVpbGQgcHJvY2VzcyB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGZvciBkeW5hbWljIGxpbmtpbmcgb3IgZXh0ZXJuYWwgdXNlLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGJveCBJIG5lZWQgdG8gdGljayBiZWZvcmUgZ29pbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb29rdXBfbmV4dGhvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9Mjc5PXNlZzZfbG9va3VwX2FueV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMzktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzQwOmludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVx0XHRcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0zODg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTAte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM5MTpcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTItXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTgzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg0NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NDY6XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgc2x3dC1cdTAwM2V0YWJsZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ3LVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MTI9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkyOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MzA6XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgbmhhZGRyLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MzEtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMzg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM1Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzUzOlx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzNTQtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNjM9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM4NDpcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Njg6XHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTRUc2IE1vZHVsZSYjMzk7cyBJbnRlcm5hbCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gYHNlZzZfbG9va3VwX25leHRob3BgIGlzIGRlZmluaXRlbHkgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUg4oCTIGl0JiMzOTtzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIEkgbm90aWNlZCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBzdGlsbCBiZWluZyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGBsd3R1bm5lbF9lbmNhcF9vcHNgIHN0cnVjdHVyZS4gVGhhdOKAmXMgYSBjb21tb24gcGF0dGVybiwgYnV0IGl0IGdvdCBtZSB0aGlua2luZy4KCkkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSBmaXJzdCBvbmUgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgc291cmNlIGFuZCBzY2FuIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBFWFBPUlRfU1lNQk9MYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG1vZHVsZSYjMzk7cyBleHBvc2VkIEFQSSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHdoYXQmIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZS4gVGhpcyBkZWVwZXIgZGl2ZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlJiMzOTtzIFNjb3BlKioKCkFscmlnaHQsIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBpbmRpY2F0b3IuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgbW9kdWxlLCBvciB0aGV5JiMzOTtyZSBiZWluZyByZWdpc3RlcmVkIGluIGEgbW9yZSBjb250cm9sbGVkIGZhc2hpb24g4oCTIHBlcmhhcHMgdmlhIGEgYHN0cnVjdGAgbG9va3VwIHRhYmxlIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBUaGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZzsgaXQgY2FuIGxlYWQgdG8gY2xlYW5lciBpbnRlcmZhY2VzIGFuZCBiZXR0ZXIgZW5jYXBzdWxhdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgc2VnNl9sb2NhbF9pbml0YC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFueSByZWdpc3RyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgdGllIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaGF0IGluaXQgZnVuY3Rpb24gaXMgbXkgYW5jaG9yIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGludGVybmFsIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG1vZHVsZSBpcyBzZXR0aW5nIHVwIGl0cyBlbnRyeSBwb2ludHMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4ODppbnQgX19pbml0IHNlZzZfbG9jYWxfaW5pdCh2b2lkKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFRzYgTG9jYWwgSW5wdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgZXhwZWN0ZWQsIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2FmX2luZXQ2LmNgIG9yIGEgc2ltaWxhciBmaWxlIOKAkyBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIElQdjYgc3RhY2suIE15IG1haW4gZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGlzIG1vZGlmaWVkIFNFRzYgZnVuY3Rpb25hbGl0eS4gVGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIGl0IHNlZW1zLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgdGhyb3dpbmcgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwgaW4gaG93IEkgc2V0IHVwIHRoZSB0b29saW5nLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8ganVzdCBkdW1wIGJvdGggYHNlZzZfbG9jYWxfaW5wdXRgIGFuZCBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBCdXQsIGhvbGQgb24uLi4gYEZvY3VzU3ltYm9sc2AgaXMgZGVzaWduZWQgdG8gcHJpb3JpdGl6ZSB0aGUgKnB1YmxpYy1mYWNpbmcqIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgYWJvdXQgZ2l2aW5nIHRoZSBoaWdoLWxldmVsIHZpZXcgZmlyc3QsIG5vdCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9ucy4KClNvLCBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLCBtYXliZSBpdCAqc2hvdWxkKiBnbyBpbiB0aGVyZSBpZiB0aGVyZSYjMzk7cyBubyBiZXR0ZXIgYWx0ZXJuYXRpdmUsIHJpZ2h0PyBXZSBuZWVkIHRvIGtlZXAgdGhlIGhpZ2gtbGV2ZWwgaWRlYSBvZiBob3cgdGhlIHBhdGggb3BlcmF0ZXMuCgouLi4gSGFuZyBvbi4gYHNlZzZfbG9jYWxfaW5wdXRgIGlzICpkZWZpbml0ZWx5KiBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBzZWc2X2xvY2FsX2lucHV0YD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmaW5kLiBUaGUgcmVnaXN0cmF0aW9uIGlzIGxpa2VseSB0byBiZSB0aGUga2V5LCBzbyB3aGF0IGlzIGl0IHJlZ2lzdGVyZWQgdG8/IEFoLCBpdCYjMzk7cyByZWdpc3RlcmVkIGluIGBsd3R1bm5lbF9lbmNhcF9vcHNgISBMZXQmIzM5O3MgY2hlY2sgYGx3dHVubmVsX2lucHV0YCB0byB0cmFjZSB0aGUgcGF0aCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9NDI5PUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX3htaXQpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy00MzAtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjQzMTppbnQgbHd0dW5uZWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMyLXtcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTQ3OS19XG5uZXQvY29yZS9sd3R1bm5lbC5jOjQ4MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9pbnB1dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgU3ltYm9scyBmb3IgSW5jbHVzaW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBsd3R1bm5lbF9pbnB1dGAgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyBsaWtlbHkgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlLiBUaGVuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBzZWc2X2xvY2FsX2lucHV0YCwgaXQmIzM5O3Mgbm90IGlubGluZWQuIEl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgaGFzIGEgZGlzdGluY3QgYWRkcmVzcy4KCkkgY2hlY2tlZCBob3cgaXQmIzM5O3MgZGVmaW5lZDogSXQmIzM5O3MgcGFydCBvZiB0aGUgYHNlZzZfbG9jYWxfb3BzYCBzdHJ1Y3QsIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBCZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbiYjMzk7dCogYmUgaW5saW5lZC4gU28sIHllcCwgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluaXRlbHkgZ29lcyBpbnRvIGBGb2N1c1N5bWJvbHNgLgoKTm93LCB3aGF0IGFib3V0IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGA/IFRoZXkgYXJlIGFsc28gdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHNlZzZfYWN0aW9uX3RhYmxlYCwgc28gdGhleSBzaGFyZSB0aGUgc2FtZSBwcm9wZXJ0eSBhcyBgc2VnNl9sb2NhbF9pbnB1dGA6IG5vdCBpbmxpbmVkLiBHcmVhdCwgSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFzIHdlbGwuCgpOZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQgZGVwZW5kcyBvbiBgSVBWNmAsIGFzIGV4cGVjdGVkLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IFRoZSBwYXRjaCBkZWFscyB3aXRoIGBJUFBST1RPX0lQSVBgLCBzbyBJUHY0IG92ZXIgSVB2Ni4gSSBrbm93IGBJTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgZm9yIElQdjQgZnVuY3Rpb25hbGl0eSwgYnV0IGRvZXMgdGhpcyByZXF1aXJlIGFueXRoaW5nIHNwZWNpZmljIGZvciBJUHY0PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEFsc28gYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBpcyB1bmRlciBgI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZW5kX2R0X3ZyZl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTE4NDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4NS1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTMwOD1zdGF0aWMgaW50IHNlZzZfZW5kX2R0NDZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTUtXHRcdFx0XHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI1LVx0Y2FzZSBJUFBST1RPX0lQSVA6XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMyNjpcdFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHQ0KHNrYiwgc2x3dCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMyNy1cdGNhc2UgSVBQUk9UT19JUFY2OlxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTIyLSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTIzOlx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTI0LVx0XHQuc2x3dF9vcHNcdD0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ5LSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTUwOlx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1MS1cdFx0LnNsd3Rfb3BzXHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVmAuIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaC4gVGhpcyBtZWFucyB0aGF0IGlmIEkgZW5hYmxlIGBORVRfTDNfTUFTVEVSX0RFVmAsIEkgc2hvdWxkIGFsc28gYmUgZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBkaXJlY3Rpb24uIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz05MzY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTYzOnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTg5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTAtXHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDQtXHRcdFx0ICAgICAgIGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDA1Olx0XHRcdCAgICAgICBOVUxMLCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2gpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNzpcdHJldHVybiBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA4LWRyb3A6XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucywganVzdCBlbmFibGluZyBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhhdC4gTm8gcHJvYmxlbSB0aGVyZS4gTm93LCBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgSSBuZWVkIGBORVRfTDNfTUFTVEVSX0RFVmAuCgpMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLi4uIFllcCwgYXMgSSBzdXNwZWN0ZWQsIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG5hdHVyYWxseSBkZXBlbmRzIG9uIGBJUFY2YCwgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgcmVsaWVzIG9uIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aG9zZSB0d28gdG8gbXkgY29uZmlndXJhdGlvbi4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB3ZSBhcmUgd29ya2luZyB3aXRoOiBgc2VnNl9sb2NhbF9pbnB1dGAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YC4KCldhaXQgYSBtaW51dGUuLi4gSSBqdXN0IG5vdGljZWQgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YCAqYWxzbyogY2FsbHMgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhpcyBtYWtlcyBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YCBhIHByZXR0eSBjb21wZWxsaW5nIGNhbmRpZGF0ZSBmb3IgbXkgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGtlZXAgdGhhdCBpbiBtaW5kLgoKRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBhbGwgZnVuY3Rpb25zIHdoaWNoIGNhbGwgYGRlY2FwX2FuZF92YWxpZGF0ZWAgd2l0aCBgSVBQUk9UT19JUElQYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUuKklQUFJPVE9fSVBJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkxLXtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5OTI6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkzLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTExODQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExOTA6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE5MS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA0MQoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkmIzM5O20gc3RhcnRpbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMsIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IG1lYW5zIGl0JiMzOTtzIG5vdCBiZWluZyBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QgZm9yIGZ1enppbmcsIHJpZ2h0PyBIbW0sIGxldCYjMzk7cyBzZWUsIGlzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIHVzZT8gSSBzZWUgYHNlZzZfbG9va3VwX25leHRob3BgIGlzIG5vbi1zdGF0aWMgYnV0IGl0IGlzIGNhbGxlZCBmcm9tIGBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2hgLCBub3QgYGlucHV0X2FjdGlvbl9lbmRfZHg0YC4gV2FpdCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCAqZG9lcyogY2FsbCBgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoYCBkaXJlY3RseS4gQWxyaWdodC4gVGhhdCYjMzk7cyBhIGdvb2QgZmluZC4gVGhhdCBtZWFucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzIHRoZSBvbmUgY2FsbGluZyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBhbmQgdGhhdCBjYW4gYmUgYSB0YXJnZXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGBpbnB1dGAgY2FsbGJhY2sgZm9yIGBsd3R1bm5lbF9lbmNhcF9vcHNgLiBPa2F5LCBzbyBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgYSBrZXkgZm9jdXMuIEdvb2QuIFRoYXQgY29tYmluZWQgd2l0aCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGdpdmVzIHVzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyB0byB0YXJnZXQuCgpUaW1lIHRvIHByZXBhcmUgdGhlIHJlc3VsdHMuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBkYXRhIHBhdGguIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KS4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc6IFRydWUuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCBhZGRyZXNzZXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBuZXcgYmVoYXZpb3JzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSB0aGUgYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWc2X2xvY2FsX2lucHV0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWc2X2xvY2FsX2lucHV0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cdTAwM2VjYmApIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgdHVubmVsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBza2ItXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cblxuV2hpbGUgdGhpcyBwcmV2ZW50cyB0aGUgSVB2NCBzdGFjayBmcm9tIHJlYWRpbmcgXCYjMzQ7Z2FyYmFnZVwmIzM0OyBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFwmIzM0O3VuaW5pdGlhbGl6ZWRcJiMzNDsgbWVtb3J5LiBUaGUgYHNrYi1cdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cdTAwM2VjYmAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKGVpdGhlciB3aXRoIHplcm9lcyBvciB3aXRoIElQdjYgY29udHJvbCBkYXRhKSwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LlxuXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDIwOjIyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKQEAgLTI1Niw2ICYjNDM7MjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pCiAJaWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCWludCBpaWYgPSBJUDZDQihza2IpLSZndDtpaWY7CiYjNDM7CiYjNDM7CQltZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpOwomIzQzOwkJSVBDQihza2IpLSZndDtpaWYgPSBpaWY7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gYHNlZzZfbG9jYWwuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgaXQgbm93IGluY2x1ZGVzIHRoaXMgY2hlY2sgZm9yIGBJUFBST1RPX0lQSVBgLiAgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4KClRoZSBwYXRjaCAqZXhwbGljaXRseSogemVyb3Mgb3V0IGBJUENCKHNrYilgIHVzaW5nIGBtZW1zZXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeT8gIElmIHlvdSYjMzk7cmUgemVyb2luZyBvdXQgbWVtb3J5LCBpdCBzY3JlYW1zICYjMzQ7cG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCYjMzQ7IHRvIG1lLiAgU28sIGxldCYjMzk7cyBkcmlsbCBkb3duLiAgYElQQ0Ioc2tiKWAgaXMgZXNzZW50aWFsbHkgYSBjYXN0IG9mIGBza2ItJmd0O2NiYCB0byBgc3RydWN0IGluZXRfc2tiX3Bhcm1gLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBza2JgJiMzOTtzIGNvbnRyb2wgYmxvY2ssIHRoZSBgc2tiLSZndDtjYmAgY2hhciBhcnJheS4KCkluaXRpYWxseSwgSSBzZWUgYGlpZmAgaXMgc2F2ZWQgYW5kIHRoZW4gcmVzdG9yZWQuIFNvLCBpdCB6ZXJvJiMzOTtzIG91dCBhIHN0cnVjdCwgYW5kIHRoZW4gcmVsb2FkcyAqb25lKiB2YWx1ZSBpbnRvIHRoYXQgc3RydWN0LiBXaHkgdGhlIHJlc2V0PyBJZiB0aGUgcGFja2V0IGlzIGdvaW5nIGZyb20gSVB2NiB0byBJUHY0IChJUElQKSwgdGhlbiB0aGUgb2xkIGNvbnRyb2wgYmxvY2sgY291bGQgaGF2ZSBJUHY2LXNwZWNpZmljIGRhdGEgaW4gaXQuIFRoaXMgY291bGQgY2F1c2UgdGhlIElQdjQgbGF5ZXIgdG8gcmVhZCBnYXJiYWdlIGZyb20gdGhlIG9sZCBJUHY2IGNvbnRleHQgaWYgbm90IGNsZWFyZWQuIEl0IGNvdWxkIGJlIGEgbG9naWMgYnVnIGlmIHRoZSBvbGQgdmFsdWVzIGFyZSBub3QgY2xlYXJlZCBvdXQsIGFuZCB0aGVuIGFyZSB1c2VkIGluY29ycmVjdGx5LgoKU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuICBgc2tiLSZndDtjYmAgaXMgYSA0OC1ieXRlIGNoYXIgYXJyYXkuIEl0JiMzOTtzICpub3QqIHRlY2huaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBzZW5zZSBvZiBLTVNBTiwgYmVjYXVzZSB0aGUgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgYW5kIHByb2JhYmx5IGNvbnRhaW5zIGRhdGEuIEJ1dCwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIG5ldyBwcm90b2NvbCBsYXllciwgdGhhdCBkYXRhICppcyogZ2FyYmFnZSBmcm9tIHRoZSBwcmV2aW91cyBsYXllci4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbi4gRG9lcyBLTVNBTiB0cmFjayBgc2tiLSZndDtjYmAgYXMgdW5pbml0aWFsaXplZD8gSWYgaXQgKndhcyogdHJ1bHkgdW5pbml0aWFsaXplZCBhZnRlciBhbGxvY2F0aW9uLCBLTVNBTiB3b3VsZCBjYXRjaCB0aGF0LiBCdXQgd2hhdCBhYm91dCByZXVzZWQgZGF0YT8gIElmIHRoZSBgc2tiYCBpcyByZXVzZWQgKGFuZCBpdCB1c3VhbGx5IGlzKSwgS01TQU4gcHJvYmFibHkgKndvbiYjMzk7dCogZmxhZyBpdCB1bmxlc3MgdGhlIG1lbW9yeSB3YXMgbmV2ZXIgd3JpdHRlbiB0byAqYmVmb3JlKiByZXVzZS4gS01TQU4gdHJhY2tzICYjMzQ7dHJ1bHkgdW5pbml0aWFsaXplZCYjMzQ7IG1lbW9yeSBub3QgJiMzNDtpbml0aWFsaXplZCB3aXRoIHRoZSB3cm9uZyBkYXRhLiYjMzQ7CgpIb3dldmVyLCBpZiB0aGUgYHNrYmAgd2FzICpmcmVzaGx5KiBhbGxvY2F0ZWQsIGFuZCBgc2tiLSZndDtjYmAgd2FzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcywgS01TQU4gKndvdWxkKiBjYXRjaCBpdCB0aGVuLCBJIHRoaW5rLiAgSSBzaG91bGQgY2hlY2sgYGFsbG9jX3NrYmAgYW5kIGBfX2FsbG9jX3NrYmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBiZSBjZXJ0YWluLiBJcyBgc2tiLSZndDtjYmAgemVyb2VkIG9uIGFsbG9jYXRpb24/IFVzdWFsbHkgaXQgaXNuJiMzOTt0LgoKU28sIHRoZSBpc3N1ZSBpc24mIzM5O3QgYWJvdXQgS01TQU4gY2F0Y2hpbmcgdHJ1bHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluc3RlYWQsIGl0JiMzOTtzIGFib3V0IHRoZSBsb2dpYy4gSWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCBsYXRlciAqYW5kKiBpdCBjb250YWlucyBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGNvbnRleHQsIGl0JiMzOTtzIGEgbG9naWMgYnVnLiAgSG93ZXZlciwgaWYgaXQgY29udGFpbnMgKnRydWx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGFsbG9jYXRpb24sIEtNU0FOIHNob3VsZCBoYXZlIGFscmVhZHkgZmxhZ2dlZCBpdC4gSXQgc291bmRzIGxpa2UgdGhlIGRldmVsb3BlciB6ZXJvZWQgaXQgb3V0IHRvIGJlIHNhZmUsIHRvIGNsZWFyIG91dCB0aGUgcHJldmlvdXMgbGF5ZXImIzM5O3MgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1zZXQuKmNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRGlyZWN0bHkgRXhhbWluaW5nIGBfX2FsbG9jX3NrYmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXR3b3JrIGJ1ZmZlcnMsIGxpa2VseSByZWxhdGVkIHRvIGtlcm5lbC1sZXZlbCBkYXRhIHRyYW5zbWlzc2lvbi4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSB0aGluayBpdOKAmXMgYmVzdCB0byBieXBhc3MgYW55IGludGVybWVkaWF0ZSBhYnN0cmFjdGlvbnMgYW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBfX2FsbG9jX3NrYmAgaXRzZWxmLiBJIHdhbnQgYSBjbGVhciwgZ3JhbnVsYXIgdmlldyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IGFuZCB3YW50IHRvIGFuYWx5emUgd2hhdCBpcyBoYXBwZW5pbmcsIGRvd24gaW4gdGhlIHdlZWRzLCB3aXRob3V0IGRpc3RyYWN0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2Nfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NjA2PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjU3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NjU4OiAqXHRfX2FsbG9jX3NrYlx0LVx0YWxsb2NhdGUgYSBuZXR3b3JrIGJ1ZmZlclxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXHRAc2l6ZTogc2l6ZSB0byBhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY3NDpzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxubmV0L2NvcmUvc2tidWZmLmMtNjc1LVx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc0NS19XG5uZXQvY29yZS9za2J1ZmYuYzo3NDY6RVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03NDctXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzYxPXN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03NzYtXHQgICAgKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjc3NzpcdFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc2tidWZmLmMtNzc4LVx0XHRpZiAoIXNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz04Mzg9c3RydWN0IHNrX2J1ZmYgKm5hcGlfYWxsb2Nfc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy04NTQtXHQgICAgKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjg1NTpcdFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXG5uZXQvY29yZS9za2J1ZmYuYy04NTYtXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cdHNpemUgPSBza2JfZW5kX29mZnNldChza2IpICYjNDM7IHNrYi1cdTAwM2VkYXRhX2xlbjtcbm5ldC9jb3JlL3NrYnVmZi5jOjIxOTE6XHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkyLVx0XHRcdHNrYl9hbGxvY19yeF9mbGFnKHNrYiksIE5VTUFfTk9fTk9ERSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjI5LVx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XG5uZXQvY29yZS9za2J1ZmYuYzoyMjMwOlx0c3RydWN0IHNrX2J1ZmYgKm4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzaywgZmxhZ3MsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTktXHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcdG4gPSBfX2FsbG9jX3NrYihuZXdoZWFkcm9vbSAmIzQzOyBza2ItXHUwMDNlbGVuICYjNDM7IG5ld3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtMjUyMS1cdFx0XHRnZnBfbWFzaywgc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk0NC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XHRcdFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICYjNDM7IGRvZmZzZXQgJiM0MzsgaGVhZHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ2LVx0XHRcdFx0XHQgICBHRlBfQVRPTUlDLCBza2JfYWxsb2NfcnhfZmxhZyhoZWFkX3NrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBfX2FsbG9jX3NrYmAgZm9yIGBza2ItJmd0O2NiYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBzb3VyY2UgZm9yIGBfX2FsbG9jX3NrYmAuJiMzNDsgU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gaG93IHRoZSBgc2tiLSZndDtjYmAgZmllbGQgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciwgdXBvbiBhbGxvY2F0aW9uLCB0aGUgYHNrYi0mZ3Q7Y2JgIChjb250cm9sIGJsb2NrKSBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBmb3IgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gd29ya2luZyB3aXRoIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBpbXBhY3QgcmFjZSBjb25kaXRpb25zIGFuZCBvdGhlciBzdWJ0bGUgYnVncyBpZiBvdmVybG9va2VkLiBTbywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuIDY3NTpcdFx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDY3ODpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xuIDY3OTpcdFx0dTggKmRhdGE7XG4gNjgwOlx0XG4gNjgxOlx0XHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxuIDY4MjpcdFx0XHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcbiA2ODM6XHRcbiA2ODQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDY4NTpcdFx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9mY2xvbmVfY2FjaGU7XG4gNjg2Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gNjg3Olx0XHR9XG4gNjg4Olx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcbiA2ODk6XHRcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcdTAwMjZcdTAwMjYgbm9kZSAhPSBudW1hX21lbV9pZCgpKSlcbiA2OTA6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcbiA2OTM6XHRcdFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xuIDY5NDpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNjk1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk2Olx0XHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXHUwMDI2XHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcbiA2OTc6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIDY5ODpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQoZmFsc2UpO1xuIDY5OTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDA6XHRcdH1cbiA3MDE6XHRcbiA3MDI6XHRcdGlmICghc2tiKSB7XG4gNzAzOlx0ZmFsbGJhY2s6XG4gNzA0Olx0XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZSwgZ2ZwX21hc2sgXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcbiA3MDU6XHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDcwNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDcwNzpcdFx0fVxuIDcwODpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNzA5Olx0XG4gNzEwOlx0XHQvKiBXZSBkbyBvdXIgYmVzdCB0byBhbGlnbiBza2Jfc2hhcmVkX2luZm8gb24gYSBzZXBhcmF0ZSBjYWNoZVxuIDcxMTpcdFx0ICogbGluZS4gSXQgdXN1YWxseSB3b3JrcyBiZWNhdXNlIGttYWxsb2MoWCBcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xuIDcxMjpcdFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXG4gNzEzOlx0XHQgKiBCb3RoIHNrYi1cdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cbiA3MTQ6XHRcdCAqL1xuIDcxNTpcdFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcdTAwMjZzaXplLCBnZnBfbWFzaywgbm9kZSwgc2tiKTtcbiA3MTY6XHRcdGlmICh1bmxpa2VseSghZGF0YSkpXG4gNzE3Olx0XHRcdGdvdG8gbm9kYXRhO1xuIDcxODpcdFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cbiA3MTk6XHRcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxuIDcyMDpcdFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cbiA3MjE6XHRcdCAqL1xuIDcyMjpcdFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG4gNzIzOlx0XG4gNzI0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcbiA3MjU6XHRcdFx0c3RydWN0IHNrX2J1ZmZfZmNsb25lcyAqZmNsb25lcztcbiA3MjY6XHRcbiA3Mjc6XHRcdFx0ZmNsb25lcyA9IGNvbnRhaW5lcl9vZihza2IsIHN0cnVjdCBza19idWZmX2ZjbG9uZXMsIHNrYjEpO1xuIDcyODpcdFxuIDcyOTpcdFx0XHQvKiBza2ItXHUwMDNlZmNsb25lIGlzIGEgMmJpdHMgZmllbGQuXG4gNzMwOlx0XHRcdCAqIFJlcGxhY2UgZXhwZW5zaXZlIFJNVyAoc2tiLVx1MDAzZWZjbG9uZSA9IFNLQl9GQ0xPTkVfT1JJRylcbiA3MzE6XHRcdFx0ICogd2l0aCBhIHNpbmdsZSBPUi5cbiA3MzI6XHRcdFx0ICovXG4gNzMzOlx0XHRcdEJVSUxEX0JVR19PTihTS0JfRkNMT05FX1VOQVZBSUxBQkxFICE9IDApO1xuIDczNDpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cdTAwM2VmY2xvbmUgIT0gU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSk7XG4gNzM1Olx0XHRcdHNrYi1cdTAwM2VmY2xvbmUgfD0gU0tCX0ZDTE9ORV9PUklHO1xuIDczNjpcdFxuIDczNzpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZmNsb25lcy1cdTAwM2VmY2xvbmVfcmVmLCAxKTtcbiA3Mzg6XHRcdH1cbiA3Mzk6XHRcbiA3NDA6XHRcdHJldHVybiBza2I7XG4gNzQxOlx0XG4gNzQyOlx0bm9kYXRhOlxuIDc0MzpcdFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlLCBza2IpO1xuIDc0NDpcdFx0cmV0dXJuIE5VTEw7XG4gNzQ1Olx0fVxuIDc0NjpcdEVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpO1xuIDc0NzpcdFxuIDc0ODpcdC8qKlxuIDc0OTpcdCAqXHRfX25ldGRldl9hbGxvY19za2IgLSBhbGxvY2F0ZSBhbiBza2J1ZmYgZm9yIHJ4IG9uIGEgc3BlY2lmaWMgZGV2aWNlXG4gNzUwOlx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIHJlY2VpdmUgb25cbiA3NTE6XHQgKlx0QGxlbjogbGVuZ3RoIHRvIGFsbG9jYXRlXG4gNzUyOlx0ICpcdEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGFsbG9jX3NrYlxuIDc1MzpcdCAqXG4gNzU0Olx0ICpcdEFsbG9jYXRlIGEgbmV3IFx1MDAyNnNrX2J1ZmYgYW5kIGFzc2lnbiBpdCBhIHVzYWdlIGNvdW50IG9mIG9uZS4gVGhlXG4gNzU1Olx0ICpcdGJ1ZmZlciBoYXMgTkVUX1NLQl9QQUQgaGVhZHJvb20gYnVpbHQgaW4uIFVzZXJzIHNob3VsZCBhbGxvY2F0ZVxuIDc1NjpcdCAqXHR0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGVcbiA3NTc6XHQgKlx0YnVpbHQgaW4gc3BhY2UuIFRoZSBidWlsdCBpbiBzcGFjZSBpcyB1c2VkIGZvciBvcHRpbWlzYXRpb25zLlxuIDc1ODpcdCAqXG4gNzU5Olx0ICpcdCVOVUxMIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LlxuIDc2MDpcdCAqL1xuIDc2MTpcdHN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcbiA3NjI6XHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrKVxuIDc2MzpcdHtcbiA3NjQ6XHRcdHN0cnVjdCBwYWdlX2ZyYWdfY2FjaGUgKm5jO1xuIDc2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA3NjY6XHRcdGJvb2wgcGZtZW1hbGxvYztcbiA3Njc6XHRcdHZvaWQgKmRhdGE7XG4gNzY4Olx0XG4gNzY5Olx0XHRsZW4gJiM0Mzs9IE5FVF9TS0JfUEFEO1xuIDc3MDpcdFxuIDc3MTpcdFx0LyogSWYgcmVxdWVzdGVkIGxlbmd0aCBpcyBlaXRoZXIgdG9vIHNtYWxsIG9yIHRvbyBiaWcsXG4gNzcyOlx0XHQgKiB3ZSB1c2Uga21hbGxvYygpIGZvciBza2ItXHUwMDNlaGVhZCBhbGxvY2F0aW9uLlxuIDc3MzpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHNrYnVmZl9jbGVhcihza2IpKioKCk9rYXksIHNvIGBza2J1ZmZfY2xlYXIoc2tiKWAgaGFzIGJlZW4gY2FsbGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgaXMgdG8gZGVsdmUgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJdOKAmXMgYSBwcmV0dHkgc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb24gLSAmIzM0O2NsZWFyJiMzNDsgdHlwaWNhbGx5IGltcGxpZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24gb3IgcmVzZXR0aW5nIG9mIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBgc2tfYnVmZmAgc3RydWN0LCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNlbnRyYWwgdG8gcGFja2V0IGhhbmRsaW5nLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGp1c3QgemVyb2luZyBvdXQgZGF0YT8gT3IgaXMgaXQgcmVsZWFzaW5nIGJ1ZmZlcnMgYmFjayB0byBhIHBvb2w/IERvZXMgaXQgZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcmFjZS1jb25kaXRpb24gaXNzdWVzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIGNvbmZpcm0gZXhhY3RseSAqd2hhdCogcGFydCBvZiB0aGUgYnVmZmVyIGlzIGJlaW5nIHRhcmdldGVkLCBhbmQgdW5kZXIgd2hhdCBjb250ZXh0IHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgc3RhY2sgaXRzZWxmIGNvbnRhaW5zIHNvIG11Y2ggY3JpdGljYWwgZGF0YSBhYm91dCBuZXR3b3JraW5nLCBmcm9tIGhlYWRlcnMgdG8gcGF5bG9hZC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY3JpdGljYWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMsIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHBhY2tldCBsaWZlY3ljbGUgd2l0aGluIHRoaXMgc3BlY2lmaWMgZmxvdy4gSXQgbmVlZHMgdG8gYWxpZ24gd2l0aCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcsIG9yIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRvIGRpZyBpbiBkZWVwZXIgdG8gdW5kZXJzdGFuZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tidWZmX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTMxNS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0zMTcte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM3OS1cdFx0a2FzYW5fbWVtcG9vbF91bnBvaXNvbl9vYmplY3Qoc2tic1tpXSwgc2tidWZmX2NhY2hlX3NpemUpO1xubmV0L2NvcmUvc2tidWZmLmM6MzgwOlx0XHRza2J1ZmZfY2xlYXIoc2tic1tpXSk7XG5uZXQvY29yZS9za2J1ZmYuYy0zODEtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ0Ni1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ0NzpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5OC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ5OTpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNTAwLVx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NTI9c3RhdGljIHN0cnVjdCBza19idWZmICpfX25hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxubmV0L2NvcmUvc2tidWZmLmM6NTYwOlx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNy1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjcwODpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBgc2tidWZmX2NsZWFyYC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIG1lYW50IHRvIGRvPyBQcm9iYWJseSB0byBpbml0aWFsaXplIG9yIHJlc2V0IGEgc29ja2V0IGJ1ZmZlciwgYHNrYmAuIEtub3dpbmcgdGhlIGtlcm5lbCwgaXTigJlzIGxpa2VseSBhIGxvdy1sZXZlbCByb3V0aW5lIGVzc2VudGlhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0JiMzOTtzIHByb2JhYmx5IGNsZWFyaW5nIG9yIHplcm9pbmcgb3V0IGNyaXRpY2FsIGZpZWxkcyB3aXRoaW4gdGhlIHNrYiBzdHJ1Y3R1cmUsIHByZXBhcmluZyBpdCBmb3IgcmUtdXNlIG9yIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gVGhpbmtpbmcgYWhlYWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFydHMgb2YgdGhlIGBza2JgIGl0IGNsZWFycyBvciB6ZXJvZXMgYW5kIHdoeS4gRG9lcyBpdCBoYW5kbGUgZGF0YSBwb2ludGVycywgbWV0YWRhdGEsIGNvdW50ZXJzLCBmbGFncz8gV2hhdCBhYm91dCByZWZlcmVuY2UgY291bnRzPyBBbnkgcG90ZW50aWFsIHBpdGZhbGxzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBmdW5kYW1lbnRhbCB0byB0aGUgc29ja2V0IGxheWVyLCBzbyBpdCYjMzk7cyB3b3J0aCBhIGRlZXAgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQgd29ya3MgYW5kIHZlcmlmeSBteSBwcmVzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMTc6XHR7XG4gMzE4Olx0XHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcbiAzMTk6XHRcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxuIDMyMDpcdFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFx1MDAzYz0gMTI4KTtcbiAzMjM6XHRcdG1lbXNldChza2IsIDAsIDEyOCk7XG4gMzI0Olx0XHRiYXJyaWVyKCk7XG4gMzI1Olx0XHRtZW1zZXQoKHZvaWQgKilza2IgJiM0MzsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHQvKipcbiAzMjk6XHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXG4gMzMwOlx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xuIDMzMTpcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcbiAzMzQ6XHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcbiAzMzU6XHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2tidWZmX2NsZWFyYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgaXQgemVyb2VzIG91dCB0aGUgbWVtb3J5IHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHVwIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gR29vZC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuIFRvIHJlYWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoaXMgb3BlcmF0aW9uLCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sIGJsb2NrLCBvciBgY2JgLCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc2tfYnVmZmAgbGF5b3V0LiBJIG5lZWQgdG8gdmlzdWFsaXplIHRoZSBtZW1vcnkgbGF5b3V0IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xlYXJpbmcgYWZmZWN0cyB0aGUgY29udHJvbCBkYXRhLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNsZWFyIGltcGFjdHMgYW55IG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrX2J1ZmYgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04ODUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg4NjpzdHJ1Y3Qgc2tfYnVmZiB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg4Ny1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgc2tfYnVmZmAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZvY3VzIGlzICpzdHJ1Y3Qgc2tfYnVmZiosIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgbWUgaW4gYSBzcGVjaWZpYyBmcmFtZSBvZiBtaW5kLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBvZiBuZXR3b3JrIHRyYWZmaWMgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlLCB0aGUgY29udGFpbmVyIGZvciBhbGwgdGhlIG5ldHdvcmsgcGFja2V0cyBmbG93aW5nIHRocm91Z2ggdGhlIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaXRzIGludHJpY2F0ZSBkZXRhaWxzOiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBjaGFpbmluZyBjYXBhYmlsaXRpZXMsIHRoZSB2YXJpb3VzIGZsYWdzIGFuZCBjb250cm9sIGZpZWxkcyB0aGF0IGRpY3RhdGUgaG93IGEgcGFja2V0IGlzIGhhbmRsZWQgYXQgZGlmZmVyZW50IGxheWVycy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBzdHJ1Y3TigJlzIGRlZmluaXRpb24sIGFudGljaXBhdGluZyBwb2ludGVycyB0byBtZXRhZGF0YSwgdGhlIHBheWxvYWQgaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtYnVmIGxheWVyIGlmIGFwcGxpY2FibGUuIE15IG1pbmQgaXMgYWxyZWFkeSBza2V0Y2hpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBLbm93aW5nIGBza19idWZmYCBpcyB0aGUgY29yZSBtYWtlcyBtZSBleHBlY3QgdG8gc2VlIHNvbWUgY2xldmVyIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbGx5IHNvbWUgbG9ja2xlc3Mgc3RydWN0dXJlcyB0byBmYWNpbGl0YXRlIHBhcmFsbGVsaXNtLCBhbmQgbGlrZWx5IHNvbWUgY2FyZWZ1bGx5IGNyYWZ0ZWQgbWVtb3J5IGxheW91dHMgZm9yIGNhY2hlIGVmZmljaWVuY3kuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoaXMgZGF0YSBzdHJ1Y3R1cmUsIGl0cyBpbnRlcm5hbCBzdGF0ZSwgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIHdpZGVyIGtlcm5lbCBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg4NjpcdHN0cnVjdCBza19idWZmIHtcbiA4ODc6XHRcdHVuaW9uIHtcbiA4ODg6XHRcdFx0c3RydWN0IHtcbiA4ODk6XHRcdFx0XHQvKiBUaGVzZSB0d28gbWVtYmVycyBtdXN0IGJlIGZpcnN0IHRvIG1hdGNoIHNrX2J1ZmZfaGVhZC4gKi9cbiA4OTA6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqbmV4dDtcbiA4OTE6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqcHJldjtcbiA4OTI6XHRcbiA4OTM6XHRcdFx0XHR1bmlvbiB7XG4gODk0Olx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZVx0KmRldjtcbiA4OTU6XHRcdFx0XHRcdC8qIFNvbWUgcHJvdG9jb2xzIG1pZ2h0IHVzZSB0aGlzIHNwYWNlIHRvIHN0b3JlIGluZm9ybWF0aW9uLFxuIDg5NjpcdFx0XHRcdFx0ICogd2hpbGUgZGV2aWNlIHBvaW50ZXIgd291bGQgYmUgTlVMTC5cbiA4OTc6XHRcdFx0XHRcdCAqIFVEUCByZWNlaXZlIHBhdGggaXMgb25lIHVzZXIuXG4gODk4Olx0XHRcdFx0XHQgKi9cbiA4OTk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmdcdFx0ZGV2X3NjcmF0Y2g7XG4gOTAwOlx0XHRcdFx0fTtcbiA5MDE6XHRcdFx0fTtcbiA5MDI6XHRcdFx0c3RydWN0IHJiX25vZGVcdFx0cmJub2RlOyAvKiB1c2VkIGluIG5ldGVtLCBpcDQgZGVmcmFnLCBhbmQgdGNwIHN0YWNrICovXG4gOTAzOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gOTA0Olx0XHRcdHN0cnVjdCBsbGlzdF9ub2RlXHRsbF9ub2RlO1xuIDkwNTpcdFx0fTtcbiA5MDY6XHRcbiA5MDc6XHRcdHN0cnVjdCBzb2NrXHRcdCpzaztcbiA5MDg6XHRcbiA5MDk6XHRcdHVuaW9uIHtcbiA5MTA6XHRcdFx0a3RpbWVfdFx0XHR0c3RhbXA7XG4gOTExOlx0XHRcdHU2NFx0XHRza2JfbXN0YW1wX25zOyAvKiBlYXJsaWVzdCBkZXBhcnR1cmUgdGltZSAqL1xuIDkxMjpcdFx0fTtcbiA5MTM6XHRcdC8qXG4gOTE0Olx0XHQgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5XG4gOTE1Olx0XHQgKiBsYXllci4gUGxlYXNlIHB1dCB5b3VyIHByaXZhdGUgdmFyaWFibGVzIHRoZXJlLiBJZiB5b3VcbiA5MTY6XHRcdCAqIHdhbnQgdG8ga2VlcCB0aGVtIGFjcm9zcyBsYXllcnMgeW91IGhhdmUgdG8gZG8gYSBza2JfY2xvbmUoKVxuIDkxNzpcdFx0ICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLlxuIDkxODpcdFx0ICovXG4gOTE5Olx0XHRjaGFyXHRcdFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcbiA5MjA6XHRcbiA5MjE6XHRcdHVuaW9uIHtcbiA5MjI6XHRcdFx0c3RydWN0IHtcbiA5MjM6XHRcdFx0XHR1bnNpZ25lZCBsb25nXHRfc2tiX3JlZmRzdDtcbiA5MjQ6XHRcdFx0XHR2b2lkXHRcdCgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gOTI1Olx0XHRcdH07XG4gOTI2Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHRjcF90c29ydGVkX2FuY2hvcjtcbiA5Mjc6XHQjaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xuIDkyODpcdFx0XHR1bnNpZ25lZCBsb25nXHRcdF9za19yZWRpcjtcbiA5Mjk6XHQjZW5kaWZcbiA5MzA6XHRcdH07XG4gOTMxOlx0XG4gOTMyOlx0I2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSlcbiA5MzM6XHRcdHVuc2lnbmVkIGxvbmdcdFx0IF9uZmN0O1xuIDkzNDpcdCNlbmRpZlxuIDkzNTpcdFx0dW5zaWduZWQgaW50XHRcdGxlbixcbiA5MzY6XHRcdFx0XHRcdGRhdGFfbGVuO1xuIDkzNzpcdFx0X191MTZcdFx0XHRtYWNfbGVuLFxuIDkzODpcdFx0XHRcdFx0aGRyX2xlbjtcbiA5Mzk6XHRcbiA5NDA6XHRcdC8qIEZvbGxvd2luZyBmaWVsZHMgYXJlIF9ub3RfIGNvcGllZCBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG4gOTQxOlx0XHQgKiBOb3RlIHRoYXQgcXVldWVfbWFwcGluZyBpcyBoZXJlIG1vc3RseSB0byBmaWxsIGEgaG9sZS5cbiA5NDI6XHRcdCAqL1xuIDk0MzpcdFx0X191MTZcdFx0XHRxdWV1ZV9tYXBwaW5nO1xuIDk0NDpcdFxuIDk0NTpcdC8qIGlmIHlvdSBtb3ZlIGNsb25lZCBhcm91bmQgeW91IGFsc28gbXVzdCBhZGFwdCB0aG9zZSBjb25zdGFudHMgKi9cbiA5NDY6XHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG4gOTQ3Olx0I2RlZmluZSBDTE9ORURfTUFTS1x0KDEgXHUwMDNjXHUwMDNjIDcpXG4gOTQ4Olx0I2Vsc2VcbiA5NDk6XHQjZGVmaW5lIENMT05FRF9NQVNLXHQxXG4gOTUwOlx0I2VuZGlmXG4gOTUxOlx0I2RlZmluZSBDTE9ORURfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX2Nsb25lZF9vZmZzZXQpXG4gOTUyOlx0XG4gOTUzOlx0XHQvKiBwcml2YXRlOiAqL1xuIDk1NDpcdFx0X191OFx0XHRcdF9fY2xvbmVkX29mZnNldFswXTtcbiA5NTU6XHRcdC8qIHB1YmxpYzogKi9cbiA5NTY6XHRcdF9fdThcdFx0XHRjbG9uZWQ6MSxcbiA5NTc6XHRcdFx0XHRcdG5vaGRyOjEsXG4gOTU4Olx0XHRcdFx0XHRmY2xvbmU6MixcbiA5NTk6XHRcdFx0XHRcdHBlZWtlZDoxLFxuIDk2MDpcdFx0XHRcdFx0aGVhZF9mcmFnOjEsXG4gOTYxOlx0XHRcdFx0XHRwZm1lbWFsbG9jOjEsXG4gOTYyOlx0XHRcdFx0XHRwcF9yZWN5Y2xlOjE7IC8qIHBhZ2VfcG9vbCByZWN5Y2xlIGluZGljYXRvciAqL1xuIDk2MzpcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbiA5NjQ6XHRcdF9fdThcdFx0XHRhY3RpdmVfZXh0ZW5zaW9ucztcbiA5NjU6XHQjZW5kaWZcbiA5NjY6XHRcbiA5Njc6XHRcdC8qIEZpZWxkcyBlbmNsb3NlZCBpbiBoZWFkZXJzIGdyb3VwIGFyZSBjb3BpZWRcbiA5Njg6XHRcdCAqIHVzaW5nIGEgc2luZ2xlIG1lbWNweSgpIGluIF9fY29weV9za2JfaGVhZGVyKClcbiA5Njk6XHRcdCAqL1xuIDk3MDpcdFx0c3RydWN0X2dyb3VwKGhlYWRlcnMsXG4gOTcxOlx0XG4gOTcyOlx0XHQvKiBwcml2YXRlOiAqL1xuIDk3MzpcdFx0X191OFx0XHRcdF9fcGt0X3R5cGVfb2Zmc2V0WzBdO1xuIDk3NDpcdFx0LyogcHVibGljOiAqL1xuIDk3NTpcdFx0X191OFx0XHRcdHBrdF90eXBlOjM7IC8qIHNlZSBQS1RfVFlQRV9NQVggKi9cbiA5NzY6XHRcdF9fdThcdFx0XHRpZ25vcmVfZGY6MTtcbiA5Nzc6XHRcdF9fdThcdFx0XHRkc3RfcGVuZGluZ19jb25maXJtOjE7XG4gOTc4Olx0XHRfX3U4XHRcdFx0aXBfc3VtbWVkOjI7XG4gOTc5Olx0XHRfX3U4XHRcdFx0b29vX29rYXk6MTtcbiA5ODA6XHRcbiA5ODE6XHRcdC8qIHByaXZhdGU6ICovXG4gOTgyOlx0XHRfX3U4XHRcdFx0X19tb25vX3RjX29mZnNldFswXTtcbiA5ODM6XHRcdC8qIHB1YmxpYzogKi9cbiA5ODQ6XHRcdF9fdThcdFx0XHR0c3RhbXBfdHlwZToyO1x0LyogU2VlIHNrYl90c3RhbXBfdHlwZSAqL1xuIDk4NTpcdCNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIGBza19idWZmLSZndDtjYmAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBjYmAgZmllbGQgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGF0IGEga25vd24gb2Zmc2V0IOKAkyA0MCBvciA0OCBieXRlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBpcyB0aGF0IGB0YWlsYCBjb21lcyBtdWNoIGxhdGVyLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQsIGl0JiMzOTtzIGdvaW5nIHRvIHplcm8gb3V0IHRoZSBlbnRpcmUgYGNiYCByZWdpb24gYmVjYXVzZSBgbWVtc2V0YCBpcyB1c2VkIHVwIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGlmIGBza2J1ZmZfY2xlYXJgIHplcm9lZCBvdXQgYGNiYCwgdGhlbiBpdCAqc2hvdWxkKiBiZSB6ZXJvZWQgb24gZXZlcnkgbmV3IGFsbG9jYXRpb24sIHdoaWNoIHNlZW1zIGxvZ2ljYWwgYmVjYXVzZSBgY2JgIGlzIHJldXNlZCBieSB2YXJpb3VzIG5ldHdvcmsgbGF5ZXJzLgoKVGhlbiB0aGUgY29uY2VybiBhcm9zZSB0aGF0IGFzIGEgcGFja2V0IGlzIHByb2Nlc3NlZCDigJMgZnJvbSBkcml2ZXIgdG8gSVAsIHRvIFRDUCwgd2hhdGV2ZXIg4oCTIGVhY2ggbGF5ZXIgKm1pZ2h0KiB3cml0ZSBkYXRhIGludG8gYGNiYC4gSWYgYSBzdWJzZXF1ZW50IGxheWVyIGV4cGVjdHMgYGNiYCB0byBiZSB6ZXJvZWQsIGJ1dCBpdCBpbnN0ZWFkIGNvbnRhaW5zIHN0YWxlIGRhdGEgZnJvbSBhIHByZXZpb3VzIGxheWVyLCB3b3VsZG4mIzM5O3QgdGhhdCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gSSBtZWFuLCBzaG91bGRuJiMzOTt0IEtNU0FOIGNhdGNoIHRoaXMga2luZCBvZiB0aGluZz8KCkJ1dCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBLTVNBTiYjMzk7cyBkZWZpbml0aW9uIG9mICYjMzQ7dW5pbml0aWFsaXplZCYjMzQ7IGlzbiYjMzk7dCBxdWl0ZSB0aGUgc2FtZSBhcyBhIGZ1bmN0aW9uYWwgaXNzdWUgaGVyZS4gS01TQU4gdHJhY2tzIG1lbW9yeSB0aGF0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgYWxsb2NhdGlvbi4gU2luY2UgYGNiYCAqaXMqIHplcm9lZCBvbiBhbGxvY2F0aW9uICh0aGFua3MgdG8gYHNrYnVmZl9jbGVhcmApLCBLTVNBTiB3b3VsZCBjb25zaWRlciBpdCAmIzM0O2luaXRpYWxpemVkLiYjMzQ7IFdoZXRoZXIgYSBwcmV2aW91cyBsYXllciBoYXMgd3JpdHRlbiB0byBpdCBvciBub3QsIEtNU0FOIHNlZXMgaXQgYXMgaW5pdGlhbGl6ZWQuIFRoZSBtZW1vcnkgaGFzIGJlZW4gd3JpdHRlbiB0bywgZXZlbiBpZiB0aGUgdmFsdWUgd3JpdHRlbiBpcyB6ZXJvLCBhbmQgdGhhdCYjMzk7cyBhbGwgdGhhdCBtYXR0ZXJzIHRvIEtNU0FOLgoKU28sIHRoaXMgbWVhbnMgS01TQU4gd29uJiMzOTt0IGZsYWcgdGhpcyBzY2VuYXJpbywgZXZlbiBpZiB0aGUgY29kZSAqZXhwZWN0cyogYSB6ZXJvZWQgYGNiYCBhbmQgcmVhZHMgYSBub24temVybyB2YWx1ZSBsZWZ0IGJ5IGFuIGVhcmxpZXIgbGF5ZXIuIEl0JiMzOTtzIGEgJiMzNDtnYXJiYWdlJiMzNDsgdmFsdWUgdG8gdGhlIG5ldyBsYXllciwgYnV0IGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIGluIEtNU0FOJiMzOTtzIHNlbnNlLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhbm90aGVyIGFuZ2xlLiBXaGF0IGlmIHRoZSBidWcgaXNuJiMzOTt0IGEgZGlyZWN0IHJlYWQgb2YgYHNrYi0mZ3Q7Y2JgIGJ1dCBhIG1vcmUgc3VidGxlIGlzc3VlPyBXaGF0IGlmIGBJUENCKHNrYilgIGlzIGJlaW5nIHJlYWQsIGFuZCAqc29tZSogb2YgdGhlIGZpZWxkcyAqd2l0aGluKiBgSVBDQmAgd2VyZSBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmlvciBsYXllciwgZGVzcGl0ZSBgc2tidWZmX2NsZWFyYD8gSW4gdGhhdCBjYXNlLCBgc2tidWZmX2NsZWFyYCB3b3VsZG4mIzM5O3QgYmUgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLgoKQnV04oCmIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBza2J1ZmZfY2xlYXJgIGFjdHVhbGx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIGB0YWlsYCwgaW5jbHVkaW5nIGBjYmAuIFllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKWAgZG9lcyB0aGUgam9iLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGVudGlyZSBgY2JgIHJlZ2lvbiBpcyBpbmRlZWQgemVyb2VkLiBUaGF0IG1lYW5zIHRoYXQgYW55IHN1YnNlcXVlbnQgd3JpdGVzIHRvIHBhcnRzIG9mIGBjYmAgaW5pdGlhbGl6ZSB0aG9zZSBzcGVjaWZpYyBieXRlcy4gVGhlIHJlbWFpbmRlciB0aGF0ICp3YXNuJiMzOTt0KiB3cml0dGVuIHRvIHJlbWFpbnMgemVyb2VkLCB3aGljaCBpcyBhIGRlZmluZWQgdmFsdWUuCgpUaGVyZWZvcmUsIGluIG5vIHNjZW5hcmlvIHdvdWxkIGBjYmAgY29udGFpbiAqS01TQU4qLXVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBtaWdodCBjb250YWluIHN0YWxlLCBmdW5jdGlvbmFsbHkgaW5jb3JyZWN0IGRhdGEsIGJ1dCB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHByb2JsZW0gYWx0b2dldGhlciwgYW5kIEtNU0FOIHdvbiYjMzk7dCBjYXRjaCBpdC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQgaGFwcGVucyB3aGVuIGNsb25pbmcgb3IgY29weWluZyBhbiBza2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9za2JfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTUtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU3LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xubmV0L2NvcmUvc2tidWZmLmM6MTYwNTogKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxubmV0L2NvcmUvc2tidWZmLmMtMTYwNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjEyLVx0bi1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za2J1ZmYuYzoxNjEzOlx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NTctXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4Olx0X19jb3B5X3NrYl9oZWFkZXIobiwgZmlyc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtMTY1OS1cdG4tXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ1Olx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Ni1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDczMi1cdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NDczMzpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3MzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTYyOlx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00OTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgX19jb3B5X3NrYl9oZWFkZXJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbmV0d29yayBzdGFjaywgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgbWFuaXB1bGF0aW9uIGFuZCBkYXRhIHRyYW5zZmVyIGF0IGEgbG93IGxldmVsLiBJIGJldCBpdCYjMzk7cyBjYWxsZWQgdG8gcmVwbGljYXRlIHRoZSBoZWFkZXIgb2YgYSBTb2NrZXQgQnVmZmVyIChgc2tiYCkg4oCTIG1lYW5pbmcgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24sIGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcywgcHJvdG9jb2wgdHlwZXMsIGFuZCB2YXJpb3VzIGZsYWdzIOKAkyB3aXRob3V0IGNvcHlpbmcgdGhlIGFjdHVhbCBkYXRhIHBheWxvYWQuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgcGFja2V0IGNsb25pbmcsIG9yIHBlcmhhcHMgY3JlYXRpbmcgYSBuZXcgc2tiIGZvciBhIGZvcndhcmRlZCBwYWNrZXQuIFRoZSAmIzM0O2RvdWJsZSB1bmRlcnNjb3JlJiMzNDsgcHJlZml4IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwgaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuCgpJIGltYWdpbmUgaXQgd291bGQgbmVlZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHZhcmlvdXMgYXNwZWN0cyB0byB0aGUgaGVhZGVycyBpbnZvbHZlZCwgbGlrZSB0aGUgcG9zc2libGUgcHJlc2VuY2Ugb2YgVkxBTiB0YWdzLCBmcmFnbWVudGF0aW9uIGRldGFpbHMgYW5kIG90aGVyIGNvbXBsZXhpdGllcy4gVGhlcmVmb3JlLCBpdCBoYXMgdG8gYmUgcm9idXN0IGFuZCBwZXJmb3JtYW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGVmZmljaWVuY3kgdHJpY2tzIHRvIG1pbmltaXNlIGNvcHlpbmcgYXMgdGhhdCBpcyB0aGUgZnVuY3Rpb24mIzM5O3Mgc29sZSBwdXJwb3NlLiBUaGVyZSYjMzk7cyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhpcyBmdW5jdGlvbiBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgdXNlIG9mIGlubGluZSBvciBjb21waWxlciBkaXJlY3RpdmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZSBmdW5jdGlvbiBtaWdodCBiZSBsZXZlcmFnaW5nIGhhcmR3YXJlIGZlYXR1cmVzIHRvIG1ha2UgdGhpcyBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGlzIG1ha2VzIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSB0aGUgc2tiIHN0cnVjdCBpdHNlbGYsIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCB0aGUgc3VidGxlIGFzcGVjdHMgb2YgdGhlIGhlYWRlciBmaWVsZHMgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlaXIgdmFyaW91cyBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NTY6XHRzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuMTU1NzpcdHtcbjE1NTg6XHRcdG5ldy1cdTAwM2V0c3RhbXBcdFx0PSBvbGQtXHUwMDNldHN0YW1wO1xuMTU1OTpcdFx0LyogV2UgZG8gbm90IGNvcHkgb2xkLVx1MDAzZXNrICovXG4xNTYwOlx0XHRuZXctXHUwMDNlZGV2XHRcdD0gb2xkLVx1MDAzZWRldjtcbjE1NjE6XHRcdG1lbWNweShuZXctXHUwMDNlY2IsIG9sZC1cdTAwM2VjYiwgc2l6ZW9mKG9sZC1cdTAwM2VjYikpO1xuMTU2MjpcdFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcbjE1NjM6XHRcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcbjE1NjQ6XHRcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xuMTU2NTpcdFxuMTU2NjpcdFx0LyogTm90ZSA6IHRoaXMgZmllbGQgY291bGQgYmUgaW4gdGhlIGhlYWRlcnMgZ3JvdXAuXG4xNTY3Olx0XHQgKiBJdCBpcyBub3QgeWV0IGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSBhIDE2IGJpdCBob2xlXG4xNTY4Olx0XHQgKi9cbjE1Njk6XHRcdG5ldy1cdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVx1MDAzZXF1ZXVlX21hcHBpbmc7XG4xNTcwOlx0XG4xNTcxOlx0XHRtZW1jcHkoXHUwMDI2bmV3LVx1MDAzZWhlYWRlcnMsIFx1MDAyNm9sZC1cdTAwM2VoZWFkZXJzLCBzaXplb2YobmV3LVx1MDAzZWhlYWRlcnMpKTtcbjE1NzI6XHRcdENIRUNLX1NLQl9GSUVMRChwcm90b2NvbCk7XG4xNTczOlx0XHRDSEVDS19TS0JfRklFTEQoY3N1bSk7XG4xNTc0Olx0XHRDSEVDS19TS0JfRklFTEQoaGFzaCk7XG4xNTc1Olx0XHRDSEVDS19TS0JfRklFTEQocHJpb3JpdHkpO1xuMTU3NjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNrYl9paWYpO1xuMTU3NzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fcHJvdG8pO1xuMTU3ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fdGNpKTtcbjE1Nzk6XHRcdENIRUNLX1NLQl9GSUVMRCh0cmFuc3BvcnRfaGVhZGVyKTtcbjE1ODA6XHRcdENIRUNLX1NLQl9GSUVMRChuZXR3b3JrX2hlYWRlcik7XG4xNTgxOlx0XHRDSEVDS19TS0JfRklFTEQobWFjX2hlYWRlcik7XG4xNTgyOlx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfcHJvdG9jb2wpO1xuMTU4MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3RyYW5zcG9ydF9oZWFkZXIpO1xuMTU4NDpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX25ldHdvcmtfaGVhZGVyKTtcbjE1ODU6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9tYWNfaGVhZGVyKTtcbjE1ODY6XHRcdENIRUNLX1NLQl9GSUVMRChtYXJrKTtcbjE1ODc6XHQjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSS1xuMTU4ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNlY21hcmspO1xuMTU4OTpcdCNlbmRpZlxuMTU5MDpcdCNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuMTU5MTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG5hcGlfaWQpO1xuMTU5MjpcdCNlbmRpZlxuMTU5MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGFsbG9jX2NwdSk7XG4xNTk0Olx0I2lmZGVmIENPTkZJR19YUFNcbjE1OTU6XHRcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcbjE1OTY6XHQjZW5kaWZcbjE1OTc6XHQjaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxuMTU5ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcbjE1OTk6XHQjZW5kaWZcbjE2MDA6XHRcbjE2MDE6XHR9XG4xNjAyOlx0XG4xNjAzOlx0LypcbjE2MDQ6XHQgKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cbjE2MDU6XHQgKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVncml0eSBvZiBgY2JgIGluIE91ciBEYXRhIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBvcGVyYXRpb246IGBtZW1jcHkobmV3LSZndDtjYiwgb2xkLSZndDtjYiwgc2l6ZW9mKG9sZC0mZ3Q7Y2IpKTtgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyB3ZSYjMzk7cmUgZG9pbmcgYSBjb21wbGV0ZSBjb3B5IG9mIGBjYmAuIFRoYXQmIzM5O3MgZ29vZC4gVGhlIGRlc2lnbiByZWxpZXMgb24gYGNiYCBiZWluZyBmdWxseSB6ZXJvZWQgb3V0IGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb21wbGV0ZWx5IGNvcGllZCBkdXJpbmcgYSBjbG9uZS4gVGhhdCBndWFyYW50ZWVzLCAqdGhlb3JldGljYWxseSosIHRoYXQgYGNiYCB3aWxsIG5ldmVyIGhhcmJvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgc2VlaW5nIHNvbWUgZmxhZ3MuIEEgcG90ZW50aWFsIGlzc3VlIGlzIHRoZXJlLiBXaGlsZSBpdCB3b24mIzM5O3QgYmUgYW4gdW5pbml0aWFsaXplZCAqbWVtb3J5KiBidWcsIGl0IGNvdWxkIGludHJvZHVjZSBhIGxvZ2ljYWwgZXJyb3IgaWYgYGNiYCBpbmFkdmVydGVudGx5IGNvbnRhaW5zIHN0YWxlIGRhdGEgZnJvbSBhIHByZXZpb3VzIHByb2Nlc3NpbmcgbGF5ZXIuIFRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLCBhIHBvc3NpYmxlIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4KCk5vdywgSSYjMzk7bSBiYWNrdHJhY2tpbmcgYSBsaXR0bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLiBJcyB0aGVyZSAqYW55KiBleGVjdXRpb24gcGF0aCB3aGVyZSBgc2tiLSZndDtjYmAgZG9lc24mIzM5O3QgZ2V0IHplcm9lZCBvdXQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIGJlIDEwMCUgY2VydGFpbi4gQW5kLCB3aGF0IGFib3V0IGBza2JfbW9ycGhgPyBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIG1hbmlwdWxhdGluZyBgY2JgIGFzIHdlbGwsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9tb3JwaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTE2NjM9RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2Nfc2tiX2Zvcl9tc2cpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjUtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxNjY2OiAqXHRza2JfbW9ycGhcdC1cdG1vcnBoIG9uZSBza2IgaW50byBhbm90aGVyXG5uZXQvY29yZS9za2J1ZmYuYy0xNjY3LSAqXHRAZHN0OiB0aGUgc2tiIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnRzXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY3NC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2NzU6c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxubmV0L2NvcmUvc2tidWZmLmMtMTY3Ni17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY3OS19XG5uZXQvY29yZS9za2J1ZmYuYzoxNjgwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tb3JwaCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSBgc2tiX21vcnBoYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIG1vZHVsZSBgc2tiX21vcnBoYC4gVGhpcyBuYW1lIHNwYXJrcyBhIGZldyBpbml0aWFsIGNvbnNpZGVyYXRpb25zLCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBtb2R1bGUgdG8gZWl0aGVyIHBlcmZvcm0gY3JpdGljYWwgb3B0aW1pemF0aW9ucywgb3IgcG90ZW50aWFsbHkgYmUgaW52b2x2ZWQgaW4gc3VidGxlLCBlYXNpbHkgb3Zlcmxvb2tlZCBidWdzIGlmIHRoZSBjb2RlIGlzbiYjMzk7dCByb2J1c3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUmIzM5O3MgZGF0YSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgcGlucG9pbnQgd2hlcmUgYHNrYl9tb3JwaGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdzogd2hhdCYjMzk7cyBiZWluZyBtb3JwaGVkLCB3aHksIGFuZCBob3cgZG9lcyB0aGlzIGFjdGlvbiBhZmZlY3Qgb3RoZXIgcHJvY2Vzc2VzIHRoYXQgcmVseSBvbiB0aGUgYWZmZWN0ZWQgYnVmZmVycz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgZW50cnkgcG9pbnRzIGFuZCBsb29rIGZvciB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIGFkanVzdG1lbnRzLCBvciBvdGhlciBsYXllci1zcGVjaWZpYyBtYW5pcHVsYXRpb25zLiBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2ZmbG9hZCBtZWNoYW5pc21zIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIE5JQy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjb2RlIGluc3BlY3Rpb24sIGFuZCBzZWUgd2hhdCB0aGUgYXV0aG9ycyB3ZXJlIHRoaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc1Olx0c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuMTY3NjpcdHtcbjE2Nzc6XHRcdHNrYl9yZWxlYXNlX2FsbChkc3QsIFNLQl9DT05TVU1FRCk7XG4xNjc4Olx0XHRyZXR1cm4gX19za2JfY2xvbmUoZHN0LCBzcmMpO1xuMTY3OTpcdH1cbjE2ODA6XHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbW9ycGgpO1xuMTY4MTpcdFxuMTY4MjpcdGludCBtbV9hY2NvdW50X3Bpbm5lZF9wYWdlcyhzdHJ1Y3QgbW1waW4gKm1tcCwgc2l6ZV90IHNpemUpXG4xNjgzOlx0e1xuMTY4NDpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcGcsIG51bV9wZywgbmV3X3BnLCBvbGRfcGcsIHJsaW07XG4xNjg1Olx0XHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7XG4xNjg2Olx0XG4xNjg3Olx0XHRpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8ICFzaXplKVxuMTY4ODpcdFx0XHRyZXR1cm4gMDtcbjE2ODk6XHRcbjE2OTA6XHRcdHJsaW0gPSBybGltaXQoUkxJTUlUX01FTUxPQ0spO1xuMTY5MTpcdFx0aWYgKHJsaW0gPT0gUkxJTV9JTkZJTklUWSlcbjE2OTI6XHRcdFx0cmV0dXJuIDA7XG4xNjkzOlx0XG4xNjk0Olx0XHRudW1fcGcgPSAoc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgMjtcdC8qIHdvcnN0IGNhc2UgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbml0aWFsaXphdGlvbiBJc3N1ZXMgaW4gU0tCIENsb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza2JfbW9ycGhgIGFuZCBob3cgaXQgaGFuZGxlcyBjbG9uaW5nIFNLQnMuIEl0IGNhbGxzIGBfX3NrYl9jbG9uZWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBgY2JgIGdldHMgY29waWVkLiBTZWVtcyBsaWtlIGBjYmAgc2hvdWxkIGFsd2F5cyBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdWUgdG8gdGhpcyBzZXF1ZW5jZS4KCkJ1dCBoYW5nIG9u4oCmIFdoYXQgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCAqYmVmb3JlKiBpdCYjMzk7cyBwcm9wZXJseSBzZXQsIGFuZCBpdCBqdXN0IGdyYWJzIHNvbWUgbGVmdG92ZXIgZ2FyYmFnZSBkYXRhPyBDb3VsZCB0aGF0IGxlYWQgdG8gYSBuYXN0eSBidWcsIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0aGF0IEtNU0FOIHdvdWxkIGZsYWc/IExldCBtZSBxdWlja2x5IHRoaW5rIHRoaXMgdGhyb3VnaC4gTm8sIEtNU0FOIG9ubHkgY2F0Y2hlcyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LiBJZiB0aGVyZSYjMzk7cyBnYXJiYWdlIGRhdGEgcHJlc2VudCBmcm9tIHNvbWUgcHJldmlvdXMgb3BlcmF0aW9uLCBLTVNBTiB3b24mIzM5O3QgY2F0Y2ggaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlICphY3R1YWwqIHVzYWdlIG9mIGBJUENCKHNrYilgLiBJIHJlbWVtYmVyIHdvcmtpbmcgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyByZWNlbnRseeKApiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBJUENCKHNrYilgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBkZWNhcF9hbmRfdmFsaWRhdGVgIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmYWxsb3V0LiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBwYXRjaCBpcyBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgbGV0JiMzOTtzIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDI0MjpcdFx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbiAyNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0NDpcdCNlbmRpZlxuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmYsIHByb3RvLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiAyNDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdFxuIDI0OTpcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxuIDI1MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjUxOlx0XG4gMjUyOlx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDI1NTpcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAyNTY6XHRcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiAyNjA6XHRcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuIDI2MzpcdFx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFxuIDI2NjpcdFx0cmV0dXJuIHRydWU7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdHN0YXRpYyB2b2lkIGFkdmFuY2VfbmV4dHNlZyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgc3RydWN0IGluNl9hZGRyICpkYWRkcilcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMjcyOlx0XG4gMjczOlx0XHRzcmgtXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDI3NDpcdFx0YWRkciA9IHNyaC1cdTAwM2VzZWdtZW50cyAmIzQzOyBzcmgtXHUwMDNlc2VnbWVudHNfbGVmdDtcbiAyNzU6XHRcdCpkYWRkciA9ICphZGRyO1xuIDI3NjpcdH1cbiAyNzc6XHRcbiAyNzg6XHRzdGF0aWMgaW50XG4gMjc5Olx0c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODcxCgkJCQkJCQlvdXRwdXQ6IDMwMAoJCQkJCQkJdGhvdWdodHM6IDExNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogSVB2NCBDb250cm9sIEJsb2NrIFplcm9pbmcgaW4gSVB2NiBEZWNhcHN1bGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBvdXQgYElQQ0Ioc2tiKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5PyBBaCwgaXQmIzM5O3MgZHVyaW5nIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBwcm9jZXNzIGZvciBJUHY2IHBhY2tldHMsIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZW5jYXBzdWxhdGVkIElQdjQgcGFja2V0IChpLmUuLCBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCkuIFRoZSBJUHY0IHN0YWNrIGV4cGVjdHMgaXRzIGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgKSB0byBiZSBjbGVhbjsgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4gSWYgd2UgZG9uJiMzOTt0IHplcm8gaXQsIHdlJiMzOTtyZSBsaWtlbHkgbGVhdmluZyBiZWhpbmQgYElQNkNCKHNrYilgIGRhdGEgZnJvbSB0aGUgSVB2NiBzdGFjay4KClRoZSBwcm9ibGVtPyBQb3RlbnRpYWxseSAmIzM0O2dhcmJhZ2UmIzM0OyBkYXRhIOKAkyBsaWtlLCBzYXksIGEgbm9uLXplcm8gYElQQ0Ioc2tiKS0mZ3Q7b3B0YCBmaWVsZC4gVGhpcyBjb3VsZCBtaXNsZWFkIHRoZSBJUHY0IHN0YWNrIGludG8gdGhpbmtpbmcgdGhlcmUgYXJlIElQdjQgb3B0aW9ucyBwcmVzZW50IHdoZW4gdGhlcmUgYXJlbiYjMzk7dC4gQ2xlYXJseSBhIGxvZ2ljIGJ1ZywgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGhlcmU6IGlzIHRoaXMgYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBidWc/CgpObywgaG9sZCBvbiwgaXQgaXNuJiMzOTt0LiBUaGUgbWVtb3J5ICp3YXMqIGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IHN0YWNrIG9yIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gV2Uga25vdyBgc2tiLSZndDtjYmAgaXMgemVyb2VkIGF0IGFsbG9jYXRpb24uIEluIGZhY3QsIGBza2J1ZmZfY2xlYXJgIGlzIGNhbGxlZCBpbiBgX19hbGxvY19za2JgLCBgc2xhYl9idWlsZF9za2JgLCBgX19idWlsZF9za2JgLCBgX19uYXBpX2J1aWxkX3NrYmAgd2hpY2ggYXJlIHRoZSBjb3JlIHNrYiBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gU28gaXQgKnNob3VsZCogYmUgemVyb2VkLiBTbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQmIzM5O3MgdHJ1bHkgdW5pbml0aWFsaXplZCwgcmlnaHQ/CgpTbywgS01TQU4gaXMgKm5vdCogZ29pbmcgdG8gY2F0Y2ggdGhpcy4gS01TQU4mIzM5O3Mgam9iIGlzIHRvIGNhdGNoIHJlYWRzIGZyb20gbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBoYXMsIGZvciBzdXJlLCBiZWVuIHdyaXR0ZW4gdG8uIEZpcnN0IHdpdGggemVyb2VzIG9uIGFsbG9jYXRpb24sIHRoZW4gYnkgSVB2Ni4KClRoaXMgaXMgYSBjbGFzc2ljICYjMzQ7Y2xlYXIgdGhlIGNvbnRyb2wgYmxvY2sgd2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMmIzM0OyBidWcuIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIGlubmVyIHByb3RvY29sIHN0YWNrIGZyb20gbWlzaW50ZXJwcmV0aW5nIGRhdGEgaW50ZW5kZWQgZm9yIHRoZSBvdXRlciBwcm90b2NvbCBzdGFjay4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIG9yIGV2ZW4gYSBjcmFzaCwgYnV0IGl0IGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlLiBLQVNBTiBtaWdodCBzdGlsbCBjYXRjaCBpdCBpZiB0aGUgbWlzaW50ZXJwcmV0YXRpb24gbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIOKAkyBsaWtlIGlmIHRoYXQgZ2FyYmFnZSBvcHRpb24gbGVuZ3RoIGNhdXNlcyBhbiBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIHdvbiYjMzk7dC4KClNvLCBpbiBzdW1tYXJ5OgoKMS4gIFRoZSBwYXRjaCB6ZXJvcyBgSVBDQihza2IpYCAod2hpY2ggaXMgYHNrYi0mZ3Q7Y2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldC4KMi4gIGBza2ItJmd0O2NiYCBpcyBhIDQ4LWJ5dGUgY29udHJvbCBidWZmZXIgdXNlZCBieSBkaWZmZXJlbnQgcHJvdG9jb2wgbGF5ZXJzIHRvIHN0b3JlIHByaXZhdGUgdmFyaWFibGVzLgozLiAgV2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMgKGZyb20gSVB2NiB0byBJUHY0KSwgdGhlIG5ldyBsYXllciBleHBlY3RzIGl0cyBjb250cm9sIGJsb2NrIHRvIGJlIGNsZWFuLiBJZiBub3QgY2xlYXJlZCwgaXQgd2lsbCByZWFkIGRhdGEgbGVmdCBvdmVyIGJ5IHRoZSBwcmV2aW91cyBsYXllciAoSVB2NikuCjQuICBGcm9tIEtNU0FOJiMzOTtzIHBlcnNwZWN0aXZlLCB0aGlzIG1lbW9yeSBpcyBOT1QgdW5pbml0aWFsaXplZC4gSXQgd2FzIGZ1bGx5IHplcm9lZCB3aGVuIHRoZSBgc2tiYCB3YXMgYWxsb2NhdGVkIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4KNS4gIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU2luY2UgYHNrYi0mZ3Q7Y2JgIHdhcyBpbml0aWFsaXplZCwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LCBldmVuIGlmIHRoZSBkYXRhIGlzIHNlbWFudGljYWxseSAmIzM0O2dhcmJhZ2UmIzM0Oy4KNi4gIFRoZXJlZm9yZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4KClRoZXJlZm9yZSwgbm8gS01TQU4gZnV6emluZyBuZWVkZWQsIGl0IHNlZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjQ4Ljk0MzI0MzA0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY3NTUxNzkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXFx1MDAzZWNiYCkgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiB0dW5uZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYHNrYi1cXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cXG5cXG5XaGlsZSB0aGlzIHByZXZlbnRzIHRoZSBJUHY0IHN0YWNrIGZyb20gcmVhZGluZyBcXFwiZ2FyYmFnZVxcXCIgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcXFwidW5pbml0aWFsaXplZFxcXCIgbWVtb3J5LiBUaGUgYHNrYi1cXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXFx1MDAzZWNiYCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZWl0aGVyIHdpdGggemVyb2VzIG9yIHdpdGggSVB2NiBjb250cm9sIGRhdGEpLCBLTVNBTiB3aWxsIG5vdCBmbGFnIHJlYWRzIGZyb20gaXQuXFxuXFxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KSBpbiBkZWNhcF9hbmRfdmFsaWRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBzZWdtZW50IHJvdXRpbmcgbG9jYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjQ4Ljk0MzI0OTE2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMDoyMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcXG5pbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbkBAIC0yNTYsNiArMjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuIFxcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4rXFxuK1xcdFxcdG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7XFxuK1xcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NDkuNDU2NTcxNTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTYwNDA1NzQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfbG9jYWxfaW5wdXRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R0NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTJmYjZkM2Y0YTY1NjdiNTlhZmU0ZjZkZjg5ZjQ1Y2Y5N2EwZjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjA6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NDkuNDU2NTczNDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMjQ0NzM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWc2IExvY2FsIERlY2Fwc3VsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGNvZGUgYWRkcyBhIGZldyBsaW5lcywgcmlnaHQgYWZ0ZXIgdGhlIGBpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYilgIGNhbGwuIFRoZSBhZGRlZCBsaW5lcyBkZWFsIHdpdGggYSBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCBjaGVjay4gSXQncyBpbml0aWFsaXppbmcgdGhlIGBJUENCKHNrYilgIHN0cnVjdC4gTGV0IG1lIHNlZS4uLml0IGxvb2tzIGxpa2UgaXQncyBwcmVzZXJ2aW5nIHRoZSBpbnB1dCBpbnRlcmZhY2UgKGBpaWZgKSBmcm9tIGBJUDZDQihza2IpYCBhbmQgc3RvcmluZyBpdCBpbiBgSVBDQihza2IpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2h5IGFyZSB0aGV5IGRvaW5nIHRoaXM/IEl0IHNlZW1zIGxpa2UgdGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgZW5jYXBzdWxhdGVkIElQLWluLUlQIHRyYWZmaWMgdGhhdCBpcyBkZWNhcHN1bGF0ZWQgYnkgU0VHNiwgd2hpbGUga2VlcGluZyB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIHNldC4gSSdkIG5lZWQgdG8gbG9vayBkZWVwZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgY29udGV4dCBvZiB3aHkgdGhlIGlucHV0IGludGVyZmFjZSBuZWVkcyB0byBiZSBzdG9yZWQgb24gSVAgY29udHJvbCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBJUENCYCBuZWVkcyB0byBoYXZlIGl0cyBgaWlmYCBzZXQuIElzIHRoaXMgdG8gcHJlc2VydmUgcm91dGluZyBjb250ZXh0LCBwZXJoYXBzPyBPciBpcyBpdCBmb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMjo1My44ODkwMjMwODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NjIyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVjYXBfYW5kX3ZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzI6c3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz04NTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg2Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODYzOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg2NC1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NDItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk0MzpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0NC1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTEte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5OTI6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTMtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTExODQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExOTA6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTkxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjY1PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjY3LXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTI2ODpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjktXFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMjo1My45NDI4OTA2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5NDk5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29udHJvbCBGbG93IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBJdCdzIHRyaWdnZXJlZCBmcm9tIHNldmVyYWwgcGxhY2VzIHdpdGhpbiB0aGlzIGNvZGU6IGBpbnB1dF9hY3Rpb25fZW5kX2R4MmAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NmAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ2YC4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIHBpcGVsaW5lLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhpcyBjb25kaXRpb25hbCBjaGVjayBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCwgYXMgdGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgcHJvdG9jb2wgY29udGV4dC4gSSBub3RpY2UgdGhhdCB0aGUgc3BlY2lmaWMgY2FzZXMgb2YgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBhcmUgdGhlIG9uZXMgcGFzc2luZyB0aGUgcmVsZXZhbnQgcHJvdG9jb2wuXG5cbk5vdywgZ2l2ZW4gdGhlIHByb3RvY29sIGNoZWNrLCBJIHRoaW5rIGl0J3MgbmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW52b2x2ZW1lbnQgb2YgSVBJUC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LCB0byBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IG9wZXJhdGlvbmFsIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTgxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjU3Ljk5MjM5MjI1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA0NjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjYtaXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NTguMDg3NDQ1MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzcxMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgU0VHNiBMV1QgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNvbmZpZyBvcHRpb24gd2UncmUgbG9va2luZyBhdCBpcyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRvIGRvIHRoYXQsIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L0tjb25maWdgIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZXNjcmlwdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcyBmb3IgYElQVjZfU0VHNl9MV1RVTk5FTGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRldGFpbGVkIGV4cGxhbmF0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24gb3IgY29uZmxpY3Qgd2l0aC4gVGltZSB0byBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaGFzIHRvIHNheSBhYm91dCBpdC4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGlsbHVtaW5hdGUgd2hhdCB0aGlzIHBhcnRpY3VsYXIgdHVubmVsIGltcGxlbWVudGF0aW9uIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjAxLjU3NTE2MTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY4NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MDEuNjg5ODUyODU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDA2ODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSVBWNl9TRUc2X0xXVFVOTkVMKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBzdXBwb3J0cyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gSXQncyBub3QgZW5vdWdoIHRvIGp1c3Qgc2VlIHRoZSBvcHRpb247IEkgbmVlZCBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBtZWFucyBkaWdnaW5nIGRlZXAgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIG1vZHVsZXMsIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgcHJlcmVxdWlzaXRlcy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2Ugc3BlY2lmaWMgbmV0d29ya2luZyBzdGFjayBvcHRpb25zIGJlaW5nIGVuYWJsZWQsIHBvdGVudGlhbGx5IHJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGluIHBsYWNlIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBldmVuIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0IGFsb25lIGJlIGNvbXBpbGVkIGFuZCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBJIGtub3cgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlcywgZXhwbG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBwb3NzaWJseSB0cmFjaW5nIHRocm91Z2ggc29tZSBjb2RlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNS4wMDk5MjQxODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTc5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNS4xMDM1MTU1NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3OTgxNTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGaWxlIFJlYWRpbmVzcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJIG5lZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUuIE5vIHBvaW50IGluIHNwaW5uaW5nIG15IHdoZWVscyB3aXRoIHRoZW9yeSBvciBwcmVjb25jZXB0aW9ucy4gR290dGEgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgcmF3IGRhdGEuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGZpbGXigJRmb3JtYXQsIHNpemUsIG9yaWdpbuKAlGFyZSBzdGlsbCB1bmtub3duLCBidXQgdGhlIGltbWVkaWF0ZSBpbXBlcmF0aXZlIGlzIHRvIGJlZ2luIHRoZSByZWFkLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEdldCBhIGJhc2VsaW5lIG9mIHdoYXQncyBwcmVzZW50IGJlZm9yZSBmb3JtdWxhdGluZyBhIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjA3Ljg4MzMzNDA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuIDI4MTpcXHRcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxuIDI4MjpcXHRcXHRoZWxwXFxuIDI4MzpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxcbiAyODQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODU6XFx0XFxuIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG4gMjk2OlxcdFxcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNy44ODM0MjE2MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTMyNTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVjZfU0VHNl9MV1RVTk5FTCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIEl0J3MgcHJldHR5IG9idmlvdXMgdGhpcyB0aGluZyByZWxpZXMgb24gYElQVjZgLCBzbyB0aGF0J3MgdGhlIGJhc2UgSSdtIHdvcmtpbmcgZnJvbS4gTm93LCB0aGUgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIGJlIGluIHRoZXNlIHR3byBmdW5jdGlvbnM6IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSdyZSBkb2luZy5cblxuV2FpdCBhIHNlY29uZOKApmFyZSB0aGVzZSBmdW5jdGlvbnMgKnN0YXRpYyo/IFJpZ2h0LCB0aGV5IGFyZS4gVGhhdCBtZWFucyB0aGV5IGFyZW4ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHkuIE9rYXksIHNvIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkncmUgYmVpbmcgYWNjZXNzZWQgYW5kIHV0aWxpemVkIHdpdGhpbiB0aGUgbW9kdWxlLiBUaGV5IG11c3QgYmUgcmVmZXJlbmNlZCB0aHJvdWdoIGEgc3RydWN0IG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbiBvYnZpb3VzIHN0cnVjdCB0aGF0IGV4cG9zZXMgdGhlbSwgb3Igc29tZSBvdGhlciBtZXRob2QuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MTEuOTI0NzU3Njk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyODQ0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XFx0XFx0XFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjExLjk5MjU5MDkxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkxODA0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBzZWc2X2FjdGlvbl90YWJsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIHVzYWdlIG9mIHRoaXMgdGFibGUuIEknbSB0aGlua2luZywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHNlZzZfYWN0aW9uX3RhYmxlYCBsZXZlcmFnZWQgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaz9cIiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBpcyBrZXkuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcG9uZW50cyBhbmQgZnVuY3Rpb25zLiBJcyBpdCBhIGNlbnRyYWwgbG9va3VwLCBhIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZSwgb3IgbW9yZSBvZiBhIHRyYW5zaXRpb25hbCBkYXRhIHN0cnVjdHVyZT8gS25vd2luZyBob3cgaXQncyAqdXNlZCogd2lsbCBnaXZlIG1lIGEgaHVnZSBsZWcgdXAgaW4gZXZhbHVhdGluZyBpdHMgZGVzaWduLCBlZmZpY2llbmN5LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQncyBzdGFydCB0cmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MTUuMDg0Mzk3MzQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMjk0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9hY3Rpb25fdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc5LVxcdHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNTc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqX19nZXRfYWN0aW9uX2Rlc2MoaW50IGFjdGlvbilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTgzOlxcdGNvdW50ID0gQVJSQVlfU0laRShzZWc2X2FjdGlvbl90YWJsZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4NTpcXHRcXHRkZXNjID0gXFx1MDAyNnNlZzZfYWN0aW9uX3RhYmxlW2ldO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTg2LVxcdFxcdGlmIChkZXNjLVxcdTAwM2VhY3Rpb24gPT0gYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0NDE9c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXFx0ICogb3B0aW9uYWwsIGl0IG1lYW5zIHRoYXQgdGhlIHVzZXIgaGFzIG1lc3NlZCBzb21ldGhpbmcgdXAgaW4gdGhlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0Njg6XFx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2Nlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDY5LVxcdCAqIGJlaGF2aW9ycyB0byB3b3JrIHByb3Blcmx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxNS4xODk3MzIxMzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDQ1OTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIElucHV0IFBhdGgqKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MganVzdCBmbGFnZ2VkIHRoYXQgYW4gaW5wdXQgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYSBmdW5jdGlvbiBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCwgb3IgYSByZWxhdGVkIG9uZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGlzIGFjdGlvbiBpcyBiZWluZyAqZGVzY3JpYmVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHBsYWNlIGZvciBjb250ZXh0LiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBkZXNjcmlwdGlvbiBvZiB0aGUgYWN0aW9uIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgYHNlZzZfYWN0aW9uX2Rlc2NgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBpbnB1dGAgZmllbGQgb2YgdGhpcyBkZXNjcmlwdG9yLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5wdXQncyBjaGFyYWN0ZXJpc3RpY3MsIGNvbnN0cmFpbnRzLCBvciB0aGUgcHJvY2Vzc2luZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gdGhlIGlucHV0IGlzIHN0b3JlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpZWxkIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFjdGlvbiBpdHNlbGYuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxOC4yMTQxOTM3ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTcxNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODMtXFx0XFx0XFx0XFx0ICBTRUc2X0ZfTE9DQUxfRkxBVk9SUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4NDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODUtXFx0fSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkxLVxcdFxcdFxcdFxcdCAgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9PSUYpLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDkyOlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF94LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkzLVxcdH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5Ny1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ5ODpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfdCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5OS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDMtXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MDQ6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4MixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUwNS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDktXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTA6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxMS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTY6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjItI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTIzOlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9kdDQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjQtXFx0XFx0LnNsd3Rfb3BzXFx0PSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0Mi0jZW5kaWZcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU0MzpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ2LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ0LVxcdH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0OS0jaWZkZWYgQ09ORklHX05FVF9MM19NQVNURVJfREVWXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NTA6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NDYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NTEtXFx0XFx0LnNsd3Rfb3BzXFx0PSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1OS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2MDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfYjYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NjEtXFx0fSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY1LVxcdFxcdC5vcHRhdHRyc1xcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTY2OlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2Ny1cXHRcXHQuc3RhdGljX2hlYWRyb29tXFx0PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NzItXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NzM6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2JwZixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3NC1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4MC1cXHQuZGVzdHJveV9zdGF0ZVxcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjgxOlxcdC5pbnB1dFxcdFxcdD0gc2VnNl9sb2NhbF9pbnB1dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4Mi1cXHQuZmlsbF9lbmNhcFxcdD0gc2VnNl9sb2NhbF9maWxsX2VuY2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxOC4zMDgzNzM1ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzcwNDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgSW5wdXQgRmxvdzogYHNlZzZfbG9jYWxfaW5wdXRgKipcblxuQWxyaWdodCwgc28gdGhlIHRyaWdnZXIgZm9yIHRoaXMgc3BlY2lmaWMgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYHNlZzZfbG9jYWxfaW5wdXRgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhcnRpY3VsYXIgaW5wdXQuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCB0aHJvdWdoIGl0PyBJcyBpdCBhIGNvbnRyb2wgbWVzc2FnZSwgYSBkYXRhIHBhY2tldCwgYSBzcGVjaWZpYyBjb21tYW5kPyBUaGUgZnVuY3Rpb24gbmFtZSwgYHNlZzZfbG9jYWxfaW5wdXRgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gU2VnbWVudCBSb3V0aW5nIHY2IGFuZCBzb21lIGZvcm0gb2YgbG9jYWwgaW5wdXQgcHJvY2Vzc2luZy4gU28sIHRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgaW5wdXQgaGFuZGxlci4gSXQncyBhIHNwZWNpYWxpemVkIHBvaW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgY2FsbCBjaGFpbiByZWxhdGVkIHRvIGBzZWc2X2xvY2FsX2lucHV0YC4gV2hhdCBhcmUgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGRvd25zdHJlYW0gZnVuY3Rpb25zPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGhlcmUsIGFuZCBob3cgZG9lcyB0aGlzIGFjdGlvbiBpbnRlcmFjdCB3aXRoIHRoZW0/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnB1dCBpcyBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvaW50cyBvZiB2dWxuZXJhYmlsaXR5LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gQW55IGltbWVkaWF0ZSBpbnNpZ2h0cyBpbnRvIHRoZSBleHBlY3RlZCBkYXRhIGZvcm1hdCwgcG90ZW50aWFsIGZvciBlcnJvcnMsIG9yIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbiBvZiB0aGlzIGlucHV0IHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGhlbHBzIHdpdGggdGhpcyBhc3Nlc3NtZW50IGFzIHdlbGwsIGluIG9yZGVyIHRvIGlkZW50aWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MjIuMDgyMDgxNjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NTQ5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTg9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTY6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NTA6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1MS19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgyLVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjIyLjE5NDA0MTI0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyMzAyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGludGVybmFscyBhbmQga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNFRzYgTG9jYWwgSW5wdXQgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhlIFNFRzYgbG9jYWwgaW5wdXQgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhcjogYHNlZzZfbG9jYWxfaW5wdXRgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcywgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgLiAgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBwYXJ0IG5vdyBpcyB0aGlzIGNhbGwgdG8gYGRlc2MtXHUwMDNlaW5wdXQoc2tiLCBzbHd0KWAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkZXNjYCBpcywgYW5kIHdoYXQgaXRzIGBpbnB1dGAgZnVuY3Rpb24gZG9lcyB3aXRoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIGBzbHd0YCAobGlrZWx5IHNvbWUgc29ydCBvZiBzZWdtZW50IGxpc3Qgd2VpZ2h0IHRhYmxlKSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBmbG93LiAgVGhpcyBgZGVzY2Agc3RydWN0dXJlIGlzIGtleSDigJMgSSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gaXQgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIGxvY2FsbHkuIExldCdzIGRpZyBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgIGFuZCB0aGUgYGRlc2NgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjI1LjQ4NjM0NzQ0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MTY6XFx0c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTYxNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjE4OlxcdHtcXG4xNjE5OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xcbjE2MjA6XFx0XFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XFxuMTYyMTpcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XFxuMTYyMjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMTYyMzpcXHRcXHRpbnQgcmM7XFxuMTYyNDpcXHRcXG4xNjI1OlxcdFxcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxuMTYyNjpcXHRcXHRkZXNjID0gc2x3dC1cXHUwMDNlZGVzYztcXG4xNjI3OlxcdFxcbjE2Mjg6XFx0XFx0cmMgPSBkZXNjLVxcdTAwM2VpbnB1dChza2IsIHNsd3QpO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRpZiAoIXNlZzZfbHd0dW5uZWxfY291bnRlcnNfZW5hYmxlZChzbHd0KSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybiByYztcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0c2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc2x3dCwgbGVuLCByYyk7XFxuMTYzNDpcXHRcXG4xNjM1OlxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MjUuNDg2NTY5NTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5Njg4NDE5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IExXVHVubmVsIElucHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTFdUdW5uZWwgaW5wdXQsIHNwZWNpZmljYWxseSB0aGUgYHNlZzZfbG9jYWxfaW5wdXRgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSB3aG9sZSBMV1R1bm5lbCBpbnB1dCBwcm9jZXNzLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgY2FsbGVkIGJ5IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFtb25nIG90aGVycy4gSSBrbm93IHRoaXMgYXJlYSB3ZWxsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cblRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBJUFBST1RPX0lQSVBgLCB0aGUgSVB2NCBvdmVyIElQdjYgcHJvdG9jb2wuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgYElQQ0Ioc2tiKWAgaXNuJ3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4gVGhhdCdzIGEgY2xhc3NpYyBnb3RjaGEuIFdoZW4geW91J3JlIGRlY2Fwc3VsYXRpbmcgSVB2NCBmcm9tIElQdjYsIHRoZSBgc2tiLVx1MDAzZWNiYCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIElQdjYgcHJvY2Vzc2luZyB0byBhdm9pZCBzdGFsZSBkYXRhLiBJIHJlbWVtYmVyIHRoaXMsIHRoZSBgSVBDQihza2IpYCBhbmQgYElQNkNCKHNrYilgIHN0cnVjdHVyZXMgc2hhcmUgdGhlIHNhbWUgbWVtb3J5IHNwYWNlIHdpdGhpbiB0aGUgYHNrYi1cdTAwM2VjYmAuIFNvLCBmYWlsdXJlIHRvIGluaXRpYWxpemUgaXQgcHJvcGVybHkgd2lsbCBsZWFkIHRvIGJ1Z3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgY29uZGl0aW9uYWxseSBjbGVhcnMgYElQQ0Ioc2tiKWAgd2hlbiBgcHJvdG9gIGlzIGBJUFBST1RPX0lQSVBgLCB0aGVuIHJlc3RvcmVzIHRoZSBpbnRlcmZhY2UgaW5kZXguXG5cbmBgYGNcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuYGBgXG5cbkl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBuZWNlc3NhcnkgZml4LCBhbmQgY2xlYXJseSByZWFjaGFibGUgd2l0aGluIHRoZSBleGVjdXRpb24gcGF0aC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBJIHNob3VsZCBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNlZzZfbG9jYWxfaW5wdXRgLCBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCwgYW5kIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzLiBXYWl0LCB0aG9zZSBsYXR0ZXIgdHdvIGFyZSBzdGF0aWMuLi4gYW5kIHNvIGlzIGBzZWc2X2xvY2FsX2lucHV0YC4gSSdsbCBjb25maXJtIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHN0YXRpYyBhcyB3ZWxsLiBZZXMsIGl0IGlzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gSSB3aWxsIGhhdmUgYSBsb29rIGF0IHRoYXQgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzMuNDU1NDE2NTY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxNDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjUwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1MDktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcXHQuYnVpbGRfc3RhdGVcXHQ9IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXFx0LmRlc3Ryb3lfc3RhdGVcXHQ9IHNlZzZfbG9jYWxfZGVzdHJveV9zdGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzMuNTEwMzM1NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM3NjgyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBMb2NhbCBMV1R1bm5lbHMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2V0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGR5bmFtaWMgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgY291bGQgcG9pbnQgdG8gZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eSBvciBhIGRlZ3JlZSBvZiBydW50aW1lIGNvbmZpZ3VyYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjMsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzozOC40NzQxMDcxMzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjIzNTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzM5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMjM9c3RhdGljIGVudW1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTIyNDpzZWc2X2VuZF9kdF9tb2RlIHNlZzZfZW5kX2R0Nl9wYXJzZV9tb2RlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTIyNS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM5Mz1ERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk2LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzk3OmJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjg4PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyNDp2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNzI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzguNTk2MzQ2OTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA1OTczMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyB0aGUgRXhwb3J0ZWQgU3ltYm9sOiBzZWc2XFxfbG9va3VwXFxfbmV4dGhvcCoqXG5cbk9rYXksIHNvIEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBtZW50aW9uZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZT9cIiBUaGF0J3MgdGhlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uLiBCZWZvcmUgSSBjYW4gY29uc2lkZXIgaG93IGl0J3MgYmVpbmcgdXNlZCBvciB3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHN5bWJvbCBpcyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2wgdGFibGVzIG9yIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBhY3R1YWxseSBhdmFpbGFibGUgZm9yIGR5bmFtaWMgbGlua2luZyBvciBleHRlcm5hbCB1c2UsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gVGhhdCdzIHRoZSBmaXJzdCBib3ggSSBuZWVkIHRvIHRpY2sgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NDEuOTA2OTQ2NzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODAwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfbG9va3VwX25leHRob3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzM5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTM4OD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzkwLXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkxOlxcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzkyLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTgzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NDY6XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIHNsd3QtXFx1MDAzZXRhYmxlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ3LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkxMj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MjktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkzMDpcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgbmhhZGRyLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTMxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMzg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzUyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzUzOlxcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM1NC1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzYzPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODQ6XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Njg6XFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo0Mi4wMDQ3NTE3MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjQ0Nzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTRUc2IE1vZHVsZSdzIEludGVybmFsIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBkZWZpbml0ZWx5IHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIOKAkyBpdCdzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIEkgbm90aWNlZCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIGJ1dCBpdCdzIHN0aWxsIGJlaW5nIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgYGx3dHVubmVsX2VuY2FwX29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyBhIGNvbW1vbiBwYXR0ZXJuLCBidXQgaXQgZ290IG1lIHRoaW5raW5nLlxuXG5JJ20gc3RhcnRpbmcgdG8gd29uZGVyIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSBmaXJzdCBvbmUgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NhbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBmb3IgYW55IGluc3RhbmNlcyBvZiBgRVhQT1JUX1NZTUJPTGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBleHBvc2VkIEFQSSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHdoYXQncyBwdWJsaWNseSBhY2Nlc3NpYmxlLiBUaGlzIGRlZXBlciBkaXZlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo0Ni43MzEyMDM2NTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDY1MTEyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NDYuODA4NjgwNTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk1MjUyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUncyBTY29wZSoqXG5cbkFscmlnaHQsIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4gVGhhdCBsaWtlbHkgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBlaXRoZXIgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIG9yIHRoZXkncmUgYmVpbmcgcmVnaXN0ZXJlZCBpbiBhIG1vcmUgY29udHJvbGxlZCBmYXNoaW9uIOKAkyBwZXJoYXBzIHZpYSBhIGBzdHJ1Y3RgIGxvb2t1cCB0YWJsZSBvciBzaW1pbGFyIG1lY2hhbmlzbS4gVGhpcyBpc24ndCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZzsgaXQgY2FuIGxlYWQgdG8gY2xlYW5lciBpbnRlcmZhY2VzIGFuZCBiZXR0ZXIgZW5jYXBzdWxhdGlvbi5cblxuTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBzZWc2X2xvY2FsX2luaXRgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFueSByZWdpc3RyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgdGllIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaGF0IGluaXQgZnVuY3Rpb24gaXMgbXkgYW5jaG9yIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGludGVybmFsIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG1vZHVsZSBpcyBzZXR0aW5nIHVwIGl0cyBlbnRyeSBwb2ludHMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjUwLjUyODIwOTM1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMjIzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjg3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjg4OmludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo1MC42MDU0Mzc1MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEzNjAwNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VHNiBMb2NhbCBJbnB1dCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgZXhwZWN0ZWQsIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2FmX2luZXQ2LmNgIG9yIGEgc2ltaWxhciBmaWxlIOKAkyBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIElQdjYgc3RhY2suIE15IG1haW4gZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGlzIG1vZGlmaWVkIFNFRzYgZnVuY3Rpb25hbGl0eS4gVGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIGl0IHNlZW1zLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpcyB0aHJvd2luZyBhIGJpdCBvZiBhIGN1cnZlYmFsbCBpbiBob3cgSSBzZXQgdXAgdGhlIHRvb2xpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGp1c3QgZHVtcCBib3RoIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgaW50byBgRm9jdXNTeW1ib2xzYC4gQnV0LCBob2xkIG9uLi4uIGBGb2N1c1N5bWJvbHNgIGlzIGRlc2lnbmVkIHRvIHByaW9yaXRpemUgdGhlICpwdWJsaWMtZmFjaW5nKiBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEl0J3MgYWJvdXQgZ2l2aW5nIHRoZSBoaWdoLWxldmVsIHZpZXcgZmlyc3QsIG5vdCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9ucy5cblxuU28sIGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIG1heWJlIGl0ICpzaG91bGQqIGdvIGluIHRoZXJlIGlmIHRoZXJlJ3Mgbm8gYmV0dGVyIGFsdGVybmF0aXZlLCByaWdodD8gV2UgbmVlZCB0byBrZWVwIHRoZSBoaWdoLWxldmVsIGlkZWEgb2YgaG93IHRoZSBwYXRoIG9wZXJhdGVzLlxuXG4uLi4gSGFuZyBvbi4gYHNlZzZfbG9jYWxfaW5wdXRgIGlzICpkZWZpbml0ZWx5KiBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBzZWc2X2xvY2FsX2lucHV0YD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpbmQuIFRoZSByZWdpc3RyYXRpb24gaXMgbGlrZWx5IHRvIGJlIHRoZSBrZXksIHNvIHdoYXQgaXMgaXQgcmVnaXN0ZXJlZCB0bz8gQWgsIGl0J3MgcmVnaXN0ZXJlZCBpbiBgbHd0dW5uZWxfZW5jYXBfb3BzYCEgTGV0J3MgY2hlY2sgYGx3dHVubmVsX2lucHV0YCB0byB0cmFjZSB0aGUgcGF0aCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NTYuMDE5MDQzMDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMwMzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3R1bm5lbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9sd3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmM9NDI5PUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX3htaXQpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMwLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6NDMxOmludCBsd3R1bm5lbF9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMyLXtcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDc5LX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjQ4MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9pbnB1dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjU2LjEwNzM1MjE3M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYwNzYxNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3ltYm9scyBmb3IgSW5jbHVzaW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbHd0dW5uZWxfaW5wdXRgIGxvb2tzIHByb21pc2luZy4gSXQncyBsaWtlbHkgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlLiBUaGVuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBzZWc2X2xvY2FsX2lucHV0YCwgaXQncyBub3QgaW5saW5lZC4gSXQncyB1c2VkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IGhhcyBhIGRpc3RpbmN0IGFkZHJlc3MuXG5cbkkgY2hlY2tlZCBob3cgaXQncyBkZWZpbmVkOiBJdCdzIHBhcnQgb2YgdGhlIGBzZWc2X2xvY2FsX29wc2Agc3RydWN0LCB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gQmVjYXVzZSBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbid0KiBiZSBpbmxpbmVkLiBTbywgeWVwLCBgc2VnNl9sb2NhbF9pbnB1dGAgZGVmaW5pdGVseSBnb2VzIGludG8gYEZvY3VzU3ltYm9sc2AuXG5cbk5vdywgd2hhdCBhYm91dCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgPyBUaGV5IGFyZSBhbHNvIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBzZWc2X2FjdGlvbl90YWJsZWAsIHNvIHRoZXkgc2hhcmUgdGhlIHNhbWUgcHJvcGVydHkgYXMgYHNlZzZfbG9jYWxfaW5wdXRgOiBub3QgaW5saW5lZC4gR3JlYXQsIEknbGwgaW5jbHVkZSB0aGVtIGFzIHdlbGwuXG5cbk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBpdCBkZXBlbmRzIG9uIGBJUFY2YCwgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZD8gVGhlIHBhdGNoIGRlYWxzIHdpdGggYElQUFJPVE9fSVBJUGAsIHNvIElQdjQgb3ZlciBJUHY2LiBJIGtub3cgYElORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBmb3IgSVB2NCBmdW5jdGlvbmFsaXR5LCBidXQgZG9lcyB0aGlzIHJlcXVpcmUgYW55dGhpbmcgc3BlY2lmaWMgZm9yIElQdjQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBBbHNvIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAgaXMgdW5kZXIgYCNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDowMy4xNjgxMTY5MzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzI4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTEzOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVuZF9kdF92cmZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExODQ6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg1LVxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzA4PXN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0Nl9idWlsZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzEzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzE0OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI1LVxcdGNhc2UgSVBQUk9UT19JUElQOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzI2OlxcdFxcdHJldHVybiBpbnB1dF9hY3Rpb25fZW5kX2R0NChza2IsIHNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI3LVxcdGNhc2UgSVBQUk9UT19JUFY2Olxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUyMi0jaWZkZWYgQ09ORklHX05FVF9MM19NQVNURVJfREVWXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MjM6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUyNC1cXHRcXHQuc2x3dF9vcHNcXHQ9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ5LSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU1MDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0NixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1MS1cXHRcXHQuc2x3dF9vcHNcXHQ9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MDMuMjQzODUxMDQ2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc4MzE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZhbGxzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX05FVF9MM19NQVNURVJfREVWYC4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIFRoaXMgbWVhbnMgdGhhdCBpZiBJIGVuYWJsZSBgTkVUX0wzX01BU1RFUl9ERVZgLCBJIHNob3VsZCBhbHNvIGJlIGVuYWJsaW5nIHRoZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgZGlyZWN0aW9uLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgdG8gZW5zdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MDYuODMxNjg1Njc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgxMzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XFx0XFx0XFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjA2LjkwNjUwNDI3OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTg4NzU2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucywganVzdCBlbmFibGluZyBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhhdC4gTm8gcHJvYmxlbSB0aGVyZS4gTm93LCBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgSSBuZWVkIGBORVRfTDNfTUFTVEVSX0RFVmAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuLi4gWWVwLCBhcyBJIHN1c3BlY3RlZCwgYElQVjZfU0VHNl9MV1RVTk5FTGAgbmF0dXJhbGx5IGRlcGVuZHMgb24gYElQVjZgLCBhbmQgYE5FVF9MM19NQVNURVJfREVWYCByZWxpZXMgb24gYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhvc2UgdHdvIHRvIG15IGNvbmZpZ3VyYXRpb24uXG5cbkFscmlnaHQsIG5vdyBsZXQncyBxdWlja2x5IHJlY2FwIHRoZSByZWxldmFudCBcIkZvY3VzU3ltYm9sc1wiIHdlIGFyZSB3b3JraW5nIHdpdGg6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NDZgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkganVzdCBub3RpY2VkIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0NmAgKmFsc28qIGNhbGxzIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFRoaXMgbWFrZXMgYGlucHV0X2FjdGlvbl9lbmRfZHQ0NmAgYSBwcmV0dHkgY29tcGVsbGluZyBjYW5kaWRhdGUgZm9yIG15IGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZC5cblxuRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBhbGwgZnVuY3Rpb25zIHdoaWNoIGNhbGwgYGRlY2FwX2FuZF92YWxpZGF0ZWAgd2l0aCBgSVBQUk9UT19JUElQYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoxMy40OTUyNjMxNDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDQwNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNhcF9hbmRfdmFsaWRhdGUuKklQUFJPVE9fSVBJUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkxLXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUElQKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkzLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUElQKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE5MS1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjEzLjgwNTY3NDM5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0ODA0NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gSSdtIHN0YXJ0aW5nIGhlcmUuIEknbSBnb2luZyB0byBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbyB0aGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyBpdCdzIG5vdCBiZWluZyBpbmxpbmVkLiBUaGF0J3MgZ29vZCBmb3IgZnV6emluZywgcmlnaHQ/IEhtbSwgbGV0J3Mgc2VlLCBpcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHdlIGNhbiB1c2U/IEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBub24tc3RhdGljIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoYCwgbm90IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAuIFdhaXQsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgKmRvZXMqIGNhbGwgYGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaGAgZGlyZWN0bHkuIEFscmlnaHQuIFRoYXQncyBhIGdvb2QgZmluZC4gVGhhdCBtZWFucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzIHRoZSBvbmUgY2FsbGluZyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBhbmQgdGhhdCBjYW4gYmUgYSB0YXJnZXQuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBzZWc2X2xvY2FsX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIGBpbnB1dGAgY2FsbGJhY2sgZm9yIGBsd3R1bm5lbF9lbmNhcF9vcHNgLiBPa2F5LCBzbyBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgYSBrZXkgZm9jdXMuIEdvb2QuIFRoYXQgY29tYmluZWQgd2l0aCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGdpdmVzIHVzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyB0byB0YXJnZXQuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgcmVzdWx0cy4gSSB0aGluayB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgZGF0YSBwYXRoLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikuIFRoZXJlZm9yZSwgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgaXQgYWRkcmVzc2VzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGJlaGF2aW9ycyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSB0aGUgYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDQxLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoyNS4zNTM3MjQxODZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MTkyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiTkVUX0wzX01BU1RFUl9ERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWc2X2xvY2FsX2lucHV0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9kdDRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSBpcyBub3QgcHJvcGVybHkgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHNlZ21lbnQgcm91dGluZyBoZWFkZXIgKFNSdjYpIGluIGRlY2FwX2FuZF92YWxpZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHNlZ21lbnQgcm91dGluZyBsb2NhbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KSBpbiBkZWNhcF9hbmRfdmFsaWRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBzZWdtZW50IHJvdXRpbmcgbG9jYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjI1LjQ5NzE0OTkwMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxMjE1OTYyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoyNS40OTc2NDg5OTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzgxMjEwOTEyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVxcdTAwM2VjYmAgaXMgc2hhcmVkIGFjcm9zcyBwcm90b2NvbCBsYXllcnMsIGFuZCB0aGUgSVB2NCBzdGFjayBtaWdodCBtaXNpbnRlcnByZXQgbGVmdG92ZXIgZGF0YSBmcm9tIHRoZSBJUHY2IGNvbnRyb2wgYmxvY2sgKGBJUDZDQihza2IpYCkgYXMgdmFsaWQgSVB2NCBvcHRpb25zIG9yIGZsYWdzLlxcblxcbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFxcXCJnYXJiYWdlXFxcIiBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFxcXCJ1bmluaXRpYWxpemVkXFxcIiBtZW1vcnkuIFRoZSBgc2tiLVxcdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cXG5cXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTJmYjZkM2Y0YTY1NjdiNTlhZmU0ZjZkZjg5ZjQ1Y2Y5N2EwZjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjA6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MjUuNDk3NjQ5NzMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTk5MDIwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZCBpbiBgc2VnNl9sb2NhbC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgaXQgbm93IGluY2x1ZGVzIHRoaXMgY2hlY2sgZm9yIGBJUFBST1RPX0lQSVBgLiAgVGhhdCdzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggKmV4cGxpY2l0bHkqIHplcm9zIG91dCBgSVBDQihza2IpYCB1c2luZyBgbWVtc2V0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/ICBJZiB5b3UncmUgemVyb2luZyBvdXQgbWVtb3J5LCBpdCBzY3JlYW1zIFwicG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZFwiIHRvIG1lLiAgU28sIGxldCdzIGRyaWxsIGRvd24uICBgSVBDQihza2IpYCBpcyBlc3NlbnRpYWxseSBhIGNhc3Qgb2YgYHNrYi1cdTAwM2VjYmAgdG8gYHN0cnVjdCBpbmV0X3NrYl9wYXJtYC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBza2JgJ3MgY29udHJvbCBibG9jaywgdGhlIGBza2ItXHUwMDNlY2JgIGNoYXIgYXJyYXkuXG5cbkluaXRpYWxseSwgSSBzZWUgYGlpZmAgaXMgc2F2ZWQgYW5kIHRoZW4gcmVzdG9yZWQuIFNvLCBpdCB6ZXJvJ3Mgb3V0IGEgc3RydWN0LCBhbmQgdGhlbiByZWxvYWRzICpvbmUqIHZhbHVlIGludG8gdGhhdCBzdHJ1Y3QuIFdoeSB0aGUgcmVzZXQ/IElmIHRoZSBwYWNrZXQgaXMgZ29pbmcgZnJvbSBJUHY2IHRvIElQdjQgKElQSVApLCB0aGVuIHRoZSBvbGQgY29udHJvbCBibG9jayBjb3VsZCBoYXZlIElQdjYtc3BlY2lmaWMgZGF0YSBpbiBpdC4gVGhpcyBjb3VsZCBjYXVzZSB0aGUgSVB2NCBsYXllciB0byByZWFkIGdhcmJhZ2UgZnJvbSB0aGUgb2xkIElQdjYgY29udGV4dCBpZiBub3QgY2xlYXJlZC4gSXQgY291bGQgYmUgYSBsb2dpYyBidWcgaWYgdGhlIG9sZCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG91dCwgYW5kIHRoZW4gYXJlIHVzZWQgaW5jb3JyZWN0bHkuXG5cblNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiAgYHNrYi1cdTAwM2VjYmAgaXMgYSA0OC1ieXRlIGNoYXIgYXJyYXkuIEl0J3MgKm5vdCogdGVjaG5pY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIHNlbnNlIG9mIEtNU0FOLCBiZWNhdXNlIHRoZSBtZW1vcnkgd2FzIGFsbG9jYXRlZCBhbmQgcHJvYmFibHkgY29udGFpbnMgZGF0YS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgbmV3IHByb3RvY29sIGxheWVyLCB0aGF0IGRhdGEgKmlzKiBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGxheWVyLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24uIERvZXMgS01TQU4gdHJhY2sgYHNrYi1cdTAwM2VjYmAgYXMgdW5pbml0aWFsaXplZD8gSWYgaXQgKndhcyogdHJ1bHkgdW5pbml0aWFsaXplZCBhZnRlciBhbGxvY2F0aW9uLCBLTVNBTiB3b3VsZCBjYXRjaCB0aGF0LiBCdXQgd2hhdCBhYm91dCByZXVzZWQgZGF0YT8gIElmIHRoZSBgc2tiYCBpcyByZXVzZWQgKGFuZCBpdCB1c3VhbGx5IGlzKSwgS01TQU4gcHJvYmFibHkgKndvbid0KiBmbGFnIGl0IHVubGVzcyB0aGUgbWVtb3J5IHdhcyBuZXZlciB3cml0dGVuIHRvICpiZWZvcmUqIHJldXNlLiBLTVNBTiB0cmFja3MgXCJ0cnVseSB1bmluaXRpYWxpemVkXCIgbWVtb3J5IG5vdCBcImluaXRpYWxpemVkIHdpdGggdGhlIHdyb25nIGRhdGEuXCJcblxuSG93ZXZlciwgaWYgdGhlIGBza2JgIHdhcyAqZnJlc2hseSogYWxsb2NhdGVkLCBhbmQgYHNrYi1cdTAwM2VjYmAgd2Fzbid0IGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLCBLTVNBTiAqd291bGQqIGNhdGNoIGl0IHRoZW4sIEkgdGhpbmsuICBJIHNob3VsZCBjaGVjayBgYWxsb2Nfc2tiYCBhbmQgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIGJlIGNlcnRhaW4uIElzIGBza2ItXHUwMDNlY2JgIHplcm9lZCBvbiBhbGxvY2F0aW9uPyBVc3VhbGx5IGl0IGlzbid0LlxuXG5TbywgdGhlIGlzc3VlIGlzbid0IGFib3V0IEtNU0FOIGNhdGNoaW5nIHRydWx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbnN0ZWFkLCBpdCdzIGFib3V0IHRoZSBsb2dpYy4gSWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCBsYXRlciAqYW5kKiBpdCBjb250YWlucyBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGNvbnRleHQsIGl0J3MgYSBsb2dpYyBidWcuICBIb3dldmVyLCBpZiBpdCBjb250YWlucyAqdHJ1bHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYWxsb2NhdGlvbiwgS01TQU4gc2hvdWxkIGhhdmUgYWxyZWFkeSBmbGFnZ2VkIGl0LiBJdCBzb3VuZHMgbGlrZSB0aGUgZGV2ZWxvcGVyIHplcm9lZCBpdCBvdXQgdG8gYmUgc2FmZSwgdG8gY2xlYXIgb3V0IHRoZSBwcmV2aW91cyBsYXllcidzIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDozNi42OTY2NzMxOThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4OTUwNTgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKmNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDozNi43ODU2MzYyNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI0NTA4MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkRpcmVjdGx5IEV4YW1pbmluZyBgX19hbGxvY19za2JgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYnVmZmVycywgbGlrZWx5IHJlbGF0ZWQgdG8ga2VybmVsLWxldmVsIGRhdGEgdHJhbnNtaXNzaW9uLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24sIEkgdGhpbmsgaXTigJlzIGJlc3QgdG8gYnlwYXNzIGFueSBpbnRlcm1lZGlhdGUgYWJzdHJhY3Rpb25zIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2Nfc2tiYCBpdHNlbGYuIEkgd2FudCBhIGNsZWFyLCBncmFudWxhciB2aWV3IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgYW5kIHdhbnQgdG8gYW5hbHl6ZSB3aGF0IGlzIGhhcHBlbmluZywgZG93biBpbiB0aGUgd2VlZHMsIHdpdGhvdXQgZGlzdHJhY3Rpb25zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjM5LjcxMDE0NzcwNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjM3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjA2PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6NjU4OiAqXFx0X19hbGxvY19za2JcXHQtXFx0YWxsb2NhdGUgYSBuZXR3b3JrIGJ1ZmZlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1OS0gKlxcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NzMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtNjc1LVxcdFxcdFxcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3NDY6RVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzQ3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzYxPXN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cXHQgICAgKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6Nzc3OlxcdFxcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXFx0XFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz04Mzg9c3RydWN0IHNrX2J1ZmYgKm5hcGlfYWxsb2Nfc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cXHQgICAgKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6ODU1OlxcdFxcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCB8IFNLQl9BTExPQ19OQVBJLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMTc3PXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTAtXFx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgKyBza2ItXFx1MDAzZWRhdGFfbGVuO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxOTE6XFx0biA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTItXFx0XFx0XFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjI5LVxcdGludCBmbGFncyA9IHNrYl9hbGxvY19yeF9mbGFnKHNrYikgfCAoZmNsb25lID8gU0tCX0FMTE9DX0ZDTE9ORSA6IDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzA6XFx0c3RydWN0IHNrX2J1ZmYgKm4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzaywgZmxhZ3MsIE5VTUFfTk9fTk9ERSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjIzMS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cXHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MjA6XFx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICsgc2tiLVxcdTAwM2VsZW4gKyBuZXd0YWlscm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVxcdFxcdFxcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDk0NC1cXG5uZXQvY29yZS9za2J1ZmYuYzo0OTQ1OlxcdFxcdFxcdG5za2IgPSBfX2FsbG9jX3NrYihoc2l6ZSArIGRvZmZzZXQgKyBoZWFkcm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ2LVxcdFxcdFxcdFxcdFxcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MzkuODA4ODE5ODk0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTQyOTgxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCBmb3IgYHNrYi1cdTAwM2VjYmAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgc291cmNlIGZvciBgX19hbGxvY19za2JgLlwiIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gaG93IHRoZSBgc2tiLVx1MDAzZWNiYCBmaWVsZCBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyLCB1cG9uIGFsbG9jYXRpb24sIHRoZSBgc2tiLVx1MDAzZWNiYCAoY29udHJvbCBibG9jaykgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0LiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgZm9yIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBJJ20gd29ya2luZyB3aXRoIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGltcGFjdCByYWNlIGNvbmRpdGlvbnMgYW5kIG90aGVyIHN1YnRsZSBidWdzIGlmIG92ZXJsb29rZWQuIFNvLCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDMuNTYzMTIyOTU4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjc0OlxcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIDY3NTpcXHRcXHRcXHRcXHQgICAgaW50IGZsYWdzLCBpbnQgbm9kZSlcXG4gNjc2OlxcdHtcXG4gNjc3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA2Nzg6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xcbiA2Nzk6XFx0XFx0dTggKmRhdGE7XFxuIDY4MDpcXHRcXG4gNjgxOlxcdFxcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19SWCkpXFxuIDY4MjpcXHRcXHRcXHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xcbiA2ODU6XFx0XFx0XFx0Y2FjaGUgPSBuZXRfaG90ZGF0YS5za2J1ZmZfZmNsb25lX2NhY2hlO1xcbiA2ODY6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjg3OlxcdFxcdH1cXG4gNjg4OlxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xcbiA2ODk6XFx0XFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFxcdTAwMjZcXHUwMDI2IG5vZGUgIT0gbnVtYV9tZW1faWQoKSkpXFxuIDY5MDpcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xcbiA2OTM6XFx0XFx0XFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xcbiA2OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA2OTU6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY5NjpcXHRcXHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXFx1MDAyNlxcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xcbiA2OTc6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiA2OTg6XFx0XFx0XFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KGZhbHNlKTtcXG4gNjk5OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiA3MDA6XFx0XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRpZiAoIXNrYikge1xcbiA3MDM6XFx0ZmFsbGJhY2s6XFxuIDcwNDpcXHRcXHRcXHRza2IgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGUsIGdmcF9tYXNrIFxcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xcbiA3MDU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA3MDY6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcwNzpcXHRcXHR9XFxuIDcwODpcXHRcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0LyogV2UgZG8gb3VyIGJlc3QgdG8gYWxpZ24gc2tiX3NoYXJlZF9pbmZvIG9uIGEgc2VwYXJhdGUgY2FjaGVcXG4gNzExOlxcdFxcdCAqIGxpbmUuIEl0IHVzdWFsbHkgd29ya3MgYmVjYXVzZSBrbWFsbG9jKFggXFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXFxuIDcxMjpcXHRcXHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cXG4gNzEzOlxcdFxcdCAqIEJvdGggc2tiLVxcdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cXG4gNzE0OlxcdFxcdCAqL1xcbiA3MTU6XFx0XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XFxuIDcxNjpcXHRcXHRpZiAodW5saWtlbHkoIWRhdGEpKVxcbiA3MTc6XFx0XFx0XFx0Z290byBub2RhdGE7XFxuIDcxODpcXHRcXHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxcbiA3MTk6XFx0XFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXFxuIDcyMDpcXHRcXHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxcbiA3MjE6XFx0XFx0ICovXFxuIDcyMjpcXHRcXHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xcbiA3MjU6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmZfZmNsb25lcyAqZmNsb25lcztcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0XFx0XFx0ZmNsb25lcyA9IGNvbnRhaW5lcl9vZihza2IsIHN0cnVjdCBza19idWZmX2ZjbG9uZXMsIHNrYjEpO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRcXHQvKiBza2ItXFx1MDAzZWZjbG9uZSBpcyBhIDJiaXRzIGZpZWxkLlxcbiA3MzA6XFx0XFx0XFx0ICogUmVwbGFjZSBleHBlbnNpdmUgUk1XIChza2ItXFx1MDAzZWZjbG9uZSA9IFNLQl9GQ0xPTkVfT1JJRylcXG4gNzMxOlxcdFxcdFxcdCAqIHdpdGggYSBzaW5nbGUgT1IuXFxuIDczMjpcXHRcXHRcXHQgKi9cXG4gNzMzOlxcdFxcdFxcdEJVSUxEX0JVR19PTihTS0JfRkNMT05FX1VOQVZBSUxBQkxFICE9IDApO1xcbiA3MzQ6XFx0XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXFx1MDAzZWZjbG9uZSAhPSBTS0JfRkNMT05FX1VOQVZBSUxBQkxFKTtcXG4gNzM1OlxcdFxcdFxcdHNrYi1cXHUwMDNlZmNsb25lIHw9IFNLQl9GQ0xPTkVfT1JJRztcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZmY2xvbmVzLVxcdTAwM2VmY2xvbmVfcmVmLCAxKTtcXG4gNzM4OlxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0bm9kYXRhOlxcbiA3NDM6XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlLCBza2IpO1xcbiA3NDQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDc0NTpcXHR9XFxuIDc0NjpcXHRFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0LyoqXFxuIDc0OTpcXHQgKlxcdF9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2VcXG4gNzUwOlxcdCAqXFx0QGRldjogbmV0d29yayBkZXZpY2UgdG8gcmVjZWl2ZSBvblxcbiA3NTE6XFx0ICpcXHRAbGVuOiBsZW5ndGggdG8gYWxsb2NhdGVcXG4gNzUyOlxcdCAqXFx0QGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8gYWxsb2Nfc2tiXFxuIDc1MzpcXHQgKlxcbiA3NTQ6XFx0ICpcXHRBbGxvY2F0ZSBhIG5ldyBcXHUwMDI2c2tfYnVmZiBhbmQgYXNzaWduIGl0IGEgdXNhZ2UgY291bnQgb2Ygb25lLiBUaGVcXG4gNzU1OlxcdCAqXFx0YnVmZmVyIGhhcyBORVRfU0tCX1BBRCBoZWFkcm9vbSBidWlsdCBpbi4gVXNlcnMgc2hvdWxkIGFsbG9jYXRlXFxuIDc1NjpcXHQgKlxcdHRoZSBoZWFkcm9vbSB0aGV5IHRoaW5rIHRoZXkgbmVlZCB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoZVxcbiA3NTc6XFx0ICpcXHRidWlsdCBpbiBzcGFjZS4gVGhlIGJ1aWx0IGluIHNwYWNlIGlzIHVzZWQgZm9yIG9wdGltaXNhdGlvbnMuXFxuIDc1ODpcXHQgKlxcbiA3NTk6XFx0ICpcXHQlTlVMTCBpcyByZXR1cm5lZCBpZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS5cXG4gNzYwOlxcdCAqL1xcbiA3NjE6XFx0c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwX21hc2spXFxuIDc2MzpcXHR7XFxuIDc2NDpcXHRcXHRzdHJ1Y3QgcGFnZV9mcmFnX2NhY2hlICpuYztcXG4gNzY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDc2NjpcXHRcXHRib29sIHBmbWVtYWxsb2M7XFxuIDc2NzpcXHRcXHR2b2lkICpkYXRhO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRsZW4gKz0gTkVUX1NLQl9QQUQ7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIElmIHJlcXVlc3RlZCBsZW5ndGggaXMgZWl0aGVyIHRvbyBzbWFsbCBvciB0b28gYmlnLFxcbiA3NzI6XFx0XFx0ICogd2UgdXNlIGttYWxsb2MoKSBmb3Igc2tiLVxcdTAwM2VoZWFkIGFsbG9jYXRpb24uXFxuIDc3MzpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDMuNTYzODIwNTI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjY3Nzg4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3Rpbmcgc2tidWZmX2NsZWFyKHNrYikqKlxuXG5Pa2F5LCBzbyBgc2tidWZmX2NsZWFyKHNrYilgIGhhcyBiZWVuIGNhbGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIGlzIHRvIGRlbHZlIGludG8gd2hhdCB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uIC0gXCJjbGVhclwiIHR5cGljYWxseSBpbXBsaWVzIHNvbWUgZm9ybSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uIG9yIHJlc2V0dGluZyBvZiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gYHNrX2J1ZmZgIHN0cnVjdCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWJzb2x1dGVseSBjZW50cmFsIHRvIHBhY2tldCBoYW5kbGluZy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMganVzdCB6ZXJvaW5nIG91dCBkYXRhPyBPciBpcyBpdCByZWxlYXNpbmcgYnVmZmVycyBiYWNrIHRvIGEgcG9vbD8gRG9lcyBpdCBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWxseSByYWNlLWNvbmRpdGlvbiBpc3N1ZXMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBleGFjdGx5ICp3aGF0KiBwYXJ0IG9mIHRoZSBidWZmZXIgaXMgYmVpbmcgdGFyZ2V0ZWQsIGFuZCB1bmRlciB3aGF0IGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBzdGFjayBpdHNlbGYgY29udGFpbnMgc28gbXVjaCBjcml0aWNhbCBkYXRhIGFib3V0IG5ldHdvcmtpbmcsIGZyb20gaGVhZGVycyB0byBwYXlsb2FkLiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjcml0aWNhbC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWNoYW5pc21zLCBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBwYWNrZXQgbGlmZWN5Y2xlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZsb3cuIEl0IG5lZWRzIHRvIGFsaWduIHdpdGggbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nLCBvciBJIHdpbGwgaGF2ZSB0byBzdGFydCB0byBkaWcgaW4gZGVlcGVyIHRvIHVuZGVyc3RhbmQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjQ2LjkzMDYwMjU2OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NjI2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmX2NsZWFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTI4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpuYXBpX3NrYl9jYWNoZV9nZXQoYm9vbCBhbGxvYylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzozMTY6c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zNDQ9dTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM3OS1cXHRcXHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmM6MzgwOlxcdFxcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zODEtXFx0fVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ0NzpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXFx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXFx1MDAyNnNpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5OTpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1OS1cXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNTYxLVxcdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NzQ9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNy1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6NzA4OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDcuMDA1NDg3MzUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjYwNzA3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIGBza2J1ZmZfY2xlYXJgLiBXaGF0IGlzIHRoaXMgZnVuY3Rpb24gbWVhbnQgdG8gZG8/IFByb2JhYmx5IHRvIGluaXRpYWxpemUgb3IgcmVzZXQgYSBzb2NrZXQgYnVmZmVyLCBgc2tiYC4gS25vd2luZyB0aGUga2VybmVsLCBpdOKAmXMgbGlrZWx5IGEgbG93LWxldmVsIHJvdXRpbmUgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbmV0d29yayBvcGVyYXRpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgaXQncyBwcm9iYWJseSBjbGVhcmluZyBvciB6ZXJvaW5nIG91dCBjcml0aWNhbCBmaWVsZHMgd2l0aGluIHRoZSBza2Igc3RydWN0dXJlLCBwcmVwYXJpbmcgaXQgZm9yIHJlLXVzZSBvciB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIFRoaW5raW5nIGFoZWFkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBgc2tiYCBpdCBjbGVhcnMgb3IgemVyb2VzIGFuZCB3aHkuIERvZXMgaXQgaGFuZGxlIGRhdGEgcG9pbnRlcnMsIG1ldGFkYXRhLCBjb3VudGVycywgZmxhZ3M/IFdoYXQgYWJvdXQgcmVmZXJlbmNlIGNvdW50cz8gQW55IHBvdGVudGlhbCBwaXRmYWxscyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHRoZSBzb2NrZXQgbGF5ZXIsIHNvIGl0J3Mgd29ydGggYSBkZWVwIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSBob3cgaXQgd29ya3MgYW5kIHZlcmlmeSBteSBwcmVzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1MC4zMzE1NjE0ODZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcXG4gMzE5OlxcdFxcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxcbiAzMjA6XFx0XFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxcbiAzMjE6XFx0XFx0ICovXFxuIDMyMjpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFxcdTAwM2M9IDEyOCk7XFxuIDMyMzpcXHRcXHRtZW1zZXQoc2tiLCAwLCAxMjgpO1xcbiAzMjQ6XFx0XFx0YmFycmllcigpO1xcbiAzMjU6XFx0XFx0bWVtc2V0KCh2b2lkICopc2tiICsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQvKipcXG4gMzI5OlxcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcXG4gMzMwOlxcdCAqIEBza2JzOiBwb2ludGVyIHRvIGFuIGF0IGxlYXN0IEBuLXNpemVkIGFycmF5IHRvIGZpbGwgd2l0aCBza2IgcG9pbnRlcnNcXG4gMzMxOlxcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXFxuIDMzMjpcXHQgKlxcbiAzMzM6XFx0ICogVHJpZXMgdG8gb2J0YWluIEBuIFxcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xcbiAzMzQ6XFx0ICogdGhlIHBvaW50ZXJzIGludG8gdGhlIHByb3ZpZGVkIGFycmF5IEBza2JzLiBJZiB0aGVyZSBhcmUgbGVzcyBlbnRyaWVzXFxuIDMzNTpcXHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTAuMzMyMTcxMjA2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTM1NjgxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYHNrYnVmZl9jbGVhcmAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIE15IG1lbnRhbCBtb2RlbCBpcyB0ZWxsaW5nIG1lIGl0IHplcm9lcyBvdXQgdGhlIG1lbW9yeSB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1cCB0byB0aGUgYHRhaWxgIHBvaW50ZXIuIEdvb2QuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyByZWFsbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIG9wZXJhdGlvbiwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbCBibG9jaywgb3IgYGNiYCwgd2l0aGluIHRoZSBgc3RydWN0IHNrX2J1ZmZgIGxheW91dC4gSSBuZWVkIHRvIHZpc3VhbGl6ZSB0aGUgbWVtb3J5IGxheW91dCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsZWFyaW5nIGFmZmVjdHMgdGhlIGNvbnRyb2wgZGF0YS4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGNsZWFyIGltcGFjdHMgYW55IG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTMuNjg1NzQyMjk5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5MDY3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNrX2J1ZmYgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg4NS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg4NjpzdHJ1Y3Qgc2tfYnVmZiB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04ODctXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1My44MDM2NTM4MzdaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MjAzMDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBza19idWZmYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZvY3VzIGlzICpzdHJ1Y3Qgc2tfYnVmZiosIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgbWUgaW4gYSBzcGVjaWZpYyBmcmFtZSBvZiBtaW5kLiBUaGlzIG1lYW5zIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIG9mIG5ldHdvcmsgdHJhZmZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSwgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSBuZXR3b3JrIHBhY2tldHMgZmxvd2luZyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IGl0cyBpbnRyaWNhdGUgZGV0YWlsczogdGhlIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY2hhaW5pbmcgY2FwYWJpbGl0aWVzLCB0aGUgdmFyaW91cyBmbGFncyBhbmQgY29udHJvbCBmaWVsZHMgdGhhdCBkaWN0YXRlIGhvdyBhIHBhY2tldCBpcyBoYW5kbGVkIGF0IGRpZmZlcmVudCBsYXllcnMuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBzdHJ1Y3TigJlzIGRlZmluaXRpb24sIGFudGljaXBhdGluZyBwb2ludGVycyB0byBtZXRhZGF0YSwgdGhlIHBheWxvYWQgaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtYnVmIGxheWVyIGlmIGFwcGxpY2FibGUuIE15IG1pbmQgaXMgYWxyZWFkeSBza2V0Y2hpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBLbm93aW5nIGBza19idWZmYCBpcyB0aGUgY29yZSBtYWtlcyBtZSBleHBlY3QgdG8gc2VlIHNvbWUgY2xldmVyIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbGx5IHNvbWUgbG9ja2xlc3Mgc3RydWN0dXJlcyB0byBmYWNpbGl0YXRlIHBhcmFsbGVsaXNtLCBhbmQgbGlrZWx5IHNvbWUgY2FyZWZ1bGx5IGNyYWZ0ZWQgbWVtb3J5IGxheW91dHMgZm9yIGNhY2hlIGVmZmljaWVuY3kuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGlzIGRhdGEgc3RydWN0dXJlLCBpdHMgaW50ZXJuYWwgc3RhdGUsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSB3aWRlciBrZXJuZWwgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTcuNDQ1Njg4ODIxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4NixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODY6XFx0c3RydWN0IHNrX2J1ZmYge1xcbiA4ODc6XFx0XFx0dW5pb24ge1xcbiA4ODg6XFx0XFx0XFx0c3RydWN0IHtcXG4gODg5OlxcdFxcdFxcdFxcdC8qIFRoZXNlIHR3byBtZW1iZXJzIG11c3QgYmUgZmlyc3QgdG8gbWF0Y2ggc2tfYnVmZl9oZWFkLiAqL1xcbiA4OTA6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqbmV4dDtcXG4gODkxOlxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnByZXY7XFxuIDg5MjpcXHRcXG4gODkzOlxcdFxcdFxcdFxcdHVuaW9uIHtcXG4gODk0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmRldjtcXG4gODk1OlxcdFxcdFxcdFxcdFxcdC8qIFNvbWUgcHJvdG9jb2xzIG1pZ2h0IHVzZSB0aGlzIHNwYWNlIHRvIHN0b3JlIGluZm9ybWF0aW9uLFxcbiA4OTY6XFx0XFx0XFx0XFx0XFx0ICogd2hpbGUgZGV2aWNlIHBvaW50ZXIgd291bGQgYmUgTlVMTC5cXG4gODk3OlxcdFxcdFxcdFxcdFxcdCAqIFVEUCByZWNlaXZlIHBhdGggaXMgb25lIHVzZXIuXFxuIDg5ODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gODk5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRkZXZfc2NyYXRjaDtcXG4gOTAwOlxcdFxcdFxcdFxcdH07XFxuIDkwMTpcXHRcXHRcXHR9O1xcbiA5MDI6XFx0XFx0XFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYm5vZGU7IC8qIHVzZWQgaW4gbmV0ZW0sIGlwNCBkZWZyYWcsIGFuZCB0Y3Agc3RhY2sgKi9cXG4gOTAzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiA5MDQ6XFx0XFx0XFx0c3RydWN0IGxsaXN0X25vZGVcXHRsbF9ub2RlO1xcbiA5MDU6XFx0XFx0fTtcXG4gOTA2OlxcdFxcbiA5MDc6XFx0XFx0c3RydWN0IHNvY2tcXHRcXHQqc2s7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdHVuaW9uIHtcXG4gOTEwOlxcdFxcdFxcdGt0aW1lX3RcXHRcXHR0c3RhbXA7XFxuIDkxMTpcXHRcXHRcXHR1NjRcXHRcXHRza2JfbXN0YW1wX25zOyAvKiBlYXJsaWVzdCBkZXBhcnR1cmUgdGltZSAqL1xcbiA5MTI6XFx0XFx0fTtcXG4gOTEzOlxcdFxcdC8qXFxuIDkxNDpcXHRcXHQgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5XFxuIDkxNTpcXHRcXHQgKiBsYXllci4gUGxlYXNlIHB1dCB5b3VyIHByaXZhdGUgdmFyaWFibGVzIHRoZXJlLiBJZiB5b3VcXG4gOTE2OlxcdFxcdCAqIHdhbnQgdG8ga2VlcCB0aGVtIGFjcm9zcyBsYXllcnMgeW91IGhhdmUgdG8gZG8gYSBza2JfY2xvbmUoKVxcbiA5MTc6XFx0XFx0ICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLlxcbiA5MTg6XFx0XFx0ICovXFxuIDkxOTpcXHRcXHRjaGFyXFx0XFx0XFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0dW5pb24ge1xcbiA5MjI6XFx0XFx0XFx0c3RydWN0IHtcXG4gOTIzOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmdcXHRfc2tiX3JlZmRzdDtcXG4gOTI0OlxcdFxcdFxcdFxcdHZvaWRcXHRcXHQoKmRlc3RydWN0b3IpKHN0cnVjdCBza19idWZmICpza2IpO1xcbiA5MjU6XFx0XFx0XFx0fTtcXG4gOTI2OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR0Y3BfdHNvcnRlZF9hbmNob3I7XFxuIDkyNzpcXHQjaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xcbiA5Mjg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZ1xcdFxcdF9za19yZWRpcjtcXG4gOTI5OlxcdCNlbmRpZlxcbiA5MzA6XFx0XFx0fTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0I2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSlcXG4gOTMzOlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHQgX25mY3Q7XFxuIDkzNDpcXHQjZW5kaWZcXG4gOTM1OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGxlbixcXG4gOTM2OlxcdFxcdFxcdFxcdFxcdGRhdGFfbGVuO1xcbiA5Mzc6XFx0XFx0X191MTZcXHRcXHRcXHRtYWNfbGVuLFxcbiA5Mzg6XFx0XFx0XFx0XFx0XFx0aGRyX2xlbjtcXG4gOTM5OlxcdFxcbiA5NDA6XFx0XFx0LyogRm9sbG93aW5nIGZpZWxkcyBhcmUgX25vdF8gY29waWVkIGluIF9fY29weV9za2JfaGVhZGVyKClcXG4gOTQxOlxcdFxcdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxcbiA5NDI6XFx0XFx0ICovXFxuIDk0MzpcXHRcXHRfX3UxNlxcdFxcdFxcdHF1ZXVlX21hcHBpbmc7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdC8qIGlmIHlvdSBtb3ZlIGNsb25lZCBhcm91bmQgeW91IGFsc28gbXVzdCBhZGFwdCB0aG9zZSBjb25zdGFudHMgKi9cXG4gOTQ2OlxcdCNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG4gOTQ3OlxcdCNkZWZpbmUgQ0xPTkVEX01BU0tcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiA5NDg6XFx0I2Vsc2VcXG4gOTQ5OlxcdCNkZWZpbmUgQ0xPTkVEX01BU0tcXHQxXFxuIDk1MDpcXHQjZW5kaWZcXG4gOTUxOlxcdCNkZWZpbmUgQ0xPTkVEX09GRlNFVFxcdFxcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX2Nsb25lZF9vZmZzZXQpXFxuIDk1MjpcXHRcXG4gOTUzOlxcdFxcdC8qIHByaXZhdGU6ICovXFxuIDk1NDpcXHRcXHRfX3U4XFx0XFx0XFx0X19jbG9uZWRfb2Zmc2V0WzBdO1xcbiA5NTU6XFx0XFx0LyogcHVibGljOiAqL1xcbiA5NTY6XFx0XFx0X191OFxcdFxcdFxcdGNsb25lZDoxLFxcbiA5NTc6XFx0XFx0XFx0XFx0XFx0bm9oZHI6MSxcXG4gOTU4OlxcdFxcdFxcdFxcdFxcdGZjbG9uZToyLFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0cGVla2VkOjEsXFxuIDk2MDpcXHRcXHRcXHRcXHRcXHRoZWFkX2ZyYWc6MSxcXG4gOTYxOlxcdFxcdFxcdFxcdFxcdHBmbWVtYWxsb2M6MSxcXG4gOTYyOlxcdFxcdFxcdFxcdFxcdHBwX3JlY3ljbGU6MTsgLyogcGFnZV9wb29sIHJlY3ljbGUgaW5kaWNhdG9yICovXFxuIDk2MzpcXHQjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXFxuIDk2NDpcXHRcXHRfX3U4XFx0XFx0XFx0YWN0aXZlX2V4dGVuc2lvbnM7XFxuIDk2NTpcXHQjZW5kaWZcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxcbiA5Njg6XFx0XFx0ICogdXNpbmcgYSBzaW5nbGUgbWVtY3B5KCkgaW4gX19jb3B5X3NrYl9oZWFkZXIoKVxcbiA5Njk6XFx0XFx0ICovXFxuIDk3MDpcXHRcXHRzdHJ1Y3RfZ3JvdXAoaGVhZGVycyxcXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0LyogcHJpdmF0ZTogKi9cXG4gOTczOlxcdFxcdF9fdThcXHRcXHRcXHRfX3BrdF90eXBlX29mZnNldFswXTtcXG4gOTc0OlxcdFxcdC8qIHB1YmxpYzogKi9cXG4gOTc1OlxcdFxcdF9fdThcXHRcXHRcXHRwa3RfdHlwZTozOyAvKiBzZWUgUEtUX1RZUEVfTUFYICovXFxuIDk3NjpcXHRcXHRfX3U4XFx0XFx0XFx0aWdub3JlX2RmOjE7XFxuIDk3NzpcXHRcXHRfX3U4XFx0XFx0XFx0ZHN0X3BlbmRpbmdfY29uZmlybToxO1xcbiA5Nzg6XFx0XFx0X191OFxcdFxcdFxcdGlwX3N1bW1lZDoyO1xcbiA5Nzk6XFx0XFx0X191OFxcdFxcdFxcdG9vb19va2F5OjE7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdC8qIHByaXZhdGU6ICovXFxuIDk4MjpcXHRcXHRfX3U4XFx0XFx0XFx0X19tb25vX3RjX29mZnNldFswXTtcXG4gOTgzOlxcdFxcdC8qIHB1YmxpYzogKi9cXG4gOTg0OlxcdFxcdF9fdThcXHRcXHRcXHR0c3RhbXBfdHlwZToyO1xcdC8qIFNlZSBza2JfdHN0YW1wX3R5cGUgKi9cXG4gOTg1OlxcdCNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1Ny40NDYyNzMwODFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwOTYxNDI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBgc2tfYnVmZi1cdTAwM2VjYmAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgY2JgIGZpZWxkIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLiBJdCdzIGF0IGEga25vd24gb2Zmc2V0IOKAkyA0MCBvciA0OCBieXRlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBpcyB0aGF0IGB0YWlsYCBjb21lcyBtdWNoIGxhdGVyLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQsIGl0J3MgZ29pbmcgdG8gemVybyBvdXQgdGhlIGVudGlyZSBgY2JgIHJlZ2lvbiBiZWNhdXNlIGBtZW1zZXRgIGlzIHVzZWQgdXAgdG8gdGhlIGB0YWlsYCBwb2ludGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaWYgYHNrYnVmZl9jbGVhcmAgemVyb2VkIG91dCBgY2JgLCB0aGVuIGl0ICpzaG91bGQqIGJlIHplcm9lZCBvbiBldmVyeSBuZXcgYWxsb2NhdGlvbiwgd2hpY2ggc2VlbXMgbG9naWNhbCBiZWNhdXNlIGBjYmAgaXMgcmV1c2VkIGJ5IHZhcmlvdXMgbmV0d29yayBsYXllcnMuXG5cblRoZW4gdGhlIGNvbmNlcm4gYXJvc2UgdGhhdCBhcyBhIHBhY2tldCBpcyBwcm9jZXNzZWQg4oCTIGZyb20gZHJpdmVyIHRvIElQLCB0byBUQ1AsIHdoYXRldmVyIOKAkyBlYWNoIGxheWVyICptaWdodCogd3JpdGUgZGF0YSBpbnRvIGBjYmAuIElmIGEgc3Vic2VxdWVudCBsYXllciBleHBlY3RzIGBjYmAgdG8gYmUgemVyb2VkLCBidXQgaXQgaW5zdGVhZCBjb250YWlucyBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91cyBsYXllciwgd291bGRuJ3QgdGhhdCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gSSBtZWFuLCBzaG91bGRuJ3QgS01TQU4gY2F0Y2ggdGhpcyBraW5kIG9mIHRoaW5nP1xuXG5CdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgS01TQU4ncyBkZWZpbml0aW9uIG9mIFwidW5pbml0aWFsaXplZFwiIGlzbid0IHF1aXRlIHRoZSBzYW1lIGFzIGEgZnVuY3Rpb25hbCBpc3N1ZSBoZXJlLiBLTVNBTiB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBTaW5jZSBgY2JgICppcyogemVyb2VkIG9uIGFsbG9jYXRpb24gKHRoYW5rcyB0byBgc2tidWZmX2NsZWFyYCksIEtNU0FOIHdvdWxkIGNvbnNpZGVyIGl0IFwiaW5pdGlhbGl6ZWQuXCIgV2hldGhlciBhIHByZXZpb3VzIGxheWVyIGhhcyB3cml0dGVuIHRvIGl0IG9yIG5vdCwgS01TQU4gc2VlcyBpdCBhcyBpbml0aWFsaXplZC4gVGhlIG1lbW9yeSBoYXMgYmVlbiB3cml0dGVuIHRvLCBldmVuIGlmIHRoZSB2YWx1ZSB3cml0dGVuIGlzIHplcm8sIGFuZCB0aGF0J3MgYWxsIHRoYXQgbWF0dGVycyB0byBLTVNBTi5cblxuU28sIHRoaXMgbWVhbnMgS01TQU4gd29uJ3QgZmxhZyB0aGlzIHNjZW5hcmlvLCBldmVuIGlmIHRoZSBjb2RlICpleHBlY3RzKiBhIHplcm9lZCBgY2JgIGFuZCByZWFkcyBhIG5vbi16ZXJvIHZhbHVlIGxlZnQgYnkgYW4gZWFybGllciBsYXllci4gSXQncyBhIFwiZ2FyYmFnZVwiIHZhbHVlIHRvIHRoZSBuZXcgbGF5ZXIsIGJ1dCBpdCdzIG5vdCB1bmluaXRpYWxpemVkIGluIEtNU0FOJ3Mgc2Vuc2UuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgYW5vdGhlciBhbmdsZS4gV2hhdCBpZiB0aGUgYnVnIGlzbid0IGEgZGlyZWN0IHJlYWQgb2YgYHNrYi1cdTAwM2VjYmAgYnV0IGEgbW9yZSBzdWJ0bGUgaXNzdWU/IFdoYXQgaWYgYElQQ0Ioc2tiKWAgaXMgYmVpbmcgcmVhZCwgYW5kICpzb21lKiBvZiB0aGUgZmllbGRzICp3aXRoaW4qIGBJUENCYCB3ZXJlIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBieSBhIHByaW9yIGxheWVyLCBkZXNwaXRlIGBza2J1ZmZfY2xlYXJgPyBJbiB0aGF0IGNhc2UsIGBza2J1ZmZfY2xlYXJgIHdvdWxkbid0IGJlIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS5cblxuQnV04oCmIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBza2J1ZmZfY2xlYXJgIGFjdHVhbGx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIGB0YWlsYCwgaW5jbHVkaW5nIGBjYmAuIFllcywgSSdtIGNvbmZpZGVudCB0aGF0IGBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpYCBkb2VzIHRoZSBqb2IuIFRoYXQgY29uZmlybXMgdGhhdCB0aGUgZW50aXJlIGBjYmAgcmVnaW9uIGlzIGluZGVlZCB6ZXJvZWQuIFRoYXQgbWVhbnMgdGhhdCBhbnkgc3Vic2VxdWVudCB3cml0ZXMgdG8gcGFydHMgb2YgYGNiYCBpbml0aWFsaXplIHRob3NlIHNwZWNpZmljIGJ5dGVzLiBUaGUgcmVtYWluZGVyIHRoYXQgKndhc24ndCogd3JpdHRlbiB0byByZW1haW5zIHplcm9lZCwgd2hpY2ggaXMgYSBkZWZpbmVkIHZhbHVlLlxuXG5UaGVyZWZvcmUsIGluIG5vIHNjZW5hcmlvIHdvdWxkIGBjYmAgY29udGFpbiAqS01TQU4qLXVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBtaWdodCBjb250YWluIHN0YWxlLCBmdW5jdGlvbmFsbHkgaW5jb3JyZWN0IGRhdGEsIGJ1dCB0aGF0J3MgYSBkaWZmZXJlbnQgcHJvYmxlbSBhbHRvZ2V0aGVyLCBhbmQgS01TQU4gd29uJ3QgY2F0Y2ggaXQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB3aGF0IGhhcHBlbnMgd2hlbiBjbG9uaW5nIG9yIGNvcHlpbmcgYW4gc2tiLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI1OjA4LjU0MjQyMDY3N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODE1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3B5X3NrYl9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1NS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1Ny17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDU6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTItXFx0bi1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTM6XFx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY1Ny1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjU5LVxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDU6XFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzMyLVxcdFxcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzMzOlxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDczNC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk2MjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDk2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MDguNjEyMDA5NTdaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MDgxMTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgYF9fY29weV9za2JfaGVhZGVyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBsaWtlbHkgZGVhbGluZyB3aXRoIHBhY2tldCBtYW5pcHVsYXRpb24gYW5kIGRhdGEgdHJhbnNmZXIgYXQgYSBsb3cgbGV2ZWwuIEkgYmV0IGl0J3MgY2FsbGVkIHRvIHJlcGxpY2F0ZSB0aGUgaGVhZGVyIG9mIGEgU29ja2V0IEJ1ZmZlciAoYHNrYmApIOKAkyBtZWFuaW5nIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLCBsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHByb3RvY29sIHR5cGVzLCBhbmQgdmFyaW91cyBmbGFncyDigJMgd2l0aG91dCBjb3B5aW5nIHRoZSBhY3R1YWwgZGF0YSBwYXlsb2FkLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIHBhY2tldCBjbG9uaW5nLCBvciBwZXJoYXBzIGNyZWF0aW5nIGEgbmV3IHNrYiBmb3IgYSBmb3J3YXJkZWQgcGFja2V0LiBUaGUgXCJkb3VibGUgdW5kZXJzY29yZVwiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGl0J3MgYSBrZXJuZWwgaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG5cbkkgaW1hZ2luZSBpdCB3b3VsZCBuZWVkIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgdmFyaW91cyBhc3BlY3RzIHRvIHRoZSBoZWFkZXJzIGludm9sdmVkLCBsaWtlIHRoZSBwb3NzaWJsZSBwcmVzZW5jZSBvZiBWTEFOIHRhZ3MsIGZyYWdtZW50YXRpb24gZGV0YWlscyBhbmQgb3RoZXIgY29tcGxleGl0aWVzLiBUaGVyZWZvcmUsIGl0IGhhcyB0byBiZSByb2J1c3QgYW5kIHBlcmZvcm1hbnQuIEknbGwgbmVlZCB0byBsb29rIGZvciBlZmZpY2llbmN5IHRyaWNrcyB0byBtaW5pbWlzZSBjb3B5aW5nIGFzIHRoYXQgaXMgdGhlIGZ1bmN0aW9uJ3Mgc29sZSBwdXJwb3NlLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSB0aGlzIGZ1bmN0aW9uIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHVzZSBvZiBpbmxpbmUgb3IgY29tcGlsZXIgZGlyZWN0aXZlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGUgZnVuY3Rpb24gbWlnaHQgYmUgbGV2ZXJhZ2luZyBoYXJkd2FyZSBmZWF0dXJlcyB0byBtYWtlIHRoaXMgYXMgZmFzdCBhcyBwb3NzaWJsZS4gVGhpcyBtYWtlcyB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgdGhlIHNrYiBzdHJ1Y3QgaXRzZWxmLCBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCB0aGUgc3VidGxlIGFzcGVjdHMgb2YgdGhlIGhlYWRlciBmaWVsZHMgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlaXIgdmFyaW91cyBzdGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MTIuNjgyODI0NzUzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTU2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTU2OlxcdHN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuMTU1NzpcXHR7XFxuMTU1ODpcXHRcXHRuZXctXFx1MDAzZXRzdGFtcFxcdFxcdD0gb2xkLVxcdTAwM2V0c3RhbXA7XFxuMTU1OTpcXHRcXHQvKiBXZSBkbyBub3QgY29weSBvbGQtXFx1MDAzZXNrICovXFxuMTU2MDpcXHRcXHRuZXctXFx1MDAzZWRldlxcdFxcdD0gb2xkLVxcdTAwM2VkZXY7XFxuMTU2MTpcXHRcXHRtZW1jcHkobmV3LVxcdTAwM2VjYiwgb2xkLVxcdTAwM2VjYiwgc2l6ZW9mKG9sZC1cXHUwMDNlY2IpKTtcXG4xNTYyOlxcdFxcdHNrYl9kc3RfY29weShuZXcsIG9sZCk7XFxuMTU2MzpcXHRcXHRfX3NrYl9leHRfY29weShuZXcsIG9sZCk7XFxuMTU2NDpcXHRcXHRfX25mX2NvcHkobmV3LCBvbGQsIGZhbHNlKTtcXG4xNTY1OlxcdFxcbjE1NjY6XFx0XFx0LyogTm90ZSA6IHRoaXMgZmllbGQgY291bGQgYmUgaW4gdGhlIGhlYWRlcnMgZ3JvdXAuXFxuMTU2NzpcXHRcXHQgKiBJdCBpcyBub3QgeWV0IGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSBhIDE2IGJpdCBob2xlXFxuMTU2ODpcXHRcXHQgKi9cXG4xNTY5OlxcdFxcdG5ldy1cXHUwMDNlcXVldWVfbWFwcGluZyA9IG9sZC1cXHUwMDNlcXVldWVfbWFwcGluZztcXG4xNTcwOlxcdFxcbjE1NzE6XFx0XFx0bWVtY3B5KFxcdTAwMjZuZXctXFx1MDAzZWhlYWRlcnMsIFxcdTAwMjZvbGQtXFx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXFx1MDAzZWhlYWRlcnMpKTtcXG4xNTcyOlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcm90b2NvbCk7XFxuMTU3MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoY3N1bSk7XFxuMTU3NDpcXHRcXHRDSEVDS19TS0JfRklFTEQoaGFzaCk7XFxuMTU3NTpcXHRcXHRDSEVDS19TS0JfRklFTEQocHJpb3JpdHkpO1xcbjE1NzY6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHNrYl9paWYpO1xcbjE1Nzc6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fcHJvdG8pO1xcbjE1Nzg6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fdGNpKTtcXG4xNTc5OlxcdFxcdENIRUNLX1NLQl9GSUVMRCh0cmFuc3BvcnRfaGVhZGVyKTtcXG4xNTgwOlxcdFxcdENIRUNLX1NLQl9GSUVMRChuZXR3b3JrX2hlYWRlcik7XFxuMTU4MTpcXHRcXHRDSEVDS19TS0JfRklFTEQobWFjX2hlYWRlcik7XFxuMTU4MjpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfcHJvdG9jb2wpO1xcbjE1ODM6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3RyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODQ6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX25ldHdvcmtfaGVhZGVyKTtcXG4xNTg1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9tYWNfaGVhZGVyKTtcXG4xNTg2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYXJrKTtcXG4xNTg3OlxcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXFxuMTU4ODpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2VjbWFyayk7XFxuMTU4OTpcXHQjZW5kaWZcXG4xNTkwOlxcdCNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbjE1OTE6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5hcGlfaWQpO1xcbjE1OTI6XFx0I2VuZGlmXFxuMTU5MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoYWxsb2NfY3B1KTtcXG4xNTk0OlxcdCNpZmRlZiBDT05GSUdfWFBTXFxuMTU5NTpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2VuZGVyX2NwdSk7XFxuMTU5NjpcXHQjZW5kaWZcXG4xNTk3OlxcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxuMTU5ODpcXHRcXHRDSEVDS19TS0JfRklFTEQodGNfaW5kZXgpO1xcbjE1OTk6XFx0I2VuZGlmXFxuMTYwMDpcXHRcXG4xNjAxOlxcdH1cXG4xNjAyOlxcdFxcbjE2MDM6XFx0LypcXG4xNjA0OlxcdCAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbjE2MDU6XFx0ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MTIuNjgzNDMyODMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzI2NzE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ3JpdHkgb2YgYGNiYCBpbiBPdXIgRGF0YSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbjogYG1lbWNweShuZXctXHUwMDNlY2IsIG9sZC1cdTAwM2VjYiwgc2l6ZW9mKG9sZC1cdTAwM2VjYikpO2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UncmUgZG9pbmcgYSBjb21wbGV0ZSBjb3B5IG9mIGBjYmAuIFRoYXQncyBnb29kLiBUaGUgZGVzaWduIHJlbGllcyBvbiBgY2JgIGJlaW5nIGZ1bGx5IHplcm9lZCBvdXQgZHVyaW5nIGFsbG9jYXRpb24sIGFuZCB0aGVuIGNvbXBsZXRlbHkgY29waWVkIGR1cmluZyBhIGNsb25lLiBUaGF0IGd1YXJhbnRlZXMsICp0aGVvcmV0aWNhbGx5KiwgdGhhdCBgY2JgIHdpbGwgbmV2ZXIgaGFyYm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgZmxhZ3MuIEEgcG90ZW50aWFsIGlzc3VlIGlzIHRoZXJlLiBXaGlsZSBpdCB3b24ndCBiZSBhbiB1bmluaXRpYWxpemVkICptZW1vcnkqIGJ1ZywgaXQgY291bGQgaW50cm9kdWNlIGEgbG9naWNhbCBlcnJvciBpZiBgY2JgIGluYWR2ZXJ0ZW50bHkgY29udGFpbnMgc3RhbGUgZGF0YSBmcm9tIGEgcHJldmlvdXMgcHJvY2Vzc2luZyBsYXllci4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbiwgYSBwb3NzaWJsZSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuXG5cbk5vdywgSSdtIGJhY2t0cmFja2luZyBhIGxpdHRsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuIElzIHRoZXJlICphbnkqIGV4ZWN1dGlvbiBwYXRoIHdoZXJlIGBza2ItXHUwMDNlY2JgIGRvZXNuJ3QgZ2V0IHplcm9lZCBvdXQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIGJlIDEwMCUgY2VydGFpbi4gQW5kLCB3aGF0IGFib3V0IGBza2JfbW9ycGhgPyBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIG1hbmlwdWxhdGluZyBgY2JgIGFzIHdlbGwsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToxNy4zNTYxMDcxODZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDcyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tb3JwaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNjYzPUVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3NrYl9mb3JfbXNnKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjUtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTY2NjogKlxcdHNrYl9tb3JwaFxcdC1cXHRtb3JwaCBvbmUgc2tiIGludG8gYW5vdGhlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjctICpcXHRAZHN0OiB0aGUgc2tiIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnRzXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjc0LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2NzU6c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NzYte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTY4MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfbW9ycGgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE2ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI1OjE3LjQxNjE4NjJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDM3NTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTW9kdWxlIGBza2JfbW9ycGhgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIG1vZHVsZSBgc2tiX21vcnBoYC4gVGhpcyBuYW1lIHNwYXJrcyBhIGZldyBpbml0aWFsIGNvbnNpZGVyYXRpb25zLCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgSSdtIGV4cGVjdGluZyB0aGlzIG1vZHVsZSB0byBlaXRoZXIgcGVyZm9ybSBjcml0aWNhbCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWxseSBiZSBpbnZvbHZlZCBpbiBzdWJ0bGUsIGVhc2lseSBvdmVybG9va2VkIGJ1Z3MgaWYgdGhlIGNvZGUgaXNuJ3Qgcm9idXN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUncyBkYXRhIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBwaW5wb2ludCB3aGVyZSBgc2tiX21vcnBoYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93OiB3aGF0J3MgYmVpbmcgbW9ycGhlZCwgd2h5LCBhbmQgaG93IGRvZXMgdGhpcyBhY3Rpb24gYWZmZWN0IG90aGVyIHByb2Nlc3NlcyB0aGF0IHJlbHkgb24gdGhlIGFmZmVjdGVkIGJ1ZmZlcnM/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgZW50cnkgcG9pbnRzIGFuZCBsb29rIGZvciB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIGFkanVzdG1lbnRzLCBvciBvdGhlciBsYXllci1zcGVjaWZpYyBtYW5pcHVsYXRpb25zLiBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2ZmbG9hZCBtZWNoYW5pc21zIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIE5JQy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNvZGUgaW5zcGVjdGlvbiwgYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIHdlcmUgdGhpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MjAuNjQ2NTY0OTM1WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc1OlxcdHN0cnVjdCBza19idWZmICpza2JfbW9ycGgoc3RydWN0IHNrX2J1ZmYgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG4xNjc2OlxcdHtcXG4xNjc3OlxcdFxcdHNrYl9yZWxlYXNlX2FsbChkc3QsIFNLQl9DT05TVU1FRCk7XFxuMTY3ODpcXHRcXHRyZXR1cm4gX19za2JfY2xvbmUoZHN0LCBzcmMpO1xcbjE2Nzk6XFx0fVxcbjE2ODA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21vcnBoKTtcXG4xNjgxOlxcdFxcbjE2ODI6XFx0aW50IG1tX2FjY291bnRfcGlubmVkX3BhZ2VzKHN0cnVjdCBtbXBpbiAqbW1wLCBzaXplX3Qgc2l6ZSlcXG4xNjgzOlxcdHtcXG4xNjg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3BnLCBudW1fcGcsIG5ld19wZywgb2xkX3BnLCBybGltO1xcbjE2ODU6XFx0XFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8ICFzaXplKVxcbjE2ODg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdHJsaW0gPSBybGltaXQoUkxJTUlUX01FTUxPQ0spO1xcbjE2OTE6XFx0XFx0aWYgKHJsaW0gPT0gUkxJTV9JTkZJTklUWSlcXG4xNjkyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE2OTM6XFx0XFxuMTY5NDpcXHRcXHRudW1fcGcgPSAoc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIDI7XFx0Lyogd29yc3QgY2FzZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToyMC42NDcwNTgwMTVaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNzMyMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIElzc3VlcyBpbiBTS0IgQ2xvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza2JfbW9ycGhgIGFuZCBob3cgaXQgaGFuZGxlcyBjbG9uaW5nIFNLQnMuIEl0IGNhbGxzIGBfX3NrYl9jbG9uZWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgdGhhdCdzIHdoZXJlIGBjYmAgZ2V0cyBjb3BpZWQuIFNlZW1zIGxpa2UgYGNiYCBzaG91bGQgYWx3YXlzIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGR1ZSB0byB0aGlzIHNlcXVlbmNlLlxuXG5CdXQgaGFuZyBvbuKApiBXaGF0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgKmJlZm9yZSogaXQncyBwcm9wZXJseSBzZXQsIGFuZCBpdCBqdXN0IGdyYWJzIHNvbWUgbGVmdG92ZXIgZ2FyYmFnZSBkYXRhPyBDb3VsZCB0aGF0IGxlYWQgdG8gYSBuYXN0eSBidWcsIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0aGF0IEtNU0FOIHdvdWxkIGZsYWc/IExldCBtZSBxdWlja2x5IHRoaW5rIHRoaXMgdGhyb3VnaC4gTm8sIEtNU0FOIG9ubHkgY2F0Y2hlcyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LiBJZiB0aGVyZSdzIGdhcmJhZ2UgZGF0YSBwcmVzZW50IGZyb20gc29tZSBwcmV2aW91cyBvcGVyYXRpb24sIEtNU0FOIHdvbid0IGNhdGNoIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSAqYWN0dWFsKiB1c2FnZSBvZiBgSVBDQihza2IpYC4gSSByZW1lbWJlciB3b3JraW5nIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgcmVjZW50bHnigKYgUmlnaHQsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgSVBDQihza2IpYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZmFsbG91dC4gSSdtIHByZXR0eSBzdXJlIHRoZSBwYXRjaCBpcyBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgbGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MjUuNjU0MzgyNzI1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcbiAyNDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAyNDI6XFx0XFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNDQ6XFx0I2VuZGlmXFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZiwgcHJvdG8sIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDI1NTpcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAyNTY6XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbiAyNjA6XFx0XFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4gMjYzOlxcdFxcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgYWR2YW5jZV9uZXh0c2VnKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHRzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcXG4gMjc0OlxcdFxcdGFkZHIgPSBzcmgtXFx1MDAzZXNlZ21lbnRzICsgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0O1xcbiAyNzU6XFx0XFx0KmRhZGRyID0gKmFkZHI7XFxuIDI3NjpcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdHN0YXRpYyBpbnRcXG4gMjc5OlxcdHNlZzZfbG9va3VwX2FueV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToyNS42NTQ1OTY1NjVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc5NjQxMTE4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogSVB2NCBDb250cm9sIEJsb2NrIFplcm9pbmcgaW4gSVB2NiBEZWNhcHN1bGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIG91dCBgSVBDQihza2IpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IEFoLCBpdCdzIGR1cmluZyB0aGUgYGRlY2FwX2FuZF92YWxpZGF0ZWAgcHJvY2VzcyBmb3IgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gZW5jYXBzdWxhdGVkIElQdjQgcGFja2V0IChpLmUuLCBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCkuIFRoZSBJUHY0IHN0YWNrIGV4cGVjdHMgaXRzIGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgKSB0byBiZSBjbGVhbjsgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4gSWYgd2UgZG9uJ3QgemVybyBpdCwgd2UncmUgbGlrZWx5IGxlYXZpbmcgYmVoaW5kIGBJUDZDQihza2IpYCBkYXRhIGZyb20gdGhlIElQdjYgc3RhY2suXG5cblRoZSBwcm9ibGVtPyBQb3RlbnRpYWxseSBcImdhcmJhZ2VcIiBkYXRhIOKAkyBsaWtlLCBzYXksIGEgbm9uLXplcm8gYElQQ0Ioc2tiKS1cdTAwM2VvcHRgIGZpZWxkLiBUaGlzIGNvdWxkIG1pc2xlYWQgdGhlIElQdjQgc3RhY2sgaW50byB0aGlua2luZyB0aGVyZSBhcmUgSVB2NCBvcHRpb25zIHByZXNlbnQgd2hlbiB0aGVyZSBhcmVuJ3QuIENsZWFybHkgYSBsb2dpYyBidWcsIHJpZ2h0PyBCdXQgdGhlIGtleSBxdWVzdGlvbiBoZXJlOiBpcyB0aGlzIGFuICp1bmluaXRpYWxpemVkIG1lbW9yeSogYnVnP1xuXG5ObywgaG9sZCBvbiwgaXQgaXNuJ3QuIFRoZSBtZW1vcnkgKndhcyogaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgc3RhY2sgb3IgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBXZSBrbm93IGBza2ItXHUwMDNlY2JgIGlzIHplcm9lZCBhdCBhbGxvY2F0aW9uLiBJbiBmYWN0LCBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQgaW4gYF9fYWxsb2Nfc2tiYCwgYHNsYWJfYnVpbGRfc2tiYCwgYF9fYnVpbGRfc2tiYCwgYF9fbmFwaV9idWlsZF9za2JgIHdoaWNoIGFyZSB0aGUgY29yZSBza2IgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFNvIGl0ICpzaG91bGQqIGJlIHplcm9lZC4gU28gdGhlcmUncyBubyB3YXkgaXQncyB0cnVseSB1bmluaXRpYWxpemVkLCByaWdodD9cblxuU28sIEtNU0FOIGlzICpub3QqIGdvaW5nIHRvIGNhdGNoIHRoaXMuIEtNU0FOJ3Mgam9iIGlzIHRvIGNhdGNoIHJlYWRzIGZyb20gbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBoYXMsIGZvciBzdXJlLCBiZWVuIHdyaXR0ZW4gdG8uIEZpcnN0IHdpdGggemVyb2VzIG9uIGFsbG9jYXRpb24sIHRoZW4gYnkgSVB2Ni5cblxuVGhpcyBpcyBhIGNsYXNzaWMgXCJjbGVhciB0aGUgY29udHJvbCBibG9jayB3aGVuIGNyb3NzaW5nIHByb3RvY29sIGxheWVyc1wiIGJ1Zy4gSXQncyBhYm91dCBwcmV2ZW50aW5nIHRoZSBpbm5lciBwcm90b2NvbCBzdGFjayBmcm9tIG1pc2ludGVycHJldGluZyBkYXRhIGludGVuZGVkIGZvciB0aGUgb3V0ZXIgcHJvdG9jb2wgc3RhY2suIFRoaXMgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiB1bmV4cGVjdGVkIGJlaGF2aW9yLCBvciBldmVuIGEgY3Jhc2gsIGJ1dCBpdCBkb2Vzbid0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlLiBLQVNBTiBtaWdodCBzdGlsbCBjYXRjaCBpdCBpZiB0aGUgbWlzaW50ZXJwcmV0YXRpb24gbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIOKAkyBsaWtlIGlmIHRoYXQgZ2FyYmFnZSBvcHRpb24gbGVuZ3RoIGNhdXNlcyBhbiBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIHdvbid0LlxuXG5TbywgaW4gc3VtbWFyeTpcblxuMS4gIFRoZSBwYXRjaCB6ZXJvcyBgSVBDQihza2IpYCAod2hpY2ggaXMgYHNrYi1cdTAwM2VjYmApIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0LlxuMi4gIGBza2ItXHUwMDNlY2JgIGlzIGEgNDgtYnl0ZSBjb250cm9sIGJ1ZmZlciB1c2VkIGJ5IGRpZmZlcmVudCBwcm90b2NvbCBsYXllcnMgdG8gc3RvcmUgcHJpdmF0ZSB2YXJpYWJsZXMuXG4zLiAgV2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMgKGZyb20gSVB2NiB0byBJUHY0KSwgdGhlIG5ldyBsYXllciBleHBlY3RzIGl0cyBjb250cm9sIGJsb2NrIHRvIGJlIGNsZWFuLiBJZiBub3QgY2xlYXJlZCwgaXQgd2lsbCByZWFkIGRhdGEgbGVmdCBvdmVyIGJ5IHRoZSBwcmV2aW91cyBsYXllciAoSVB2NikuXG40LiAgRnJvbSBLTVNBTidzIHBlcnNwZWN0aXZlLCB0aGlzIG1lbW9yeSBpcyBOT1QgdW5pbml0aWFsaXplZC4gSXQgd2FzIGZ1bGx5IHplcm9lZCB3aGVuIHRoZSBgc2tiYCB3YXMgYWxsb2NhdGVkIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci5cbjUuICBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNpbmNlIGBza2ItXHUwMDNlY2JgIHdhcyBpbml0aWFsaXplZCwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LCBldmVuIGlmIHRoZSBkYXRhIGlzIHNlbWFudGljYWxseSBcImdhcmJhZ2VcIi5cbjYuICBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuXG5cblRoZXJlZm9yZSwgbm8gS01TQU4gZnV6emluZyBuZWVkZWQsIGl0IHNlZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MSwiT3V0cHV0VG9rZW5zIjozMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6NDMuNjE4NzExNTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVxcdTAwM2VjYmAgaXMgc2hhcmVkIGFjcm9zcyBwcm90b2NvbCBsYXllcnMsIGFuZCB0aGUgSVB2NCBzdGFjayBtaWdodCBtaXNpbnRlcnByZXQgbGVmdG92ZXIgZGF0YSBmcm9tIHRoZSBJUHY2IGNvbnRyb2wgYmxvY2sgKGBJUDZDQihza2IpYCkgYXMgdmFsaWQgSVB2NCBvcHRpb25zIG9yIGZsYWdzLlxcblxcbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFxcXCJnYXJiYWdlXFxcIiBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFxcXCJ1bmluaXRpYWxpemVkXFxcIiBtZW1vcnkuIFRoZSBgc2tiLVxcdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cXG5cXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXFx1MDAzZWNiYCkgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiB0dW5uZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYHNrYi1cXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cXG5cXG5XaGlsZSB0aGlzIHByZXZlbnRzIHRoZSBJUHY0IHN0YWNrIGZyb20gcmVhZGluZyBcXFwiZ2FyYmFnZVxcXCIgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcXFwidW5pbml0aWFsaXplZFxcXCIgbWVtb3J5LiBUaGUgYHNrYi1cXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXFx1MDAzZWNiYCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZWl0aGVyIHdpdGggemVyb2VzIG9yIHdpdGggSVB2NiBjb250cm9sIGRhdGEpLCBLTVNBTiB3aWxsIG5vdCBmbGFnIHJlYWRzIGZyb20gaXQuXFxuXFxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 19:04:44 +0000 UTC FinishedAt: 2026-08-10 20:25:45 +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": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL", "NET_L3_MASTER_DEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6_SEG6_LWTUNNEL", "NET_L3_MASTER_DEV" ], "series_id": "5718ebb8-e152-4ad8-8460-01323c28f48a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "seg6_local_input", "input_action_end_dx4", "input_action_end_dt4" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfTDNfTUFTVEVSX0RFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlZzZfbG9jYWxfaW5wdXQmIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9keDQmIzM0OywKICAgICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9kdDQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIwOjIyOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuaW5kZXggMmI0MWU0YzBkZGRkMS4uOTVlYTBiNjI3MjlhYyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7XG4mIzQzO1x0XHRpbnQgaWlmID0gSVA2Q0Ioc2tiKS1cdTAwM2VpaWY7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcbiYjNDM7XHRcdElQQ0Ioc2tiKS1cdTAwM2VpaWYgPSBpaWY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNl9TRUc2X0xXVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R4NCYjMzQ7LAogICAgJiMzNDtpbnB1dF9hY3Rpb25fZW5kX2R0NCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSBpcyBub3QgcHJvcGVybHkgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHNlZ21lbnQgcm91dGluZyBoZWFkZXIgKFNSdjYpIGluIGRlY2FwX2FuZF92YWxpZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHNlZ21lbnQgcm91dGluZyBsb2NhbCBkZWxpdmVyeS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5MmZiNmQzZjRhNjU2N2I1OWFmZTRmNmRmODlmNDVjZjk3YTBmNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMDoyMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuYwppbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCkBAIC0yNTYsNiAmIzQzOzI1NiwxMyBAQCBzdGF0aWMgYm9vbCBkZWNhcF9hbmRfdmFsaWRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByb3RvKQogCWlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKSB7CiYjNDM7CQlpbnQgaWlmID0gSVA2Q0Ioc2tiKS0mZ3Q7aWlmOwomIzQzOwomIzQzOwkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTsKJiM0MzsJCUlQQ0Ioc2tiKS0mZ3Q7aWlmID0gaWlmOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHRydWU7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTZWc2IExvY2FsIERlY2Fwc3VsYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBUaGUgY29kZSBhZGRzIGEgZmV3IGxpbmVzLCByaWdodCBhZnRlciB0aGUgYGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKWAgY2FsbC4gVGhlIGFkZGVkIGxpbmVzIGRlYWwgd2l0aCBhIGBwcm90byA9PSBJUFBST1RPX0lQSVBgIGNoZWNrLiBJdCYjMzk7cyBpbml0aWFsaXppbmcgdGhlIGBJUENCKHNrYilgIHN0cnVjdC4gTGV0IG1lIHNlZS4uLml0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcHJlc2VydmluZyB0aGUgaW5wdXQgaW50ZXJmYWNlIChgaWlmYCkgZnJvbSBgSVA2Q0Ioc2tiKWAgYW5kIHN0b3JpbmcgaXQgaW4gYElQQ0Ioc2tiKWAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdoeSBhcmUgdGhleSBkb2luZyB0aGlzPyBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGVuY2Fwc3VsYXRlZCBJUC1pbi1JUCB0cmFmZmljIHRoYXQgaXMgZGVjYXBzdWxhdGVkIGJ5IFNFRzYsIHdoaWxlIGtlZXBpbmcgdGhlIGluY29taW5nIGludGVyZmFjZSBzZXQuIEkmIzM5O2QgbmVlZCB0byBsb29rIGRlZXBlciB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHRoZSBjb250ZXh0IG9mIHdoeSB0aGUgaW5wdXQgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIHN0b3JlZCBvbiBJUCBjb250cm9sIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgYElQQ0JgIG5lZWRzIHRvIGhhdmUgaXRzIGBpaWZgIHNldC4gSXMgdGhpcyB0byBwcmVzZXJ2ZSByb3V0aW5nIGNvbnRleHQsIHBlcmhhcHM/IE9yIGlzIGl0IGZvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTIxNj1zdGF0aWMgc3RydWN0IGlwdjZfc3JfaGRyICpnZXRfYW5kX3ZhbGlkYXRlX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yMzEtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjMyOnN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9ODU2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODYyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjg2MzpcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODY0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NDM6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTQ0LVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MS17XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5My1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExOTEtXHRcdGdvdG8gZHJvcDtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTI2NT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjcte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEyNjg6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTI2OS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250cm9sIEZsb3cgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gSXQmIzM5O3MgdHJpZ2dlcmVkIGZyb20gc2V2ZXJhbCBwbGFjZXMgd2l0aGluIHRoaXMgY29kZTogYGlucHV0X2FjdGlvbl9lbmRfZHgyYCwgYGlucHV0X2FjdGlvbl9lbmRfZHg2YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDZgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIHBpcGVsaW5lLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrIGBwcm90byA9PSBJUFBST1RPX0lQSVBgLCBhcyB0aGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgcHJvdG9jb2wgY29udGV4dC4gSSBub3RpY2UgdGhhdCB0aGUgc3BlY2lmaWMgY2FzZXMgb2YgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBhcmUgdGhlIG9uZXMgcGFzc2luZyB0aGUgcmVsZXZhbnQgcHJvdG9jb2wuCgpOb3csIGdpdmVuIHRoZSBwcm90b2NvbCBjaGVjaywgSSB0aGluayBpdCYjMzk7cyBuZWNlc3NhcnkgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZW5hYmxlIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbnZvbHZlbWVudCBvZiBJUElQLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LCB0byBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IG9wZXJhdGlvbmFsIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSAmIzQzOz0gY2FsaXBzby5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgJiM0Mzs9IHNlZzZfaXB0dW5uZWwubyBzZWc2X2xvY2FsLm9cbm5ldC9pcHY2L01ha2VmaWxlLTI2LWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgU0VHNiBMV1QgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBjb25maWcgb3B0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBJUFY2X1NFRzZfTFdUVU5ORUxgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRvIGRvIHRoYXQsIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGRlc2NyaXB0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXRhaWxlZCBleHBsYW5hdGlvbiwgdGhlIGRlZmF1bHQgdmFsdWVzLCBhbnkgcmVsZXZhbnQgaGVscCB0ZXh0LCBhbmQgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgaXQgbWlnaHQgZGVwZW5kIG9uIG9yIGNvbmZsaWN0IHdpdGguIFRpbWUgdG8gc2VlIHdoYXQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGhhcyB0byBzYXkgYWJvdXQgaXQuIEhvcGVmdWxseSwgdGhpcyBLY29uZmlnIGZpbGUgd2lsbCBpbGx1bWluYXRlIHdoYXQgdGhpcyBwYXJ0aWN1bGFyIHR1bm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBJUFY2X1NFRzZfTFdUVU5ORUwqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBzdXBwb3J0cyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGUgb3B0aW9uOyBJIG5lZWQgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgZGlnZ2luZyBkZWVwIHRvIHNlZSB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzLCBtb2R1bGVzLCBhbmQgY29uZmlndXJhdGlvbnMgYXJlIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2Ugc3BlY2lmaWMgbmV0d29ya2luZyBzdGFjayBvcHRpb25zIGJlaW5nIGVuYWJsZWQsIHBvdGVudGlhbGx5IHJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGluIHBsYWNlIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBldmVuIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0IGFsb25lIGJlIGNvbXBpbGVkIGFuZCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBJIGtub3cgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlcywgZXhwbG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBwb3NzaWJseSB0cmFjaW5nIHRocm91Z2ggc29tZSBjb2RlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9Mjc5PWNvbmZpZyBJUFY2X1BJTVNNX1YyXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGaWxlIFJlYWRpbmVzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIE15IGZpcnN0IHRob3VnaHQgaXM6IEkgbmVlZCB0byBwcm9jZXNzIHRoaXMgZmlsZS4gTm8gcG9pbnQgaW4gc3Bpbm5pbmcgbXkgd2hlZWxzIHdpdGggdGhlb3J5IG9yIHByZWNvbmNlcHRpb25zLiBHb3R0YSBkaXZlIGluIGFuZCB1bmRlcnN0YW5kIHRoZSByYXcgZGF0YS4gVGhlIHNwZWNpZmljcyBvZiB0aGUgZmlsZeKAlGZvcm1hdCwgc2l6ZSwgb3JpZ2lu4oCUYXJlIHN0aWxsIHVua25vd24sIGJ1dCB0aGUgaW1tZWRpYXRlIGltcGVyYXRpdmUgaXMgdG8gYmVnaW4gdGhlIHJlYWQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBHZXQgYSBiYXNlbGluZSBvZiB3aGF0JiMzOTtzIHByZXNlbnQgYmVmb3JlIGZvcm11bGF0aW5nIGEgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4gMjgxOlx0XHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXG4gMjgyOlx0XHRoZWxwXG4gMjgzOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxuIDI4NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI4NTpcdFxuIDI4NjpcdGNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbiAyODc6XHRcdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiAyODg6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDI4OTpcdFx0c2VsZWN0IExXVFVOTkVMXG4gMjkwOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjkxOlx0XHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyOTI6XHRcdGhlbHBcbiAyOTM6XHRcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XG4gMjk0Olx0XHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxuIDI5NTpcdFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcbiAyOTY6XHRcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXG4gMjk3Olx0XG4gMjk4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQVjZfU0VHNl9MV1RVTk5FTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYElQVjZfU0VHNl9MV1RVTk5FTGAgaGVyZS4gSXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhpcyB0aGluZyByZWxpZXMgb24gYElQVjZgLCBzbyB0aGF0JiMzOTtzIHRoZSBiYXNlIEkmIzM5O20gd29ya2luZyBmcm9tLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgaW4gdGhlc2UgdHdvIGZ1bmN0aW9uczogYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGV5JiMzOTtyZSBkb2luZy4KCldhaXQgYSBzZWNvbmTigKZhcmUgdGhlc2UgZnVuY3Rpb25zICpzdGF0aWMqPyBSaWdodCwgdGhleSBhcmUuIFRoYXQgbWVhbnMgdGhleSBhcmVuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseS4gT2theSwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkmIzM5O3JlIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIG1vZHVsZS4gVGhleSBtdXN0IGJlIHJlZmVyZW5jZWQgdGhyb3VnaCBhIHN0cnVjdCBvciBzb21lIG90aGVyIG1lY2hhbmlzbS4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBvYnZpb3VzIHN0cnVjdCB0aGF0IGV4cG9zZXMgdGhlbSwgb3Igc29tZSBvdGhlciBtZXRob2QuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5wdXRfYWN0aW9uX2VuZF9keDQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTY0LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk4OC1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5ODk6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XHRcdFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDA3Olx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDgtZHJvcDpcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTE2Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgc2VnNl9hY3Rpb25fdGFibGVgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0byBwaW5wb2ludCB0aGUgdXNhZ2Ugb2YgdGhpcyB0YWJsZS4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHNlZzZfYWN0aW9uX3RhYmxlYCBsZXZlcmFnZWQgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaz8mIzM0OyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBpcyBrZXkuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcG9uZW50cyBhbmQgZnVuY3Rpb25zLiBJcyBpdCBhIGNlbnRyYWwgbG9va3VwLCBhIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZSwgb3IgbW9yZSBvZiBhIHRyYW5zaXRpb25hbCBkYXRhIHN0cnVjdHVyZT8gS25vd2luZyBob3cgaXQmIzM5O3MgKnVzZWQqIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgbGVnIHVwIGluIGV2YWx1YXRpbmcgaXRzIGRlc2lnbiwgZWZmaWNpZW5jeSwgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gTGV0JiMzOTtzIHN0YXJ0IHRyYWNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfYWN0aW9uX3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ3Ny1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NzktXHR7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjICpfX2dldF9hY3Rpb25fZGVzYyhpbnQgYWN0aW9uKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1ODM6XHRjb3VudCA9IEFSUkFZX1NJWkUoc2VnNl9hY3Rpb25fdGFibGUpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTg1Olx0XHRkZXNjID0gXHUwMDI2c2VnNl9hY3Rpb25fdGFibGVbaV07XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU4Ni1cdFx0aWYgKGRlc2MtXHUwMDNlYWN0aW9uID09IGFjdGlvbilcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXHQgKiBvcHRpb25hbCwgaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgbWVzc2VkIHNvbWV0aGluZyB1cCBpbiB0aGVcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNDY4Olx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2NlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjktXHQgKiBiZWhhdmlvcnMgdG8gd29yayBwcm9wZXJseS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ0NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBJbnB1dCBQYXRoKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0mIzM5O3MganVzdCBmbGFnZ2VkIHRoYXQgYW4gaW5wdXQgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYSBmdW5jdGlvbiBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCwgb3IgYSByZWxhdGVkIG9uZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGlzIGFjdGlvbiBpcyBiZWluZyAqZGVzY3JpYmVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmlnaHQgcGxhY2UgZm9yIGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24gaXRzZWxmIHJlc2lkZXMgd2l0aGluIHRoZSBgc2VnNl9hY3Rpb25fZGVzY2Agc3RydWN0dXJlLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUgYGlucHV0YCBmaWVsZCBvZiB0aGlzIGRlc2NyaXB0b3IuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MsIGNvbnN0cmFpbnRzLCBvciB0aGUgcHJvY2Vzc2luZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gdGhlIGlucHV0IGlzIHN0b3JlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpZWxkIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFjdGlvbiBpdHNlbGYuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTQ3OD1zdGF0aWMgc3RydWN0IHNlZzZfYWN0aW9uX2Rlc2Mgc2VnNl9hY3Rpb25fdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ4My1cdFx0XHRcdCAgU0VHNl9GX0xPQ0FMX0ZMQVZPUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4NDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDg1LVx0fSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5MS1cdFx0XHRcdCAgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9PSUYpLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0OTI6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfeCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkzLVx0fSxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5Ny1cdFx0Lm9wdGF0dHJzXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDk4Olx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX3QsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5OS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDMtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUwNDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDIsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUwNS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDktXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxMDpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxMS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjItI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MjM6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjQtXHRcdC5zbHd0X29wc1x0PSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NDItI2VuZGlmXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU0MzpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9kdDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0NC1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NDktI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NTA6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0Nixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTUxLVx0XHQuc2x3dF9vcHNcdD0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTU5LVx0XHQub3B0YXR0cnNcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NjA6XHRcdC5pbnB1dFx0XHQ9IGlucHV0X2FjdGlvbl9lbmRfYjYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2MS1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NjUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2NjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY3LVx0XHQuc3RhdGljX2hlYWRyb29tXHQ9IHNpemVvZihzdHJ1Y3QgaXB2NmhkciksXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NzItXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU3MzpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9icGYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3NC1cdH0sXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4MTpcdC5pbnB1dFx0XHQ9IHNlZzZfbG9jYWxfaW5wdXQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4Mi1cdC5maWxsX2VuY2FwXHQ9IHNlZzZfbG9jYWxfZmlsbF9lbmNhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIElucHV0IEZsb3c6IGBzZWc2X2xvY2FsX2lucHV0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBzcGVjaWZpYyBhY3Rpb24gaXMgb3JpZ2luYXRpbmcgZnJvbSBgc2VnNl9sb2NhbF9pbnB1dGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhcnRpY3VsYXIgaW5wdXQuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCB0aHJvdWdoIGl0PyBJcyBpdCBhIGNvbnRyb2wgbWVzc2FnZSwgYSBkYXRhIHBhY2tldCwgYSBzcGVjaWZpYyBjb21tYW5kPyBUaGUgZnVuY3Rpb24gbmFtZSwgYHNlZzZfbG9jYWxfaW5wdXRgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZyB2NiBhbmQgc29tZSBmb3JtIG9mIGxvY2FsIGlucHV0IHByb2Nlc3NpbmcuIFNvLCB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBpbnB1dCBoYW5kbGVyLiBJdCYjMzk7cyBhIHNwZWNpYWxpemVkIHBvaW50LgoKSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIGNhbGwgY2hhaW4gcmVsYXRlZCB0byBgc2VnNl9sb2NhbF9pbnB1dGAuIFdoYXQgYXJlIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnM/IFdoYXQgYXJlIHRoZSBkb3duc3RyZWFtIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgdXNlZCBoZXJlLCBhbmQgaG93IGRvZXMgdGhpcyBhY3Rpb24gaW50ZXJhY3Qgd2l0aCB0aGVtPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgaW5wdXQgaXMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCBwcm9jZXNzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBwb2ludHMgb2YgdnVsbmVyYWJpbGl0eSwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgcm9sZSBpdCBwbGF5cyBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIEFueSBpbW1lZGlhdGUgaW5zaWdodHMgaW50byB0aGUgZXhwZWN0ZWQgZGF0YSBmb3JtYXQsIHBvdGVudGlhbCBmb3IgZXJyb3JzLCBvciB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24gb2YgdGhpcyBpbnB1dCB3aWxsIGJlIGNyaXRpY2FsLiBVbmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBoZWxwcyB3aXRoIHRoaXMgYXNzZXNzbWVudCBhcyB3ZWxsLCBpbiBvcmRlciB0byBpZGVudGlmeSB0aGUgbG9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb2NhbF9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTU5OD1zdGF0aWMgdm9pZCBzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYxNjpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjE3LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MzctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNjM5LXtcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cdFx0XHQgICAgICAgZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiLCBza2ItXHUwMDNlZGV2LCBOVUxMLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XHRcdFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0OS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNjUwOlx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBOVUxMLCBza2IpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NTEtfVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHNlZzZfbG9jYWxfb3BzID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVx0LmRlc3Ryb3lfc3RhdGVcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XHQuaW5wdXRcdFx0PSBzZWc2X2xvY2FsX2lucHV0LFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODItXHQuZmlsbF9lbmNhcFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGludGVybmFscyBhbmQga2VybmVsIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBTRUc2IExvY2FsIElucHV0IFBhdGgqKgoKQWxyaWdodCwgSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIFNFRzYgbG9jYWwgaW5wdXQgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhcjogYHNlZzZfbG9jYWxfaW5wdXRgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcywgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgLiAgVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgcGFydCBub3cgaXMgdGhpcyBjYWxsIHRvIGBkZXNjLSZndDtpbnB1dChza2IsIHNsd3QpYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGRlc2NgIGlzLCBhbmQgd2hhdCBpdHMgYGlucHV0YCBmdW5jdGlvbiBkb2VzIHdpdGggdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgYHNsd3RgIChsaWtlbHkgc29tZSBzb3J0IG9mIHNlZ21lbnQgbGlzdCB3ZWlnaHQgdGFibGUpIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGZsb3cuICBUaGlzIGBkZXNjYCBzdHJ1Y3R1cmUgaXMga2V5IOKAkyBJIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byBpdCB0byBmb2xsb3cgdGhlIGRhdGEgcGF0aCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldCBpcyBhY3R1YWxseSBwcm9jZXNzZWQgbG9jYWxseS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgIGFuZCB0aGUgYGRlc2NgIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MTY6XHRzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXRfY29yZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcbjE2MTc6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTYxODpcdHtcbjE2MTk6XHRcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xuMTYyMDpcdFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XG4xNjIxOlx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XG4xNjIyOlx0XHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbjE2MjM6XHRcdGludCByYztcbjE2MjQ6XHRcbjE2MjU6XHRcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVx1MDAzZWx3dHN0YXRlKTtcbjE2MjY6XHRcdGRlc2MgPSBzbHd0LVx1MDAzZWRlc2M7XG4xNjI3Olx0XG4xNjI4Olx0XHRyYyA9IGRlc2MtXHUwMDNlaW5wdXQoc2tiLCBzbHd0KTtcbjE2Mjk6XHRcbjE2MzA6XHRcdGlmICghc2VnNl9sd3R1bm5lbF9jb3VudGVyc19lbmFibGVkKHNsd3QpKVxuMTYzMTpcdFx0XHRyZXR1cm4gcmM7XG4xNjMyOlx0XG4xNjMzOlx0XHRzZWc2X2xvY2FsX3VwZGF0ZV9jb3VudGVycyhzbHd0LCBsZW4sIHJjKTtcbjE2MzQ6XHRcbjE2MzU6XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFRzYgTFdUdW5uZWwgSW5wdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIExXVHVubmVsIGlucHV0LCBzcGVjaWZpY2FsbHkgdGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgTFdUdW5uZWwgaW5wdXQgcHJvY2Vzcy4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYGRlY2FwX2FuZF92YWxpZGF0ZWAsIHdoaWNoLCBvZiBjb3Vyc2UsIGlzIGNhbGxlZCBieSBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBhbW9uZyBvdGhlcnMuIEkga25vdyB0aGlzIGFyZWEgd2VsbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gYElQUFJPVE9fSVBJUGAsIHRoZSBJUHY0IG92ZXIgSVB2NiBwcm90b2NvbC4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBgSVBDQihza2IpYCBpc24mIzM5O3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgZ290Y2hhLiBXaGVuIHlvdSYjMzk7cmUgZGVjYXBzdWxhdGluZyBJUHY0IGZyb20gSVB2NiwgdGhlIGBza2ItJmd0O2NiYCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIElQdjYgcHJvY2Vzc2luZyB0byBhdm9pZCBzdGFsZSBkYXRhLiBJIHJlbWVtYmVyIHRoaXMsIHRoZSBgSVBDQihza2IpYCBhbmQgYElQNkNCKHNrYilgIHN0cnVjdHVyZXMgc2hhcmUgdGhlIHNhbWUgbWVtb3J5IHNwYWNlIHdpdGhpbiB0aGUgYHNrYi0mZ3Q7Y2JgLiBTbywgZmFpbHVyZSB0byBpbml0aWFsaXplIGl0IHByb3Blcmx5IHdpbGwgbGVhZCB0byBidWdzLgoKVGhlIHBhdGNoIGl0c2VsZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCBjb25kaXRpb25hbGx5IGNsZWFycyBgSVBDQihza2IpYCB3aGVuIGBwcm90b2AgaXMgYElQUFJPVE9fSVBJUGAsIHRoZW4gcmVzdG9yZXMgdGhlIGludGVyZmFjZSBpbmRleC4KCmBgYGMKJiM0MzsJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkgewomIzQzOwkJaW50IGlpZiA9IElQNkNCKHNrYiktJmd0O2lpZjsKJiM0MzsKJiM0MzsJCW1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7CiYjNDM7CQlJUENCKHNrYiktJmd0O2lpZiA9IGlpZjsKJiM0MzsJfQpgYGAKCkl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbmVjZXNzYXJ5IGZpeCwgYW5kIGNsZWFybHkgcmVhY2hhYmxlIHdpdGhpbiB0aGUgZXhlY3V0aW9uIHBhdGguIFRvIHJlYWxseSBnZXQgYSBncmFzcCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBzaG91bGQgZm9jdXMgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQ6IGBzZWc2X2xvY2FsX2lucHV0YCwgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAsIGFuZCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmludGVuZGVkIHNpZGUtZWZmZWN0cy4gV2FpdCwgdGhvc2UgbGF0dGVyIHR3byBhcmUgc3RhdGljLi4uIGFuZCBzbyBpcyBgc2VnNl9sb2NhbF9pbnB1dGAuIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljIGFzIHdlbGwuIFllcywgaXQgaXMuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gSSB3aWxsIGhhdmUgYSBsb29rIGF0IHRoYXQgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2J1aWxkX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNDQxPXN0YXRpYyBpbnQgcGFyc2VfbmxhX2FjdGlvbihzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dCxcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNTA4OnN0YXRpYyBpbnQgc2VnNl9sb2NhbF9idWlsZF9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNTA5LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcdC5idWlsZF9zdGF0ZVx0PSBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXHQuZGVzdHJveV9zdGF0ZVx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjYzCgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExvY2FsIExXVHVubmVscyBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2V0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGR5bmFtaWMgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgY291bGQgcG9pbnQgdG8gZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eSBvciBhIGRlZ3JlZSBvZiBydW50aW1lIGNvbmZpZ3VyYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTMzOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zNDEtXHRcdFx0c3RydWN0IGluNl9hZGRyICpuaGFkZHIsIHUzMiB0YmxfaWQpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMjM9c3RhdGljIGVudW1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMjI0OnNlZzZfZW5kX2R0X21vZGUgc2VnNl9lbmRfZHQ2X3BhcnNlX21vZGUoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyMjUte1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzkzPURFRklORV9QRVJfQ1BVKHN0cnVjdCBzZWc2X2JwZl9zcmhfc3RhdGUsIHNlZzZfYnBmX3NyaF9zdGF0ZXMpID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk2LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzOTc6Ym9vbCBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM5OC17XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2ODg9aW50IF9faW5pdCBzZWc2X2xvY2FsX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNzI0OnZvaWQgc2VnNl9sb2NhbF9leGl0KHZvaWQpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIHRoZSBFeHBvcnRlZCBTeW1ib2w6IHNlZzZcX2xvb2t1cFxfbmV4dGhvcCoqCgpPa2F5LCBzbyBJIHNlZSBgc2VnNl9sb29rdXBfbmV4dGhvcGAgbWVudGlvbmVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2U/JiMzNDsgVGhhdCYjMzk7cyB0aGUgZnVuZGFtZW50YWwgcXVlc3Rpb24uIEJlZm9yZSBJIGNhbiBjb25zaWRlciBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBvciB3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHN5bWJvbCBpcyBleHBvcnRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc3ltYm9sIHRhYmxlcyBvciB0aGUgYnVpbGQgcHJvY2VzcyB0byBjb25maXJtIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGZvciBkeW5hbWljIGxpbmtpbmcgb3IgZXh0ZXJuYWwgdXNlLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGJveCBJIG5lZWQgdG8gdGljayBiZWZvcmUgZ29pbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VnNl9sb29rdXBfbmV4dGhvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9Mjc5PXNlZzZfbG9va3VwX2FueV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zMzktXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzQwOmludCBzZWc2X2xvb2t1cF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVx0XHRcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0zODg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTAte1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjM5MTpcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0zOTItXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTgzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg0NS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NDY6XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgTlVMTCwgc2x3dC1cdTAwM2V0YWJsZSk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ3LVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz05MTI9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4Nl9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTkyOS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5MzA6XHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgbmhhZGRyLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MzEtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMzg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM1Mi1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzUzOlx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzNTQtXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzNjM9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTM4NDpcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ2Ny1cdGlmIChyZXQgIT0gQlBGX1JFRElSRUNUKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Njg6XHRcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTRUc2IE1vZHVsZSYjMzk7cyBJbnRlcm5hbCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gYHNlZzZfbG9va3VwX25leHRob3BgIGlzIGRlZmluaXRlbHkgdmlzaWJsZSBvdXRzaWRlIHRoZSBtb2R1bGUg4oCTIGl0JiMzOTtzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIEkgbm90aWNlZCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBzdGlsbCBiZWluZyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGBsd3R1bm5lbF9lbmNhcF9vcHNgIHN0cnVjdHVyZS4gVGhhdOKAmXMgYSBjb21tb24gcGF0dGVybiwgYnV0IGl0IGdvdCBtZSB0aGlua2luZy4KCkkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSBmaXJzdCBvbmUgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgc291cmNlIGFuZCBzY2FuIGBuZXQvaXB2Ni9zZWc2X2xvY2FsLmNgIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBFWFBPUlRfU1lNQk9MYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG1vZHVsZSYjMzk7cyBleHBvc2VkIEFQSSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHdoYXQmIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZS4gVGhpcyBkZWVwZXIgZGl2ZSBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBtb2R1bGUgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlJiMzOTtzIFNjb3BlKioKCkFscmlnaHQsIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCYjMzk7cyBhIGdvb2QgaW5pdGlhbCBpbmRpY2F0b3IuIFRoYXQgbGlrZWx5IG1lYW5zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHN0cmljdGx5IGludGVybmFsIHRvIHRoaXMgbW9kdWxlLCBvciB0aGV5JiMzOTtyZSBiZWluZyByZWdpc3RlcmVkIGluIGEgbW9yZSBjb250cm9sbGVkIGZhc2hpb24g4oCTIHBlcmhhcHMgdmlhIGEgYHN0cnVjdGAgbG9va3VwIHRhYmxlIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBUaGlzIGlzbiYjMzk7dCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZzsgaXQgY2FuIGxlYWQgdG8gY2xlYW5lciBpbnRlcmZhY2VzIGFuZCBiZXR0ZXIgZW5jYXBzdWxhdGlvbi4KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gemVybyBpbiBvbiBgc2VnNl9sb2NhbF9pbml0YC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFueSByZWdpc3RyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgdGllIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaGF0IGluaXQgZnVuY3Rpb24gaXMgbXkgYW5jaG9yIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGludGVybmFsIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG1vZHVsZSBpcyBzZXR0aW5nIHVwIGl0cyBlbnRyeSBwb2ludHMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWc2X2xvY2FsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODctXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY4ODppbnQgX19pbml0IHNlZzZfbG9jYWxfaW5pdCh2b2lkKVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNFRzYgTG9jYWwgSW5wdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgZXhwZWN0ZWQsIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2FmX2luZXQ2LmNgIG9yIGEgc2ltaWxhciBmaWxlIOKAkyBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIElQdjYgc3RhY2suIE15IG1haW4gZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGlzIG1vZGlmaWVkIFNFRzYgZnVuY3Rpb25hbGl0eS4gVGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIGl0IHNlZW1zLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaXMgdGhyb3dpbmcgYSBiaXQgb2YgYSBjdXJ2ZWJhbGwgaW4gaG93IEkgc2V0IHVwIHRoZSB0b29saW5nLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8ganVzdCBkdW1wIGJvdGggYHNlZzZfbG9jYWxfaW5wdXRgIGFuZCBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCBpbnRvIGBGb2N1c1N5bWJvbHNgLiBCdXQsIGhvbGQgb24uLi4gYEZvY3VzU3ltYm9sc2AgaXMgZGVzaWduZWQgdG8gcHJpb3JpdGl6ZSB0aGUgKnB1YmxpYy1mYWNpbmcqIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgYWJvdXQgZ2l2aW5nIHRoZSBoaWdoLWxldmVsIHZpZXcgZmlyc3QsIG5vdCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9ucy4KClNvLCBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLCBtYXliZSBpdCAqc2hvdWxkKiBnbyBpbiB0aGVyZSBpZiB0aGVyZSYjMzk7cyBubyBiZXR0ZXIgYWx0ZXJuYXRpdmUsIHJpZ2h0PyBXZSBuZWVkIHRvIGtlZXAgdGhlIGhpZ2gtbGV2ZWwgaWRlYSBvZiBob3cgdGhlIHBhdGggb3BlcmF0ZXMuCgouLi4gSGFuZyBvbi4gYHNlZzZfbG9jYWxfaW5wdXRgIGlzICpkZWZpbml0ZWx5KiBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBzZWc2X2xvY2FsX2lucHV0YD8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmaW5kLiBUaGUgcmVnaXN0cmF0aW9uIGlzIGxpa2VseSB0byBiZSB0aGUga2V5LCBzbyB3aGF0IGlzIGl0IHJlZ2lzdGVyZWQgdG8/IEFoLCBpdCYjMzk7cyByZWdpc3RlcmVkIGluIGBsd3R1bm5lbF9lbmNhcF9vcHNgISBMZXQmIzM5O3MgY2hlY2sgYGx3dHVubmVsX2lucHV0YCB0byB0cmFjZSB0aGUgcGF0aCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHd0dW5uZWxfaW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9sd3R1bm5lbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2x3dHVubmVsLmM9NDI5PUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX3htaXQpO1xubmV0L2NvcmUvbHd0dW5uZWwuYy00MzAtXG5uZXQvY29yZS9sd3R1bm5lbC5jOjQzMTppbnQgbHd0dW5uZWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMyLXtcbi0tXG5uZXQvY29yZS9sd3R1bm5lbC5jLTQ3OS19XG5uZXQvY29yZS9sd3R1bm5lbC5jOjQ4MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9pbnB1dCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDMyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgU3ltYm9scyBmb3IgSW5jbHVzaW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBsd3R1bm5lbF9pbnB1dGAgbG9va3MgcHJvbWlzaW5nLiBJdCYjMzk7cyBsaWtlbHkgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlLiBUaGVuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBzZWc2X2xvY2FsX2lucHV0YCwgaXQmIzM5O3Mgbm90IGlubGluZWQuIEl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjaywgd2hpY2ggbWVhbnMgaXQgaGFzIGEgZGlzdGluY3QgYWRkcmVzcy4KCkkgY2hlY2tlZCBob3cgaXQmIzM5O3MgZGVmaW5lZDogSXQmIzM5O3MgcGFydCBvZiB0aGUgYHNlZzZfbG9jYWxfb3BzYCBzdHJ1Y3QsIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBCZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbiYjMzk7dCogYmUgaW5saW5lZC4gU28sIHllcCwgYHNlZzZfbG9jYWxfaW5wdXRgIGRlZmluaXRlbHkgZ29lcyBpbnRvIGBGb2N1c1N5bWJvbHNgLgoKTm93LCB3aGF0IGFib3V0IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGA/IFRoZXkgYXJlIGFsc28gdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYHNlZzZfYWN0aW9uX3RhYmxlYCwgc28gdGhleSBzaGFyZSB0aGUgc2FtZSBwcm9wZXJ0eSBhcyBgc2VnNl9sb2NhbF9pbnB1dGA6IG5vdCBpbmxpbmVkLiBHcmVhdCwgSSYjMzk7bGwgaW5jbHVkZSB0aGVtIGFzIHdlbGwuCgpOZXh0LCBJIHNob3VsZCBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYElQVjZfU0VHNl9MV1RVTk5FTGAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgaXQgZGVwZW5kcyBvbiBgSVBWNmAsIGFzIGV4cGVjdGVkLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQ/IFRoZSBwYXRjaCBkZWFscyB3aXRoIGBJUFBST1RPX0lQSVBgLCBzbyBJUHY0IG92ZXIgSVB2Ni4gSSBrbm93IGBJTkVUYCBpcyB1c3VhbGx5IGVuYWJsZWQgZm9yIElQdjQgZnVuY3Rpb25hbGl0eSwgYnV0IGRvZXMgdGhpcyByZXF1aXJlIGFueXRoaW5nIHNwZWNpZmljIGZvciBJUHY0PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuIEFsc28gYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBpcyB1bmRlciBgI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTM4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZW5kX2R0X3ZyZl9jb3JlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTE4NDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE4NS1cdFx0XHRcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTMwOD1zdGF0aWMgaW50IHNlZzZfZW5kX2R0NDZfYnVpbGQoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LCBjb25zdCB2b2lkICpjZmcsXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTMtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMxNDpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHQ0NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTUtXHRcdFx0XHQgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0KVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI1LVx0Y2FzZSBJUFBST1RPX0lQSVA6XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTMyNjpcdFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHQ0KHNrYiwgc2x3dCk7XG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTMyNy1cdGNhc2UgSVBQUk9UT19JUFY2OlxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTIyLSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTIzOlx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NCxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTI0LVx0XHQuc2x3dF9vcHNcdD0ge1xuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ5LSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTUwOlx0XHQuaW5wdXRcdFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NDYsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1MS1cdFx0LnNsd3Rfb3BzXHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVmAuIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaC4gVGhpcyBtZWFucyB0aGF0IGlmIEkgZW5hYmxlIGBORVRfTDNfTUFTVEVSX0RFVmAsIEkgc2hvdWxkIGFsc28gYmUgZW5hYmxpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBkaXJlY3Rpb24uIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCB0byBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvc2VnNl9sb2NhbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYz05MzY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NjItXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTYzOnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTg5OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTAtXHRcdFx0XHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDQtXHRcdFx0ICAgICAgIGRldl9uZXQoc2tiLVx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVx1MDAzZWRldixcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMDA1Olx0XHRcdCAgICAgICBOVUxMLCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2gpO1xubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTAwNzpcdHJldHVybiBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goZGV2X25ldChza2ItXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMDA4LWRyb3A6XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXHRcdC5vcHRhdHRyc1x0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcdFx0LmlucHV0XHRcdD0gaW5wdXRfYWN0aW9uX2VuZF9keDQsXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBkZXBlbmRlbmNpZXMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzbiYjMzk7dCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucywganVzdCBlbmFibGluZyBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhhdC4gTm8gcHJvYmxlbSB0aGVyZS4gTm93LCBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgSSBuZWVkIGBORVRfTDNfTUFTVEVSX0RFVmAuCgpMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLi4uIFllcCwgYXMgSSBzdXNwZWN0ZWQsIGBJUFY2X1NFRzZfTFdUVU5ORUxgIG5hdHVyYWxseSBkZXBlbmRzIG9uIGBJUFY2YCwgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgcmVsaWVzIG9uIGBJTkVUYC4gVGhhdCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGFkZCB0aG9zZSB0d28gdG8gbXkgY29uZmlndXJhdGlvbi4KCkFscmlnaHQsIG5vdyBsZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUgcmVsZXZhbnQgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyB3ZSBhcmUgd29ya2luZyB3aXRoOiBgc2VnNl9sb2NhbF9pbnB1dGAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YC4KCldhaXQgYSBtaW51dGUuLi4gSSBqdXN0IG5vdGljZWQgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YCAqYWxzbyogY2FsbHMgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhpcyBtYWtlcyBgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2YCBhIHByZXR0eSBjb21wZWxsaW5nIGNhbmRpZGF0ZSBmb3IgbXkgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGtlZXAgdGhhdCBpbiBtaW5kLgoKRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBhbGwgZnVuY3Rpb25zIHdoaWNoIGNhbGwgYGRlY2FwX2FuZF92YWxpZGF0ZWAgd2l0aCBgSVBQUk9UT19JUElQYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWNhcF9hbmRfdmFsaWRhdGUuKklQUFJPVE9fSVBJUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkxLXtcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5OTI6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkzLVx0XHRnb3RvIGRyb3A7XG4tLVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTExODQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg5LVxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExOTA6XHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBJUCkpXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE5MS1cdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA0MQoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA3NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkmIzM5O20gc3RhcnRpbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMsIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IG1lYW5zIGl0JiMzOTtzIG5vdCBiZWluZyBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QgZm9yIGZ1enppbmcsIHJpZ2h0PyBIbW0sIGxldCYjMzk7cyBzZWUsIGlzIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIHVzZT8gSSBzZWUgYHNlZzZfbG9va3VwX25leHRob3BgIGlzIG5vbi1zdGF0aWMgYnV0IGl0IGlzIGNhbGxlZCBmcm9tIGBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2hgLCBub3QgYGlucHV0X2FjdGlvbl9lbmRfZHg0YC4gV2FpdCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCAqZG9lcyogY2FsbCBgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoYCBkaXJlY3RseS4gQWxyaWdodC4gVGhhdCYjMzk7cyBhIGdvb2QgZmluZC4gVGhhdCBtZWFucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzIHRoZSBvbmUgY2FsbGluZyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBhbmQgdGhhdCBjYW4gYmUgYSB0YXJnZXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBZZXMsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGhlIGBpbnB1dGAgY2FsbGJhY2sgZm9yIGBsd3R1bm5lbF9lbmNhcF9vcHNgLiBPa2F5LCBzbyBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgYSBrZXkgZm9jdXMuIEdvb2QuIFRoYXQgY29tYmluZWQgd2l0aCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGdpdmVzIHVzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyB0byB0YXJnZXQuCgpUaW1lIHRvIHByZXBhcmUgdGhlIHJlc3VsdHMuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgbmV0d29yayBkYXRhIHBhdGguIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KS4gVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc6IFRydWUuIFRoZSByZWFzb25pbmcgaXMgdGhhdCBpdCBhZGRyZXNzZXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNvdWxkIGludHJvZHVjZSBuZXcgYmVoYXZpb3JzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSB0aGUgYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWc2X2xvY2FsX2lucHV0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2X1NFRzZfTFdUVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzZWc2X2xvY2FsX2lucHV0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHg0JiMzNDssCiAgICAmIzM0O2lucHV0X2FjdGlvbl9lbmRfZHQ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cdTAwM2VjYmApIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgdHVubmVsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGBza2ItXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cblxuV2hpbGUgdGhpcyBwcmV2ZW50cyB0aGUgSVB2NCBzdGFjayBmcm9tIHJlYWRpbmcgXCYjMzQ7Z2FyYmFnZVwmIzM0OyBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFwmIzM0O3VuaW5pdGlhbGl6ZWRcJiMzNDsgbWVtb3J5LiBUaGUgYHNrYi1cdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cdTAwM2VjYmAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKGVpdGhlciB3aXRoIHplcm9lcyBvciB3aXRoIElQdjYgY29udHJvbCBkYXRhKSwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LlxuXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDIwOjIyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2VnNl9sb2NhbC5jIGIvbmV0L2lwdjYvc2VnNl9sb2NhbC5jCmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMKQEAgLTI1Niw2ICYjNDM7MjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pCiAJaWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHsKJiM0MzsJCWludCBpaWYgPSBJUDZDQihza2IpLSZndDtpaWY7CiYjNDM7CiYjNDM7CQltZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpOwomIzQzOwkJSVBDQihza2IpLSZndDtpaWYgPSBpaWY7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWQgaW4gYHNlZzZfbG9jYWwuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgaXQgbm93IGluY2x1ZGVzIHRoaXMgY2hlY2sgZm9yIGBJUFBST1RPX0lQSVBgLiAgVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4KClRoZSBwYXRjaCAqZXhwbGljaXRseSogemVyb3Mgb3V0IGBJUENCKHNrYilgIHVzaW5nIGBtZW1zZXRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoeT8gIElmIHlvdSYjMzk7cmUgemVyb2luZyBvdXQgbWVtb3J5LCBpdCBzY3JlYW1zICYjMzQ7cG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCYjMzQ7IHRvIG1lLiAgU28sIGxldCYjMzk7cyBkcmlsbCBkb3duLiAgYElQQ0Ioc2tiKWAgaXMgZXNzZW50aWFsbHkgYSBjYXN0IG9mIGBza2ItJmd0O2NiYCB0byBgc3RydWN0IGluZXRfc2tiX3Bhcm1gLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBza2JgJiMzOTtzIGNvbnRyb2wgYmxvY2ssIHRoZSBgc2tiLSZndDtjYmAgY2hhciBhcnJheS4KCkluaXRpYWxseSwgSSBzZWUgYGlpZmAgaXMgc2F2ZWQgYW5kIHRoZW4gcmVzdG9yZWQuIFNvLCBpdCB6ZXJvJiMzOTtzIG91dCBhIHN0cnVjdCwgYW5kIHRoZW4gcmVsb2FkcyAqb25lKiB2YWx1ZSBpbnRvIHRoYXQgc3RydWN0LiBXaHkgdGhlIHJlc2V0PyBJZiB0aGUgcGFja2V0IGlzIGdvaW5nIGZyb20gSVB2NiB0byBJUHY0IChJUElQKSwgdGhlbiB0aGUgb2xkIGNvbnRyb2wgYmxvY2sgY291bGQgaGF2ZSBJUHY2LXNwZWNpZmljIGRhdGEgaW4gaXQuIFRoaXMgY291bGQgY2F1c2UgdGhlIElQdjQgbGF5ZXIgdG8gcmVhZCBnYXJiYWdlIGZyb20gdGhlIG9sZCBJUHY2IGNvbnRleHQgaWYgbm90IGNsZWFyZWQuIEl0IGNvdWxkIGJlIGEgbG9naWMgYnVnIGlmIHRoZSBvbGQgdmFsdWVzIGFyZSBub3QgY2xlYXJlZCBvdXQsIGFuZCB0aGVuIGFyZSB1c2VkIGluY29ycmVjdGx5LgoKU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMuICBgc2tiLSZndDtjYmAgaXMgYSA0OC1ieXRlIGNoYXIgYXJyYXkuIEl0JiMzOTtzICpub3QqIHRlY2huaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBzZW5zZSBvZiBLTVNBTiwgYmVjYXVzZSB0aGUgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgYW5kIHByb2JhYmx5IGNvbnRhaW5zIGRhdGEuIEJ1dCwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIG5ldyBwcm90b2NvbCBsYXllciwgdGhhdCBkYXRhICppcyogZ2FyYmFnZSBmcm9tIHRoZSBwcmV2aW91cyBsYXllci4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbi4gRG9lcyBLTVNBTiB0cmFjayBgc2tiLSZndDtjYmAgYXMgdW5pbml0aWFsaXplZD8gSWYgaXQgKndhcyogdHJ1bHkgdW5pbml0aWFsaXplZCBhZnRlciBhbGxvY2F0aW9uLCBLTVNBTiB3b3VsZCBjYXRjaCB0aGF0LiBCdXQgd2hhdCBhYm91dCByZXVzZWQgZGF0YT8gIElmIHRoZSBgc2tiYCBpcyByZXVzZWQgKGFuZCBpdCB1c3VhbGx5IGlzKSwgS01TQU4gcHJvYmFibHkgKndvbiYjMzk7dCogZmxhZyBpdCB1bmxlc3MgdGhlIG1lbW9yeSB3YXMgbmV2ZXIgd3JpdHRlbiB0byAqYmVmb3JlKiByZXVzZS4gS01TQU4gdHJhY2tzICYjMzQ7dHJ1bHkgdW5pbml0aWFsaXplZCYjMzQ7IG1lbW9yeSBub3QgJiMzNDtpbml0aWFsaXplZCB3aXRoIHRoZSB3cm9uZyBkYXRhLiYjMzQ7CgpIb3dldmVyLCBpZiB0aGUgYHNrYmAgd2FzICpmcmVzaGx5KiBhbGxvY2F0ZWQsIGFuZCBgc2tiLSZndDtjYmAgd2FzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcywgS01TQU4gKndvdWxkKiBjYXRjaCBpdCB0aGVuLCBJIHRoaW5rLiAgSSBzaG91bGQgY2hlY2sgYGFsbG9jX3NrYmAgYW5kIGBfX2FsbG9jX3NrYmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBiZSBjZXJ0YWluLiBJcyBgc2tiLSZndDtjYmAgemVyb2VkIG9uIGFsbG9jYXRpb24/IFVzdWFsbHkgaXQgaXNuJiMzOTt0LgoKU28sIHRoZSBpc3N1ZSBpc24mIzM5O3QgYWJvdXQgS01TQU4gY2F0Y2hpbmcgdHJ1bHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluc3RlYWQsIGl0JiMzOTtzIGFib3V0IHRoZSBsb2dpYy4gSWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCBsYXRlciAqYW5kKiBpdCBjb250YWlucyBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGNvbnRleHQsIGl0JiMzOTtzIGEgbG9naWMgYnVnLiAgSG93ZXZlciwgaWYgaXQgY29udGFpbnMgKnRydWx5KiB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGFsbG9jYXRpb24sIEtNU0FOIHNob3VsZCBoYXZlIGFscmVhZHkgZmxhZ2dlZCBpdC4gSXQgc291bmRzIGxpa2UgdGhlIGRldmVsb3BlciB6ZXJvZWQgaXQgb3V0IHRvIGJlIHNhZmUsIHRvIGNsZWFyIG91dCB0aGUgcHJldmlvdXMgbGF5ZXImIzM5O3MgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1zZXQuKmNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqRGlyZWN0bHkgRXhhbWluaW5nIGBfX2FsbG9jX3NrYmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXR3b3JrIGJ1ZmZlcnMsIGxpa2VseSByZWxhdGVkIHRvIGtlcm5lbC1sZXZlbCBkYXRhIHRyYW5zbWlzc2lvbi4gVG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiwgSSB0aGluayBpdOKAmXMgYmVzdCB0byBieXBhc3MgYW55IGludGVybWVkaWF0ZSBhYnN0cmFjdGlvbnMgYW5kIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBfX2FsbG9jX3NrYmAgaXRzZWxmLiBJIHdhbnQgYSBjbGVhciwgZ3JhbnVsYXIgdmlldyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBpbml0aWFsaXphdGlvbiwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IGFuZCB3YW50IHRvIGFuYWx5emUgd2hhdCBpcyBoYXBwZW5pbmcsIGRvd24gaW4gdGhlIHdlZWRzLCB3aXRob3V0IGRpc3RyYWN0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYWxsb2Nfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NjA2PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjU3LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6NjU4OiAqXHRfX2FsbG9jX3NrYlx0LVx0YWxsb2NhdGUgYSBuZXR3b3JrIGJ1ZmZlclxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXHRAc2l6ZTogc2l6ZSB0byBhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjY3NDpzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxubmV0L2NvcmUvc2tidWZmLmMtNjc1LVx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc0NS19XG5uZXQvY29yZS9za2J1ZmYuYzo3NDY6RVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03NDctXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NzYxPXN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy03NzYtXHQgICAgKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjc3NzpcdFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xubmV0L2NvcmUvc2tidWZmLmMtNzc4LVx0XHRpZiAoIXNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz04Mzg9c3RydWN0IHNrX2J1ZmYgKm5hcGlfYWxsb2Nfc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy04NTQtXHQgICAgKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjg1NTpcdFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXG5uZXQvY29yZS9za2J1ZmYuYy04NTYtXHRcdFx0XHQgIE5VTUFfTk9fTk9ERSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cdHNpemUgPSBza2JfZW5kX29mZnNldChza2IpICYjNDM7IHNrYi1cdTAwM2VkYXRhX2xlbjtcbm5ldC9jb3JlL3NrYnVmZi5jOjIxOTE6XHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkyLVx0XHRcdHNrYl9hbGxvY19yeF9mbGFnKHNrYiksIE5VTUFfTk9fTk9ERSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMjI5LVx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XG5uZXQvY29yZS9za2J1ZmYuYzoyMjMwOlx0c3RydWN0IHNrX2J1ZmYgKm4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzaywgZmxhZ3MsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MTktXHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcdG4gPSBfX2FsbG9jX3NrYihuZXdoZWFkcm9vbSAmIzQzOyBza2ItXHUwMDNlbGVuICYjNDM7IG5ld3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtMjUyMS1cdFx0XHRnZnBfbWFzaywgc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk0NC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XHRcdFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICYjNDM7IGRvZmZzZXQgJiM0MzsgaGVhZHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ2LVx0XHRcdFx0XHQgICBHRlBfQVRPTUlDLCBza2JfYWxsb2NfcnhfZmxhZyhoZWFkX3NrYiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBfX2FsbG9jX3NrYmAgZm9yIGBza2ItJmd0O2NiYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0xldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBzb3VyY2UgZm9yIGBfX2FsbG9jX3NrYmAuJiMzNDsgU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gaG93IHRoZSBgc2tiLSZndDtjYmAgZmllbGQgaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciwgdXBvbiBhbGxvY2F0aW9uLCB0aGUgYHNrYi0mZ3Q7Y2JgIChjb250cm9sIGJsb2NrKSBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQuIFRoaXMgaXMgYSBjcnVjaWFsIGRldGFpbCBmb3IgZW5zdXJpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIEkmIzM5O20gd29ya2luZyB3aXRoIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBpbXBhY3QgcmFjZSBjb25kaXRpb25zIGFuZCBvdGhlciBzdWJ0bGUgYnVncyBpZiBvdmVybG9va2VkLiBTbywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuIDY3NTpcdFx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDY3ODpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xuIDY3OTpcdFx0dTggKmRhdGE7XG4gNjgwOlx0XG4gNjgxOlx0XHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxuIDY4MjpcdFx0XHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcbiA2ODM6XHRcbiA2ODQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDY4NTpcdFx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9mY2xvbmVfY2FjaGU7XG4gNjg2Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gNjg3Olx0XHR9XG4gNjg4Olx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcbiA2ODk6XHRcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcdTAwMjZcdTAwMjYgbm9kZSAhPSBudW1hX21lbV9pZCgpKSlcbiA2OTA6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcbiA2OTM6XHRcdFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xuIDY5NDpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNjk1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk2Olx0XHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXHUwMDI2XHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcbiA2OTc6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIDY5ODpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQoZmFsc2UpO1xuIDY5OTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDA6XHRcdH1cbiA3MDE6XHRcbiA3MDI6XHRcdGlmICghc2tiKSB7XG4gNzAzOlx0ZmFsbGJhY2s6XG4gNzA0Olx0XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZSwgZ2ZwX21hc2sgXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcbiA3MDU6XHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDcwNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDcwNzpcdFx0fVxuIDcwODpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNzA5Olx0XG4gNzEwOlx0XHQvKiBXZSBkbyBvdXIgYmVzdCB0byBhbGlnbiBza2Jfc2hhcmVkX2luZm8gb24gYSBzZXBhcmF0ZSBjYWNoZVxuIDcxMTpcdFx0ICogbGluZS4gSXQgdXN1YWxseSB3b3JrcyBiZWNhdXNlIGttYWxsb2MoWCBcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xuIDcxMjpcdFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXG4gNzEzOlx0XHQgKiBCb3RoIHNrYi1cdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cbiA3MTQ6XHRcdCAqL1xuIDcxNTpcdFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcdTAwMjZzaXplLCBnZnBfbWFzaywgbm9kZSwgc2tiKTtcbiA3MTY6XHRcdGlmICh1bmxpa2VseSghZGF0YSkpXG4gNzE3Olx0XHRcdGdvdG8gbm9kYXRhO1xuIDcxODpcdFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cbiA3MTk6XHRcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxuIDcyMDpcdFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cbiA3MjE6XHRcdCAqL1xuIDcyMjpcdFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG4gNzIzOlx0XG4gNzI0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcbiA3MjU6XHRcdFx0c3RydWN0IHNrX2J1ZmZfZmNsb25lcyAqZmNsb25lcztcbiA3MjY6XHRcbiA3Mjc6XHRcdFx0ZmNsb25lcyA9IGNvbnRhaW5lcl9vZihza2IsIHN0cnVjdCBza19idWZmX2ZjbG9uZXMsIHNrYjEpO1xuIDcyODpcdFxuIDcyOTpcdFx0XHQvKiBza2ItXHUwMDNlZmNsb25lIGlzIGEgMmJpdHMgZmllbGQuXG4gNzMwOlx0XHRcdCAqIFJlcGxhY2UgZXhwZW5zaXZlIFJNVyAoc2tiLVx1MDAzZWZjbG9uZSA9IFNLQl9GQ0xPTkVfT1JJRylcbiA3MzE6XHRcdFx0ICogd2l0aCBhIHNpbmdsZSBPUi5cbiA3MzI6XHRcdFx0ICovXG4gNzMzOlx0XHRcdEJVSUxEX0JVR19PTihTS0JfRkNMT05FX1VOQVZBSUxBQkxFICE9IDApO1xuIDczNDpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrYi1cdTAwM2VmY2xvbmUgIT0gU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSk7XG4gNzM1Olx0XHRcdHNrYi1cdTAwM2VmY2xvbmUgfD0gU0tCX0ZDTE9ORV9PUklHO1xuIDczNjpcdFxuIDczNzpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2ZmNsb25lcy1cdTAwM2VmY2xvbmVfcmVmLCAxKTtcbiA3Mzg6XHRcdH1cbiA3Mzk6XHRcbiA3NDA6XHRcdHJldHVybiBza2I7XG4gNzQxOlx0XG4gNzQyOlx0bm9kYXRhOlxuIDc0MzpcdFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlLCBza2IpO1xuIDc0NDpcdFx0cmV0dXJuIE5VTEw7XG4gNzQ1Olx0fVxuIDc0NjpcdEVYUE9SVF9TWU1CT0woX19hbGxvY19za2IpO1xuIDc0NzpcdFxuIDc0ODpcdC8qKlxuIDc0OTpcdCAqXHRfX25ldGRldl9hbGxvY19za2IgLSBhbGxvY2F0ZSBhbiBza2J1ZmYgZm9yIHJ4IG9uIGEgc3BlY2lmaWMgZGV2aWNlXG4gNzUwOlx0ICpcdEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIHJlY2VpdmUgb25cbiA3NTE6XHQgKlx0QGxlbjogbGVuZ3RoIHRvIGFsbG9jYXRlXG4gNzUyOlx0ICpcdEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGFsbG9jX3NrYlxuIDc1MzpcdCAqXG4gNzU0Olx0ICpcdEFsbG9jYXRlIGEgbmV3IFx1MDAyNnNrX2J1ZmYgYW5kIGFzc2lnbiBpdCBhIHVzYWdlIGNvdW50IG9mIG9uZS4gVGhlXG4gNzU1Olx0ICpcdGJ1ZmZlciBoYXMgTkVUX1NLQl9QQUQgaGVhZHJvb20gYnVpbHQgaW4uIFVzZXJzIHNob3VsZCBhbGxvY2F0ZVxuIDc1NjpcdCAqXHR0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGVcbiA3NTc6XHQgKlx0YnVpbHQgaW4gc3BhY2UuIFRoZSBidWlsdCBpbiBzcGFjZSBpcyB1c2VkIGZvciBvcHRpbWlzYXRpb25zLlxuIDc1ODpcdCAqXG4gNzU5Olx0ICpcdCVOVUxMIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LlxuIDc2MDpcdCAqL1xuIDc2MTpcdHN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcbiA3NjI6XHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrKVxuIDc2MzpcdHtcbiA3NjQ6XHRcdHN0cnVjdCBwYWdlX2ZyYWdfY2FjaGUgKm5jO1xuIDc2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA3NjY6XHRcdGJvb2wgcGZtZW1hbGxvYztcbiA3Njc6XHRcdHZvaWQgKmRhdGE7XG4gNzY4Olx0XG4gNzY5Olx0XHRsZW4gJiM0Mzs9IE5FVF9TS0JfUEFEO1xuIDc3MDpcdFxuIDc3MTpcdFx0LyogSWYgcmVxdWVzdGVkIGxlbmd0aCBpcyBlaXRoZXIgdG9vIHNtYWxsIG9yIHRvbyBiaWcsXG4gNzcyOlx0XHQgKiB3ZSB1c2Uga21hbGxvYygpIGZvciBza2ItXHUwMDNlaGVhZCBhbGxvY2F0aW9uLlxuIDc3MzpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHNrYnVmZl9jbGVhcihza2IpKioKCk9rYXksIHNvIGBza2J1ZmZfY2xlYXIoc2tiKWAgaGFzIGJlZW4gY2FsbGVkLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QsIGdpdmVuIG15IGRlZXAgdW5kZXJzdGFuZGluZyBvZiB0aGUgTGludXggbmV0d29ya2luZyBzdGFjaywgaXMgdG8gZGVsdmUgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJdOKAmXMgYSBwcmV0dHkgc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb24gLSAmIzM0O2NsZWFyJiMzNDsgdHlwaWNhbGx5IGltcGxpZXMgc29tZSBmb3JtIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24gb3IgcmVzZXR0aW5nIG9mIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhbiBgc2tfYnVmZmAgc3RydWN0LCB3aGljaCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNlbnRyYWwgdG8gcGFja2V0IGhhbmRsaW5nLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGp1c3QgemVyb2luZyBvdXQgZGF0YT8gT3IgaXMgaXQgcmVsZWFzaW5nIGJ1ZmZlcnMgYmFjayB0byBhIHBvb2w/IERvZXMgaXQgZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsbHkgcmFjZS1jb25kaXRpb24gaXNzdWVzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQ/IEkgbmVlZCB0byBhbmFseXplIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIGNvbmZpcm0gZXhhY3RseSAqd2hhdCogcGFydCBvZiB0aGUgYnVmZmVyIGlzIGJlaW5nIHRhcmdldGVkLCBhbmQgdW5kZXIgd2hhdCBjb250ZXh0IHRoaXMgaXMgaGFwcGVuaW5nLiBUaGUgc3RhY2sgaXRzZWxmIGNvbnRhaW5zIHNvIG11Y2ggY3JpdGljYWwgZGF0YSBhYm91dCBuZXR3b3JraW5nLCBmcm9tIGhlYWRlcnMgdG8gcGF5bG9hZC4gVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY3JpdGljYWwuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IG1lY2hhbmlzbXMsIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhpcyBpbXBhY3RzIHRoZSBvdmVyYWxsIHBhY2tldCBsaWZlY3ljbGUgd2l0aGluIHRoaXMgc3BlY2lmaWMgZmxvdy4gSXQgbmVlZHMgdG8gYWxpZ24gd2l0aCBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcsIG9yIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRvIGRpZyBpbiBkZWVwZXIgdG8gdW5kZXJzdGFuZCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tidWZmX2NsZWFyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTMxNS0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvY29yZS9za2J1ZmYuYy0zMTcte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM3OS1cdFx0a2FzYW5fbWVtcG9vbF91bnBvaXNvbl9vYmplY3Qoc2tic1tpXSwgc2tidWZmX2NhY2hlX3NpemUpO1xubmV0L2NvcmUvc2tidWZmLmM6MzgwOlx0XHRza2J1ZmZfY2xlYXIoc2tic1tpXSk7XG5uZXQvY29yZS9za2J1ZmYuYy0zODEtXHR9XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ0Ni1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ0NzpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNDQ4LVx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXHUwMDI2c2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5OC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ5OTpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNTAwLVx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NTI9c3RhdGljIHN0cnVjdCBza19idWZmICpfX25hcGlfYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxubmV0L2NvcmUvc2tidWZmLmM6NTYwOlx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTcwNy1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjcwODpcdHNrYnVmZl9jbGVhcihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBgc2tidWZmX2NsZWFyYC4gV2hhdCBpcyB0aGlzIGZ1bmN0aW9uIG1lYW50IHRvIGRvPyBQcm9iYWJseSB0byBpbml0aWFsaXplIG9yIHJlc2V0IGEgc29ja2V0IGJ1ZmZlciwgYHNrYmAuIEtub3dpbmcgdGhlIGtlcm5lbCwgaXTigJlzIGxpa2VseSBhIGxvdy1sZXZlbCByb3V0aW5lIGVzc2VudGlhbCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG5ldHdvcmsgb3BlcmF0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0JiMzOTtzIHByb2JhYmx5IGNsZWFyaW5nIG9yIHplcm9pbmcgb3V0IGNyaXRpY2FsIGZpZWxkcyB3aXRoaW4gdGhlIHNrYiBzdHJ1Y3R1cmUsIHByZXBhcmluZyBpdCBmb3IgcmUtdXNlIG9yIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gVGhpbmtpbmcgYWhlYWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFydHMgb2YgdGhlIGBza2JgIGl0IGNsZWFycyBvciB6ZXJvZXMgYW5kIHdoeS4gRG9lcyBpdCBoYW5kbGUgZGF0YSBwb2ludGVycywgbWV0YWRhdGEsIGNvdW50ZXJzLCBmbGFncz8gV2hhdCBhYm91dCByZWZlcmVuY2UgY291bnRzPyBBbnkgcG90ZW50aWFsIHBpdGZhbGxzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBsZWFrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvbj8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBmdW5kYW1lbnRhbCB0byB0aGUgc29ja2V0IGxheWVyLCBzbyBpdCYjMzk7cyB3b3J0aCBhIGRlZXAgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSBob3cgaXQgd29ya3MgYW5kIHZlcmlmeSBteSBwcmVzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMTc6XHR7XG4gMzE4Olx0XHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcbiAzMTk6XHRcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxuIDMyMDpcdFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxuIDMyMTpcdFx0ICovXG4gMzIyOlx0XHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFx1MDAzYz0gMTI4KTtcbiAzMjM6XHRcdG1lbXNldChza2IsIDAsIDEyOCk7XG4gMzI0Olx0XHRiYXJyaWVyKCk7XG4gMzI1Olx0XHRtZW1zZXQoKHZvaWQgKilza2IgJiM0MzsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xuIDMyNjpcdH1cbiAzMjc6XHRcbiAzMjg6XHQvKipcbiAzMjk6XHQgKiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayAtIG9idGFpbiBhIG51bWJlciBvZiB6ZXJvZWQgc2tiIGhlYWRzIGZyb20gdGhlIGNhY2hlXG4gMzMwOlx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xuIDMzMTpcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXG4gMzMyOlx0ICpcbiAzMzM6XHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXHUwMDI2c2tfYnVmZiBlbnRyaWVzIGZyb20gdGhlIE5BUEkgcGVyY3B1IGNhY2hlIGFuZCB3cml0ZXNcbiAzMzQ6XHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcbiAzMzU6XHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgc2tidWZmX2NsZWFyYC4gSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgZXhhY3RseSB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgaXQgemVyb2VzIG91dCB0aGUgbWVtb3J5IHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHVwIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gR29vZC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIuIFRvIHJlYWxseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoaXMgb3BlcmF0aW9uLCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sIGJsb2NrLCBvciBgY2JgLCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc2tfYnVmZmAgbGF5b3V0LiBJIG5lZWQgdG8gdmlzdWFsaXplIHRoZSBtZW1vcnkgbGF5b3V0IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgY2xlYXJpbmcgYWZmZWN0cyB0aGUgY29udHJvbCBkYXRhLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGlzIGNsZWFyIGltcGFjdHMgYW55IG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNrX2J1ZmYgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04ODUtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg4NjpzdHJ1Y3Qgc2tfYnVmZiB7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg4Ny1cdHVuaW9uIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUyMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgc2tfYnVmZmAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZvY3VzIGlzICpzdHJ1Y3Qgc2tfYnVmZiosIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgbWUgaW4gYSBzcGVjaWZpYyBmcmFtZSBvZiBtaW5kLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayBvZiBuZXR3b3JrIHRyYWZmaWMgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlLCB0aGUgY29udGFpbmVyIGZvciBhbGwgdGhlIG5ldHdvcmsgcGFja2V0cyBmbG93aW5nIHRocm91Z2ggdGhlIHN5c3RlbS4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgaXRzIGludHJpY2F0ZSBkZXRhaWxzOiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQsIHRoZSBjaGFpbmluZyBjYXBhYmlsaXRpZXMsIHRoZSB2YXJpb3VzIGZsYWdzIGFuZCBjb250cm9sIGZpZWxkcyB0aGF0IGRpY3RhdGUgaG93IGEgcGFja2V0IGlzIGhhbmRsZWQgYXQgZGlmZmVyZW50IGxheWVycy4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBzdHJ1Y3TigJlzIGRlZmluaXRpb24sIGFudGljaXBhdGluZyBwb2ludGVycyB0byBtZXRhZGF0YSwgdGhlIHBheWxvYWQgaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtYnVmIGxheWVyIGlmIGFwcGxpY2FibGUuIE15IG1pbmQgaXMgYWxyZWFkeSBza2V0Y2hpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBLbm93aW5nIGBza19idWZmYCBpcyB0aGUgY29yZSBtYWtlcyBtZSBleHBlY3QgdG8gc2VlIHNvbWUgY2xldmVyIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbGx5IHNvbWUgbG9ja2xlc3Mgc3RydWN0dXJlcyB0byBmYWNpbGl0YXRlIHBhcmFsbGVsaXNtLCBhbmQgbGlrZWx5IHNvbWUgY2FyZWZ1bGx5IGNyYWZ0ZWQgbWVtb3J5IGxheW91dHMgZm9yIGNhY2hlIGVmZmljaWVuY3kuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoaXMgZGF0YSBzdHJ1Y3R1cmUsIGl0cyBpbnRlcm5hbCBzdGF0ZSwgYW5kIHdoZXJlIGl0IGZpdHMgaW4gdGhlIHdpZGVyIGtlcm5lbCBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg4NjpcdHN0cnVjdCBza19idWZmIHtcbiA4ODc6XHRcdHVuaW9uIHtcbiA4ODg6XHRcdFx0c3RydWN0IHtcbiA4ODk6XHRcdFx0XHQvKiBUaGVzZSB0d28gbWVtYmVycyBtdXN0IGJlIGZpcnN0IHRvIG1hdGNoIHNrX2J1ZmZfaGVhZC4gKi9cbiA4OTA6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqbmV4dDtcbiA4OTE6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqcHJldjtcbiA4OTI6XHRcbiA4OTM6XHRcdFx0XHR1bmlvbiB7XG4gODk0Olx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZVx0KmRldjtcbiA4OTU6XHRcdFx0XHRcdC8qIFNvbWUgcHJvdG9jb2xzIG1pZ2h0IHVzZSB0aGlzIHNwYWNlIHRvIHN0b3JlIGluZm9ybWF0aW9uLFxuIDg5NjpcdFx0XHRcdFx0ICogd2hpbGUgZGV2aWNlIHBvaW50ZXIgd291bGQgYmUgTlVMTC5cbiA4OTc6XHRcdFx0XHRcdCAqIFVEUCByZWNlaXZlIHBhdGggaXMgb25lIHVzZXIuXG4gODk4Olx0XHRcdFx0XHQgKi9cbiA4OTk6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmdcdFx0ZGV2X3NjcmF0Y2g7XG4gOTAwOlx0XHRcdFx0fTtcbiA5MDE6XHRcdFx0fTtcbiA5MDI6XHRcdFx0c3RydWN0IHJiX25vZGVcdFx0cmJub2RlOyAvKiB1c2VkIGluIG5ldGVtLCBpcDQgZGVmcmFnLCBhbmQgdGNwIHN0YWNrICovXG4gOTAzOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWRcdGxpc3Q7XG4gOTA0Olx0XHRcdHN0cnVjdCBsbGlzdF9ub2RlXHRsbF9ub2RlO1xuIDkwNTpcdFx0fTtcbiA5MDY6XHRcbiA5MDc6XHRcdHN0cnVjdCBzb2NrXHRcdCpzaztcbiA5MDg6XHRcbiA5MDk6XHRcdHVuaW9uIHtcbiA5MTA6XHRcdFx0a3RpbWVfdFx0XHR0c3RhbXA7XG4gOTExOlx0XHRcdHU2NFx0XHRza2JfbXN0YW1wX25zOyAvKiBlYXJsaWVzdCBkZXBhcnR1cmUgdGltZSAqL1xuIDkxMjpcdFx0fTtcbiA5MTM6XHRcdC8qXG4gOTE0Olx0XHQgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5XG4gOTE1Olx0XHQgKiBsYXllci4gUGxlYXNlIHB1dCB5b3VyIHByaXZhdGUgdmFyaWFibGVzIHRoZXJlLiBJZiB5b3VcbiA5MTY6XHRcdCAqIHdhbnQgdG8ga2VlcCB0aGVtIGFjcm9zcyBsYXllcnMgeW91IGhhdmUgdG8gZG8gYSBza2JfY2xvbmUoKVxuIDkxNzpcdFx0ICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLlxuIDkxODpcdFx0ICovXG4gOTE5Olx0XHRjaGFyXHRcdFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcbiA5MjA6XHRcbiA5MjE6XHRcdHVuaW9uIHtcbiA5MjI6XHRcdFx0c3RydWN0IHtcbiA5MjM6XHRcdFx0XHR1bnNpZ25lZCBsb25nXHRfc2tiX3JlZmRzdDtcbiA5MjQ6XHRcdFx0XHR2b2lkXHRcdCgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gOTI1Olx0XHRcdH07XG4gOTI2Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWRcdHRjcF90c29ydGVkX2FuY2hvcjtcbiA5Mjc6XHQjaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xuIDkyODpcdFx0XHR1bnNpZ25lZCBsb25nXHRcdF9za19yZWRpcjtcbiA5Mjk6XHQjZW5kaWZcbiA5MzA6XHRcdH07XG4gOTMxOlx0XG4gOTMyOlx0I2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSlcbiA5MzM6XHRcdHVuc2lnbmVkIGxvbmdcdFx0IF9uZmN0O1xuIDkzNDpcdCNlbmRpZlxuIDkzNTpcdFx0dW5zaWduZWQgaW50XHRcdGxlbixcbiA5MzY6XHRcdFx0XHRcdGRhdGFfbGVuO1xuIDkzNzpcdFx0X191MTZcdFx0XHRtYWNfbGVuLFxuIDkzODpcdFx0XHRcdFx0aGRyX2xlbjtcbiA5Mzk6XHRcbiA5NDA6XHRcdC8qIEZvbGxvd2luZyBmaWVsZHMgYXJlIF9ub3RfIGNvcGllZCBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG4gOTQxOlx0XHQgKiBOb3RlIHRoYXQgcXVldWVfbWFwcGluZyBpcyBoZXJlIG1vc3RseSB0byBmaWxsIGEgaG9sZS5cbiA5NDI6XHRcdCAqL1xuIDk0MzpcdFx0X191MTZcdFx0XHRxdWV1ZV9tYXBwaW5nO1xuIDk0NDpcdFxuIDk0NTpcdC8qIGlmIHlvdSBtb3ZlIGNsb25lZCBhcm91bmQgeW91IGFsc28gbXVzdCBhZGFwdCB0aG9zZSBjb25zdGFudHMgKi9cbiA5NDY6XHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG4gOTQ3Olx0I2RlZmluZSBDTE9ORURfTUFTS1x0KDEgXHUwMDNjXHUwMDNjIDcpXG4gOTQ4Olx0I2Vsc2VcbiA5NDk6XHQjZGVmaW5lIENMT05FRF9NQVNLXHQxXG4gOTUwOlx0I2VuZGlmXG4gOTUxOlx0I2RlZmluZSBDTE9ORURfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX2Nsb25lZF9vZmZzZXQpXG4gOTUyOlx0XG4gOTUzOlx0XHQvKiBwcml2YXRlOiAqL1xuIDk1NDpcdFx0X191OFx0XHRcdF9fY2xvbmVkX29mZnNldFswXTtcbiA5NTU6XHRcdC8qIHB1YmxpYzogKi9cbiA5NTY6XHRcdF9fdThcdFx0XHRjbG9uZWQ6MSxcbiA5NTc6XHRcdFx0XHRcdG5vaGRyOjEsXG4gOTU4Olx0XHRcdFx0XHRmY2xvbmU6MixcbiA5NTk6XHRcdFx0XHRcdHBlZWtlZDoxLFxuIDk2MDpcdFx0XHRcdFx0aGVhZF9mcmFnOjEsXG4gOTYxOlx0XHRcdFx0XHRwZm1lbWFsbG9jOjEsXG4gOTYyOlx0XHRcdFx0XHRwcF9yZWN5Y2xlOjE7IC8qIHBhZ2VfcG9vbCByZWN5Y2xlIGluZGljYXRvciAqL1xuIDk2MzpcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbiA5NjQ6XHRcdF9fdThcdFx0XHRhY3RpdmVfZXh0ZW5zaW9ucztcbiA5NjU6XHQjZW5kaWZcbiA5NjY6XHRcbiA5Njc6XHRcdC8qIEZpZWxkcyBlbmNsb3NlZCBpbiBoZWFkZXJzIGdyb3VwIGFyZSBjb3BpZWRcbiA5Njg6XHRcdCAqIHVzaW5nIGEgc2luZ2xlIG1lbWNweSgpIGluIF9fY29weV9za2JfaGVhZGVyKClcbiA5Njk6XHRcdCAqL1xuIDk3MDpcdFx0c3RydWN0X2dyb3VwKGhlYWRlcnMsXG4gOTcxOlx0XG4gOTcyOlx0XHQvKiBwcml2YXRlOiAqL1xuIDk3MzpcdFx0X191OFx0XHRcdF9fcGt0X3R5cGVfb2Zmc2V0WzBdO1xuIDk3NDpcdFx0LyogcHVibGljOiAqL1xuIDk3NTpcdFx0X191OFx0XHRcdHBrdF90eXBlOjM7IC8qIHNlZSBQS1RfVFlQRV9NQVggKi9cbiA5NzY6XHRcdF9fdThcdFx0XHRpZ25vcmVfZGY6MTtcbiA5Nzc6XHRcdF9fdThcdFx0XHRkc3RfcGVuZGluZ19jb25maXJtOjE7XG4gOTc4Olx0XHRfX3U4XHRcdFx0aXBfc3VtbWVkOjI7XG4gOTc5Olx0XHRfX3U4XHRcdFx0b29vX29rYXk6MTtcbiA5ODA6XHRcbiA5ODE6XHRcdC8qIHByaXZhdGU6ICovXG4gOTgyOlx0XHRfX3U4XHRcdFx0X19tb25vX3RjX29mZnNldFswXTtcbiA5ODM6XHRcdC8qIHB1YmxpYzogKi9cbiA5ODQ6XHRcdF9fdThcdFx0XHR0c3RhbXBfdHlwZToyO1x0LyogU2VlIHNrYl90c3RhbXBfdHlwZSAqL1xuIDk4NTpcdCNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIGBza19idWZmLSZndDtjYmAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBjYmAgZmllbGQgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIGF0IGEga25vd24gb2Zmc2V0IOKAkyA0MCBvciA0OCBieXRlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBpcyB0aGF0IGB0YWlsYCBjb21lcyBtdWNoIGxhdGVyLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQsIGl0JiMzOTtzIGdvaW5nIHRvIHplcm8gb3V0IHRoZSBlbnRpcmUgYGNiYCByZWdpb24gYmVjYXVzZSBgbWVtc2V0YCBpcyB1c2VkIHVwIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGlmIGBza2J1ZmZfY2xlYXJgIHplcm9lZCBvdXQgYGNiYCwgdGhlbiBpdCAqc2hvdWxkKiBiZSB6ZXJvZWQgb24gZXZlcnkgbmV3IGFsbG9jYXRpb24sIHdoaWNoIHNlZW1zIGxvZ2ljYWwgYmVjYXVzZSBgY2JgIGlzIHJldXNlZCBieSB2YXJpb3VzIG5ldHdvcmsgbGF5ZXJzLgoKVGhlbiB0aGUgY29uY2VybiBhcm9zZSB0aGF0IGFzIGEgcGFja2V0IGlzIHByb2Nlc3NlZCDigJMgZnJvbSBkcml2ZXIgdG8gSVAsIHRvIFRDUCwgd2hhdGV2ZXIg4oCTIGVhY2ggbGF5ZXIgKm1pZ2h0KiB3cml0ZSBkYXRhIGludG8gYGNiYC4gSWYgYSBzdWJzZXF1ZW50IGxheWVyIGV4cGVjdHMgYGNiYCB0byBiZSB6ZXJvZWQsIGJ1dCBpdCBpbnN0ZWFkIGNvbnRhaW5zIHN0YWxlIGRhdGEgZnJvbSBhIHByZXZpb3VzIGxheWVyLCB3b3VsZG4mIzM5O3QgdGhhdCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gSSBtZWFuLCBzaG91bGRuJiMzOTt0IEtNU0FOIGNhdGNoIHRoaXMga2luZCBvZiB0aGluZz8KCkJ1dCB0aGVuIEkgcmVhbGl6ZWQgdGhhdCBLTVNBTiYjMzk7cyBkZWZpbml0aW9uIG9mICYjMzQ7dW5pbml0aWFsaXplZCYjMzQ7IGlzbiYjMzk7dCBxdWl0ZSB0aGUgc2FtZSBhcyBhIGZ1bmN0aW9uYWwgaXNzdWUgaGVyZS4gS01TQU4gdHJhY2tzIG1lbW9yeSB0aGF0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgYWxsb2NhdGlvbi4gU2luY2UgYGNiYCAqaXMqIHplcm9lZCBvbiBhbGxvY2F0aW9uICh0aGFua3MgdG8gYHNrYnVmZl9jbGVhcmApLCBLTVNBTiB3b3VsZCBjb25zaWRlciBpdCAmIzM0O2luaXRpYWxpemVkLiYjMzQ7IFdoZXRoZXIgYSBwcmV2aW91cyBsYXllciBoYXMgd3JpdHRlbiB0byBpdCBvciBub3QsIEtNU0FOIHNlZXMgaXQgYXMgaW5pdGlhbGl6ZWQuIFRoZSBtZW1vcnkgaGFzIGJlZW4gd3JpdHRlbiB0bywgZXZlbiBpZiB0aGUgdmFsdWUgd3JpdHRlbiBpcyB6ZXJvLCBhbmQgdGhhdCYjMzk7cyBhbGwgdGhhdCBtYXR0ZXJzIHRvIEtNU0FOLgoKU28sIHRoaXMgbWVhbnMgS01TQU4gd29uJiMzOTt0IGZsYWcgdGhpcyBzY2VuYXJpbywgZXZlbiBpZiB0aGUgY29kZSAqZXhwZWN0cyogYSB6ZXJvZWQgYGNiYCBhbmQgcmVhZHMgYSBub24temVybyB2YWx1ZSBsZWZ0IGJ5IGFuIGVhcmxpZXIgbGF5ZXIuIEl0JiMzOTtzIGEgJiMzNDtnYXJiYWdlJiMzNDsgdmFsdWUgdG8gdGhlIG5ldyBsYXllciwgYnV0IGl0JiMzOTtzIG5vdCB1bmluaXRpYWxpemVkIGluIEtNU0FOJiMzOTtzIHNlbnNlLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhbm90aGVyIGFuZ2xlLiBXaGF0IGlmIHRoZSBidWcgaXNuJiMzOTt0IGEgZGlyZWN0IHJlYWQgb2YgYHNrYi0mZ3Q7Y2JgIGJ1dCBhIG1vcmUgc3VidGxlIGlzc3VlPyBXaGF0IGlmIGBJUENCKHNrYilgIGlzIGJlaW5nIHJlYWQsIGFuZCAqc29tZSogb2YgdGhlIGZpZWxkcyAqd2l0aGluKiBgSVBDQmAgd2VyZSBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYnkgYSBwcmlvciBsYXllciwgZGVzcGl0ZSBgc2tidWZmX2NsZWFyYD8gSW4gdGhhdCBjYXNlLCBgc2tidWZmX2NsZWFyYCB3b3VsZG4mIzM5O3QgYmUgZGlyZWN0bHkgcmVzcG9uc2libGUgZm9yIHRoZSB1bmluaXRpYWxpemVkIHN0YXRlLgoKQnV04oCmIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBza2J1ZmZfY2xlYXJgIGFjdHVhbGx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIGB0YWlsYCwgaW5jbHVkaW5nIGBjYmAuIFllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKWAgZG9lcyB0aGUgam9iLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGVudGlyZSBgY2JgIHJlZ2lvbiBpcyBpbmRlZWQgemVyb2VkLiBUaGF0IG1lYW5zIHRoYXQgYW55IHN1YnNlcXVlbnQgd3JpdGVzIHRvIHBhcnRzIG9mIGBjYmAgaW5pdGlhbGl6ZSB0aG9zZSBzcGVjaWZpYyBieXRlcy4gVGhlIHJlbWFpbmRlciB0aGF0ICp3YXNuJiMzOTt0KiB3cml0dGVuIHRvIHJlbWFpbnMgemVyb2VkLCB3aGljaCBpcyBhIGRlZmluZWQgdmFsdWUuCgpUaGVyZWZvcmUsIGluIG5vIHNjZW5hcmlvIHdvdWxkIGBjYmAgY29udGFpbiAqS01TQU4qLXVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBtaWdodCBjb250YWluIHN0YWxlLCBmdW5jdGlvbmFsbHkgaW5jb3JyZWN0IGRhdGEsIGJ1dCB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHByb2JsZW0gYWx0b2dldGhlciwgYW5kIEtNU0FOIHdvbiYjMzk7dCBjYXRjaCBpdC4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQgaGFwcGVucyB3aGVuIGNsb25pbmcgb3IgY29weWluZyBhbiBza2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fY29weV9za2JfaGVhZGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTUtXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU3LXtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xubmV0L2NvcmUvc2tidWZmLmM6MTYwNTogKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxubmV0L2NvcmUvc2tidWZmLmMtMTYwNi0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjEyLVx0bi1cdTAwM2VzayA9IE5VTEw7XG5uZXQvY29yZS9za2J1ZmYuYzoxNjEzOlx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NTctXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4Olx0X19jb3B5X3NrYl9oZWFkZXIobiwgZmlyc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtMTY1OS1cdG4tXHUwMDNlZGVzdHJ1Y3RvciA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMjE0NC17XG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ1Olx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjE0Ni1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDczMi1cdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xubmV0L2NvcmUvc2tidWZmLmM6NDczMzpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3MzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXG5uZXQvY29yZS9za2J1ZmYuYzo0OTYyOlx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00OTYzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBgX19jb3B5X3NrYl9oZWFkZXJgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgbmV0d29yayBzdGFjaywgbGlrZWx5IGRlYWxpbmcgd2l0aCBwYWNrZXQgbWFuaXB1bGF0aW9uIGFuZCBkYXRhIHRyYW5zZmVyIGF0IGEgbG93IGxldmVsLiBJIGJldCBpdCYjMzk7cyBjYWxsZWQgdG8gcmVwbGljYXRlIHRoZSBoZWFkZXIgb2YgYSBTb2NrZXQgQnVmZmVyIChgc2tiYCkg4oCTIG1lYW5pbmcgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24sIGxpa2Ugc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcywgcHJvdG9jb2wgdHlwZXMsIGFuZCB2YXJpb3VzIGZsYWdzIOKAkyB3aXRob3V0IGNvcHlpbmcgdGhlIGFjdHVhbCBkYXRhIHBheWxvYWQuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgcGFja2V0IGNsb25pbmcsIG9yIHBlcmhhcHMgY3JlYXRpbmcgYSBuZXcgc2tiIGZvciBhIGZvcndhcmRlZCBwYWNrZXQuIFRoZSAmIzM0O2RvdWJsZSB1bmRlcnNjb3JlJiMzNDsgcHJlZml4IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaXQmIzM5O3MgYSBrZXJuZWwgaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuCgpJIGltYWdpbmUgaXQgd291bGQgbmVlZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHZhcmlvdXMgYXNwZWN0cyB0byB0aGUgaGVhZGVycyBpbnZvbHZlZCwgbGlrZSB0aGUgcG9zc2libGUgcHJlc2VuY2Ugb2YgVkxBTiB0YWdzLCBmcmFnbWVudGF0aW9uIGRldGFpbHMgYW5kIG90aGVyIGNvbXBsZXhpdGllcy4gVGhlcmVmb3JlLCBpdCBoYXMgdG8gYmUgcm9idXN0IGFuZCBwZXJmb3JtYW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGVmZmljaWVuY3kgdHJpY2tzIHRvIG1pbmltaXNlIGNvcHlpbmcgYXMgdGhhdCBpcyB0aGUgZnVuY3Rpb24mIzM5O3Mgc29sZSBwdXJwb3NlLiBUaGVyZSYjMzk7cyBhIGhpZ2ggcHJvYmFiaWxpdHkgdGhpcyBmdW5jdGlvbiBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgdXNlIG9mIGlubGluZSBvciBjb21waWxlciBkaXJlY3RpdmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoZSBmdW5jdGlvbiBtaWdodCBiZSBsZXZlcmFnaW5nIGhhcmR3YXJlIGZlYXR1cmVzIHRvIG1ha2UgdGhpcyBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGlzIG1ha2VzIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSB0aGUgc2tiIHN0cnVjdCBpdHNlbGYsIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCB0aGUgc3VidGxlIGFzcGVjdHMgb2YgdGhlIGhlYWRlciBmaWVsZHMgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlaXIgdmFyaW91cyBzdGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NTY6XHRzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuMTU1NzpcdHtcbjE1NTg6XHRcdG5ldy1cdTAwM2V0c3RhbXBcdFx0PSBvbGQtXHUwMDNldHN0YW1wO1xuMTU1OTpcdFx0LyogV2UgZG8gbm90IGNvcHkgb2xkLVx1MDAzZXNrICovXG4xNTYwOlx0XHRuZXctXHUwMDNlZGV2XHRcdD0gb2xkLVx1MDAzZWRldjtcbjE1NjE6XHRcdG1lbWNweShuZXctXHUwMDNlY2IsIG9sZC1cdTAwM2VjYiwgc2l6ZW9mKG9sZC1cdTAwM2VjYikpO1xuMTU2MjpcdFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcbjE1NjM6XHRcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcbjE1NjQ6XHRcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xuMTU2NTpcdFxuMTU2NjpcdFx0LyogTm90ZSA6IHRoaXMgZmllbGQgY291bGQgYmUgaW4gdGhlIGhlYWRlcnMgZ3JvdXAuXG4xNTY3Olx0XHQgKiBJdCBpcyBub3QgeWV0IGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSBhIDE2IGJpdCBob2xlXG4xNTY4Olx0XHQgKi9cbjE1Njk6XHRcdG5ldy1cdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVx1MDAzZXF1ZXVlX21hcHBpbmc7XG4xNTcwOlx0XG4xNTcxOlx0XHRtZW1jcHkoXHUwMDI2bmV3LVx1MDAzZWhlYWRlcnMsIFx1MDAyNm9sZC1cdTAwM2VoZWFkZXJzLCBzaXplb2YobmV3LVx1MDAzZWhlYWRlcnMpKTtcbjE1NzI6XHRcdENIRUNLX1NLQl9GSUVMRChwcm90b2NvbCk7XG4xNTczOlx0XHRDSEVDS19TS0JfRklFTEQoY3N1bSk7XG4xNTc0Olx0XHRDSEVDS19TS0JfRklFTEQoaGFzaCk7XG4xNTc1Olx0XHRDSEVDS19TS0JfRklFTEQocHJpb3JpdHkpO1xuMTU3NjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNrYl9paWYpO1xuMTU3NzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fcHJvdG8pO1xuMTU3ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fdGNpKTtcbjE1Nzk6XHRcdENIRUNLX1NLQl9GSUVMRCh0cmFuc3BvcnRfaGVhZGVyKTtcbjE1ODA6XHRcdENIRUNLX1NLQl9GSUVMRChuZXR3b3JrX2hlYWRlcik7XG4xNTgxOlx0XHRDSEVDS19TS0JfRklFTEQobWFjX2hlYWRlcik7XG4xNTgyOlx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfcHJvdG9jb2wpO1xuMTU4MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3RyYW5zcG9ydF9oZWFkZXIpO1xuMTU4NDpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX25ldHdvcmtfaGVhZGVyKTtcbjE1ODU6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9tYWNfaGVhZGVyKTtcbjE1ODY6XHRcdENIRUNLX1NLQl9GSUVMRChtYXJrKTtcbjE1ODc6XHQjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSS1xuMTU4ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNlY21hcmspO1xuMTU4OTpcdCNlbmRpZlxuMTU5MDpcdCNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxuMTU5MTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG5hcGlfaWQpO1xuMTU5MjpcdCNlbmRpZlxuMTU5MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGFsbG9jX2NwdSk7XG4xNTk0Olx0I2lmZGVmIENPTkZJR19YUFNcbjE1OTU6XHRcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcbjE1OTY6XHQjZW5kaWZcbjE1OTc6XHQjaWZkZWYgQ09ORklHX05FVF9TQ0hFRFxuMTU5ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTtcbjE1OTk6XHQjZW5kaWZcbjE2MDA6XHRcbjE2MDE6XHR9XG4xNjAyOlx0XG4xNjAzOlx0LypcbjE2MDQ6XHQgKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cbjE2MDU6XHQgKiBfX2NvcHlfc2tiX2hlYWRlciBhYm92ZSBpbnN0ZWFkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVncml0eSBvZiBgY2JgIGluIE91ciBEYXRhIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBvcGVyYXRpb246IGBtZW1jcHkobmV3LSZndDtjYiwgb2xkLSZndDtjYiwgc2l6ZW9mKG9sZC0mZ3Q7Y2IpKTtgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyB3ZSYjMzk7cmUgZG9pbmcgYSBjb21wbGV0ZSBjb3B5IG9mIGBjYmAuIFRoYXQmIzM5O3MgZ29vZC4gVGhlIGRlc2lnbiByZWxpZXMgb24gYGNiYCBiZWluZyBmdWxseSB6ZXJvZWQgb3V0IGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb21wbGV0ZWx5IGNvcGllZCBkdXJpbmcgYSBjbG9uZS4gVGhhdCBndWFyYW50ZWVzLCAqdGhlb3JldGljYWxseSosIHRoYXQgYGNiYCB3aWxsIG5ldmVyIGhhcmJvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgc2VlaW5nIHNvbWUgZmxhZ3MuIEEgcG90ZW50aWFsIGlzc3VlIGlzIHRoZXJlLiBXaGlsZSBpdCB3b24mIzM5O3QgYmUgYW4gdW5pbml0aWFsaXplZCAqbWVtb3J5KiBidWcsIGl0IGNvdWxkIGludHJvZHVjZSBhIGxvZ2ljYWwgZXJyb3IgaWYgYGNiYCBpbmFkdmVydGVudGx5IGNvbnRhaW5zIHN0YWxlIGRhdGEgZnJvbSBhIHByZXZpb3VzIHByb2Nlc3NpbmcgbGF5ZXIuIFRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLCBhIHBvc3NpYmxlIHNvdXJjZSBvZiBzdWJ0bGUgYnVncy4KCk5vdywgSSYjMzk7bSBiYWNrdHJhY2tpbmcgYSBsaXR0bGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkLiBJcyB0aGVyZSAqYW55KiBleGVjdXRpb24gcGF0aCB3aGVyZSBgc2tiLSZndDtjYmAgZG9lc24mIzM5O3QgZ2V0IHplcm9lZCBvdXQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIGJlIDEwMCUgY2VydGFpbi4gQW5kLCB3aGF0IGFib3V0IGBza2JfbW9ycGhgPyBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIG1hbmlwdWxhdGluZyBgY2JgIGFzIHdlbGwsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9tb3JwaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTE2NjM9RVhQT1JUX1NZTUJPTF9HUEwoYWxsb2Nfc2tiX2Zvcl9tc2cpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjUtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoxNjY2OiAqXHRza2JfbW9ycGhcdC1cdG1vcnBoIG9uZSBza2IgaW50byBhbm90aGVyXG5uZXQvY29yZS9za2J1ZmYuYy0xNjY3LSAqXHRAZHN0OiB0aGUgc2tiIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnRzXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY3NC0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2NzU6c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxubmV0L2NvcmUvc2tidWZmLmMtMTY3Ni17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTY3OS19XG5uZXQvY29yZS9za2J1ZmYuYzoxNjgwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9tb3JwaCk7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSBgc2tiX21vcnBoYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIG1vZHVsZSBgc2tiX21vcnBoYC4gVGhpcyBuYW1lIHNwYXJrcyBhIGZldyBpbml0aWFsIGNvbnNpZGVyYXRpb25zLCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBtb2R1bGUgdG8gZWl0aGVyIHBlcmZvcm0gY3JpdGljYWwgb3B0aW1pemF0aW9ucywgb3IgcG90ZW50aWFsbHkgYmUgaW52b2x2ZWQgaW4gc3VidGxlLCBlYXNpbHkgb3Zlcmxvb2tlZCBidWdzIGlmIHRoZSBjb2RlIGlzbiYjMzk7dCByb2J1c3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUmIzM5O3MgZGF0YSBkZXBlbmRlbmNpZXMsIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgcGlucG9pbnQgd2hlcmUgYHNrYl9tb3JwaGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGRhdGEgZmxvdy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdzogd2hhdCYjMzk7cyBiZWluZyBtb3JwaGVkLCB3aHksIGFuZCBob3cgZG9lcyB0aGlzIGFjdGlvbiBhZmZlY3Qgb3RoZXIgcHJvY2Vzc2VzIHRoYXQgcmVseSBvbiB0aGUgYWZmZWN0ZWQgYnVmZmVycz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgZW50cnkgcG9pbnRzIGFuZCBsb29rIGZvciB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIGFkanVzdG1lbnRzLCBvciBvdGhlciBsYXllci1zcGVjaWZpYyBtYW5pcHVsYXRpb25zLiBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2ZmbG9hZCBtZWNoYW5pc21zIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIE5JQy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjb2RlIGluc3BlY3Rpb24sIGFuZCBzZWUgd2hhdCB0aGUgYXV0aG9ycyB3ZXJlIHRoaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc1Olx0c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuMTY3NjpcdHtcbjE2Nzc6XHRcdHNrYl9yZWxlYXNlX2FsbChkc3QsIFNLQl9DT05TVU1FRCk7XG4xNjc4Olx0XHRyZXR1cm4gX19za2JfY2xvbmUoZHN0LCBzcmMpO1xuMTY3OTpcdH1cbjE2ODA6XHRFWFBPUlRfU1lNQk9MX0dQTChza2JfbW9ycGgpO1xuMTY4MTpcdFxuMTY4MjpcdGludCBtbV9hY2NvdW50X3Bpbm5lZF9wYWdlcyhzdHJ1Y3QgbW1waW4gKm1tcCwgc2l6ZV90IHNpemUpXG4xNjgzOlx0e1xuMTY4NDpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcGcsIG51bV9wZywgbmV3X3BnLCBvbGRfcGcsIHJsaW07XG4xNjg1Olx0XHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7XG4xNjg2Olx0XG4xNjg3Olx0XHRpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8ICFzaXplKVxuMTY4ODpcdFx0XHRyZXR1cm4gMDtcbjE2ODk6XHRcbjE2OTA6XHRcdHJsaW0gPSBybGltaXQoUkxJTUlUX01FTUxPQ0spO1xuMTY5MTpcdFx0aWYgKHJsaW0gPT0gUkxJTV9JTkZJTklUWSlcbjE2OTI6XHRcdFx0cmV0dXJuIDA7XG4xNjkzOlx0XG4xNjk0Olx0XHRudW1fcGcgPSAoc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgMjtcdC8qIHdvcnN0IGNhc2UgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbml0aWFsaXphdGlvbiBJc3N1ZXMgaW4gU0tCIENsb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza2JfbW9ycGhgIGFuZCBob3cgaXQgaGFuZGxlcyBjbG9uaW5nIFNLQnMuIEl0IGNhbGxzIGBfX3NrYl9jbG9uZWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBgY2JgIGdldHMgY29waWVkLiBTZWVtcyBsaWtlIGBjYmAgc2hvdWxkIGFsd2F5cyBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBkdWUgdG8gdGhpcyBzZXF1ZW5jZS4KCkJ1dCBoYW5nIG9u4oCmIFdoYXQgaWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCAqYmVmb3JlKiBpdCYjMzk7cyBwcm9wZXJseSBzZXQsIGFuZCBpdCBqdXN0IGdyYWJzIHNvbWUgbGVmdG92ZXIgZ2FyYmFnZSBkYXRhPyBDb3VsZCB0aGF0IGxlYWQgdG8gYSBuYXN0eSBidWcsIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0aGF0IEtNU0FOIHdvdWxkIGZsYWc/IExldCBtZSBxdWlja2x5IHRoaW5rIHRoaXMgdGhyb3VnaC4gTm8sIEtNU0FOIG9ubHkgY2F0Y2hlcyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LiBJZiB0aGVyZSYjMzk7cyBnYXJiYWdlIGRhdGEgcHJlc2VudCBmcm9tIHNvbWUgcHJldmlvdXMgb3BlcmF0aW9uLCBLTVNBTiB3b24mIzM5O3QgY2F0Y2ggaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlICphY3R1YWwqIHVzYWdlIG9mIGBJUENCKHNrYilgLiBJIHJlbWVtYmVyIHdvcmtpbmcgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyByZWNlbnRseeKApiBSaWdodCwgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBJUENCKHNrYilgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIGBkZWNhcF9hbmRfdmFsaWRhdGVgIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBmYWxsb3V0LiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBwYXRjaCBpcyBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgbGV0JiMzOTtzIGNoZWNrIHRoYXQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3NlZzZfbG9jYWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQwOlx0XG4gMjQxOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDI0MjpcdFx0aWYgKHNyaCBcdTAwMjZcdTAwMjYgIXNlZzZfaG1hY192YWxpZGF0ZV9za2Ioc2tiKSlcbiAyNDM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0NDpcdCNlbmRpZlxuIDI0NTpcdFxuIDI0NjpcdFx0aWYgKGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmYsIHByb3RvLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiAyNDc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdFxuIDI0OTpcdFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxuIDI1MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjUxOlx0XG4gMjUyOlx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcbiAyNTM6XHRcbiAyNTQ6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDI1NTpcdFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAyNTY6XHRcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gMjU3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAyNTg6XHRcbiAyNTk6XHRcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbiAyNjA6XHRcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuIDI2MTpcdFxuIDI2MjpcdFx0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuIDI2MzpcdFx0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuIDI2NDpcdFx0fVxuIDI2NTpcdFxuIDI2NjpcdFx0cmV0dXJuIHRydWU7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdHN0YXRpYyB2b2lkIGFkdmFuY2VfbmV4dHNlZyhzdHJ1Y3QgaXB2Nl9zcl9oZHIgKnNyaCwgc3RydWN0IGluNl9hZGRyICpkYWRkcilcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMjcyOlx0XG4gMjczOlx0XHRzcmgtXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xuIDI3NDpcdFx0YWRkciA9IHNyaC1cdTAwM2VzZWdtZW50cyAmIzQzOyBzcmgtXHUwMDNlc2VnbWVudHNfbGVmdDtcbiAyNzU6XHRcdCpkYWRkciA9ICphZGRyO1xuIDI3NjpcdH1cbiAyNzc6XHRcbiAyNzg6XHRzdGF0aWMgaW50XG4gMjc5Olx0c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODcxCgkJCQkJCQlvdXRwdXQ6IDMwMAoJCQkJCQkJdGhvdWdodHM6IDExNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogSVB2NCBDb250cm9sIEJsb2NrIFplcm9pbmcgaW4gSVB2NiBEZWNhcHN1bGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgemVyb2luZyBvdXQgYElQQ0Ioc2tiKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2h5PyBBaCwgaXQmIzM5O3MgZHVyaW5nIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBwcm9jZXNzIGZvciBJUHY2IHBhY2tldHMsIHNwZWNpZmljYWxseSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gZW5jYXBzdWxhdGVkIElQdjQgcGFja2V0IChpLmUuLCBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCkuIFRoZSBJUHY0IHN0YWNrIGV4cGVjdHMgaXRzIGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgKSB0byBiZSBjbGVhbjsgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4gSWYgd2UgZG9uJiMzOTt0IHplcm8gaXQsIHdlJiMzOTtyZSBsaWtlbHkgbGVhdmluZyBiZWhpbmQgYElQNkNCKHNrYilgIGRhdGEgZnJvbSB0aGUgSVB2NiBzdGFjay4KClRoZSBwcm9ibGVtPyBQb3RlbnRpYWxseSAmIzM0O2dhcmJhZ2UmIzM0OyBkYXRhIOKAkyBsaWtlLCBzYXksIGEgbm9uLXplcm8gYElQQ0Ioc2tiKS0mZ3Q7b3B0YCBmaWVsZC4gVGhpcyBjb3VsZCBtaXNsZWFkIHRoZSBJUHY0IHN0YWNrIGludG8gdGhpbmtpbmcgdGhlcmUgYXJlIElQdjQgb3B0aW9ucyBwcmVzZW50IHdoZW4gdGhlcmUgYXJlbiYjMzk7dC4gQ2xlYXJseSBhIGxvZ2ljIGJ1ZywgcmlnaHQ/IEJ1dCB0aGUga2V5IHF1ZXN0aW9uIGhlcmU6IGlzIHRoaXMgYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBidWc/CgpObywgaG9sZCBvbiwgaXQgaXNuJiMzOTt0LiBUaGUgbWVtb3J5ICp3YXMqIGluaXRpYWxpemVkIGJ5IHRoZSBJUHY2IHN0YWNrIG9yIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gV2Uga25vdyBgc2tiLSZndDtjYmAgaXMgemVyb2VkIGF0IGFsbG9jYXRpb24uIEluIGZhY3QsIGBza2J1ZmZfY2xlYXJgIGlzIGNhbGxlZCBpbiBgX19hbGxvY19za2JgLCBgc2xhYl9idWlsZF9za2JgLCBgX19idWlsZF9za2JgLCBgX19uYXBpX2J1aWxkX3NrYmAgd2hpY2ggYXJlIHRoZSBjb3JlIHNrYiBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gU28gaXQgKnNob3VsZCogYmUgemVyb2VkLiBTbyB0aGVyZSYjMzk7cyBubyB3YXkgaXQmIzM5O3MgdHJ1bHkgdW5pbml0aWFsaXplZCwgcmlnaHQ/CgpTbywgS01TQU4gaXMgKm5vdCogZ29pbmcgdG8gY2F0Y2ggdGhpcy4gS01TQU4mIzM5O3Mgam9iIGlzIHRvIGNhdGNoIHJlYWRzIGZyb20gbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBoYXMsIGZvciBzdXJlLCBiZWVuIHdyaXR0ZW4gdG8uIEZpcnN0IHdpdGggemVyb2VzIG9uIGFsbG9jYXRpb24sIHRoZW4gYnkgSVB2Ni4KClRoaXMgaXMgYSBjbGFzc2ljICYjMzQ7Y2xlYXIgdGhlIGNvbnRyb2wgYmxvY2sgd2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMmIzM0OyBidWcuIEl0JiMzOTtzIGFib3V0IHByZXZlbnRpbmcgdGhlIGlubmVyIHByb3RvY29sIHN0YWNrIGZyb20gbWlzaW50ZXJwcmV0aW5nIGRhdGEgaW50ZW5kZWQgZm9yIHRoZSBvdXRlciBwcm90b2NvbCBzdGFjay4gVGhpcyBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIG9yIGV2ZW4gYSBjcmFzaCwgYnV0IGl0IGRvZXNuJiMzOTt0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlLiBLQVNBTiBtaWdodCBzdGlsbCBjYXRjaCBpdCBpZiB0aGUgbWlzaW50ZXJwcmV0YXRpb24gbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIOKAkyBsaWtlIGlmIHRoYXQgZ2FyYmFnZSBvcHRpb24gbGVuZ3RoIGNhdXNlcyBhbiBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIHdvbiYjMzk7dC4KClNvLCBpbiBzdW1tYXJ5OgoKMS4gIFRoZSBwYXRjaCB6ZXJvcyBgSVBDQihza2IpYCAod2hpY2ggaXMgYHNrYi0mZ3Q7Y2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NC1pbi1JUHY2IHBhY2tldC4KMi4gIGBza2ItJmd0O2NiYCBpcyBhIDQ4LWJ5dGUgY29udHJvbCBidWZmZXIgdXNlZCBieSBkaWZmZXJlbnQgcHJvdG9jb2wgbGF5ZXJzIHRvIHN0b3JlIHByaXZhdGUgdmFyaWFibGVzLgozLiAgV2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMgKGZyb20gSVB2NiB0byBJUHY0KSwgdGhlIG5ldyBsYXllciBleHBlY3RzIGl0cyBjb250cm9sIGJsb2NrIHRvIGJlIGNsZWFuLiBJZiBub3QgY2xlYXJlZCwgaXQgd2lsbCByZWFkIGRhdGEgbGVmdCBvdmVyIGJ5IHRoZSBwcmV2aW91cyBsYXllciAoSVB2NikuCjQuICBGcm9tIEtNU0FOJiMzOTtzIHBlcnNwZWN0aXZlLCB0aGlzIG1lbW9yeSBpcyBOT1QgdW5pbml0aWFsaXplZC4gSXQgd2FzIGZ1bGx5IHplcm9lZCB3aGVuIHRoZSBgc2tiYCB3YXMgYWxsb2NhdGVkIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4KNS4gIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gU2luY2UgYHNrYi0mZ3Q7Y2JgIHdhcyBpbml0aWFsaXplZCwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LCBldmVuIGlmIHRoZSBkYXRhIGlzIHNlbWFudGljYWxseSAmIzM0O2dhcmJhZ2UmIzM0Oy4KNi4gIFRoZXJlZm9yZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4KClRoZXJlZm9yZSwgbm8gS01TQU4gZnV6emluZyBuZWVkZWQsIGl0IHNlZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVx1MDAzZWNiYCBpcyBzaGFyZWQgYWNyb3NzIHByb3RvY29sIGxheWVycywgYW5kIHRoZSBJUHY0IHN0YWNrIG1pZ2h0IG1pc2ludGVycHJldCBsZWZ0b3ZlciBkYXRhIGZyb20gdGhlIElQdjYgY29udHJvbCBibG9jayAoYElQNkNCKHNrYilgKSBhcyB2YWxpZCBJUHY0IG9wdGlvbnMgb3IgZmxhZ3MuXG5cbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFwmIzM0O2dhcmJhZ2VcJiMzNDsgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcJiMzNDt1bmluaXRpYWxpemVkXCYjMzQ7IG1lbW9yeS4gVGhlIGBza2ItXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cblxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjQ4Ljk0MzI0MzA0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDY3NTUxNzkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXFx1MDAzZWNiYCkgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiB0dW5uZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYHNrYi1cXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cXG5cXG5XaGlsZSB0aGlzIHByZXZlbnRzIHRoZSBJUHY0IHN0YWNrIGZyb20gcmVhZGluZyBcXFwiZ2FyYmFnZVxcXCIgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcXFwidW5pbml0aWFsaXplZFxcXCIgbWVtb3J5LiBUaGUgYHNrYi1cXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXFx1MDAzZWNiYCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZWl0aGVyIHdpdGggemVyb2VzIG9yIHdpdGggSVB2NiBjb250cm9sIGRhdGEpLCBLTVNBTiB3aWxsIG5vdCBmbGFnIHJlYWRzIGZyb20gaXQuXFxuXFxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KSBpbiBkZWNhcF9hbmRfdmFsaWRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBzZWdtZW50IHJvdXRpbmcgbG9jYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjQ4Ljk0MzI0OTE2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyMzc2OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkyZmI2ZDNmNGE2NTY3YjU5YWZlNGY2ZGY4OWY0NWNmOTdhMGY2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMDoyMjo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcXG5pbmRleCAyYjQxZTRjMGRkZGQxLi45NWVhMGI2MjcyOWFjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xcbkBAIC0yNTYsNiArMjU2LDEzIEBAIHN0YXRpYyBib29sIGRlY2FwX2FuZF92YWxpZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJvdG8pXFxuIFxcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcXG4rXFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4rXFxuK1xcdFxcdG1lbXNldChJUENCKHNrYiksIDAsIHNpemVvZigqSVBDQihza2IpKSk7XFxuK1xcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NDkuNDU2NTcxNTA0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTYwNDA1NzQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlZzZfbG9jYWxfaW5wdXRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHg0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R0NFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKElQQ0IpIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikgaW4gZGVjYXBfYW5kX3ZhbGlkYXRlKCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGggdGhhdCBpcyByZWFjaGFibGUgdmlhIElQdjYgc2VnbWVudCByb3V0aW5nIGxvY2FsIGRlbGl2ZXJ5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTJmYjZkM2Y0YTY1NjdiNTlhZmU0ZjZkZjg5ZjQ1Y2Y5N2EwZjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjA6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NDkuNDU2NTczNDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMjQ0NzM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZWc2IExvY2FsIERlY2Fwc3VsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGNvZGUgYWRkcyBhIGZldyBsaW5lcywgcmlnaHQgYWZ0ZXIgdGhlIGBpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYilgIGNhbGwuIFRoZSBhZGRlZCBsaW5lcyBkZWFsIHdpdGggYSBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCBjaGVjay4gSXQncyBpbml0aWFsaXppbmcgdGhlIGBJUENCKHNrYilgIHN0cnVjdC4gTGV0IG1lIHNlZS4uLml0IGxvb2tzIGxpa2UgaXQncyBwcmVzZXJ2aW5nIHRoZSBpbnB1dCBpbnRlcmZhY2UgKGBpaWZgKSBmcm9tIGBJUDZDQihza2IpYCBhbmQgc3RvcmluZyBpdCBpbiBgSVBDQihza2IpYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2h5IGFyZSB0aGV5IGRvaW5nIHRoaXM/IEl0IHNlZW1zIGxpa2UgdGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgZW5jYXBzdWxhdGVkIElQLWluLUlQIHRyYWZmaWMgdGhhdCBpcyBkZWNhcHN1bGF0ZWQgYnkgU0VHNiwgd2hpbGUga2VlcGluZyB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIHNldC4gSSdkIG5lZWQgdG8gbG9vayBkZWVwZXIgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgY29udGV4dCBvZiB3aHkgdGhlIGlucHV0IGludGVyZmFjZSBuZWVkcyB0byBiZSBzdG9yZWQgb24gSVAgY29udHJvbCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGBJUENCYCBuZWVkcyB0byBoYXZlIGl0cyBgaWlmYCBzZXQuIElzIHRoaXMgdG8gcHJlc2VydmUgcm91dGluZyBjb250ZXh0LCBwZXJoYXBzPyBPciBpcyBpdCBmb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMjo1My44ODkwMjMwODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4NjIyODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVjYXBfYW5kX3ZhbGlkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9zcl9oZHIgKmdldF9hbmRfdmFsaWRhdGVfc3JoKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMxLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyMzI6c3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjMzLXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz04NTY9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg2Mi1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6ODYzOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19FVEhFUk5FVCkpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTg2NC1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTM2PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05NDItXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk0MzpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk0NC1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9OTg5PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9keDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTEte1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5OTI6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05OTMtXFx0XFx0Z290byBkcm9wO1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTExODQ9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExOTA6XFx0aWYgKCFkZWNhcF9hbmRfdmFsaWRhdGUoc2tiLCBJUFBST1RPX0lQSVApKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTkxLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMjY1PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMjY3LXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTI2ODpcXHRpZiAoIWRlY2FwX2FuZF92YWxpZGF0ZShza2IsIElQUFJPVE9fSVBWNikpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEyNjktXFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMjo1My45NDI4OTA2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5NDk5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29udHJvbCBGbG93IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGBkZWNhcF9hbmRfdmFsaWRhdGVgIGZ1bmN0aW9uLiBJdCdzIHRyaWdnZXJlZCBmcm9tIHNldmVyYWwgcGxhY2VzIHdpdGhpbiB0aGlzIGNvZGU6IGBpbnB1dF9hY3Rpb25fZW5kX2R4MmAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NmAsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAsIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgLCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ2YC4gVGhhdCdzIGEga2V5IHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIHBpcGVsaW5lLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhpcyBjb25kaXRpb25hbCBjaGVjayBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCwgYXMgdGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGEgc3BlY2lmaWMgcHJvdG9jb2wgY29udGV4dC4gSSBub3RpY2UgdGhhdCB0aGUgc3BlY2lmaWMgY2FzZXMgb2YgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCBhcmUgdGhlIG9uZXMgcGFzc2luZyB0aGUgcmVsZXZhbnQgcHJvdG9jb2wuXG5cbk5vdywgZ2l2ZW4gdGhlIHByb3RvY29sIGNoZWNrLCBJIHRoaW5rIGl0J3MgbmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW52b2x2ZW1lbnQgb2YgSVBJUC4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBuZXh0LCB0byBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IG9wZXJhdGlvbmFsIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTgxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIyOjU3Ljk5MjM5MjI1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA0NjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI0PWlwdjYtJChDT05GSUdfTkVUTEFCRUwpICs9IGNhbGlwc28ub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI1OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMKSArPSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjYtaXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfSE1BQykgKz0gc2VnNl9obWFjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjI6NTguMDg3NDQ1MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzcxMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgU0VHNiBMV1QgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIGNvbmZpZyBvcHRpb24gd2UncmUgbG9va2luZyBhdCBpcyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGlzIHRoaW5nIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMuIFRvIGRvIHRoYXQsIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYEtjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBiZSBkaWdnaW5nIGludG8gYG5ldC9pcHY2L0tjb25maWdgIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBkZXNjcmlwdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcyBmb3IgYElQVjZfU0VHNl9MV1RVTk5FTGAuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGRldGFpbGVkIGV4cGxhbmF0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZXMsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBpdCBtaWdodCBkZXBlbmQgb24gb3IgY29uZmxpY3Qgd2l0aC4gVGltZSB0byBzZWUgd2hhdCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaGFzIHRvIHNheSBhYm91dCBpdC4gSG9wZWZ1bGx5LCB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGlsbHVtaW5hdGUgd2hhdCB0aGlzIHBhcnRpY3VsYXIgdHVubmVsIGltcGxlbWVudGF0aW9uIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjAxLjU3NTE2MTE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY4NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz0yNzk9Y29uZmlnIElQVjZfUElNU01fVjJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MDEuNjg5ODUyODU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDA2ODM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgSVBWNl9TRUc2X0xXVFVOTkVMKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBzdXBwb3J0cyBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gSXQncyBub3QgZW5vdWdoIHRvIGp1c3Qgc2VlIHRoZSBvcHRpb247IEkgbmVlZCBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBtZWFucyBkaWdnaW5nIGRlZXAgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIG1vZHVsZXMsIGFuZCBjb25maWd1cmF0aW9ucyBhcmUgcHJlcmVxdWlzaXRlcy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhpbmdzIGxpa2Ugc3BlY2lmaWMgbmV0d29ya2luZyBzdGFjayBvcHRpb25zIGJlaW5nIGVuYWJsZWQsIHBvdGVudGlhbGx5IHJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBoYXZlIHRvIGJlIGluIHBsYWNlIGZvciBgSVBWNl9TRUc2X0xXVFVOTkVMYCB0byBldmVuIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0IGFsb25lIGJlIGNvbXBpbGVkIGFuZCBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBJIGtub3cgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlcywgZXhwbG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFuZCBwb3NzaWJseSB0cmFjaW5nIHRocm91Z2ggc29tZSBjb2RlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNS4wMDk5MjQxODVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTc5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTI3OT1jb25maWcgSVBWNl9QSU1TTV9WMlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNS4xMDM1MTU1NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3OTgxNTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGaWxlIFJlYWRpbmVzcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBJIG5lZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUuIE5vIHBvaW50IGluIHNwaW5uaW5nIG15IHdoZWVscyB3aXRoIHRoZW9yeSBvciBwcmVjb25jZXB0aW9ucy4gR290dGEgZGl2ZSBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgcmF3IGRhdGEuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIGZpbGXigJRmb3JtYXQsIHNpemUsIG9yaWdpbuKAlGFyZSBzdGlsbCB1bmtub3duLCBidXQgdGhlIGltbWVkaWF0ZSBpbXBlcmF0aXZlIGlzIHRvIGJlZ2luIHRoZSByZWFkLiBMZXQncyBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGggYmVmb3JlIEkgbWFrZSBhbnkgYXNzdW1wdGlvbnMuIEdldCBhIGJhc2VsaW5lIG9mIHdoYXQncyBwcmVzZW50IGJlZm9yZSBmb3JtdWxhdGluZyBhIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjA3Ljg4MzMzNDA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuIDI4MTpcXHRcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxuIDI4MjpcXHRcXHRoZWxwXFxuIDI4MzpcXHRcXHQgIFN1cHBvcnQgZm9yIElQdjYgUElNIG11bHRpY2FzdCByb3V0aW5nIHByb3RvY29sIFBJTS1TTXYyLlxcbiAyODQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyODU6XFx0XFxuIDI4NjpcXHRjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxuIDI4NzpcXHRcXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMjg4OlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiAyODk6XFx0XFx0c2VsZWN0IExXVFVOTkVMXFxuIDI5MDpcXHRcXHRzZWxlY3QgRFNUX0NBQ0hFXFxuIDI5MTpcXHRcXHRzZWxlY3QgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG4gMjkyOlxcdFxcdGhlbHBcXG4gMjkzOlxcdFxcdCAgU3VwcG9ydCBmb3IgZW5jYXBzdWxhdGlvbiBvZiBwYWNrZXRzIHdpdGhpbiBhbiBvdXRlciBJUHY2XFxuIDI5NDpcXHRcXHQgIGhlYWRlciBhbmQgYSBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIHVzaW5nIHRoZSBsaWdodHdlaWdodFxcbiAyOTU6XFx0XFx0ICB0dW5uZWxzIG1lY2hhbmlzbS4gQWxzbyBlbmFibGUgc3VwcG9ydCBmb3IgYWR2YW5jZWQgbG9jYWxcXG4gMjk2OlxcdFxcdCAgcHJvY2Vzc2luZyBvZiBTUnY2IHBhY2tldHMgYmFzZWQgb24gdGhlaXIgYWN0aXZlIHNlZ21lbnQuXFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzowNy44ODM0MjE2MzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTMyNTc4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVjZfU0VHNl9MV1RVTk5FTCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBJUFY2X1NFRzZfTFdUVU5ORUxgIGhlcmUuIEl0J3MgcHJldHR5IG9idmlvdXMgdGhpcyB0aGluZyByZWxpZXMgb24gYElQVjZgLCBzbyB0aGF0J3MgdGhlIGJhc2UgSSdtIHdvcmtpbmcgZnJvbS4gTm93LCB0aGUgbWVhdCBvZiB0aGlzIHNlZW1zIHRvIGJlIGluIHRoZXNlIHR3byBmdW5jdGlvbnM6IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhleSdyZSBkb2luZy5cblxuV2FpdCBhIHNlY29uZOKApmFyZSB0aGVzZSBmdW5jdGlvbnMgKnN0YXRpYyo/IFJpZ2h0LCB0aGV5IGFyZS4gVGhhdCBtZWFucyB0aGV5IGFyZW4ndCBkaXJlY3RseSBleHBvc2VkIGV4dGVybmFsbHkuIE9rYXksIHNvIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkncmUgYmVpbmcgYWNjZXNzZWQgYW5kIHV0aWxpemVkIHdpdGhpbiB0aGUgbW9kdWxlLiBUaGV5IG11c3QgYmUgcmVmZXJlbmNlZCB0aHJvdWdoIGEgc3RydWN0IG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhbiBvYnZpb3VzIHN0cnVjdCB0aGF0IGV4cG9zZXMgdGhlbSwgb3Igc29tZSBvdGhlciBtZXRob2QuIEkgbmVlZCB0byB0cmFjZSB0aGUgY29ubmVjdGlvbnMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MTEuOTI0NzU3Njk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgyODQ0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XFx0XFx0XFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjExLjk5MjU5MDkxM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkxODA0MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBzZWc2X2FjdGlvbl90YWJsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUgYHNlZzZfYWN0aW9uX3RhYmxlYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlIHVzYWdlIG9mIHRoaXMgdGFibGUuIEknbSB0aGlua2luZywgXCJXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHNlZzZfYWN0aW9uX3RhYmxlYCBsZXZlcmFnZWQgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yaz9cIiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBpcyBrZXkuIEkgbmVlZCB0byB0cmFjZSBpdHMgY29ubmVjdGlvbnMgdG8gb3RoZXIgY29tcG9uZW50cyBhbmQgZnVuY3Rpb25zLiBJcyBpdCBhIGNlbnRyYWwgbG9va3VwLCBhIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZSwgb3IgbW9yZSBvZiBhIHRyYW5zaXRpb25hbCBkYXRhIHN0cnVjdHVyZT8gS25vd2luZyBob3cgaXQncyAqdXNlZCogd2lsbCBnaXZlIG1lIGEgaHVnZSBsZWcgdXAgaW4gZXZhbHVhdGluZyBpdHMgZGVzaWduLCBlZmZpY2llbmN5LCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBMZXQncyBzdGFydCB0cmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MTUuMDg0Mzk3MzQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUzMjk0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9hY3Rpb25fdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDIxPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDc4OnN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDc5LVxcdHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNTc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyAqX19nZXRfYWN0aW9uX2Rlc2MoaW50IGFjdGlvbilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTgyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTgzOlxcdGNvdW50ID0gQVJSQVlfU0laRShzZWc2X2FjdGlvbl90YWJsZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1ODQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU4NTpcXHRcXHRkZXNjID0gXFx1MDAyNnNlZzZfYWN0aW9uX3RhYmxlW2ldO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTg2LVxcdFxcdGlmIChkZXNjLVxcdTAwM2VhY3Rpb24gPT0gYWN0aW9uKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI0NDE9c3RhdGljIGludCBwYXJzZV9ubGFfYWN0aW9uKHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI0NjctXFx0ICogb3B0aW9uYWwsIGl0IG1lYW5zIHRoYXQgdGhlIHVzZXIgaGFzIG1lc3NlZCBzb21ldGhpbmcgdXAgaW4gdGhlXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI0Njg6XFx0ICogc2VnNl9hY3Rpb25fdGFibGUuIFRoZXJlZm9yZSwgdGhpcyBjaGVjayBpcyByZXF1aXJlZCBmb3IgU1J2Nlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNDY5LVxcdCAqIGJlaGF2aW9ycyB0byB3b3JrIHByb3Blcmx5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxNS4xODk3MzIxMzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNDQ1OTA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipBbmFseXppbmcgdGhlIElucHV0IFBhdGgqKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtJ3MganVzdCBmbGFnZ2VkIHRoYXQgYW4gaW5wdXQgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYSBmdW5jdGlvbiBsaWtlIGBzZWc2X2xvY2FsX2lucHV0YCwgb3IgYSByZWxhdGVkIG9uZS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGlzIGFjdGlvbiBpcyBiZWluZyAqZGVzY3JpYmVkKiB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHBsYWNlIGZvciBjb250ZXh0LiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBkZXNjcmlwdGlvbiBvZiB0aGUgYWN0aW9uIGl0c2VsZiByZXNpZGVzIHdpdGhpbiB0aGUgYHNlZzZfYWN0aW9uX2Rlc2NgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBpbnB1dGAgZmllbGQgb2YgdGhpcyBkZXNjcmlwdG9yLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5wdXQncyBjaGFyYWN0ZXJpc3RpY3MsIGNvbnN0cmFpbnRzLCBvciB0aGUgcHJvY2Vzc2luZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gdGhlIGlucHV0IGlzIHN0b3JlZC4gVW5kZXJzdGFuZGluZyB0aGlzIGZpZWxkIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFjdGlvbiBpdHNlbGYuIEknbGwgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxOC4yMTQxOTM3ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTcxNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuaW5wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xNDc4PXN0YXRpYyBzdHJ1Y3Qgc2VnNl9hY3Rpb25fZGVzYyBzZWc2X2FjdGlvbl90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODMtXFx0XFx0XFx0XFx0ICBTRUc2X0ZfTE9DQUxfRkxBVk9SUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ4NDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0ODUtXFx0fSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkxLVxcdFxcdFxcdFxcdCAgU0VHNl9GX0FUVFIoU0VHNl9MT0NBTF9PSUYpLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNDkyOlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF94LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDkzLVxcdH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5Ny1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTQ5ODpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfdCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTQ5OS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDMtXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MDQ6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4MixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUwNS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MDktXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTA6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxMS1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MTUtXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MTY6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R4NCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNy1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjItI2lmZGVmIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFVlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTIzOlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9kdDQsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1MjQtXFx0XFx0LnNsd3Rfb3BzXFx0PSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0Mi0jZW5kaWZcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU0MzpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ2LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ0LVxcdH0sXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU0OS0jaWZkZWYgQ09ORklHX05FVF9MM19NQVNURVJfREVWXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NTA6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NDYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NTEtXFx0XFx0LnNsd3Rfb3BzXFx0PSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1OS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU2MDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfYjYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NjEtXFx0fSxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTY1LVxcdFxcdC5vcHRhdHRyc1xcdD0gU0VHNl9GX0xPQ0FMX0NPVU5URVJTLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxNTY2OlxcdFxcdC5pbnB1dFxcdFxcdD0gaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU2Ny1cXHRcXHQuc3RhdGljX2hlYWRyb29tXFx0PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE1NzItXFx0XFx0Lm9wdGF0dHJzXFx0PSBTRUc2X0ZfTE9DQUxfQ09VTlRFUlMsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1NzM6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2JwZixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU3NC1cXHR9LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTI2Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBsd3R1bm5lbF9lbmNhcF9vcHMgc2VnNl9sb2NhbF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4MC1cXHQuZGVzdHJveV9zdGF0ZVxcdD0gc2VnNl9sb2NhbF9kZXN0cm95X3N0YXRlLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjgxOlxcdC5pbnB1dFxcdFxcdD0gc2VnNl9sb2NhbF9pbnB1dCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjY4Mi1cXHQuZmlsbF9lbmNhcFxcdD0gc2VnNl9sb2NhbF9maWxsX2VuY2FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzoxOC4zMDgzNzM1ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3MzcwNDk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgSW5wdXQgRmxvdzogYHNlZzZfbG9jYWxfaW5wdXRgKipcblxuQWxyaWdodCwgc28gdGhlIHRyaWdnZXIgZm9yIHRoaXMgc3BlY2lmaWMgYWN0aW9uIGlzIG9yaWdpbmF0aW5nIGZyb20gYHNlZzZfbG9jYWxfaW5wdXRgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhcnRpY3VsYXIgaW5wdXQuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIGZlZCB0aHJvdWdoIGl0PyBJcyBpdCBhIGNvbnRyb2wgbWVzc2FnZSwgYSBkYXRhIHBhY2tldCwgYSBzcGVjaWZpYyBjb21tYW5kPyBUaGUgZnVuY3Rpb24gbmFtZSwgYHNlZzZfbG9jYWxfaW5wdXRgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIHJlbGF0ZWQgdG8gU2VnbWVudCBSb3V0aW5nIHY2IGFuZCBzb21lIGZvcm0gb2YgbG9jYWwgaW5wdXQgcHJvY2Vzc2luZy4gU28sIHRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgaW5wdXQgaGFuZGxlci4gSXQncyBhIHNwZWNpYWxpemVkIHBvaW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHR5cGljYWwgY2FsbCBjaGFpbiByZWxhdGVkIHRvIGBzZWc2X2xvY2FsX2lucHV0YC4gV2hhdCBhcmUgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhlIGRvd25zdHJlYW0gZnVuY3Rpb25zPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkIGhlcmUsIGFuZCBob3cgZG9lcyB0aGlzIGFjdGlvbiBpbnRlcmFjdCB3aXRoIHRoZW0/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBpbnB1dCBpcyBwYXJzZWQsIHZhbGlkYXRlZCwgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHBvaW50cyBvZiB2dWxuZXJhYmlsaXR5LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSByb2xlIGl0IHBsYXlzIGluIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gQW55IGltbWVkaWF0ZSBpbnNpZ2h0cyBpbnRvIHRoZSBleHBlY3RlZCBkYXRhIGZvcm1hdCwgcG90ZW50aWFsIGZvciBlcnJvcnMsIG9yIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbiBvZiB0aGlzIGlucHV0IHdpbGwgYmUgY3JpdGljYWwuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGhlbHBzIHdpdGggdGhpcyBhc3Nlc3NtZW50IGFzIHdlbGwsIGluIG9yZGVyIHRvIGlkZW50aWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MjIuMDgyMDgxNjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE5NTQ5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE1OTg9c3RhdGljIHZvaWQgc2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc3RydWN0IHNlZzZfbG9jYWxfbHd0ICpzbHd0LFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTUtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2MTY6c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2MTctXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTYzODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTYzOS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY0Ny1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsIE5VTEwsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NDg6XFx0XFx0XFx0ICAgICAgIHNlZzZfbG9jYWxfaW5wdXRfY29yZSk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE2NDktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE2NTA6XFx0cmV0dXJuIHNlZzZfbG9jYWxfaW5wdXRfY29yZShkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTY1MS19XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgwLVxcdC5kZXN0cm95X3N0YXRlXFx0PSBzZWc2X2xvY2FsX2Rlc3Ryb3lfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjI2ODE6XFx0LmlucHV0XFx0XFx0PSBzZWc2X2xvY2FsX2lucHV0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjgyLVxcdC5maWxsX2VuY2FwXFx0PSBzZWc2X2xvY2FsX2ZpbGxfZW5jYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjIyLjE5NDA0MTI0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkyMzAyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiBuZXR3b3JraW5nIGludGVybmFscyBhbmQga2VybmVsIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNFRzYgTG9jYWwgSW5wdXQgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhlIFNFRzYgbG9jYWwgaW5wdXQgZnVuY3Rpb24uIEl0IHNlZW1zIHByZXR0eSBjbGVhcjogYHNlZzZfbG9jYWxfaW5wdXRgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcywgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgLiAgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGUgY3J1Y2lhbCBwYXJ0IG5vdyBpcyB0aGlzIGNhbGwgdG8gYGRlc2MtXHUwMDNlaW5wdXQoc2tiLCBzbHd0KWAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkZXNjYCBpcywgYW5kIHdoYXQgaXRzIGBpbnB1dGAgZnVuY3Rpb24gZG9lcyB3aXRoIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgYW5kIGBzbHd0YCAobGlrZWx5IHNvbWUgc29ydCBvZiBzZWdtZW50IGxpc3Qgd2VpZ2h0IHRhYmxlKSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBmbG93LiAgVGhpcyBgZGVzY2Agc3RydWN0dXJlIGlzIGtleSDigJMgSSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gaXQgdG8gZm9sbG93IHRoZSBkYXRhIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBwYWNrZXQgaXMgYWN0dWFsbHkgcHJvY2Vzc2VkIGxvY2FsbHkuIExldCdzIGRpZyBpbnRvIGBzZWc2X2xvY2FsX2lucHV0X2NvcmVgIGFuZCB0aGUgYGRlc2NgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjI1LjQ4NjM0NzQ0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MTY6XFx0c3RhdGljIGludCBzZWc2X2xvY2FsX2lucHV0X2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuMTYxNzpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNjE4OlxcdHtcXG4xNjE5OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKm9yaWdfZHN0ID0gc2tiX2RzdChza2IpO1xcbjE2MjA6XFx0XFx0c3RydWN0IHNlZzZfYWN0aW9uX2Rlc2MgKmRlc2M7XFxuMTYyMTpcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3Q7XFxuMTYyMjpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuMTYyMzpcXHRcXHRpbnQgcmM7XFxuMTYyNDpcXHRcXG4xNjI1OlxcdFxcdHNsd3QgPSBzZWc2X2xvY2FsX2x3dHVubmVsKG9yaWdfZHN0LVxcdTAwM2Vsd3RzdGF0ZSk7XFxuMTYyNjpcXHRcXHRkZXNjID0gc2x3dC1cXHUwMDNlZGVzYztcXG4xNjI3OlxcdFxcbjE2Mjg6XFx0XFx0cmMgPSBkZXNjLVxcdTAwM2VpbnB1dChza2IsIHNsd3QpO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRpZiAoIXNlZzZfbHd0dW5uZWxfY291bnRlcnNfZW5hYmxlZChzbHd0KSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybiByYztcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0c2VnNl9sb2NhbF91cGRhdGVfY291bnRlcnMoc2x3dCwgbGVuLCByYyk7XFxuMTYzNDpcXHRcXG4xNjM1OlxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MjUuNDg2NTY5NTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5Njg4NDE5MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTRUc2IExXVHVubmVsIElucHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTFdUdW5uZWwgaW5wdXQsIHNwZWNpZmljYWxseSB0aGUgYHNlZzZfbG9jYWxfaW5wdXRgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSB3aG9sZSBMV1R1bm5lbCBpbnB1dCBwcm9jZXNzLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgY2FsbGVkIGJ5IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAsIGFtb25nIG90aGVycy4gSSBrbm93IHRoaXMgYXJlYSB3ZWxsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cblRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIGBJUFBST1RPX0lQSVBgLCB0aGUgSVB2NCBvdmVyIElQdjYgcHJvdG9jb2wuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgYElQQ0Ioc2tiKWAgaXNuJ3QgYmVpbmcgcHJvcGVybHkgY2xlYXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBwcm90b2NvbC4gVGhhdCdzIGEgY2xhc3NpYyBnb3RjaGEuIFdoZW4geW91J3JlIGRlY2Fwc3VsYXRpbmcgSVB2NCBmcm9tIElQdjYsIHRoZSBgc2tiLVx1MDAzZWNiYCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIElQdjYgcHJvY2Vzc2luZyB0byBhdm9pZCBzdGFsZSBkYXRhLiBJIHJlbWVtYmVyIHRoaXMsIHRoZSBgSVBDQihza2IpYCBhbmQgYElQNkNCKHNrYilgIHN0cnVjdHVyZXMgc2hhcmUgdGhlIHNhbWUgbWVtb3J5IHNwYWNlIHdpdGhpbiB0aGUgYHNrYi1cdTAwM2VjYmAuIFNvLCBmYWlsdXJlIHRvIGluaXRpYWxpemUgaXQgcHJvcGVybHkgd2lsbCBsZWFkIHRvIGJ1Z3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgY29uZGl0aW9uYWxseSBjbGVhcnMgYElQQ0Ioc2tiKWAgd2hlbiBgcHJvdG9gIGlzIGBJUFBST1RPX0lQSVBgLCB0aGVuIHJlc3RvcmVzIHRoZSBpbnRlcmZhY2UgaW5kZXguXG5cbmBgYGNcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuYGBgXG5cbkl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBuZWNlc3NhcnkgZml4LCBhbmQgY2xlYXJseSByZWFjaGFibGUgd2l0aGluIHRoZSBleGVjdXRpb24gcGF0aC4gVG8gcmVhbGx5IGdldCBhIGdyYXNwIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBJIHNob3VsZCBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHNlZzZfbG9jYWxfaW5wdXRgLCBgc2VnNl9sb2NhbF9pbnB1dF9jb3JlYCwgYW5kIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzLiBXYWl0LCB0aG9zZSBsYXR0ZXIgdHdvIGFyZSBzdGF0aWMuLi4gYW5kIHNvIGlzIGBzZWc2X2xvY2FsX2lucHV0YC4gSSdsbCBjb25maXJtIHRoYXQgYHNlZzZfbG9jYWxfaW5wdXRgIGlzIHN0YXRpYyBhcyB3ZWxsLiBZZXMsIGl0IGlzLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGBzZWc2X2xvY2FsX2J1aWxkX3N0YXRlYC4gSSB3aWxsIGhhdmUgYSBsb29rIGF0IHRoYXQgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzMuNDU1NDE2NTY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDkxNDQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWc2X2xvY2FsX2J1aWxkX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjQ0MT1zdGF0aWMgaW50IHBhcnNlX25sYV9hY3Rpb24oc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjUwNy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjUwODpzdGF0aWMgaW50IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI1MDktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjY3OTpcXHQuYnVpbGRfc3RhdGVcXHQ9IHNlZzZfbG9jYWxfYnVpbGRfc3RhdGUsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODAtXFx0LmRlc3Ryb3lfc3RhdGVcXHQ9IHNlZzZfbG9jYWxfZGVzdHJveV9zdGF0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzMuNTEwMzM1NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjM3NjgyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgd2l0aCBMb2NhbCBMV1R1bm5lbHMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgc3lzdGVtIGlzIGNvbmZpZ3VyZWQgd2l0aCBgSVBWNl9TRUc2X0xXVFVOTkVMYC4gVGhhdCBzZXRzIHRoZSBzdGFnZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2V0dGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaG93IGR5bmFtaWMgdGhlIGltcGxlbWVudGF0aW9uIGlzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhpcyBmaWxlLiBUaGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgY291bGQgcG9pbnQgdG8gZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eSBvciBhIGRlZ3JlZSBvZiBydW50aW1lIGNvbmZpZ3VyYWJpbGl0eSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gVGhpcyBpcyBhIGNyaXRpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjMsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzozOC40NzQxMDcxMzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjIzNTM4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzM5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEyMjM9c3RhdGljIGVudW1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTIyNDpzZWc2X2VuZF9kdF9tb2RlIHNlZzZfZW5kX2R0Nl9wYXJzZV9tb2RlKHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTIyNS17XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTM5Mz1ERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2VnNl9icGZfc3JoX3N0YXRlLCBzZWc2X2JwZl9zcmhfc3RhdGVzKSA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk2LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzk3OmJvb2wgc2VnNl9icGZfaGFzX3ZhbGlkX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzk4LXtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNjg4PWludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMjcyMy1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MjcyNDp2b2lkIHNlZzZfbG9jYWxfZXhpdCh2b2lkKVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNzI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6MzguNTk2MzQ2OTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTA1OTczMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlZlcmlmeWluZyB0aGUgRXhwb3J0ZWQgU3ltYm9sOiBzZWc2XFxfbG9va3VwXFxfbmV4dGhvcCoqXG5cbk9rYXksIHNvIEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBtZW50aW9uZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZT9cIiBUaGF0J3MgdGhlIGZ1bmRhbWVudGFsIHF1ZXN0aW9uLiBCZWZvcmUgSSBjYW4gY29uc2lkZXIgaG93IGl0J3MgYmVpbmcgdXNlZCBvciB3aGVyZSwgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIFNvLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHN5bWJvbCBpcyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2wgdGFibGVzIG9yIHRoZSBidWlsZCBwcm9jZXNzIHRvIGNvbmZpcm0gd2hldGhlciBpdCBpcyBhY3R1YWxseSBhdmFpbGFibGUgZm9yIGR5bmFtaWMgbGlua2luZyBvciBleHRlcm5hbCB1c2UsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gVGhhdCdzIHRoZSBmaXJzdCBib3ggSSBuZWVkIHRvIHRpY2sgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDEwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NDEuOTA2OTQ2NzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODAwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlZzZfbG9va3VwX25leHRob3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0yNzk9c2VnNl9sb29rdXBfYW55X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpuaGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzM5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzozNDA6aW50IHNlZzZfbG9va3VwX25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzQxLVxcdFxcdFxcdHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLCB1MzIgdGJsX2lkKVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTM4OD1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzkwLXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MzkxOlxcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMzkyLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTgzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ1LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo4NDY6XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIHNsd3QtXFx1MDAzZXRhYmxlKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtODQ3LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkxMj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05MjktXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjkzMDpcXHRzZWc2X2xvb2t1cF9uZXh0aG9wKHNrYiwgbmhhZGRyLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTMxLVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTEzMzg9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2I2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzUyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzUzOlxcdHNlZzZfbG9va3VwX25leHRob3Aoc2tiLCBOVUxMLCAwKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTM1NC1cXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzYzPXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9iNl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEzODQ6XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzg1LVxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0MjE9c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2JwZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTE0NjctXFx0aWYgKHJldCAhPSBCUEZfUkVESVJFQ1QpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE0Njg6XFx0XFx0c2VnNl9sb29rdXBfbmV4dGhvcChza2IsIE5VTEwsIDApO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo0Mi4wMDQ3NTE3MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjQ0Nzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTRUc2IE1vZHVsZSdzIEludGVybmFsIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBkZWZpbml0ZWx5IHZpc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIOKAkyBpdCdzIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBJbnRlcmVzdGluZy4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGVsc2UuIEkgbm90aWNlZCBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIGJ1dCBpdCdzIHN0aWxsIGJlaW5nIHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgYGx3dHVubmVsX2VuY2FwX29wc2Agc3RydWN0dXJlLiBUaGF04oCZcyBhIGNvbW1vbiBwYXR0ZXJuLCBidXQgaXQgZ290IG1lIHRoaW5raW5nLlxuXG5JJ20gc3RhcnRpbmcgdG8gd29uZGVyIGlmIHRoZXJlIGFyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AuIFRoZSBmaXJzdCBvbmUgdGhhdCBjb21lcyB0byBtaW5kIGlzIGBzZWc2X2JwZl9oYXNfdmFsaWRfc3JoYC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBnZXQgcmlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NhbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCBmb3IgYW55IGluc3RhbmNlcyBvZiBgRVhQT1JUX1NZTUJPTGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBleHBvc2VkIEFQSSBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHdoYXQncyBwdWJsaWNseSBhY2Nlc3NpYmxlLiBUaGlzIGRlZXBlciBkaXZlIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vZHVsZSBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo0Ni43MzEyMDM2NTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDY1MTEyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NDYuODA4NjgwNTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk1MjUyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUncyBTY29wZSoqXG5cbkFscmlnaHQsIG5vIGBFWFBPUlRfU1lNQk9MYCBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gVGhhdCdzIGEgZ29vZCBpbml0aWFsIGluZGljYXRvci4gVGhhdCBsaWtlbHkgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBlaXRoZXIgc3RyaWN0bHkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIG9yIHRoZXkncmUgYmVpbmcgcmVnaXN0ZXJlZCBpbiBhIG1vcmUgY29udHJvbGxlZCBmYXNoaW9uIOKAkyBwZXJoYXBzIHZpYSBhIGBzdHJ1Y3RgIGxvb2t1cCB0YWJsZSBvciBzaW1pbGFyIG1lY2hhbmlzbS4gVGhpcyBpc24ndCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZzsgaXQgY2FuIGxlYWQgdG8gY2xlYW5lciBpbnRlcmZhY2VzIGFuZCBiZXR0ZXIgZW5jYXBzdWxhdGlvbi5cblxuTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCBpcyB0byB6ZXJvIGluIG9uIGBzZWc2X2xvY2FsX2luaXRgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFueSByZWdpc3RyYXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgdGllIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUaGF0IGluaXQgZnVuY3Rpb24gaXMgbXkgYW5jaG9yIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGludGVybmFsIGNvbXBvbmVudCBpbnRlZ3JhdGVzIHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIG1vZHVsZSBpcyBzZXR0aW5nIHVwIGl0cyBlbnRyeSBwb2ludHMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzIEkgc2hvdWxkIHBheSBhdHRlbnRpb24gdG8uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjUwLjUyODIwOTM1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMjIzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9sb2NhbF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MjY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBzZWc2X2xvY2FsX29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0yNjg3LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoyNjg4OmludCBfX2luaXQgc2VnNl9sb2NhbF9pbml0KHZvaWQpXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTI2ODkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyMzo1MC42MDU0Mzc1MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDEzNjAwNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0VHNiBMb2NhbCBJbnB1dCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzZWc2X2xvY2FsX2luaXRgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgZXhwZWN0ZWQsIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG5ldC9pcHY2L2FmX2luZXQ2LmNgIG9yIGEgc2ltaWxhciBmaWxlIOKAkyBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIElQdjYgc3RhY2suIE15IG1haW4gZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgY29yZSBvZiB0aGlzIG1vZGlmaWVkIFNFRzYgZnVuY3Rpb25hbGl0eS4gVGhlIGBzZWc2X2xvY2FsX2lucHV0YCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMsIGl0IHNlZW1zLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpcyB0aHJvd2luZyBhIGJpdCBvZiBhIGN1cnZlYmFsbCBpbiBob3cgSSBzZXQgdXAgdGhlIHRvb2xpbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGp1c3QgZHVtcCBib3RoIGBzZWc2X2xvY2FsX2lucHV0YCBhbmQgYHNlZzZfbG9jYWxfaW5wdXRfY29yZWAgaW50byBgRm9jdXNTeW1ib2xzYC4gQnV0LCBob2xkIG9uLi4uIGBGb2N1c1N5bWJvbHNgIGlzIGRlc2lnbmVkIHRvIHByaW9yaXRpemUgdGhlICpwdWJsaWMtZmFjaW5nKiBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEl0J3MgYWJvdXQgZ2l2aW5nIHRoZSBoaWdoLWxldmVsIHZpZXcgZmlyc3QsIG5vdCBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9ucy5cblxuU28sIGlmIGBzZWc2X2xvY2FsX2lucHV0YCBpcyBzdGF0aWMsIG1heWJlIGl0ICpzaG91bGQqIGdvIGluIHRoZXJlIGlmIHRoZXJlJ3Mgbm8gYmV0dGVyIGFsdGVybmF0aXZlLCByaWdodD8gV2UgbmVlZCB0byBrZWVwIHRoZSBoaWdoLWxldmVsIGlkZWEgb2YgaG93IHRoZSBwYXRoIG9wZXJhdGVzLlxuXG4uLi4gSGFuZyBvbi4gYHNlZzZfbG9jYWxfaW5wdXRgIGlzICpkZWZpbml0ZWx5KiBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGBzZWc2X2xvY2FsX2lucHV0YD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGZpbmQuIFRoZSByZWdpc3RyYXRpb24gaXMgbGlrZWx5IHRvIGJlIHRoZSBrZXksIHNvIHdoYXQgaXMgaXQgcmVnaXN0ZXJlZCB0bz8gQWgsIGl0J3MgcmVnaXN0ZXJlZCBpbiBgbHd0dW5uZWxfZW5jYXBfb3BzYCEgTGV0J3MgY2hlY2sgYGx3dHVubmVsX2lucHV0YCB0byB0cmFjZSB0aGUgcGF0aCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBiZXR0ZXIgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjM6NTYuMDE5MDQzMDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODMwMzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsd3R1bm5lbF9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9sd3R1bm5lbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2x3dHVubmVsLmM9NDI5PUVYUE9SVF9TWU1CT0xfR1BMKGx3dHVubmVsX3htaXQpO1xcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMwLVxcbm5ldC9jb3JlL2x3dHVubmVsLmM6NDMxOmludCBsd3R1bm5lbF9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDMyLXtcXG4tLVxcbm5ldC9jb3JlL2x3dHVubmVsLmMtNDc5LX1cXG5uZXQvY29yZS9sd3R1bm5lbC5jOjQ4MDpFWFBPUlRfU1lNQk9MX0dQTChsd3R1bm5lbF9pbnB1dCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjIzOjU2LjEwNzM1MjE3M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYwNzYxNzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU3ltYm9scyBmb3IgSW5jbHVzaW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbHd0dW5uZWxfaW5wdXRgIGxvb2tzIHByb21pc2luZy4gSXQncyBsaWtlbHkgYSBnb29kIGNhbmRpZGF0ZSB0byBpbmNsdWRlLiBUaGVuIEkgd2FzIHRoaW5raW5nIGFib3V0IGBzZWc2X2xvY2FsX2lucHV0YCwgaXQncyBub3QgaW5saW5lZC4gSXQncyB1c2VkIGFzIGEgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IGhhcyBhIGRpc3RpbmN0IGFkZHJlc3MuXG5cbkkgY2hlY2tlZCBob3cgaXQncyBkZWZpbmVkOiBJdCdzIHBhcnQgb2YgdGhlIGBzZWc2X2xvY2FsX29wc2Agc3RydWN0LCB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4gQmVjYXVzZSBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciwgaXQgKmNhbid0KiBiZSBpbmxpbmVkLiBTbywgeWVwLCBgc2VnNl9sb2NhbF9pbnB1dGAgZGVmaW5pdGVseSBnb2VzIGludG8gYEZvY3VzU3ltYm9sc2AuXG5cbk5vdywgd2hhdCBhYm91dCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgPyBUaGV5IGFyZSBhbHNvIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBzZWc2X2FjdGlvbl90YWJsZWAsIHNvIHRoZXkgc2hhcmUgdGhlIHNhbWUgcHJvcGVydHkgYXMgYHNlZzZfbG9jYWxfaW5wdXRgOiBub3QgaW5saW5lZC4gR3JlYXQsIEknbGwgaW5jbHVkZSB0aGVtIGFzIHdlbGwuXG5cbk5leHQsIEkgc2hvdWxkIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgSVBWNl9TRUc2X0xXVFVOTkVMYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBpdCBkZXBlbmRzIG9uIGBJUFY2YCwgYXMgZXhwZWN0ZWQuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyBpbnZvbHZlZD8gVGhlIHBhdGNoIGRlYWxzIHdpdGggYElQUFJPVE9fSVBJUGAsIHNvIElQdjQgb3ZlciBJUHY2LiBJIGtub3cgYElORVRgIGlzIHVzdWFsbHkgZW5hYmxlZCBmb3IgSVB2NCBmdW5jdGlvbmFsaXR5LCBidXQgZG9lcyB0aGlzIHJlcXVpcmUgYW55dGhpbmcgc3BlY2lmaWMgZm9yIElQdjQ/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLiBBbHNvIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAgaXMgdW5kZXIgYCNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDowMy4xNjgxMTY5MzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NzI4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3NlZzZfbG9jYWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmM9MTEzOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVuZF9kdF92cmZfY29yZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTExODMtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjExODQ6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R0NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg1LVxcdFxcdFxcdFxcdHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMzA4PXN0YXRpYyBpbnQgc2VnNl9lbmRfZHQ0Nl9idWlsZChzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QsIGNvbnN0IHZvaWQgKmNmZyxcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzEzLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzE0OnN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQ2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEzMTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBzZWc2X2xvY2FsX2x3dCAqc2x3dClcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI1LVxcdGNhc2UgSVBQUk9UT19JUElQOlxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMzI2OlxcdFxcdHJldHVybiBpbnB1dF9hY3Rpb25fZW5kX2R0NChza2IsIHNsd3QpO1xcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMzI3LVxcdGNhc2UgSVBQUk9UT19JUFY2Olxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUyMi0jaWZkZWYgQ09ORklHX05FVF9MM19NQVNURVJfREVWXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjE1MjM6XFx0XFx0LmlucHV0XFx0XFx0PSBpbnB1dF9hY3Rpb25fZW5kX2R0NCxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUyNC1cXHRcXHQuc2x3dF9vcHNcXHQ9IHtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTQ5LSNpZmRlZiBDT05GSUdfTkVUX0wzX01BU1RFUl9ERVZcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTU1MDpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHQ0NixcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTU1MS1cXHRcXHQuc2x3dF9vcHNcXHQ9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MDMuMjQzODUxMDQ2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc4MzE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGZhbGxzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX05FVF9MM19NQVNURVJfREVWYC4gVGhhdCdzIGdvb2Q7IGl0IGNvbmZpcm1zIG15IGluaXRpYWwgaHVuY2guIFRoaXMgbWVhbnMgdGhhdCBpZiBJIGVuYWJsZSBgTkVUX0wzX01BU1RFUl9ERVZgLCBJIHNob3VsZCBhbHNvIGJlIGVuYWJsaW5nIHRoZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gVGhhdCBzZWVtcyBsaWtlIGEgc29saWQgZGlyZWN0aW9uLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgdG8gZW5zdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucy4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MDYuODMxNjg1Njc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDgxMzM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTkzNj1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg2KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTYyLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzo5NjM6c3RhdGljIGludCBpbnB1dF9hY3Rpb25fZW5kX2R4NF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk2NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy05ODgtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjk4OTpzdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTk5MC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2VnNl9sb2NhbF9sd3QgKnNsd3QpXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwNC1cXHRcXHRcXHQgICAgICAgZGV2X25ldChza2ItXFx1MDAzZWRldiksIE5VTEwsIHNrYiwgc2tiLVxcdTAwM2VkZXYsXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDU6XFx0XFx0XFx0ICAgICAgIE5VTEwsIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaCk7XFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jLTEwMDYtXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jOjEwMDc6XFx0cmV0dXJuIGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaChkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSwgTlVMTCwgc2tiKTtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTAwOC1kcm9wOlxcbi0tXFxubmV0L2lwdjYvc2VnNl9sb2NhbC5jPTE0Nzg9c3RhdGljIHN0cnVjdCBzZWc2X2FjdGlvbl9kZXNjIHNlZzZfYWN0aW9uX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTUxNS1cXHRcXHQub3B0YXR0cnNcXHQ9IFNFRzZfRl9MT0NBTF9DT1VOVEVSUyxcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6MTUxNjpcXHRcXHQuaW5wdXRcXHRcXHQ9IGlucHV0X2FjdGlvbl9lbmRfZHg0LFxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xNTE3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjA2LjkwNjUwNDI3OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTg4NzU2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGZvciB0aGVzZSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBpc24ndCBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCBtZWFucywganVzdCBlbmFibGluZyBgSVBWNl9TRUc2X0xXVFVOTkVMYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhhdC4gTm8gcHJvYmxlbSB0aGVyZS4gTm93LCBmb3IgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgSSBuZWVkIGBORVRfTDNfTUFTVEVSX0RFVmAuXG5cbkxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuLi4gWWVwLCBhcyBJIHN1c3BlY3RlZCwgYElQVjZfU0VHNl9MV1RVTk5FTGAgbmF0dXJhbGx5IGRlcGVuZHMgb24gYElQVjZgLCBhbmQgYE5FVF9MM19NQVNURVJfREVWYCByZWxpZXMgb24gYElORVRgLiBUaGF0IG1ha2VzIHNlbnNlLiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgdGhvc2UgdHdvIHRvIG15IGNvbmZpZ3VyYXRpb24uXG5cbkFscmlnaHQsIG5vdyBsZXQncyBxdWlja2x5IHJlY2FwIHRoZSByZWxldmFudCBcIkZvY3VzU3ltYm9sc1wiIHdlIGFyZSB3b3JraW5nIHdpdGg6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NDZgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkganVzdCBub3RpY2VkIHRoYXQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0NmAgKmFsc28qIGNhbGxzIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFRoaXMgbWFrZXMgYGlucHV0X2FjdGlvbl9lbmRfZHQ0NmAgYSBwcmV0dHkgY29tcGVsbGluZyBjYW5kaWRhdGUgZm9yIG15IGNvbmZpZ3VyYXRpb25zLiBJIHNob3VsZCBrZWVwIHRoYXQgaW4gbWluZC5cblxuRmluYWxseSwgbGV0IG1lIGRvdWJsZSBjaGVjayBhbGwgZnVuY3Rpb25zIHdoaWNoIGNhbGwgYGRlY2FwX2FuZF92YWxpZGF0ZWAgd2l0aCBgSVBQUk9UT19JUElQYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoxMy40OTUyNjMxNDRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDQwNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWNhcF9hbmRfdmFsaWRhdGUuKklQUFJPVE9fSVBJUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvc2VnNl9sb2NhbC5jPTk4OT1zdGF0aWMgaW50IGlucHV0X2FjdGlvbl9lbmRfZHg0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkxLXtcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmM6OTkyOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUElQKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtOTkzLVxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYz0xMTg0PXN0YXRpYyBpbnQgaW5wdXRfYWN0aW9uX2VuZF9kdDQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYy0xMTg5LVxcbm5ldC9pcHY2L3NlZzZfbG9jYWwuYzoxMTkwOlxcdGlmICghZGVjYXBfYW5kX3ZhbGlkYXRlKHNrYiwgSVBQUk9UT19JUElQKSlcXG5uZXQvaXB2Ni9zZWc2X2xvY2FsLmMtMTE5MS1cXHRcXHRnb3RvIGRyb3A7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjEzLjgwNTY3NDM5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0ODA0NjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCBhbmQgYGlucHV0X2FjdGlvbl9lbmRfZHQ0YC4gSSdtIHN0YXJ0aW5nIGhlcmUuIEknbSBnb2luZyB0byBjaGVjayBpZiBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgc3RhdGljLi4uIHllcywgaXQgaXMsIGJ1dCBpdCdzIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBTbyB0aGF0J3MgaW1wb3J0YW50LiBJdCBtZWFucyBpdCdzIG5vdCBiZWluZyBpbmxpbmVkLiBUaGF0J3MgZ29vZCBmb3IgZnV6emluZywgcmlnaHQ/IEhtbSwgbGV0J3Mgc2VlLCBpcyB0aGVyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHdlIGNhbiB1c2U/IEkgc2VlIGBzZWc2X2xvb2t1cF9uZXh0aG9wYCBpcyBub24tc3RhdGljIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBgaW5wdXRfYWN0aW9uX2VuZF9keDRfZmluaXNoYCwgbm90IGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAuIFdhaXQsIGBpbnB1dF9hY3Rpb25fZW5kX2R4NGAgKmRvZXMqIGNhbGwgYGlucHV0X2FjdGlvbl9lbmRfZHg0X2ZpbmlzaGAgZGlyZWN0bHkuIEFscmlnaHQuIFRoYXQncyBhIGdvb2QgZmluZC4gVGhhdCBtZWFucyBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGlzIHRoZSBvbmUgY2FsbGluZyBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBhbmQgdGhhdCBjYW4gYmUgYSB0YXJnZXQuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBzZWc2X2xvY2FsX2lucHV0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gWWVzLCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIGBpbnB1dGAgY2FsbGJhY2sgZm9yIGBsd3R1bm5lbF9lbmNhcF9vcHNgLiBPa2F5LCBzbyBgc2VnNl9sb2NhbF9pbnB1dGAgaXMgYSBrZXkgZm9jdXMuIEdvb2QuIFRoYXQgY29tYmluZWQgd2l0aCBgaW5wdXRfYWN0aW9uX2VuZF9keDRgIGFuZCBgaW5wdXRfYWN0aW9uX2VuZF9kdDRgIGdpdmVzIHVzIGEgZ29vZCBzZXQgb2Ygc3ltYm9scyB0byB0YXJnZXQuXG5cblRpbWUgdG8gcHJlcGFyZSB0aGUgcmVzdWx0cy4gSSB0aGluayB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIG5ldHdvcmsgZGF0YSBwYXRoLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIGlzIG5vdCBwcm9wZXJseSBjbGVhcmVkIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0IHBhY2tldCBmcm9tIGFuIElQdjYgc2VnbWVudCByb3V0aW5nIGhlYWRlciAoU1J2NikuIFRoZXJlZm9yZSwgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgaXQgYWRkcmVzc2VzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgbmV3IGJlaGF2aW9ycyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgZm9jdXMgc3ltYm9scyBhcmU6IGBzZWc2X2xvY2FsX2lucHV0YCwgYGlucHV0X2FjdGlvbl9lbmRfZHg0YCwgYW5kIGBpbnB1dF9hY3Rpb25fZW5kX2R0NGAuIFdlIHNob3VsZCBhbHNvIGVuc3VyZSB0aGUgYElQVjZfU0VHNl9MV1RVTk5FTGAgYW5kIGBORVRfTDNfTUFTVEVSX0RFVmAgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDQxLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoyNS4zNTM3MjQxODZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MTkyMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZfU0VHNl9MV1RVTk5FTFwiLFxuICAgIFwiTkVUX0wzX01BU1RFUl9ERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWc2X2xvY2FsX2lucHV0XCIsXG4gICAgXCJpbnB1dF9hY3Rpb25fZW5kX2R4NFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9kdDRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgSVB2NCBjb250cm9sIGJsb2NrIChJUENCKSBpcyBub3QgcHJvcGVybHkgY2xlYXJlZCB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHNlZ21lbnQgcm91dGluZyBoZWFkZXIgKFNSdjYpIGluIGRlY2FwX2FuZF92YWxpZGF0ZSgpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgZGF0YSBwYXRoIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHNlZ21lbnQgcm91dGluZyBsb2NhbCBkZWxpdmVyeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2X1NFRzZfTFdUVU5ORUxcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2VnNl9sb2NhbF9pbnB1dFwiLFxuICAgIFwiaW5wdXRfYWN0aW9uX2VuZF9keDRcIixcbiAgICBcImlucHV0X2FjdGlvbl9lbmRfZHQ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIElQdjQgY29udHJvbCBibG9jayAoSVBDQikgaXMgbm90IHByb3Blcmx5IGNsZWFyZWQgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiBzZWdtZW50IHJvdXRpbmcgaGVhZGVyIChTUnY2KSBpbiBkZWNhcF9hbmRfdmFsaWRhdGUoKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBzZWdtZW50IHJvdXRpbmcgbG9jYWwgZGVsaXZlcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjI1LjQ5NzE0OTkwMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxMjE1OTYyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDoyNS40OTc2NDg5OTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzgxMjEwOTEyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVxcdTAwM2VjYmAgaXMgc2hhcmVkIGFjcm9zcyBwcm90b2NvbCBsYXllcnMsIGFuZCB0aGUgSVB2NCBzdGFjayBtaWdodCBtaXNpbnRlcnByZXQgbGVmdG92ZXIgZGF0YSBmcm9tIHRoZSBJUHY2IGNvbnRyb2wgYmxvY2sgKGBJUDZDQihza2IpYCkgYXMgdmFsaWQgSVB2NCBvcHRpb25zIG9yIGZsYWdzLlxcblxcbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFxcXCJnYXJiYWdlXFxcIiBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFxcXCJ1bmluaXRpYWxpemVkXFxcIiBtZW1vcnkuIFRoZSBgc2tiLVxcdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cXG5cXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOTJmYjZkM2Y0YTY1NjdiNTlhZmU0ZjZkZjg5ZjQ1Y2Y5N2EwZjZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjA6MjI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmMgYi9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbmluZGV4IDJiNDFlNGMwZGRkZDEuLjk1ZWEwYjYyNzI5YWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9zZWc2X2xvY2FsLmNcbisrKyBiL25ldC9pcHY2L3NlZzZfbG9jYWwuY1xuQEAgLTI1Niw2ICsyNTYsMTMgQEAgc3RhdGljIGJvb2wgZGVjYXBfYW5kX3ZhbGlkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBwcm90bylcbiBcdGlmIChpcHR1bm5lbF9wdWxsX29mZmxvYWRzKHNrYikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdGlmIChwcm90byA9PSBJUFBST1RPX0lQSVApIHtcbitcdFx0aW50IGlpZiA9IElQNkNCKHNrYiktXHUwMDNlaWlmO1xuK1xuK1x0XHRtZW1zZXQoSVBDQihza2IpLCAwLCBzaXplb2YoKklQQ0Ioc2tiKSkpO1xuK1x0XHRJUENCKHNrYiktXHUwMDNlaWlmID0gaWlmO1xuK1x0fVxuK1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MjUuNDk3NjQ5NzMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTk5MDIwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmVhZCBpbiBgc2VnNl9sb2NhbC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG5ldC9pcHY2L3NlZzZfbG9jYWwuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgZGVjYXBfYW5kX3ZhbGlkYXRlYCBmdW5jdGlvbi4gVGhlIGtleSBwYXJ0IGlzIHRoYXQgaXQgbm93IGluY2x1ZGVzIHRoaXMgY2hlY2sgZm9yIGBJUFBST1RPX0lQSVBgLiAgVGhhdCdzIGludGVyZXN0aW5nLlxuXG5UaGUgcGF0Y2ggKmV4cGxpY2l0bHkqIHplcm9zIG91dCBgSVBDQihza2IpYCB1c2luZyBgbWVtc2V0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/ICBJZiB5b3UncmUgemVyb2luZyBvdXQgbWVtb3J5LCBpdCBzY3JlYW1zIFwicG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZFwiIHRvIG1lLiAgU28sIGxldCdzIGRyaWxsIGRvd24uICBgSVBDQihza2IpYCBpcyBlc3NlbnRpYWxseSBhIGNhc3Qgb2YgYHNrYi1cdTAwM2VjYmAgdG8gYHN0cnVjdCBpbmV0X3NrYl9wYXJtYC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBza2JgJ3MgY29udHJvbCBibG9jaywgdGhlIGBza2ItXHUwMDNlY2JgIGNoYXIgYXJyYXkuXG5cbkluaXRpYWxseSwgSSBzZWUgYGlpZmAgaXMgc2F2ZWQgYW5kIHRoZW4gcmVzdG9yZWQuIFNvLCBpdCB6ZXJvJ3Mgb3V0IGEgc3RydWN0LCBhbmQgdGhlbiByZWxvYWRzICpvbmUqIHZhbHVlIGludG8gdGhhdCBzdHJ1Y3QuIFdoeSB0aGUgcmVzZXQ/IElmIHRoZSBwYWNrZXQgaXMgZ29pbmcgZnJvbSBJUHY2IHRvIElQdjQgKElQSVApLCB0aGVuIHRoZSBvbGQgY29udHJvbCBibG9jayBjb3VsZCBoYXZlIElQdjYtc3BlY2lmaWMgZGF0YSBpbiBpdC4gVGhpcyBjb3VsZCBjYXVzZSB0aGUgSVB2NCBsYXllciB0byByZWFkIGdhcmJhZ2UgZnJvbSB0aGUgb2xkIElQdjYgY29udGV4dCBpZiBub3QgY2xlYXJlZC4gSXQgY291bGQgYmUgYSBsb2dpYyBidWcgaWYgdGhlIG9sZCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG91dCwgYW5kIHRoZW4gYXJlIHVzZWQgaW5jb3JyZWN0bHkuXG5cblNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiAgYHNrYi1cdTAwM2VjYmAgaXMgYSA0OC1ieXRlIGNoYXIgYXJyYXkuIEl0J3MgKm5vdCogdGVjaG5pY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIHNlbnNlIG9mIEtNU0FOLCBiZWNhdXNlIHRoZSBtZW1vcnkgd2FzIGFsbG9jYXRlZCBhbmQgcHJvYmFibHkgY29udGFpbnMgZGF0YS4gQnV0LCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgbmV3IHByb3RvY29sIGxheWVyLCB0aGF0IGRhdGEgKmlzKiBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGxheWVyLlxuXG5Ob3csIGEgY3JpdGljYWwgcXVlc3Rpb24uIERvZXMgS01TQU4gdHJhY2sgYHNrYi1cdTAwM2VjYmAgYXMgdW5pbml0aWFsaXplZD8gSWYgaXQgKndhcyogdHJ1bHkgdW5pbml0aWFsaXplZCBhZnRlciBhbGxvY2F0aW9uLCBLTVNBTiB3b3VsZCBjYXRjaCB0aGF0LiBCdXQgd2hhdCBhYm91dCByZXVzZWQgZGF0YT8gIElmIHRoZSBgc2tiYCBpcyByZXVzZWQgKGFuZCBpdCB1c3VhbGx5IGlzKSwgS01TQU4gcHJvYmFibHkgKndvbid0KiBmbGFnIGl0IHVubGVzcyB0aGUgbWVtb3J5IHdhcyBuZXZlciB3cml0dGVuIHRvICpiZWZvcmUqIHJldXNlLiBLTVNBTiB0cmFja3MgXCJ0cnVseSB1bmluaXRpYWxpemVkXCIgbWVtb3J5IG5vdCBcImluaXRpYWxpemVkIHdpdGggdGhlIHdyb25nIGRhdGEuXCJcblxuSG93ZXZlciwgaWYgdGhlIGBza2JgIHdhcyAqZnJlc2hseSogYWxsb2NhdGVkLCBhbmQgYHNrYi1cdTAwM2VjYmAgd2Fzbid0IGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLCBLTVNBTiAqd291bGQqIGNhdGNoIGl0IHRoZW4sIEkgdGhpbmsuICBJIHNob3VsZCBjaGVjayBgYWxsb2Nfc2tiYCBhbmQgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIHRvIGJlIGNlcnRhaW4uIElzIGBza2ItXHUwMDNlY2JgIHplcm9lZCBvbiBhbGxvY2F0aW9uPyBVc3VhbGx5IGl0IGlzbid0LlxuXG5TbywgdGhlIGlzc3VlIGlzbid0IGFib3V0IEtNU0FOIGNhdGNoaW5nIHRydWx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJbnN0ZWFkLCBpdCdzIGFib3V0IHRoZSBsb2dpYy4gSWYgYElQQ0Ioc2tiKWAgaXMgcmVhZCBsYXRlciAqYW5kKiBpdCBjb250YWlucyBnYXJiYWdlIGZyb20gdGhlIHByZXZpb3VzIGNvbnRleHQsIGl0J3MgYSBsb2dpYyBidWcuICBIb3dldmVyLCBpZiBpdCBjb250YWlucyAqdHJ1bHkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYWxsb2NhdGlvbiwgS01TQU4gc2hvdWxkIGhhdmUgYWxyZWFkeSBmbGFnZ2VkIGl0LiBJdCBzb3VuZHMgbGlrZSB0aGUgZGV2ZWxvcGVyIHplcm9lZCBpdCBvdXQgdG8gYmUgc2FmZSwgdG8gY2xlYXIgb3V0IHRoZSBwcmV2aW91cyBsYXllcidzIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDozNi42OTY2NzMxOThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4OTUwNTgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKmNiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDozNi43ODU2MzYyNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTI0NTA4MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkRpcmVjdGx5IEV4YW1pbmluZyBgX19hbGxvY19za2JgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgcm9vdCBvZiB0aGlzLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldHdvcmsgYnVmZmVycywgbGlrZWx5IHJlbGF0ZWQgdG8ga2VybmVsLWxldmVsIGRhdGEgdHJhbnNtaXNzaW9uLiBUbyByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24sIEkgdGhpbmsgaXTigJlzIGJlc3QgdG8gYnlwYXNzIGFueSBpbnRlcm1lZGlhdGUgYWJzdHJhY3Rpb25zIGFuZCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYF9fYWxsb2Nfc2tiYCBpdHNlbGYuIEkgd2FudCBhIGNsZWFyLCBncmFudWxhciB2aWV3IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGluaXRpYWxpemF0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBrZXkgYW5kIHdhbnQgdG8gYW5hbHl6ZSB3aGF0IGlzIGhhcHBlbmluZywgZG93biBpbiB0aGUgd2VlZHMsIHdpdGhvdXQgZGlzdHJhY3Rpb25zLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjM5LjcxMDE0NzcwNFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjM3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9NjA2PXN0YXRpYyB2b2lkICprbWFsbG9jX3Jlc2VydmUodW5zaWduZWQgaW50ICpzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6NjU4OiAqXFx0X19hbGxvY19za2JcXHQtXFx0YWxsb2NhdGUgYSBuZXR3b3JrIGJ1ZmZlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1OS0gKlxcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NzMtICovXFxubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtNjc1LVxcdFxcdFxcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo3NDY6RVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzQ3LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NzYxPXN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cXHQgICAgKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6Nzc3OlxcdFxcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCwgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXFx0XFx0aWYgKCFza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz04Mzg9c3RydWN0IHNrX2J1ZmYgKm5hcGlfYWxsb2Nfc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cXHQgICAgKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgR0ZQX0RNQSkpKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6ODU1OlxcdFxcdHNrYiA9IF9fYWxsb2Nfc2tiKGxlbiwgZ2ZwX21hc2ssIFNLQl9BTExPQ19SWCB8IFNLQl9BTExPQ19OQVBJLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cXHRcXHRcXHRcXHQgIE5VTUFfTk9fTk9ERSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yMTc3PXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTAtXFx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgKyBza2ItXFx1MDAzZWRhdGFfbGVuO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxOTE6XFx0biA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTItXFx0XFx0XFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIyMjU9c3RydWN0IHNrX2J1ZmYgKl9fcHNrYl9jb3B5X2ZjbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZHJvb20sXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yMjI5LVxcdGludCBmbGFncyA9IHNrYl9hbGxvY19yeF9mbGFnKHNrYikgfCAoZmNsb25lID8gU0tCX0FMTE9DX0ZDTE9ORSA6IDApO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzA6XFx0c3RydWN0IHNrX2J1ZmYgKm4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzaywgZmxhZ3MsIE5VTUFfTk9fTk9ERSk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjIzMS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDI9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cXHRvbGRoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MjA6XFx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICsgc2tiLVxcdTAwM2VsZW4gKyBuZXd0YWlscm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVxcdFxcdFxcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDc3Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDk0NC1cXG5uZXQvY29yZS9za2J1ZmYuYzo0OTQ1OlxcdFxcdFxcdG5za2IgPSBfX2FsbG9jX3NrYihoc2l6ZSArIGRvZmZzZXQgKyBoZWFkcm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ2LVxcdFxcdFxcdFxcdFxcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6MzkuODA4ODE5ODk0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTQyOTgxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCBmb3IgYHNrYi1cdTAwM2VjYmAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgc291cmNlIGZvciBgX19hbGxvY19za2JgLlwiIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gaG93IHRoZSBgc2tiLVx1MDAzZWNiYCBmaWVsZCBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyLCB1cG9uIGFsbG9jYXRpb24sIHRoZSBgc2tiLVx1MDAzZWNiYCAoY29udHJvbCBibG9jaykgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0LiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXRhaWwgZm9yIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBJJ20gd29ya2luZyB3aXRoIGFuZCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGltcGFjdCByYWNlIGNvbmRpdGlvbnMgYW5kIG90aGVyIHN1YnRsZSBidWdzIGlmIG92ZXJsb29rZWQuIFNvLCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzE4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDMuNTYzMTIyOTU4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjc0OlxcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIDY3NTpcXHRcXHRcXHRcXHQgICAgaW50IGZsYWdzLCBpbnQgbm9kZSlcXG4gNjc2OlxcdHtcXG4gNjc3OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA2Nzg6XFx0XFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xcbiA2Nzk6XFx0XFx0dTggKmRhdGE7XFxuIDY4MDpcXHRcXG4gNjgxOlxcdFxcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19SWCkpXFxuIDY4MjpcXHRcXHRcXHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcXG4gNjgzOlxcdFxcbiA2ODQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xcbiA2ODU6XFx0XFx0XFx0Y2FjaGUgPSBuZXRfaG90ZGF0YS5za2J1ZmZfZmNsb25lX2NhY2hlO1xcbiA2ODY6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjg3OlxcdFxcdH1cXG4gNjg4OlxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xcbiA2ODk6XFx0XFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFxcdTAwMjZcXHUwMDI2IG5vZGUgIT0gbnVtYV9tZW1faWQoKSkpXFxuIDY5MDpcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xcbiA2OTM6XFx0XFx0XFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xcbiA2OTQ6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA2OTU6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY5NjpcXHRcXHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXFx1MDAyNlxcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xcbiA2OTc6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiA2OTg6XFx0XFx0XFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KGZhbHNlKTtcXG4gNjk5OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiA3MDA6XFx0XFx0fVxcbiA3MDE6XFx0XFxuIDcwMjpcXHRcXHRpZiAoIXNrYikge1xcbiA3MDM6XFx0ZmFsbGJhY2s6XFxuIDcwNDpcXHRcXHRcXHRza2IgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGUsIGdmcF9tYXNrIFxcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xcbiA3MDU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbiA3MDY6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcwNzpcXHRcXHR9XFxuIDcwODpcXHRcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG4gNzA5OlxcdFxcbiA3MTA6XFx0XFx0LyogV2UgZG8gb3VyIGJlc3QgdG8gYWxpZ24gc2tiX3NoYXJlZF9pbmZvIG9uIGEgc2VwYXJhdGUgY2FjaGVcXG4gNzExOlxcdFxcdCAqIGxpbmUuIEl0IHVzdWFsbHkgd29ya3MgYmVjYXVzZSBrbWFsbG9jKFggXFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXFxuIDcxMjpcXHRcXHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cXG4gNzEzOlxcdFxcdCAqIEJvdGggc2tiLVxcdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cXG4gNzE0OlxcdFxcdCAqL1xcbiA3MTU6XFx0XFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcXHUwMDI2c2l6ZSwgZ2ZwX21hc2ssIG5vZGUsIHNrYik7XFxuIDcxNjpcXHRcXHRpZiAodW5saWtlbHkoIWRhdGEpKVxcbiA3MTc6XFx0XFx0XFx0Z290byBub2RhdGE7XFxuIDcxODpcXHRcXHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxcbiA3MTk6XFx0XFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXFxuIDcyMDpcXHRcXHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxcbiA3MjE6XFx0XFx0ICovXFxuIDcyMjpcXHRcXHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xcbiA3MjU6XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmZfZmNsb25lcyAqZmNsb25lcztcXG4gNzI2OlxcdFxcbiA3Mjc6XFx0XFx0XFx0ZmNsb25lcyA9IGNvbnRhaW5lcl9vZihza2IsIHN0cnVjdCBza19idWZmX2ZjbG9uZXMsIHNrYjEpO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRcXHQvKiBza2ItXFx1MDAzZWZjbG9uZSBpcyBhIDJiaXRzIGZpZWxkLlxcbiA3MzA6XFx0XFx0XFx0ICogUmVwbGFjZSBleHBlbnNpdmUgUk1XIChza2ItXFx1MDAzZWZjbG9uZSA9IFNLQl9GQ0xPTkVfT1JJRylcXG4gNzMxOlxcdFxcdFxcdCAqIHdpdGggYSBzaW5nbGUgT1IuXFxuIDczMjpcXHRcXHRcXHQgKi9cXG4gNzMzOlxcdFxcdFxcdEJVSUxEX0JVR19PTihTS0JfRkNMT05FX1VOQVZBSUxBQkxFICE9IDApO1xcbiA3MzQ6XFx0XFx0XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza2ItXFx1MDAzZWZjbG9uZSAhPSBTS0JfRkNMT05FX1VOQVZBSUxBQkxFKTtcXG4gNzM1OlxcdFxcdFxcdHNrYi1cXHUwMDNlZmNsb25lIHw9IFNLQl9GQ0xPTkVfT1JJRztcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZmY2xvbmVzLVxcdTAwM2VmY2xvbmVfcmVmLCAxKTtcXG4gNzM4OlxcdFxcdH1cXG4gNzM5OlxcdFxcbiA3NDA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNzQxOlxcdFxcbiA3NDI6XFx0bm9kYXRhOlxcbiA3NDM6XFx0XFx0a21lbV9jYWNoZV9mcmVlKGNhY2hlLCBza2IpO1xcbiA3NDQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDc0NTpcXHR9XFxuIDc0NjpcXHRFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0LyoqXFxuIDc0OTpcXHQgKlxcdF9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2VcXG4gNzUwOlxcdCAqXFx0QGRldjogbmV0d29yayBkZXZpY2UgdG8gcmVjZWl2ZSBvblxcbiA3NTE6XFx0ICpcXHRAbGVuOiBsZW5ndGggdG8gYWxsb2NhdGVcXG4gNzUyOlxcdCAqXFx0QGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8gYWxsb2Nfc2tiXFxuIDc1MzpcXHQgKlxcbiA3NTQ6XFx0ICpcXHRBbGxvY2F0ZSBhIG5ldyBcXHUwMDI2c2tfYnVmZiBhbmQgYXNzaWduIGl0IGEgdXNhZ2UgY291bnQgb2Ygb25lLiBUaGVcXG4gNzU1OlxcdCAqXFx0YnVmZmVyIGhhcyBORVRfU0tCX1BBRCBoZWFkcm9vbSBidWlsdCBpbi4gVXNlcnMgc2hvdWxkIGFsbG9jYXRlXFxuIDc1NjpcXHQgKlxcdHRoZSBoZWFkcm9vbSB0aGV5IHRoaW5rIHRoZXkgbmVlZCB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoZVxcbiA3NTc6XFx0ICpcXHRidWlsdCBpbiBzcGFjZS4gVGhlIGJ1aWx0IGluIHNwYWNlIGlzIHVzZWQgZm9yIG9wdGltaXNhdGlvbnMuXFxuIDc1ODpcXHQgKlxcbiA3NTk6XFx0ICpcXHQlTlVMTCBpcyByZXR1cm5lZCBpZiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS5cXG4gNzYwOlxcdCAqL1xcbiA3NjE6XFx0c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbiA3NjI6XFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwX21hc2spXFxuIDc2MzpcXHR7XFxuIDc2NDpcXHRcXHRzdHJ1Y3QgcGFnZV9mcmFnX2NhY2hlICpuYztcXG4gNzY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDc2NjpcXHRcXHRib29sIHBmbWVtYWxsb2M7XFxuIDc2NzpcXHRcXHR2b2lkICpkYXRhO1xcbiA3Njg6XFx0XFxuIDc2OTpcXHRcXHRsZW4gKz0gTkVUX1NLQl9QQUQ7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIElmIHJlcXVlc3RlZCBsZW5ndGggaXMgZWl0aGVyIHRvbyBzbWFsbCBvciB0b28gYmlnLFxcbiA3NzI6XFx0XFx0ICogd2UgdXNlIGttYWxsb2MoKSBmb3Igc2tiLVxcdTAwM2VoZWFkIGFsbG9jYXRpb24uXFxuIDc3MzpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDMuNTYzODIwNTI3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjY3Nzg4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3Rpbmcgc2tidWZmX2NsZWFyKHNrYikqKlxuXG5Pa2F5LCBzbyBgc2tidWZmX2NsZWFyKHNrYilgIGhhcyBiZWVuIGNhbGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0LCBnaXZlbiBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIGlzIHRvIGRlbHZlIGludG8gd2hhdCB0aGlzIGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9uIC0gXCJjbGVhclwiIHR5cGljYWxseSBpbXBsaWVzIHNvbWUgZm9ybSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uIG9yIHJlc2V0dGluZyBvZiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gYHNrX2J1ZmZgIHN0cnVjdCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgYWJzb2x1dGVseSBjZW50cmFsIHRvIHBhY2tldCBoYW5kbGluZy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMganVzdCB6ZXJvaW5nIG91dCBkYXRhPyBPciBpcyBpdCByZWxlYXNpbmcgYnVmZmVycyBiYWNrIHRvIGEgcG9vbD8gRG9lcyBpdCBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWxseSByYWNlLWNvbmRpdGlvbiBpc3N1ZXMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBleGFjdGx5ICp3aGF0KiBwYXJ0IG9mIHRoZSBidWZmZXIgaXMgYmVpbmcgdGFyZ2V0ZWQsIGFuZCB1bmRlciB3aGF0IGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcuIFRoZSBzdGFjayBpdHNlbGYgY29udGFpbnMgc28gbXVjaCBjcml0aWNhbCBkYXRhIGFib3V0IG5ldHdvcmtpbmcsIGZyb20gaGVhZGVycyB0byBwYXlsb2FkLiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjcml0aWNhbC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWNoYW5pc21zLCBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoaXMgaW1wYWN0cyB0aGUgb3ZlcmFsbCBwYWNrZXQgbGlmZWN5Y2xlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZsb3cuIEl0IG5lZWRzIHRvIGFsaWduIHdpdGggbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nLCBvciBJIHdpbGwgaGF2ZSB0byBzdGFydCB0byBkaWcgaW4gZGVlcGVyIHRvIHVuZGVyc3RhbmQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI0OjQ2LjkzMDYwMjU2OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4NjI2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmX2NsZWFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTI4ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpuYXBpX3NrYl9jYWNoZV9nZXQoYm9vbCBhbGxvYylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzozMTY6c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zNDQ9dTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTM3OS1cXHRcXHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XFxubmV0L2NvcmUvc2tidWZmLmM6MzgwOlxcdFxcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0zODEtXFx0fVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDM3PXN0cnVjdCBza19idWZmICpzbGFiX2J1aWxkX3NrYih2b2lkICpkYXRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ0NzpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXFx0ZGF0YSA9IF9fc2xhYl9idWlsZF9za2IoZGF0YSwgXFx1MDAyNnNpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDkwPXN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5OTpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1OS1cXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNTYxLVxcdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NzQ9c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTcwNy1cXHR9XFxubmV0L2NvcmUvc2tidWZmLmM6NzA4OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTcwOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NDcuMDA1NDg3MzUxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjYwNzA3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgYHNrYnVmZl9jbGVhcmAqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIGBza2J1ZmZfY2xlYXJgLiBXaGF0IGlzIHRoaXMgZnVuY3Rpb24gbWVhbnQgdG8gZG8/IFByb2JhYmx5IHRvIGluaXRpYWxpemUgb3IgcmVzZXQgYSBzb2NrZXQgYnVmZmVyLCBgc2tiYC4gS25vd2luZyB0aGUga2VybmVsLCBpdOKAmXMgbGlrZWx5IGEgbG93LWxldmVsIHJvdXRpbmUgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbmV0d29yayBvcGVyYXRpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgaXQncyBwcm9iYWJseSBjbGVhcmluZyBvciB6ZXJvaW5nIG91dCBjcml0aWNhbCBmaWVsZHMgd2l0aGluIHRoZSBza2Igc3RydWN0dXJlLCBwcmVwYXJpbmcgaXQgZm9yIHJlLXVzZSBvciB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkuIFRoaW5raW5nIGFoZWFkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBgc2tiYCBpdCBjbGVhcnMgb3IgemVyb2VzIGFuZCB3aHkuIERvZXMgaXQgaGFuZGxlIGRhdGEgcG9pbnRlcnMsIG1ldGFkYXRhLCBjb3VudGVycywgZmxhZ3M/IFdoYXQgYWJvdXQgcmVmZXJlbmNlIGNvdW50cz8gQW55IHBvdGVudGlhbCBwaXRmYWxscyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHRoZSBzb2NrZXQgbGF5ZXIsIHNvIGl0J3Mgd29ydGggYSBkZWVwIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSBob3cgaXQgd29ya3MgYW5kIHZlcmlmeSBteSBwcmVzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1MC4zMzE1NjE0ODZaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcXG4gMzE5OlxcdFxcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxcbiAzMjA6XFx0XFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxcbiAzMjE6XFx0XFx0ICovXFxuIDMyMjpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFxcdTAwM2M9IDEyOCk7XFxuIDMyMzpcXHRcXHRtZW1zZXQoc2tiLCAwLCAxMjgpO1xcbiAzMjQ6XFx0XFx0YmFycmllcigpO1xcbiAzMjU6XFx0XFx0bWVtc2V0KCh2b2lkICopc2tiICsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQvKipcXG4gMzI5OlxcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcXG4gMzMwOlxcdCAqIEBza2JzOiBwb2ludGVyIHRvIGFuIGF0IGxlYXN0IEBuLXNpemVkIGFycmF5IHRvIGZpbGwgd2l0aCBza2IgcG9pbnRlcnNcXG4gMzMxOlxcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXFxuIDMzMjpcXHQgKlxcbiAzMzM6XFx0ICogVHJpZXMgdG8gb2J0YWluIEBuIFxcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xcbiAzMzQ6XFx0ICogdGhlIHBvaW50ZXJzIGludG8gdGhlIHByb3ZpZGVkIGFycmF5IEBza2JzLiBJZiB0aGVyZSBhcmUgbGVzcyBlbnRyaWVzXFxuIDMzNTpcXHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTAuMzMyMTcxMjA2WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTM1NjgxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYHNrYnVmZl9jbGVhcmAuIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMuIE15IG1lbnRhbCBtb2RlbCBpcyB0ZWxsaW5nIG1lIGl0IHplcm9lcyBvdXQgdGhlIG1lbW9yeSB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB1cCB0byB0aGUgYHRhaWxgIHBvaW50ZXIuIEdvb2QuIEJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyByZWFsbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIG9wZXJhdGlvbiwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbCBibG9jaywgb3IgYGNiYCwgd2l0aGluIHRoZSBgc3RydWN0IHNrX2J1ZmZgIGxheW91dC4gSSBuZWVkIHRvIHZpc3VhbGl6ZSB0aGUgbWVtb3J5IGxheW91dCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGNsZWFyaW5nIGFmZmVjdHMgdGhlIGNvbnRyb2wgZGF0YS4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGNsZWFyIGltcGFjdHMgYW55IG90aGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIGRpcmVjdGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTMuNjg1NzQyMjk5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc5MDY3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNrX2J1ZmYgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9za2J1ZmYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTcyOD1lbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTg4NS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjg4NjpzdHJ1Y3Qgc2tfYnVmZiB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC04ODctXFx0dW5pb24ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1My44MDM2NTM4MzdaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MjAzMDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBza19idWZmYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZvY3VzIGlzICpzdHJ1Y3Qgc2tfYnVmZiosIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHB1dHMgbWUgaW4gYSBzcGVjaWZpYyBmcmFtZSBvZiBtaW5kLiBUaGlzIG1lYW5zIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIG9mIG5ldHdvcmsgdHJhZmZpYyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSwgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSBuZXR3b3JrIHBhY2tldHMgZmxvd2luZyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEnigJltIHRoaW5raW5nIGFib3V0IGl0cyBpbnRyaWNhdGUgZGV0YWlsczogdGhlIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgY2hhaW5pbmcgY2FwYWJpbGl0aWVzLCB0aGUgdmFyaW91cyBmbGFncyBhbmQgY29udHJvbCBmaWVsZHMgdGhhdCBkaWN0YXRlIGhvdyBhIHBhY2tldCBpcyBoYW5kbGVkIGF0IGRpZmZlcmVudCBsYXllcnMuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBzdHJ1Y3TigJlzIGRlZmluaXRpb24sIGFudGljaXBhdGluZyBwb2ludGVycyB0byBtZXRhZGF0YSwgdGhlIHBheWxvYWQgaXRzZWxmLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBtYnVmIGxheWVyIGlmIGFwcGxpY2FibGUuIE15IG1pbmQgaXMgYWxyZWFkeSBza2V0Y2hpbmcgb3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBLbm93aW5nIGBza19idWZmYCBpcyB0aGUgY29yZSBtYWtlcyBtZSBleHBlY3QgdG8gc2VlIHNvbWUgY2xldmVyIG9wdGltaXphdGlvbnMsIHBvdGVudGlhbGx5IHNvbWUgbG9ja2xlc3Mgc3RydWN0dXJlcyB0byBmYWNpbGl0YXRlIHBhcmFsbGVsaXNtLCBhbmQgbGlrZWx5IHNvbWUgY2FyZWZ1bGx5IGNyYWZ0ZWQgbWVtb3J5IGxheW91dHMgZm9yIGNhY2hlIGVmZmljaWVuY3kuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGlzIGRhdGEgc3RydWN0dXJlLCBpdHMgaW50ZXJuYWwgc3RhdGUsIGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSB3aWRlciBrZXJuZWwgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjQ6NTcuNDQ1Njg4ODIxWiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4NixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4ODY6XFx0c3RydWN0IHNrX2J1ZmYge1xcbiA4ODc6XFx0XFx0dW5pb24ge1xcbiA4ODg6XFx0XFx0XFx0c3RydWN0IHtcXG4gODg5OlxcdFxcdFxcdFxcdC8qIFRoZXNlIHR3byBtZW1iZXJzIG11c3QgYmUgZmlyc3QgdG8gbWF0Y2ggc2tfYnVmZl9oZWFkLiAqL1xcbiA4OTA6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmZcXHRcXHQqbmV4dDtcXG4gODkxOlxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnByZXY7XFxuIDg5MjpcXHRcXG4gODkzOlxcdFxcdFxcdFxcdHVuaW9uIHtcXG4gODk0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0KmRldjtcXG4gODk1OlxcdFxcdFxcdFxcdFxcdC8qIFNvbWUgcHJvdG9jb2xzIG1pZ2h0IHVzZSB0aGlzIHNwYWNlIHRvIHN0b3JlIGluZm9ybWF0aW9uLFxcbiA4OTY6XFx0XFx0XFx0XFx0XFx0ICogd2hpbGUgZGV2aWNlIHBvaW50ZXIgd291bGQgYmUgTlVMTC5cXG4gODk3OlxcdFxcdFxcdFxcdFxcdCAqIFVEUCByZWNlaXZlIHBhdGggaXMgb25lIHVzZXIuXFxuIDg5ODpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gODk5OlxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRkZXZfc2NyYXRjaDtcXG4gOTAwOlxcdFxcdFxcdFxcdH07XFxuIDkwMTpcXHRcXHRcXHR9O1xcbiA5MDI6XFx0XFx0XFx0c3RydWN0IHJiX25vZGVcXHRcXHRyYm5vZGU7IC8qIHVzZWQgaW4gbmV0ZW0sIGlwNCBkZWZyYWcsIGFuZCB0Y3Agc3RhY2sgKi9cXG4gOTAzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiA5MDQ6XFx0XFx0XFx0c3RydWN0IGxsaXN0X25vZGVcXHRsbF9ub2RlO1xcbiA5MDU6XFx0XFx0fTtcXG4gOTA2OlxcdFxcbiA5MDc6XFx0XFx0c3RydWN0IHNvY2tcXHRcXHQqc2s7XFxuIDkwODpcXHRcXG4gOTA5OlxcdFxcdHVuaW9uIHtcXG4gOTEwOlxcdFxcdFxcdGt0aW1lX3RcXHRcXHR0c3RhbXA7XFxuIDkxMTpcXHRcXHRcXHR1NjRcXHRcXHRza2JfbXN0YW1wX25zOyAvKiBlYXJsaWVzdCBkZXBhcnR1cmUgdGltZSAqL1xcbiA5MTI6XFx0XFx0fTtcXG4gOTEzOlxcdFxcdC8qXFxuIDkxNDpcXHRcXHQgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5XFxuIDkxNTpcXHRcXHQgKiBsYXllci4gUGxlYXNlIHB1dCB5b3VyIHByaXZhdGUgdmFyaWFibGVzIHRoZXJlLiBJZiB5b3VcXG4gOTE2OlxcdFxcdCAqIHdhbnQgdG8ga2VlcCB0aGVtIGFjcm9zcyBsYXllcnMgeW91IGhhdmUgdG8gZG8gYSBza2JfY2xvbmUoKVxcbiA5MTc6XFx0XFx0ICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLlxcbiA5MTg6XFx0XFx0ICovXFxuIDkxOTpcXHRcXHRjaGFyXFx0XFx0XFx0Y2JbNDhdIF9fYWxpZ25lZCg4KTtcXG4gOTIwOlxcdFxcbiA5MjE6XFx0XFx0dW5pb24ge1xcbiA5MjI6XFx0XFx0XFx0c3RydWN0IHtcXG4gOTIzOlxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmdcXHRfc2tiX3JlZmRzdDtcXG4gOTI0OlxcdFxcdFxcdFxcdHZvaWRcXHRcXHQoKmRlc3RydWN0b3IpKHN0cnVjdCBza19idWZmICpza2IpO1xcbiA5MjU6XFx0XFx0XFx0fTtcXG4gOTI2OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHR0Y3BfdHNvcnRlZF9hbmNob3I7XFxuIDkyNzpcXHQjaWZkZWYgQ09ORklHX05FVF9TT0NLX01TR1xcbiA5Mjg6XFx0XFx0XFx0dW5zaWduZWQgbG9uZ1xcdFxcdF9za19yZWRpcjtcXG4gOTI5OlxcdCNlbmRpZlxcbiA5MzA6XFx0XFx0fTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0I2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSlcXG4gOTMzOlxcdFxcdHVuc2lnbmVkIGxvbmdcXHRcXHQgX25mY3Q7XFxuIDkzNDpcXHQjZW5kaWZcXG4gOTM1OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdGxlbixcXG4gOTM2OlxcdFxcdFxcdFxcdFxcdGRhdGFfbGVuO1xcbiA5Mzc6XFx0XFx0X191MTZcXHRcXHRcXHRtYWNfbGVuLFxcbiA5Mzg6XFx0XFx0XFx0XFx0XFx0aGRyX2xlbjtcXG4gOTM5OlxcdFxcbiA5NDA6XFx0XFx0LyogRm9sbG93aW5nIGZpZWxkcyBhcmUgX25vdF8gY29waWVkIGluIF9fY29weV9za2JfaGVhZGVyKClcXG4gOTQxOlxcdFxcdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxcbiA5NDI6XFx0XFx0ICovXFxuIDk0MzpcXHRcXHRfX3UxNlxcdFxcdFxcdHF1ZXVlX21hcHBpbmc7XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdC8qIGlmIHlvdSBtb3ZlIGNsb25lZCBhcm91bmQgeW91IGFsc28gbXVzdCBhZGFwdCB0aG9zZSBjb25zdGFudHMgKi9cXG4gOTQ2OlxcdCNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcXG4gOTQ3OlxcdCNkZWZpbmUgQ0xPTkVEX01BU0tcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KVxcbiA5NDg6XFx0I2Vsc2VcXG4gOTQ5OlxcdCNkZWZpbmUgQ0xPTkVEX01BU0tcXHQxXFxuIDk1MDpcXHQjZW5kaWZcXG4gOTUxOlxcdCNkZWZpbmUgQ0xPTkVEX09GRlNFVFxcdFxcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX2Nsb25lZF9vZmZzZXQpXFxuIDk1MjpcXHRcXG4gOTUzOlxcdFxcdC8qIHByaXZhdGU6ICovXFxuIDk1NDpcXHRcXHRfX3U4XFx0XFx0XFx0X19jbG9uZWRfb2Zmc2V0WzBdO1xcbiA5NTU6XFx0XFx0LyogcHVibGljOiAqL1xcbiA5NTY6XFx0XFx0X191OFxcdFxcdFxcdGNsb25lZDoxLFxcbiA5NTc6XFx0XFx0XFx0XFx0XFx0bm9oZHI6MSxcXG4gOTU4OlxcdFxcdFxcdFxcdFxcdGZjbG9uZToyLFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0cGVla2VkOjEsXFxuIDk2MDpcXHRcXHRcXHRcXHRcXHRoZWFkX2ZyYWc6MSxcXG4gOTYxOlxcdFxcdFxcdFxcdFxcdHBmbWVtYWxsb2M6MSxcXG4gOTYyOlxcdFxcdFxcdFxcdFxcdHBwX3JlY3ljbGU6MTsgLyogcGFnZV9wb29sIHJlY3ljbGUgaW5kaWNhdG9yICovXFxuIDk2MzpcXHQjaWZkZWYgQ09ORklHX1NLQl9FWFRFTlNJT05TXFxuIDk2NDpcXHRcXHRfX3U4XFx0XFx0XFx0YWN0aXZlX2V4dGVuc2lvbnM7XFxuIDk2NTpcXHQjZW5kaWZcXG4gOTY2OlxcdFxcbiA5Njc6XFx0XFx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxcbiA5Njg6XFx0XFx0ICogdXNpbmcgYSBzaW5nbGUgbWVtY3B5KCkgaW4gX19jb3B5X3NrYl9oZWFkZXIoKVxcbiA5Njk6XFx0XFx0ICovXFxuIDk3MDpcXHRcXHRzdHJ1Y3RfZ3JvdXAoaGVhZGVycyxcXG4gOTcxOlxcdFxcbiA5NzI6XFx0XFx0LyogcHJpdmF0ZTogKi9cXG4gOTczOlxcdFxcdF9fdThcXHRcXHRcXHRfX3BrdF90eXBlX29mZnNldFswXTtcXG4gOTc0OlxcdFxcdC8qIHB1YmxpYzogKi9cXG4gOTc1OlxcdFxcdF9fdThcXHRcXHRcXHRwa3RfdHlwZTozOyAvKiBzZWUgUEtUX1RZUEVfTUFYICovXFxuIDk3NjpcXHRcXHRfX3U4XFx0XFx0XFx0aWdub3JlX2RmOjE7XFxuIDk3NzpcXHRcXHRfX3U4XFx0XFx0XFx0ZHN0X3BlbmRpbmdfY29uZmlybToxO1xcbiA5Nzg6XFx0XFx0X191OFxcdFxcdFxcdGlwX3N1bW1lZDoyO1xcbiA5Nzk6XFx0XFx0X191OFxcdFxcdFxcdG9vb19va2F5OjE7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdC8qIHByaXZhdGU6ICovXFxuIDk4MjpcXHRcXHRfX3U4XFx0XFx0XFx0X19tb25vX3RjX29mZnNldFswXTtcXG4gOTgzOlxcdFxcdC8qIHB1YmxpYzogKi9cXG4gOTg0OlxcdFxcdF9fdThcXHRcXHRcXHR0c3RhbXBfdHlwZToyO1xcdC8qIFNlZSBza2JfdHN0YW1wX3R5cGUgKi9cXG4gOTg1OlxcdCNpZmRlZiBDT05GSUdfTkVUX1hHUkVTU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNDo1Ny40NDYyNzMwODFaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwOTYxNDI2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiBgc2tfYnVmZi1cdTAwM2VjYmAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgY2JgIGZpZWxkIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLiBJdCdzIGF0IGEga25vd24gb2Zmc2V0IOKAkyA0MCBvciA0OCBieXRlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gVGhlIGtleSBpcyB0aGF0IGB0YWlsYCBjb21lcyBtdWNoIGxhdGVyLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQsIGl0J3MgZ29pbmcgdG8gemVybyBvdXQgdGhlIGVudGlyZSBgY2JgIHJlZ2lvbiBiZWNhdXNlIGBtZW1zZXRgIGlzIHVzZWQgdXAgdG8gdGhlIGB0YWlsYCBwb2ludGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaWYgYHNrYnVmZl9jbGVhcmAgemVyb2VkIG91dCBgY2JgLCB0aGVuIGl0ICpzaG91bGQqIGJlIHplcm9lZCBvbiBldmVyeSBuZXcgYWxsb2NhdGlvbiwgd2hpY2ggc2VlbXMgbG9naWNhbCBiZWNhdXNlIGBjYmAgaXMgcmV1c2VkIGJ5IHZhcmlvdXMgbmV0d29yayBsYXllcnMuXG5cblRoZW4gdGhlIGNvbmNlcm4gYXJvc2UgdGhhdCBhcyBhIHBhY2tldCBpcyBwcm9jZXNzZWQg4oCTIGZyb20gZHJpdmVyIHRvIElQLCB0byBUQ1AsIHdoYXRldmVyIOKAkyBlYWNoIGxheWVyICptaWdodCogd3JpdGUgZGF0YSBpbnRvIGBjYmAuIElmIGEgc3Vic2VxdWVudCBsYXllciBleHBlY3RzIGBjYmAgdG8gYmUgemVyb2VkLCBidXQgaXQgaW5zdGVhZCBjb250YWlucyBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91cyBsYXllciwgd291bGRuJ3QgdGhhdCByZXN1bHQgaW4gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gSSBtZWFuLCBzaG91bGRuJ3QgS01TQU4gY2F0Y2ggdGhpcyBraW5kIG9mIHRoaW5nP1xuXG5CdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgS01TQU4ncyBkZWZpbml0aW9uIG9mIFwidW5pbml0aWFsaXplZFwiIGlzbid0IHF1aXRlIHRoZSBzYW1lIGFzIGEgZnVuY3Rpb25hbCBpc3N1ZSBoZXJlLiBLTVNBTiB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBTaW5jZSBgY2JgICppcyogemVyb2VkIG9uIGFsbG9jYXRpb24gKHRoYW5rcyB0byBgc2tidWZmX2NsZWFyYCksIEtNU0FOIHdvdWxkIGNvbnNpZGVyIGl0IFwiaW5pdGlhbGl6ZWQuXCIgV2hldGhlciBhIHByZXZpb3VzIGxheWVyIGhhcyB3cml0dGVuIHRvIGl0IG9yIG5vdCwgS01TQU4gc2VlcyBpdCBhcyBpbml0aWFsaXplZC4gVGhlIG1lbW9yeSBoYXMgYmVlbiB3cml0dGVuIHRvLCBldmVuIGlmIHRoZSB2YWx1ZSB3cml0dGVuIGlzIHplcm8sIGFuZCB0aGF0J3MgYWxsIHRoYXQgbWF0dGVycyB0byBLTVNBTi5cblxuU28sIHRoaXMgbWVhbnMgS01TQU4gd29uJ3QgZmxhZyB0aGlzIHNjZW5hcmlvLCBldmVuIGlmIHRoZSBjb2RlICpleHBlY3RzKiBhIHplcm9lZCBgY2JgIGFuZCByZWFkcyBhIG5vbi16ZXJvIHZhbHVlIGxlZnQgYnkgYW4gZWFybGllciBsYXllci4gSXQncyBhIFwiZ2FyYmFnZVwiIHZhbHVlIHRvIHRoZSBuZXcgbGF5ZXIsIGJ1dCBpdCdzIG5vdCB1bmluaXRpYWxpemVkIGluIEtNU0FOJ3Mgc2Vuc2UuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgYW5vdGhlciBhbmdsZS4gV2hhdCBpZiB0aGUgYnVnIGlzbid0IGEgZGlyZWN0IHJlYWQgb2YgYHNrYi1cdTAwM2VjYmAgYnV0IGEgbW9yZSBzdWJ0bGUgaXNzdWU/IFdoYXQgaWYgYElQQ0Ioc2tiKWAgaXMgYmVpbmcgcmVhZCwgYW5kICpzb21lKiBvZiB0aGUgZmllbGRzICp3aXRoaW4qIGBJUENCYCB3ZXJlIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBieSBhIHByaW9yIGxheWVyLCBkZXNwaXRlIGBza2J1ZmZfY2xlYXJgPyBJbiB0aGF0IGNhc2UsIGBza2J1ZmZfY2xlYXJgIHdvdWxkbid0IGJlIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciB0aGUgdW5pbml0aWFsaXplZCBzdGF0ZS5cblxuQnV04oCmIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIGBza2J1ZmZfY2xlYXJgIGFjdHVhbGx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIGB0YWlsYCwgaW5jbHVkaW5nIGBjYmAuIFllcywgSSdtIGNvbmZpZGVudCB0aGF0IGBtZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkpYCBkb2VzIHRoZSBqb2IuIFRoYXQgY29uZmlybXMgdGhhdCB0aGUgZW50aXJlIGBjYmAgcmVnaW9uIGlzIGluZGVlZCB6ZXJvZWQuIFRoYXQgbWVhbnMgdGhhdCBhbnkgc3Vic2VxdWVudCB3cml0ZXMgdG8gcGFydHMgb2YgYGNiYCBpbml0aWFsaXplIHRob3NlIHNwZWNpZmljIGJ5dGVzLiBUaGUgcmVtYWluZGVyIHRoYXQgKndhc24ndCogd3JpdHRlbiB0byByZW1haW5zIHplcm9lZCwgd2hpY2ggaXMgYSBkZWZpbmVkIHZhbHVlLlxuXG5UaGVyZWZvcmUsIGluIG5vIHNjZW5hcmlvIHdvdWxkIGBjYmAgY29udGFpbiAqS01TQU4qLXVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBtaWdodCBjb250YWluIHN0YWxlLCBmdW5jdGlvbmFsbHkgaW5jb3JyZWN0IGRhdGEsIGJ1dCB0aGF0J3MgYSBkaWZmZXJlbnQgcHJvYmxlbSBhbHRvZ2V0aGVyLCBhbmQgS01TQU4gd29uJ3QgY2F0Y2ggaXQuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB3aGF0IGhhcHBlbnMgd2hlbiBjbG9uaW5nIG9yIGNvcHlpbmcgYW4gc2tiLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI1OjA4LjU0MjQyMDY3N1oiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1ODE1MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jb3B5X3NrYl9oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9MTU0OT1FWFBPUlRfU1lNQk9MKG5hcGlfY29uc3VtZV9za2IpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1NS1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNTU2OnN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxubmV0L2NvcmUvc2tidWZmLmMtMTU1Ny17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA0LSAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDU6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjA2LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jPTE2MDc9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl9jbG9uZShzdHJ1Y3Qgc2tfYnVmZiAqbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2MTItXFx0bi1cXHUwMDNlc2sgPSBOVUxMO1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2MTM6XFx0X19jb3B5X3NrYl9oZWFkZXIobiwgc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTY0ND1zdHJ1Y3Qgc2tfYnVmZiAqYWxsb2Nfc2tiX2Zvcl9tc2coc3RydWN0IHNrX2J1ZmYgKmZpcnN0KVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY1Ny1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjU4OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNjU5LVxcdG4tXFx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjE0Mz12b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDQte1xcbm5ldC9jb3JlL3NrYnVmZi5jOjIxNDU6XFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDYtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Njc0PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzMyLVxcdFxcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYzo0NzMzOlxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDczNC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjEtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk2MjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNDk2My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MDguNjEyMDA5NTdaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MDgxMTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgYF9fY29weV9za2JfaGVhZGVyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzc2VjdCBgX19jb3B5X3NrYl9oZWFkZXJgLiBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBsaWtlbHkgZGVhbGluZyB3aXRoIHBhY2tldCBtYW5pcHVsYXRpb24gYW5kIGRhdGEgdHJhbnNmZXIgYXQgYSBsb3cgbGV2ZWwuIEkgYmV0IGl0J3MgY2FsbGVkIHRvIHJlcGxpY2F0ZSB0aGUgaGVhZGVyIG9mIGEgU29ja2V0IEJ1ZmZlciAoYHNrYmApIOKAkyBtZWFuaW5nIHRoZSBjb250cm9sIGluZm9ybWF0aW9uLCBsaWtlIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHByb3RvY29sIHR5cGVzLCBhbmQgdmFyaW91cyBmbGFncyDigJMgd2l0aG91dCBjb3B5aW5nIHRoZSBhY3R1YWwgZGF0YSBwYXlsb2FkLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIHBhY2tldCBjbG9uaW5nLCBvciBwZXJoYXBzIGNyZWF0aW5nIGEgbmV3IHNrYiBmb3IgYSBmb3J3YXJkZWQgcGFja2V0LiBUaGUgXCJkb3VibGUgdW5kZXJzY29yZVwiIHByZWZpeCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGl0J3MgYSBrZXJuZWwgaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG5cbkkgaW1hZ2luZSBpdCB3b3VsZCBuZWVkIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgdmFyaW91cyBhc3BlY3RzIHRvIHRoZSBoZWFkZXJzIGludm9sdmVkLCBsaWtlIHRoZSBwb3NzaWJsZSBwcmVzZW5jZSBvZiBWTEFOIHRhZ3MsIGZyYWdtZW50YXRpb24gZGV0YWlscyBhbmQgb3RoZXIgY29tcGxleGl0aWVzLiBUaGVyZWZvcmUsIGl0IGhhcyB0byBiZSByb2J1c3QgYW5kIHBlcmZvcm1hbnQuIEknbGwgbmVlZCB0byBsb29rIGZvciBlZmZpY2llbmN5IHRyaWNrcyB0byBtaW5pbWlzZSBjb3B5aW5nIGFzIHRoYXQgaXMgdGhlIGZ1bmN0aW9uJ3Mgc29sZSBwdXJwb3NlLiBUaGVyZSdzIGEgaGlnaCBwcm9iYWJpbGl0eSB0aGlzIGZ1bmN0aW9uIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHVzZSBvZiBpbmxpbmUgb3IgY29tcGlsZXIgZGlyZWN0aXZlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGUgZnVuY3Rpb24gbWlnaHQgYmUgbGV2ZXJhZ2luZyBoYXJkd2FyZSBmZWF0dXJlcyB0byBtYWtlIHRoaXMgYXMgZmFzdCBhcyBwb3NzaWJsZS4gVGhpcyBtYWtlcyB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgdGhlIHNrYiBzdHJ1Y3QgaXRzZWxmLCBpcyBrZXkgdG8gY29tcHJlaGVuZGluZyB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCB0aGUgc3VidGxlIGFzcGVjdHMgb2YgdGhlIGhlYWRlciBmaWVsZHMgYW5kIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlaXIgdmFyaW91cyBzdGF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MTIuNjgyODI0NzUzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTU2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTU2OlxcdHN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXFxuMTU1NzpcXHR7XFxuMTU1ODpcXHRcXHRuZXctXFx1MDAzZXRzdGFtcFxcdFxcdD0gb2xkLVxcdTAwM2V0c3RhbXA7XFxuMTU1OTpcXHRcXHQvKiBXZSBkbyBub3QgY29weSBvbGQtXFx1MDAzZXNrICovXFxuMTU2MDpcXHRcXHRuZXctXFx1MDAzZWRldlxcdFxcdD0gb2xkLVxcdTAwM2VkZXY7XFxuMTU2MTpcXHRcXHRtZW1jcHkobmV3LVxcdTAwM2VjYiwgb2xkLVxcdTAwM2VjYiwgc2l6ZW9mKG9sZC1cXHUwMDNlY2IpKTtcXG4xNTYyOlxcdFxcdHNrYl9kc3RfY29weShuZXcsIG9sZCk7XFxuMTU2MzpcXHRcXHRfX3NrYl9leHRfY29weShuZXcsIG9sZCk7XFxuMTU2NDpcXHRcXHRfX25mX2NvcHkobmV3LCBvbGQsIGZhbHNlKTtcXG4xNTY1OlxcdFxcbjE1NjY6XFx0XFx0LyogTm90ZSA6IHRoaXMgZmllbGQgY291bGQgYmUgaW4gdGhlIGhlYWRlcnMgZ3JvdXAuXFxuMTU2NzpcXHRcXHQgKiBJdCBpcyBub3QgeWV0IGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSBhIDE2IGJpdCBob2xlXFxuMTU2ODpcXHRcXHQgKi9cXG4xNTY5OlxcdFxcdG5ldy1cXHUwMDNlcXVldWVfbWFwcGluZyA9IG9sZC1cXHUwMDNlcXVldWVfbWFwcGluZztcXG4xNTcwOlxcdFxcbjE1NzE6XFx0XFx0bWVtY3B5KFxcdTAwMjZuZXctXFx1MDAzZWhlYWRlcnMsIFxcdTAwMjZvbGQtXFx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXFx1MDAzZWhlYWRlcnMpKTtcXG4xNTcyOlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcm90b2NvbCk7XFxuMTU3MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoY3N1bSk7XFxuMTU3NDpcXHRcXHRDSEVDS19TS0JfRklFTEQoaGFzaCk7XFxuMTU3NTpcXHRcXHRDSEVDS19TS0JfRklFTEQocHJpb3JpdHkpO1xcbjE1NzY6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHNrYl9paWYpO1xcbjE1Nzc6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fcHJvdG8pO1xcbjE1Nzg6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHZsYW5fdGNpKTtcXG4xNTc5OlxcdFxcdENIRUNLX1NLQl9GSUVMRCh0cmFuc3BvcnRfaGVhZGVyKTtcXG4xNTgwOlxcdFxcdENIRUNLX1NLQl9GSUVMRChuZXR3b3JrX2hlYWRlcik7XFxuMTU4MTpcXHRcXHRDSEVDS19TS0JfRklFTEQobWFjX2hlYWRlcik7XFxuMTU4MjpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfcHJvdG9jb2wpO1xcbjE1ODM6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX3RyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODQ6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX25ldHdvcmtfaGVhZGVyKTtcXG4xNTg1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9tYWNfaGVhZGVyKTtcXG4xNTg2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYXJrKTtcXG4xNTg3OlxcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXFxuMTU4ODpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2VjbWFyayk7XFxuMTU4OTpcXHQjZW5kaWZcXG4xNTkwOlxcdCNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTFxcbjE1OTE6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5hcGlfaWQpO1xcbjE1OTI6XFx0I2VuZGlmXFxuMTU5MzpcXHRcXHRDSEVDS19TS0JfRklFTEQoYWxsb2NfY3B1KTtcXG4xNTk0OlxcdCNpZmRlZiBDT05GSUdfWFBTXFxuMTU5NTpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2VuZGVyX2NwdSk7XFxuMTU5NjpcXHQjZW5kaWZcXG4xNTk3OlxcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxuMTU5ODpcXHRcXHRDSEVDS19TS0JfRklFTEQodGNfaW5kZXgpO1xcbjE1OTk6XFx0I2VuZGlmXFxuMTYwMDpcXHRcXG4xNjAxOlxcdH1cXG4xNjAyOlxcdFxcbjE2MDM6XFx0LypcXG4xNjA0OlxcdCAqIFlvdSBzaG91bGQgbm90IGFkZCBhbnkgbmV3IGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4gIEFkZCBpdCB0b1xcbjE2MDU6XFx0ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MTIuNjgzNDMyODMzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzI2NzE1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlZ3JpdHkgb2YgYGNiYCBpbiBPdXIgRGF0YSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbjogYG1lbWNweShuZXctXHUwMDNlY2IsIG9sZC1cdTAwM2VjYiwgc2l6ZW9mKG9sZC1cdTAwM2VjYikpO2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UncmUgZG9pbmcgYSBjb21wbGV0ZSBjb3B5IG9mIGBjYmAuIFRoYXQncyBnb29kLiBUaGUgZGVzaWduIHJlbGllcyBvbiBgY2JgIGJlaW5nIGZ1bGx5IHplcm9lZCBvdXQgZHVyaW5nIGFsbG9jYXRpb24sIGFuZCB0aGVuIGNvbXBsZXRlbHkgY29waWVkIGR1cmluZyBhIGNsb25lLiBUaGF0IGd1YXJhbnRlZXMsICp0aGVvcmV0aWNhbGx5KiwgdGhhdCBgY2JgIHdpbGwgbmV2ZXIgaGFyYm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgZmxhZ3MuIEEgcG90ZW50aWFsIGlzc3VlIGlzIHRoZXJlLiBXaGlsZSBpdCB3b24ndCBiZSBhbiB1bmluaXRpYWxpemVkICptZW1vcnkqIGJ1ZywgaXQgY291bGQgaW50cm9kdWNlIGEgbG9naWNhbCBlcnJvciBpZiBgY2JgIGluYWR2ZXJ0ZW50bHkgY29udGFpbnMgc3RhbGUgZGF0YSBmcm9tIGEgcHJldmlvdXMgcHJvY2Vzc2luZyBsYXllci4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbiwgYSBwb3NzaWJsZSBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuXG5cbk5vdywgSSdtIGJhY2t0cmFja2luZyBhIGxpdHRsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQuIElzIHRoZXJlICphbnkqIGV4ZWN1dGlvbiBwYXRoIHdoZXJlIGBza2ItXHUwMDNlY2JgIGRvZXNuJ3QgZ2V0IHplcm9lZCBvdXQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIGJlIDEwMCUgY2VydGFpbi4gQW5kLCB3aGF0IGFib3V0IGBza2JfbW9ycGhgPyBUaGF0IGZ1bmN0aW9uIGNvdWxkIGJlIG1hbmlwdWxhdGluZyBgY2JgIGFzIHdlbGwsIHNvIEkgbmVlZCB0byBjaGVjayBpdCBhbmQgbWFrZSBzdXJlIGl0IHBsYXlzIG5pY2VseSB3aXRoIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gc2NoZW1lLiBJdCdzIHRpbWUgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToxNy4zNTYxMDcxODZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDcyNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9tb3JwaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNjYzPUVYUE9SVF9TWU1CT0xfR1BMKGFsbG9jX3NrYl9mb3JfbXNnKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjUtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MTY2NjogKlxcdHNrYl9tb3JwaFxcdC1cXHRtb3JwaCBvbmUgc2tiIGludG8gYW5vdGhlclxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjctICpcXHRAZHN0OiB0aGUgc2tiIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnRzXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjc0LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjE2NzU6c3RydWN0IHNrX2J1ZmYgKnNrYl9tb3JwaChzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NzYte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTY3OS19XFxubmV0L2NvcmUvc2tidWZmLmM6MTY4MDpFWFBPUlRfU1lNQk9MX0dQTChza2JfbW9ycGgpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE2ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIwOjI1OjE3LjQxNjE4NjJaIiwiU2VxIjo2NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMDM3NTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTW9kdWxlIGBza2JfbW9ycGhgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIG1vZHVsZSBgc2tiX21vcnBoYC4gVGhpcyBuYW1lIHNwYXJrcyBhIGZldyBpbml0aWFsIGNvbnNpZGVyYXRpb25zLCBhcyBJIGtub3cgdGhhdCBpdCBoYW5kbGVzIG1vZGlmaWNhdGlvbnMgdG8gYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eSwgSSdtIGV4cGVjdGluZyB0aGlzIG1vZHVsZSB0byBlaXRoZXIgcGVyZm9ybSBjcml0aWNhbCBvcHRpbWl6YXRpb25zLCBvciBwb3RlbnRpYWxseSBiZSBpbnZvbHZlZCBpbiBzdWJ0bGUsIGVhc2lseSBvdmVybG9va2VkIGJ1Z3MgaWYgdGhlIGNvZGUgaXNuJ3Qgcm9idXN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUncyBkYXRhIGRlcGVuZGVuY2llcywgdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBwaW5wb2ludCB3aGVyZSBgc2tiX21vcnBoYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgZGF0YSBmbG93LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93OiB3aGF0J3MgYmVpbmcgbW9ycGhlZCwgd2h5LCBhbmQgaG93IGRvZXMgdGhpcyBhY3Rpb24gYWZmZWN0IG90aGVyIHByb2Nlc3NlcyB0aGF0IHJlbHkgb24gdGhlIGFmZmVjdGVkIGJ1ZmZlcnM/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBpdHMgZW50cnkgcG9pbnRzIGFuZCBsb29rIGZvciB0eXBpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucyBsaWtlIGZyYWdtZW50YXRpb24sIHJlYXNzZW1ibHksIGNoZWNrc3VtIGFkanVzdG1lbnRzLCBvciBvdGhlciBsYXllci1zcGVjaWZpYyBtYW5pcHVsYXRpb25zLiBJIGFsc28gbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBhbnkgb2ZmbG9hZCBtZWNoYW5pc21zIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIE5JQy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNvZGUgaW5zcGVjdGlvbiwgYW5kIHNlZSB3aGF0IHRoZSBhdXRob3JzIHdlcmUgdGhpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MjAuNjQ2NTY0OTM1WiIsIlNlcSI6NjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc1OlxcdHN0cnVjdCBza19idWZmICpza2JfbW9ycGgoc3RydWN0IHNrX2J1ZmYgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNyYylcXG4xNjc2OlxcdHtcXG4xNjc3OlxcdFxcdHNrYl9yZWxlYXNlX2FsbChkc3QsIFNLQl9DT05TVU1FRCk7XFxuMTY3ODpcXHRcXHRyZXR1cm4gX19za2JfY2xvbmUoZHN0LCBzcmMpO1xcbjE2Nzk6XFx0fVxcbjE2ODA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc2tiX21vcnBoKTtcXG4xNjgxOlxcdFxcbjE2ODI6XFx0aW50IG1tX2FjY291bnRfcGlubmVkX3BhZ2VzKHN0cnVjdCBtbXBpbiAqbW1wLCBzaXplX3Qgc2l6ZSlcXG4xNjgzOlxcdHtcXG4xNjg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3BnLCBudW1fcGcsIG5ld19wZywgb2xkX3BnLCBybGltO1xcbjE2ODU6XFx0XFx0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHRpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8ICFzaXplKVxcbjE2ODg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdHJsaW0gPSBybGltaXQoUkxJTUlUX01FTUxPQ0spO1xcbjE2OTE6XFx0XFx0aWYgKHJsaW0gPT0gUkxJTV9JTkZJTklUWSlcXG4xNjkyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE2OTM6XFx0XFxuMTY5NDpcXHRcXHRudW1fcGcgPSAoc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIDI7XFx0Lyogd29yc3QgY2FzZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToyMC42NDcwNTgwMTVaIiwiU2VxIjo2NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwNzMyMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIElzc3VlcyBpbiBTS0IgQ2xvbmluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza2JfbW9ycGhgIGFuZCBob3cgaXQgaGFuZGxlcyBjbG9uaW5nIFNLQnMuIEl0IGNhbGxzIGBfX3NrYl9jbG9uZWAsIHdoaWNoIGluIHR1cm4gdXNlcyBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgdGhhdCdzIHdoZXJlIGBjYmAgZ2V0cyBjb3BpZWQuIFNlZW1zIGxpa2UgYGNiYCBzaG91bGQgYWx3YXlzIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGR1ZSB0byB0aGlzIHNlcXVlbmNlLlxuXG5CdXQgaGFuZyBvbuKApiBXaGF0IGlmIGBJUENCKHNrYilgIGlzIHJlYWQgKmJlZm9yZSogaXQncyBwcm9wZXJseSBzZXQsIGFuZCBpdCBqdXN0IGdyYWJzIHNvbWUgbGVmdG92ZXIgZ2FyYmFnZSBkYXRhPyBDb3VsZCB0aGF0IGxlYWQgdG8gYSBuYXN0eSBidWcsIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0aGF0IEtNU0FOIHdvdWxkIGZsYWc/IExldCBtZSBxdWlja2x5IHRoaW5rIHRoaXMgdGhyb3VnaC4gTm8sIEtNU0FOIG9ubHkgY2F0Y2hlcyByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5LiBJZiB0aGVyZSdzIGdhcmJhZ2UgZGF0YSBwcmVzZW50IGZyb20gc29tZSBwcmV2aW91cyBvcGVyYXRpb24sIEtNU0FOIHdvbid0IGNhdGNoIGl0LiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSAqYWN0dWFsKiB1c2FnZSBvZiBgSVBDQihza2IpYC4gSSByZW1lbWJlciB3b3JraW5nIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgcmVjZW50bHnigKYgUmlnaHQsIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgSVBDQihza2IpYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBgZGVjYXBfYW5kX3ZhbGlkYXRlYCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZmFsbG91dC4gSSdtIHByZXR0eSBzdXJlIHRoZSBwYXRjaCBpcyBpbiBgbmV0L2lwdjYvc2VnNl9sb2NhbC5jYCwgbGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6MjUuNjU0MzgyNzI1WiIsIlNlcSI6NjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9zZWc2X2xvY2FsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQwOlxcdFxcbiAyNDE6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAyNDI6XFx0XFx0aWYgKHNyaCBcXHUwMDI2XFx1MDAyNiAhc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKVxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNDQ6XFx0I2VuZGlmXFxuIDI0NTpcXHRcXG4gMjQ2OlxcdFxcdGlmIChpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNm9mZiwgcHJvdG8sIE5VTEwsIE5VTEwpIFxcdTAwM2MgMClcXG4gMjQ3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQ4OlxcdFxcbiAyNDk6XFx0XFx0aWYgKCFwc2tiX3B1bGwoc2tiLCBvZmYpKVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTE6XFx0XFxuIDI1MjpcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgb2ZmKTtcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDI1NTpcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAyNTY6XFx0XFx0aWYgKGlwdHVubmVsX3B1bGxfb2ZmbG9hZHMoc2tiKSlcXG4gMjU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkge1xcbiAyNjA6XFx0XFx0XFx0aW50IGlpZiA9IElQNkNCKHNrYiktXFx1MDAzZWlpZjtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0XFx0bWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKCpJUENCKHNrYikpKTtcXG4gMjYzOlxcdFxcdFxcdElQQ0Ioc2tiKS1cXHUwMDNlaWlmID0gaWlmO1xcbiAyNjQ6XFx0XFx0fVxcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIHZvaWQgYWR2YW5jZV9uZXh0c2VnKHN0cnVjdCBpcHY2X3NyX2hkciAqc3JoLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRcXHRzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQtLTtcXG4gMjc0OlxcdFxcdGFkZHIgPSBzcmgtXFx1MDAzZXNlZ21lbnRzICsgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0O1xcbiAyNzU6XFx0XFx0KmRhZGRyID0gKmFkZHI7XFxuIDI3NjpcXHR9XFxuIDI3NzpcXHRcXG4gMjc4OlxcdHN0YXRpYyBpbnRcXG4gMjc5OlxcdHNlZzZfbG9va3VwX2FueV9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbjZfYWRkciAqbmhhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMDoyNToyNS42NTQ1OTY1NjVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc5NjQxMTE4MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogSVB2NCBDb250cm9sIEJsb2NrIFplcm9pbmcgaW4gSVB2NiBEZWNhcHN1bGF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIG91dCBgSVBDQihza2IpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aHk/IEFoLCBpdCdzIGR1cmluZyB0aGUgYGRlY2FwX2FuZF92YWxpZGF0ZWAgcHJvY2VzcyBmb3IgSVB2NiBwYWNrZXRzLCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gZW5jYXBzdWxhdGVkIElQdjQgcGFja2V0IChpLmUuLCBgcHJvdG8gPT0gSVBQUk9UT19JUElQYCkuIFRoZSBJUHY0IHN0YWNrIGV4cGVjdHMgaXRzIGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgKSB0byBiZSBjbGVhbjsgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9lcy4gSWYgd2UgZG9uJ3QgemVybyBpdCwgd2UncmUgbGlrZWx5IGxlYXZpbmcgYmVoaW5kIGBJUDZDQihza2IpYCBkYXRhIGZyb20gdGhlIElQdjYgc3RhY2suXG5cblRoZSBwcm9ibGVtPyBQb3RlbnRpYWxseSBcImdhcmJhZ2VcIiBkYXRhIOKAkyBsaWtlLCBzYXksIGEgbm9uLXplcm8gYElQQ0Ioc2tiKS1cdTAwM2VvcHRgIGZpZWxkLiBUaGlzIGNvdWxkIG1pc2xlYWQgdGhlIElQdjQgc3RhY2sgaW50byB0aGlua2luZyB0aGVyZSBhcmUgSVB2NCBvcHRpb25zIHByZXNlbnQgd2hlbiB0aGVyZSBhcmVuJ3QuIENsZWFybHkgYSBsb2dpYyBidWcsIHJpZ2h0PyBCdXQgdGhlIGtleSBxdWVzdGlvbiBoZXJlOiBpcyB0aGlzIGFuICp1bmluaXRpYWxpemVkIG1lbW9yeSogYnVnP1xuXG5ObywgaG9sZCBvbiwgaXQgaXNuJ3QuIFRoZSBtZW1vcnkgKndhcyogaW5pdGlhbGl6ZWQgYnkgdGhlIElQdjYgc3RhY2sgb3IgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBXZSBrbm93IGBza2ItXHUwMDNlY2JgIGlzIHplcm9lZCBhdCBhbGxvY2F0aW9uLiBJbiBmYWN0LCBgc2tidWZmX2NsZWFyYCBpcyBjYWxsZWQgaW4gYF9fYWxsb2Nfc2tiYCwgYHNsYWJfYnVpbGRfc2tiYCwgYF9fYnVpbGRfc2tiYCwgYF9fbmFwaV9idWlsZF9za2JgIHdoaWNoIGFyZSB0aGUgY29yZSBza2IgYWxsb2NhdGlvbiBmdW5jdGlvbnMuIFNvIGl0ICpzaG91bGQqIGJlIHplcm9lZC4gU28gdGhlcmUncyBubyB3YXkgaXQncyB0cnVseSB1bmluaXRpYWxpemVkLCByaWdodD9cblxuU28sIEtNU0FOIGlzICpub3QqIGdvaW5nIHRvIGNhdGNoIHRoaXMuIEtNU0FOJ3Mgam9iIGlzIHRvIGNhdGNoIHJlYWRzIGZyb20gbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiB0byBzaW5jZSBhbGxvY2F0aW9uLiBUaGlzIG1lbW9yeSBoYXMsIGZvciBzdXJlLCBiZWVuIHdyaXR0ZW4gdG8uIEZpcnN0IHdpdGggemVyb2VzIG9uIGFsbG9jYXRpb24sIHRoZW4gYnkgSVB2Ni5cblxuVGhpcyBpcyBhIGNsYXNzaWMgXCJjbGVhciB0aGUgY29udHJvbCBibG9jayB3aGVuIGNyb3NzaW5nIHByb3RvY29sIGxheWVyc1wiIGJ1Zy4gSXQncyBhYm91dCBwcmV2ZW50aW5nIHRoZSBpbm5lciBwcm90b2NvbCBzdGFjayBmcm9tIG1pc2ludGVycHJldGluZyBkYXRhIGludGVuZGVkIGZvciB0aGUgb3V0ZXIgcHJvdG9jb2wgc3RhY2suIFRoaXMgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiB1bmV4cGVjdGVkIGJlaGF2aW9yLCBvciBldmVuIGEgY3Jhc2gsIGJ1dCBpdCBkb2Vzbid0IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlLiBLQVNBTiBtaWdodCBzdGlsbCBjYXRjaCBpdCBpZiB0aGUgbWlzaW50ZXJwcmV0YXRpb24gbGVhZHMgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yIHdyaXRlIOKAkyBsaWtlIGlmIHRoYXQgZ2FyYmFnZSBvcHRpb24gbGVuZ3RoIGNhdXNlcyBhbiBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy4gQnV0IEtNU0FOLCBzcGVjaWZpY2FsbHksIHdvbid0LlxuXG5TbywgaW4gc3VtbWFyeTpcblxuMS4gIFRoZSBwYXRjaCB6ZXJvcyBgSVBDQihza2IpYCAod2hpY2ggaXMgYHNrYi1cdTAwM2VjYmApIHdoZW4gZGVjYXBzdWxhdGluZyBhbiBJUHY0LWluLUlQdjYgcGFja2V0LlxuMi4gIGBza2ItXHUwMDNlY2JgIGlzIGEgNDgtYnl0ZSBjb250cm9sIGJ1ZmZlciB1c2VkIGJ5IGRpZmZlcmVudCBwcm90b2NvbCBsYXllcnMgdG8gc3RvcmUgcHJpdmF0ZSB2YXJpYWJsZXMuXG4zLiAgV2hlbiBjcm9zc2luZyBwcm90b2NvbCBsYXllcnMgKGZyb20gSVB2NiB0byBJUHY0KSwgdGhlIG5ldyBsYXllciBleHBlY3RzIGl0cyBjb250cm9sIGJsb2NrIHRvIGJlIGNsZWFuLiBJZiBub3QgY2xlYXJlZCwgaXQgd2lsbCByZWFkIGRhdGEgbGVmdCBvdmVyIGJ5IHRoZSBwcmV2aW91cyBsYXllciAoSVB2NikuXG40LiAgRnJvbSBLTVNBTidzIHBlcnNwZWN0aXZlLCB0aGlzIG1lbW9yeSBpcyBOT1QgdW5pbml0aWFsaXplZC4gSXQgd2FzIGZ1bGx5IHplcm9lZCB3aGVuIHRoZSBgc2tiYCB3YXMgYWxsb2NhdGVkIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci5cbjUuICBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkuIFNpbmNlIGBza2ItXHUwMDNlY2JgIHdhcyBpbml0aWFsaXplZCwgS01TQU4gd2lsbCBub3QgZmxhZyByZWFkcyBmcm9tIGl0LCBldmVuIGlmIHRoZSBkYXRhIGlzIHNlbWFudGljYWxseSBcImdhcmJhZ2VcIi5cbjYuICBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuXG5cblRoZXJlZm9yZSwgbm8gS01TQU4gZnV6emluZyBuZWVkZWQsIGl0IHNlZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg3MSwiT3V0cHV0VG9rZW5zIjozMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjA6MjU6NDMuNjE4NzExNTZaIiwiU2VxIjo3MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHplcm9lcyBvdXQgdGhlIElQdjQgY29udHJvbCBibG9jayAoYElQQ0Ioc2tiKWAsIHdoaWNoIG1hcHMgdG8gYHNrYi1cXHUwMDNlY2JgKSB3aGVuIGRlY2Fwc3VsYXRpbmcgYW4gSVB2NCBwYWNrZXQgZnJvbSBhbiBJUHY2IHR1bm5lbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgc2tiLVxcdTAwM2VjYmAgaXMgc2hhcmVkIGFjcm9zcyBwcm90b2NvbCBsYXllcnMsIGFuZCB0aGUgSVB2NCBzdGFjayBtaWdodCBtaXNpbnRlcnByZXQgbGVmdG92ZXIgZGF0YSBmcm9tIHRoZSBJUHY2IGNvbnRyb2wgYmxvY2sgKGBJUDZDQihza2IpYCkgYXMgdmFsaWQgSVB2NCBvcHRpb25zIG9yIGZsYWdzLlxcblxcbldoaWxlIHRoaXMgcHJldmVudHMgdGhlIElQdjQgc3RhY2sgZnJvbSByZWFkaW5nIFxcXCJnYXJiYWdlXFxcIiBkYXRhLCB0aGlzIGRhdGEgaXMgbm90IHRlY2huaWNhbGx5IFxcXCJ1bmluaXRpYWxpemVkXFxcIiBtZW1vcnkuIFRoZSBgc2tiLVxcdTAwM2VjYmAgYnVmZmVyIGlzIGZ1bGx5IHplcm9lZCB1cG9uIGBza2JgIGFsbG9jYXRpb24gKHZpYSBgc2tidWZmX2NsZWFyKClgIGluIGBfX2FsbG9jX3NrYigpYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMpIGFuZCBpcyBzdWJzZXF1ZW50bHkgd3JpdHRlbiB0byBieSB0aGUgSVB2NiBsYXllci4gS01TQU4gc3BlY2lmaWNhbGx5IHRyYWNrcyBtZW1vcnkgdGhhdCBoYXMgbmV2ZXIgYmVlbiBpbml0aWFsaXplZCBzaW5jZSBhbGxvY2F0aW9uLiBCZWNhdXNlIHRoZSBtZW1vcnkgaW4gYHNrYi1cXHUwMDNlY2JgIGhhcyBiZWVuIGluaXRpYWxpemVkIChlaXRoZXIgd2l0aCB6ZXJvZXMgb3Igd2l0aCBJUHY2IGNvbnRyb2wgZGF0YSksIEtNU0FOIHdpbGwgbm90IGZsYWcgcmVhZHMgZnJvbSBpdC5cXG5cXG5JZiB0aGUgbGVmdG92ZXIgZGF0YSBjYXVzZXMgdGhlIElQdjQgc3RhY2sgdG8gcGVyZm9ybSBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gbWFsZm9ybWVkIElQIG9wdGlvbnMpLCBzdGFuZGFyZCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBUaGVyZWZvcmUsIHRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgdXNlcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB6ZXJvZXMgb3V0IHRoZSBJUHY0IGNvbnRyb2wgYmxvY2sgKGBJUENCKHNrYilgLCB3aGljaCBtYXBzIHRvIGBza2ItXFx1MDAzZWNiYCkgd2hlbiBkZWNhcHN1bGF0aW5nIGFuIElQdjQgcGFja2V0IGZyb20gYW4gSVB2NiB0dW5uZWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYHNrYi1cXHUwMDNlY2JgIGlzIHNoYXJlZCBhY3Jvc3MgcHJvdG9jb2wgbGF5ZXJzLCBhbmQgdGhlIElQdjQgc3RhY2sgbWlnaHQgbWlzaW50ZXJwcmV0IGxlZnRvdmVyIGRhdGEgZnJvbSB0aGUgSVB2NiBjb250cm9sIGJsb2NrIChgSVA2Q0Ioc2tiKWApIGFzIHZhbGlkIElQdjQgb3B0aW9ucyBvciBmbGFncy5cXG5cXG5XaGlsZSB0aGlzIHByZXZlbnRzIHRoZSBJUHY0IHN0YWNrIGZyb20gcmVhZGluZyBcXFwiZ2FyYmFnZVxcXCIgZGF0YSwgdGhpcyBkYXRhIGlzIG5vdCB0ZWNobmljYWxseSBcXFwidW5pbml0aWFsaXplZFxcXCIgbWVtb3J5LiBUaGUgYHNrYi1cXHUwMDNlY2JgIGJ1ZmZlciBpcyBmdWxseSB6ZXJvZWQgdXBvbiBgc2tiYCBhbGxvY2F0aW9uICh2aWEgYHNrYnVmZl9jbGVhcigpYCBpbiBgX19hbGxvY19za2IoKWAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zKSBhbmQgaXMgc3Vic2VxdWVudGx5IHdyaXR0ZW4gdG8gYnkgdGhlIElQdjYgbGF5ZXIuIEtNU0FOIHNwZWNpZmljYWxseSB0cmFja3MgbWVtb3J5IHRoYXQgaGFzIG5ldmVyIGJlZW4gaW5pdGlhbGl6ZWQgc2luY2UgYWxsb2NhdGlvbi4gQmVjYXVzZSB0aGUgbWVtb3J5IGluIGBza2ItXFx1MDAzZWNiYCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZWl0aGVyIHdpdGggemVyb2VzIG9yIHdpdGggSVB2NiBjb250cm9sIGRhdGEpLCBLTVNBTiB3aWxsIG5vdCBmbGFnIHJlYWRzIGZyb20gaXQuXFxuXFxuSWYgdGhlIGxlZnRvdmVyIGRhdGEgY2F1c2VzIHRoZSBJUHY0IHN0YWNrIHRvIHBlcmZvcm0gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIG1hbGZvcm1lZCBJUCBvcHRpb25zKSwgc3RhbmRhcmQgS0FTQU4gd2lsbCBjYXRjaCBpdC4gVGhlcmVmb3JlLCB0aGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHVzZXMsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[1] Phase: Succeeded StartedAt: 2026-08-10 20:26:36 +0000 UTC FinishedAt: 2026-08-10 20:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 20:26:36 +0000 UTC FinishedAt: 2026-08-10 20:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2] Phase: Succeeded StartedAt: 2026-08-10 20:26:36 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:36 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:36 +0000 UTC FinishedAt: 2026-08-10 20:26:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:36 +0000 UTC FinishedAt: 2026-08-10 20:26:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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-workflowthj9n/series-workflowthj9n-convert-artifact-770411367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:46 +0000 UTC FinishedAt: 2026-08-10 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:46 +0000 UTC FinishedAt: 2026-08-10 20:45:52 +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:*bb7d1e72-0a3d-4508-9ff5-881ec7e7d6b2,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-workflowthj9n/series-workflowthj9n-convert-artifact-770411367/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": "c69f56b7-e963-4d60-9cc3-5f6db0b8fd8b", "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-workflowthj9n/series-workflowthj9n-build-action-749109757/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:26:46 +0000 UTC FinishedAt: 2026-08-10 20:45:42 +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:*bb7d1e72-0a3d-4508-9ff5-881ec7e7d6b2,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-workflowthj9n/series-workflowthj9n-convert-artifact-770411367/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": "c69f56b7-e963-4d60-9cc3-5f6db0b8fd8b", "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-workflowthj9n/series-workflowthj9n-build-action-749109757/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:45:52 +0000 UTC FinishedAt: 2026-08-10 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:45:52 +0000 UTC FinishedAt: 2026-08-10 20:45:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:45:52 +0000 UTC FinishedAt: 2026-08-10 20:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:45:52 +0000 UTC FinishedAt: 2026-08-10 20:45:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-workflowthj9n/series-workflowthj9n-convert-artifact-692659990/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:46:02 +0000 UTC FinishedAt: 2026-08-10 20:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:46:02 +0000 UTC FinishedAt: 2026-08-10 20:47:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c69f56b7-e963-4d60-9cc3-5f6db0b8fd8b,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-workflowthj9n/series-workflowthj9n-build-action-749109757/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-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:48:05 +0000 UTC FinishedAt: 2026-08-10 20:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:48:05 +0000 UTC FinishedAt: 2026-08-10 20:48:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:48:05 +0000 UTC FinishedAt: 2026-08-10 21:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:48:05 +0000 UTC FinishedAt: 2026-08-10 21:04:44 +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:*bb7d1e72-0a3d-4508-9ff5-881ec7e7d6b2,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-workflowthj9n/series-workflowthj9n-convert-artifact-692659990/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": "017a9bfa-aa7a-485a-8682-11fa1ea0fdb7", "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-workflowthj9n/series-workflowthj9n-build-action-2472011802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 20:48:05 +0000 UTC FinishedAt: 2026-08-10 21:04: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:*bb7d1e72-0a3d-4508-9ff5-881ec7e7d6b2,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-workflowthj9n/series-workflowthj9n-convert-artifact-692659990/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": "017a9bfa-aa7a-485a-8682-11fa1ea0fdb7", "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-workflowthj9n/series-workflowthj9n-build-action-2472011802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:04:44 +0000 UTC FinishedAt: 2026-08-10 21:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:04:44 +0000 UTC FinishedAt: 2026-08-10 21:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:04:44 +0000 UTC FinishedAt: 2026-08-10 21:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:04:44 +0000 UTC FinishedAt: 2026-08-10 21:06:32 +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:*017a9bfa-aa7a-485a-8682-11fa1ea0fdb7,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-workflowthj9n/series-workflowthj9n-build-action-2472011802/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-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"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:*c69f56b7-e963-4d60-9cc3-5f6db0b8fd8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*017a9bfa-aa7a-485a-8682-11fa1ea0fdb7,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-workflowthj9n/series-workflowthj9n-build-action-749109757/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-workflowthj9n/series-workflowthj9n-build-action-2472011802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-10 21:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-10 21:06:46 +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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"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-workflowthj9n/series-workflowthj9n-convert-artifact-3958640059/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-10 21:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-10 21:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:42 +0000 UTC FinishedAt: 2026-08-10 21:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:52 +0000 UTC FinishedAt: 2026-08-11 00:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthj9n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"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":["seg6_local_input","input_action_end_dx4","input_action_end_dt4"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6_SEG6_LWTUNNEL","NET_L3_MASTER_DEV"],"series_id":"5718ebb8-e152-4ad8-8460-01323c28f48a","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-10 21:06:52 +0000 UTC FinishedAt: 2026-08-11 00:12:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c69f56b7-e963-4d60-9cc3-5f6db0b8fd8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*017a9bfa-aa7a-485a-8682-11fa1ea0fdb7,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-workflowthj9n/series-workflowthj9n-build-action-749109757/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-workflowthj9n/series-workflowthj9n-build-action-2472011802/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-workflowthj9n/series-workflowthj9n-convert-artifact-3958640059/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,}