Name: series-workflowht5n2 Phase: Succeeded StartedAt: 2026-06-25 06:10:24 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[0] Phase: Succeeded StartedAt: 2026-06-25 06:10:24 +0000 UTC FinishedAt: 2026-06-25 06:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 06:10:24 +0000 UTC FinishedAt: 2026-06-25 06:25:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET6_ESP", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET6_ESP", "IPV6" ], "series_id": "29467679-a887-43f6-8a06-4ebb29538b1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nat_keepalive_send_ipv4", "nat_keepalive_send_ipv6", "nat_keepalive_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MjU1NmM1ODMwMzBhMjFmZjNlYWU2MjBlMzgyNDU4ZmUxZTU2YzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjoyMzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCA0NTg5MzEwNjJhMDRlZi4uZWIxYjZmNjc3MzllMWQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4mIzQzO1x0aWYgKElTX0VSUihydCkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4mIzQzO1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhuZXQsIHNrLCBcdTAwMjZmbDYsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihkc3QpKSB7XG4gXHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG4gXHR9XG4gXG5AQCAtMTE4LDcgJiM0MzsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAmIzQzO1xuIFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiBcdGNvbnN0IHU4IG5hdF9rYV9wYXlsb2FkID0gMHhGRjtcbi1cdGludCBlcnIgPSAtRUFGTk9TVVBQT1JUO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuIFxuQEAgLTE0MCwxNiAmIzQzOzE0MiwxNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFxuIFx0c3dpdGNoIChrYS1cdTAwM2VmYW1pbHkpIHtcbiBcdGNhc2UgQUZfSU5FVDpcbi1cdFx0ZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuLVx0fVxuLVx0aWYgKGVycilcbiYjNDM7XHRkZWZhdWx0OlxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyNTU2YzU4MzAzMGEyMWZmM2VhZTYyMGUzODI0NThmZTFlNTZjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDA2OjIzOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwppbmRleCA0NTg5MzEwNjJhMDRlZi4uZWIxYjZmNjc3MzllMWQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAga2EtJmd0O2VuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7CiAKIAlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmYW1wO2ZsNCk7Ci0JaWYgKElTX0VSUihydCkpCiYjNDM7CWlmIChJU19FUlIocnQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIFBUUl9FUlIocnQpOwomIzQzOwl9CiAKIAlza2JfZHN0X3NldChza2IsICZhbXA7cnQtJmd0O2RzdCk7CiAKQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3cobmV0LCBzaywgJmFtcDtmbDYsIE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkgewogCQlsb2NhbF91bmxvY2tfbmVzdGVkX2JoKCZhbXA7bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBQVFJfRVJSKGRzdCk7CiAJfQogCkBAIC0xMTgsNyAmIzQzOzEyMSw2IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXB2NmhkcikpICYjNDM7CiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAljb25zdCB1OCBuYXRfa2FfcGF5bG9hZCA9IDB4RkY7Ci0JaW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIApAQCAtMTQwLDE2ICYjNDM7MTQyLDE3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAKIAlzd2l0Y2ggKGthLSZndDtmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCWVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7CiAJCWJyZWFrOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJY2FzZSBBRl9JTkVUNjoKLQkJZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwogCQlicmVhazsKICNlbmRpZgotCX0KLQlpZiAoZXJyKQomIzQzOwlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiAKIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgWEZSTSBOQVQgS2VlcGFsaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgbWVtb3J5IGxlYWsgd2l0aCBgc2tiYCBpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCBmdW5jdGlvbnMuIEFwcGFyZW50bHksIHRoaXMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHJvdXRpbmcgZmFpbHMuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCDigJMgbW92aW5nIGF3YXkgZnJvbSB1c2luZyBgZXJyYCBhbmQgY2VudHJhbGl6aW5nIGBza2JgIGZyZWVpbmcgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLCB3aGlsZSBhbGxvd2luZyB0aGUgSVB2NCBhbmQgSVB2NiBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gaGFuZGxlIGl0IGlmIHRoZXkgZW5jb3VudGVyIGFuIGVycm9yLiBUaGlzIGlzIGdvb2Q7IHRpZHlpbmcgdXAgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGEgcGx1cywgYW5kIHNob3VsZCBzaW1wbGlmeSBkZWJ1Z2dpbmcgZG93biB0aGUgcm9hZC4KCkkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBjaGFuZ2VzLiBGaXJzdCwgSeKAmWxsIG9wZW4gdXAgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCBpdHNlbGYgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBzZWUgaG93IHRoZSBleGlzdGluZyBjb2RlIGZ1bmN0aW9ucywgYW5kIHVuZGVyc3RhbmQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGVzLiBUaGVuLCBzaW5jZSB0aGlzIGlzIFhGUk0tcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCBhbmQgYG5ldC94ZnJtL0tjb25maWdgIGZvciBgQ09ORklHX1hGUk1gIG9yIGFueXRoaW5nIHNpbWlsYXIgdG8gY29uZmlybSB3aGF0IFhGUk0gZmVhdHVyZXMgYXJlIGluIHVzZSBvciBuZWVkZWQgZm9yIHRoaXMgbW9kdWxlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aG9zZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIGRlcGVuZGluZyBvbiBidWlsZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxuLS1cbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSAmIzQzOz0geGZybV9wcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGBDT05GSUdfWEZSTWAgb3B0aW9uIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0IHRoYXQgbWlnaHQgYWxzbyBuZWVkIG91ciBhdHRlbnRpb24uIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgYmFzZSBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBmdW5jdGlvbiBpdHNlbGYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgY29tcG9uZW50cy4gSSBzaG91bGQgcHJvYmFibHkgYmUgc3VyZSBvZiB0aGUgZXhhY3QgcmVsYXRpb25zaGlwcyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYW5kIHBvc3NpYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuCgpJdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19jdHhgIC0gb3IgYSBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lLiBHaXZlbiB0aGUgaW1wb3J0YW5jZSBvZiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgbGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUgZm9yIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX2luaXQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjQyOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzU6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cdGNhc2UgQUZfSU5FVDpcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXHRcdGJyZWFrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDk6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1MC1cdFx0YnJlYWs7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkyLVx0aWYgKHNlbmRfa2VlcGFsaXZlKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTkzOlx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gYSBtb2R1bGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBXaGVyZSBkb2VzIHRoZSB3b3JrIGFjdHVhbGx5ICpzdGFydCo/CgpBaCwgcmlnaHQsIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIG9uZS4gQW5kIGdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGEgc2luZ2xlIHVuaXQgb2Ygd29yay4gTXkgZ3V0IHNheXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnZXR0aW5nIGNhbGxlZCBmcm9tIGVpdGhlciBhIHdvcmtxdWV1ZSBvciBhIHRpbWVyLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGFzeW5jaHJvbm91cyB0YXNrcyBsaWtlIHRoZXNlLgoKVG8gY29uZmlybSBhbmQgZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBkZWZpbml0ZWx5IGp1bXAgb3ZlciB0byBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGFsbCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFhGUk0gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE1OD1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTYyLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTYzOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjQte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTIwMD1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgV29ya3F1ZXVlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3b3JrcXVldWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIHNjaGVkdWxpbmcgbWVjaGFuaXNtIGhlcmU/IEhvdyBkb2VzIHRoaXMgdGhpbmcgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSBgbmF0X2tlZXBhbGl2ZV93b3JrYCB0byBleGVjdXRlLiBLbm93aW5nIHRoZSBzY2hlZHVsaW5nIHBhdGggaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIE5BVCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBlbnF1ZXVlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgcnVucy4gQXJlIHdlIHRhbGtpbmcgdGltZXJzLCBpbnRlcnJ1cHRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG1ldGhvZCBvZiBzY2hlZHVsaW5nIHdpbGwgdGVsbCBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdXJnZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTU3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1OS1cdHRpbWU2NF90IG5leHRfcnVuO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY0LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2NTpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjYtXHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk5LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAwOnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMDEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAyOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjAzLVx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIwOC1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwOTpcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEzLVx0aWYgKGN0eC5uZXh0X3J1bilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxNDpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxNS1cdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTUtXHRuZXQgPSB4c19uZXQoeCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTY6XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Ny19XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjU5PWludCBfX25ldF9pbml0IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjAte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjYxOlx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCBuYXRfa2VlcGFsaXZlX3dvcmspO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjYyLVx0cmV0dXJuIDA7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjY1PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY2LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI2NzpcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI2OC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5BVCBLZWVwYWxpdmUgTWVjaGFuaXNtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyB0aGUgdHJpZ2dlciBmb3IgYG5hdF9rZWVwYWxpdmVfd29ya2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIFN0YXRlIHVwZGF0ZXMga2ljayBvZmYgdGhlIGtlZXBhbGl2ZSBwcm9jZXNzLiYjMzQ7IEJ1dCBub3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0Ki4gV2hlcmUgZXhhY3RseSBpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHZhcmlvdXMgc2NlbmFyaW9zIHRoaXMga2VlcGFsaXZlIG1lY2hhbmlzbSBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gaGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQwPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0Ny1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0ODp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ5LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODExPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzItXHRcdG5ldC1cdTAwM2V4ZnJtLnN0YXRlX251bS0tO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgzMzpcdFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODM0LVx0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNzE1PXN0YXRpYyB2b2lkIF9feGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NTktXHR4ZnJtX2hhc2hfZ3Jvd19jaGVjayhuZXQsIHgtXHUwMDNlYnlkc3QubmV4dCAhPSBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNzYwOlx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5BVCBLZWVwYWxpdmUgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoZSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdHJpZ2dlciBoZXJlLiBJdCYjMzk7cyBjYWxsZWQgZXZlcnkgdGltZSBhbiB4ZnJtIHN0YXRl4oCUZWl0aGVyIGEgbmV3IG9uZSBpcyBhZGRlZCBvciBhbiBleGlzdGluZyBvbmUgcmVtb3ZlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbnkgY2hhbmdlIGluIHRoZSBzdGF0ZSB0YWJsZSBuZWNlc3NpdGF0ZXMgYSBjaGVjayBvbiB3aGV0aGVyIE5BVCBrZWVwYWxpdmVzIGFyZSBuZWVkZWQuIFRoaXMgdGhlbiBzY2hlZHVsZXMgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGlzIGEgd29yayBxdWV1ZSBpdGVtLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgd29yayBpdGVtJiMzOTtzIHB1cnBvc2UgaXMgdG8gaXRlcmF0ZSBvdmVyICphbGwqIGV4aXN0aW5nIHhmcm0gc3RhdGVzLiBBbmQgd2l0aGluIHRoYXQgbG9vcCwgaXQgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIGZvciBlYWNoIHN0YXRlLgoKTm93LCB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIHByb2Nlc3Mgc2VlbXMgdG8gbGllIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gd2hlbiBgc2VuZF9rZWVwYWxpdmVgIGlzIHNldCB0byB0cnVlIGJlY2F1c2UgKnRoYXQqIGRlY2lkZXMgd2hldGhlciB3ZSBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCBvciBub3QuIFRoZSBmdW5jdGlvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdGhlbiBjYWxscyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgd2hpY2ggZGlzcGF0Y2hlcyB0byBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIG9yIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBgc2VuZF9rZWVwYWxpdmVgLiBJIG5lZWQgdG8gZGlnIGludG8gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUga2VlcGFsaXZlIGlzIGFjdHVhbGx5IHNlbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBsb2dpYyB0byBldmFsdWF0ZSB3aGV0aGVyIG9yIG5vdCBrZWVwYWxpdmUgcGFja2V0cyBhcmUgdG8gYmUgc2VudCBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NS1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjY6XHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjctXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXHRcdG5hdF9rZWVwYWxpdmVfaW5pdChcdTAwMjZrYSwgeCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODc6XHRcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE4OC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxOTI6XHRpZiAoc2VuZF9rZWVwYWxpdmUpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTMtXHRcdG5hdF9rZWVwYWxpdmVfc2VuZChcdTAwMjZrYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBmdW5jdGlvbi4gSSBzZWUgdGhpcyBhcyB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIG1lY2hhbmlzbSwgdGhlIHVuaXQgb2Ygd29yayB0aGF0IGtlZXBzIG91ciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2Vzc2lvbnMgYWxpdmUuIEnigJltIHRoaW5raW5nLCB0aGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBlbnN1cmluZyB0aG9zZSBiaW5kaW5ncyBkb27igJl0IHRpbWUgb3V0LCBtYWtpbmcgc3VyZSB0cmFmZmljIGNvbnRpbnVlcyB0byBmbG93IHNtb290aGx5IHRocm91Z2ggdGhlIE5BVC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBOQVQgdGFibGVzIG9yIGNvbnRleHRzIOKAkyBpcyB0aGlzIGEgc2hhcmVkIHJlc291cmNlIHNjZW5hcmlvIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtPyBPciBkb2VzIGVhY2ggTkFUIGtlZXAgdHJhY2sgb2YgaXRzIG93bj8gVGhlIGRldmls4oCZcyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB0aGF04oCZcyB3aGVyZSBhbGwgdGhlIGJ1Z3MgdGVuZCB0byBoaWRlIGFuZCB0aGF0IGlzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjM6XHRzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIDE2NDpcdHtcbiAxNjU6XHRcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4gMTY2Olx0XHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4gMTY3Olx0XHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbiAxNjg6XHRcdHRpbWU2NF90IG5leHRfcnVuO1xuIDE2OTpcdFx0dTMyIGludGVydmFsO1xuIDE3MDpcdFx0aW50IGRlbHRhO1xuIDE3MTpcdFxuIDE3MjpcdFx0aW50ZXJ2YWwgPSB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4gMTczOlx0XHRpZiAoIWludGVydmFsKVxuIDE3NDpcdFx0XHRyZXR1cm4gMDtcbiAxNzU6XHRcbiAxNzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIDE3NzpcdFxuIDE3ODpcdFx0ZGVsdGEgPSAoaW50KShjdHgtXHUwMDNlbm93IC0geC1cdTAwM2VsYXN0dXNlZCk7XG4gMTc5Olx0XHRpZiAoZGVsdGEgXHUwMDNjIGludGVydmFsKSB7XG4gMTgwOlx0XHRcdHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uID0gY3R4LVx1MDAzZW5vdyAmIzQzOyBpbnRlcnZhbCAtIGRlbHRhO1xuIDE4MTpcdFx0XHRuZXh0X3J1biA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xuIDE4MjpcdFx0fSBlbHNlIGlmICh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfZXhwaXJhdGlvbiBcdTAwM2UgY3R4LVx1MDAzZW5vdykge1xuIDE4MzpcdFx0XHRuZXh0X3J1biA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xuIDE4NDpcdFx0fSBlbHNlIHtcbiAxODU6XHRcdFx0bmV4dF9ydW4gPSBjdHgtXHUwMDNlbm93ICYjNDM7IGludGVydmFsO1xuIDE4NjpcdFx0XHRuYXRfa2VlcGFsaXZlX2luaXQoXHUwMDI2a2EsIHgpO1xuIDE4NzpcdFx0XHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIDE5MTpcdFxuIDE5MjpcdFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxuIDE5MzpcdFx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xuIDE5NDpcdFxuIDE5NTpcdFx0aWYgKCFjdHgtXHUwMDNlbmV4dF9ydW4gfHwgbmV4dF9ydW4gXHUwMDNjIGN0eC1cdTAwM2VuZXh0X3J1bilcbiAxOTY6XHRcdFx0Y3R4LVx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XG4gMTk3Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgIGluIFhGUk0gU3RhdGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAuIFRoZSBjb2RlJiMzOTtzIGNsZWFybHkgZXhwZWN0aW5nIHRoaXMgdmFsdWUgdG8gYmUgbm9uLXplcm8gYXQgc29tZSBwb2ludCwgYW5kIG15IGV4cGVyaWVuY2Ugc2F5cyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHNldCBkdXJpbmcgdGhlIFhGUk0gc3RhdGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBNYWtlcyBzZW5zZTsgTkFUIGtlZXBhbGl2ZXMgd291bGQgYmUgY29uZmlndXJlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGF0ZS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoLCBsb29raW5nIGZvciBhc3NpZ25tZW50cyB0byB0aGF0IHNwZWNpZmljIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX2ludGVydmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MjpcdGludGVydmFsID0geC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTczLVx0aWYgKCFpbnRlcnZhbClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTI6XHRpZiAoIXgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1My1cdFx0cmV0dXJuO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDY0Mj1zdGF0aWMgdm9pZCB4ZnJtX21pZ3JhdGVfY29weV9vbGQoY29uc3Qgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ3LVx0bXAtXHUwMDNlbmV3X3JlcWlkICAgICAgICAgICAgICA9IHgtXHUwMDNlcHJvcHMucmVxaWQ7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ2NDg6XHRtcC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0geC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ5LVx0bXAtXHUwMDNlbWFwcGluZ19tYXhhZ2UgICAgICAgICA9IHgtXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE5Njg9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2Nsb25lX2FuZF9zZXR1cChzdHJ1Y3QgeGZybV9zdGF0ZSAqb3JpZyxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjAyOC1cdFx0eC1cdTAwM2VtYXBwaW5nX21heGFnZSA9IG0tXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjAyOTpcdFx0eC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0gbS1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIwMzAtXHR9XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMxOTk9aW50IF9feGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjYtXHR4LVx1MDAzZW91dGVyX21vZGUgPSAqb3V0ZXJfbW9kZTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMjY3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjgtXHRcdGlmICh4LVx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9PVVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc0LVx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1Olx0XHR4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc2LVx0XHRcdG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzYzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDY3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2OC1cdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ2OTpcdFx0XHRcdCAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NzAtXHRcdGlmIChyZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzIyMj1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjY4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI2OTpcdGlmIChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNzAtXHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyNzE6XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjcyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMyOTA9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOTgtXHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0Mztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTk6XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzMwMC1cdFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzQzMi1cdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbWFwcGluZ19tYXhhZ2UpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQzMzpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDM0Olx0XHRcdFx0XHRcdCAgICAgICB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzQzNS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDg1LVx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVx1MDAzZW1hcHBpbmdfbWF4YWdlO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQ4NjpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDg3LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMjA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGZybV9zYV9sZW4oc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDA2OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNjk6XHRpZiAoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxubmV0L3hmcm0veGZybV91c2VyLmM6NDA3MDpcdFx0bCAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUsIHdoaWNoLCBvZiBjb3Vyc2UsIHNldHMgdGhlIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gSSBrbm93IHRoaXMgaXMgYWxsIHBhcnQgb2YgdGhlIFhGUk0gZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgSVBzZWMuIFRoZSBjaGFuZ2VzIGZvY3VzIG9uIHRob3NlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgZ2VuZXJpYyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBmdW5jdGlvbnMuIENsZWFybHksIHRoZXNlIGFyZSB0cmlnZ2VyZWQgdmlhIGBuYXRfa2VlcGFsaXZlX3dvcmtgLCB3aGljaCBnZXRzIHNjaGVkdWxlZCB3aGVuIGFuIFhGUk0gc3RhdGUgaXMgYWRkZWQgdGhhdCBhY3R1YWxseSB1c2VzIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBidWcgZml4OyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGlwX3JvdXRlX291dHB1dF9rZXlgIGFuZCBgaXA2X2RzdF9sb29rdXBfZmxvd2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGZpeCBpcyBib3RoIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiB1bmRlciByZWFsLXdvcmxkIGNvbmRpdGlvbnMuCgpOb3csIGEgcXVpY2sgdGhvdWdodDogSSYjMzk7bSBwcmV0dHkgc3VyZSB3ZSBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCBpZiB3ZSYjMzk7cmUgaW50ZW5kaW5nIHRvIGNvbmZpZ3VyZSB0aGVzZSBYRlJNIHN0YXRlcyBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMsIGdlbmVyYWxseSwgdGhlIGNhc2UuIFllcCwganVzdCBjb25maXJtZWQgaXQuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfWEZSTWAgaXRzZWxmIGlzIGEgcHJlcmVxdWlzaXRlLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC94ZnJtL0tjb25maWdgIHRvIGJlIHN1cmUsIGJ1dCBteSBndXQgdGVsbHMgbWUgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjAtXHQgIG5vIGxvbmdlciBuZWVkIFBGX0tFWSBzb2NrZXRzLiBQbGVhc2UgdXNlIHRoZSBuZXRsaW5rXG5uZXQveGZybS9LY29uZmlnOjEyMTpcdCAgaW50ZXJmYWNlIChYRlJNX1VTRVIpIHRvIGNvbmZpZ3VyZSBJUHNlYy5cbm5ldC94ZnJtL0tjb25maWctMTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIHdlJiMzOTtyZSBtb2RpZnlpbmcgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIHRoYXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYC4gUmlnaHQsIHNvIGBJUFY2YCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IHRvby4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyYWwgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIFRoZXNlIHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyBmb3Igb3VyIGBGb2N1c1N5bWJvbHNgIGFwcHJvYWNoLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW4gdGhlIGhvdCBwYXRoOyB0aGV5IGFyZSBjYWxsZWQgcGVyaW9kaWNhbGx5LCBkZXBlbmRlbnQgb24gYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGJlY2F1c2UgYW55IHBlcmZvcm1hbmNlIGNvc3QgaXMgZ29pbmcgdG8gYmUgc21hbGwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIGZvciBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19YRlJNYCBpcyBmdW5kYW1lbnRhbC4gIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCB0byBhY3R1YWxseSBjb25maWd1cmUgaXQuICBPZiBjb3Vyc2UsIGBDT05GSUdfSVBWNmAgY29tZXMgaW50byBwbGF5IGZvciB0aGUgSVB2NiBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzE9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9pbml0KHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo0MjpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00My1cdFx0XHRcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDQtXHRjYXNlIEFGX0lORVQ6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDU6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlZXBhbGl2ZSBGdW5jdGlvbnMgZm9yIFN5bWJvbGljIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IsIEkgc3VzcGVjdCwgc29tZSBzb3J0IG9mIGNvZGUgYW5hbHlzaXMgb3Igc3ltYm9saWMgZXhlY3V0aW9uLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIE5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBzeW1ib2xzIGZvciB0aGUgYW5hbHlzaXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlbSBhbGwuCgpGaXJzdCwgYSBxdWljayBjaGVjay4uLmlzIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGEgc3RhdGljIGZ1bmN0aW9uPyBJdCBhcHBlYXJzIHRoYXQgaXQgaXMsIHllcy4gRXhjZWxsZW50LiBUaGlzIG1lYW5zIGl0IGlzbiYjMzk7dCBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBmaWxlcyBpbiBhIGdlbmVyaWMgd2F5LCBhbmQgc28gSSBzaG91bGQgYWRkIGl0IHRvIHRoZSBzeW1ib2xzIHRvIGJlIGFuYWx5emVkLCBzaW5jZSBpdCBpcyBhIGxpa2VseSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgaW5kZWVkIGluY2x1ZGU6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gCgpOZXh0LCBJIHNlZSBhIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcG90ZW50aWFsbHkgY29uc2lkZXIuIFRoZXNlIGluY2x1ZGUgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYW5kIGBJUFY2YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtYXkgYmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGVzZSBzZXR0aW5ncy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBuYXR1cmUgb2YgYENPTkZJR19YRlJNYC4gSXMgaXQgYSBib29sZWFuIG9yIGEgdHJpc3RhdGU/IFRoaXMgd2lsbCBhZmZlY3QgaG93IEkgbW9kZWwgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIHRvIGdldCBhIGRlZmluaXRlIGFuc3dlciBvbiB0aGF0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDAzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFhGUk1gIEJvb2xlYW4qKgoKT2theSwgc28gYFhGUk1gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBhIGJpbmFyeSBzdGF0ZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyBzZXQuIFRoZSBjb3JlIG9mIG15IGN1cnJlbnQgdGFzayBpcyBmaW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcXVlc3Rpb24gb2YgdW5kZXJzdGFuZGluZyB0aGUgKndoeSogYmVoaW5kIHRoaXMgYm9vbGVhbi4gV2hhdCBjb25kaXRpb25zLCBvdGhlciB2YXJpYWJsZXMsIG9yIGZ1bmN0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIHN0YXRlIG9mIGBYRlJNYD8gTGV0IG1lIHRyYWNlIHRoZSBjb2RlIGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGBYRlJNYCYjMzk7cyB2YWx1ZSBpcyBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBvdGhlciBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBib29sZWFuLCB3aGV0aGVyIHRoYXQmIzM5O3MgdGhyb3VnaCBkaXJlY3QgYXNzaWdubWVudCwgbG9naWNhbCBvcGVyYXRpb25zLCBvciBmdW5jdGlvbiBjYWxscyB0aGF0IG1hbmlwdWxhdGUgaXQgaW5kaXJlY3RseS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNTY6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU3LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzk2LVx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6Mzk3Olx0c2VsZWN0IFhGUk1fSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxubmV0L2lwdjYvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjQ5Olx0c2VsZWN0IFhGUk1fQUhcbm5ldC9pcHY2L0tjb25maWctNTAtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjY0Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTY1LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy04MS1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDQtXHRzZWxlY3QgSU5FVDZfWEZSTV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTA1Olx0c2VsZWN0IFhGUk1fSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwNi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTExMj1jb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjExNDpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE1My1cdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjE1NDpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxNjpcdHNlbGVjdCBYRlJNXG5uZXQveGZybS9LY29uZmlnLTE3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MjU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo4NjpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctODctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctOTYtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjEwODpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTA5LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjctXHRkZXBlbmRzIG9uIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWc6MTI4Olx0c2VsZWN0IFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWEZSTSBjb25maWd1cmF0aW9uIGZvciBOQVQga2VlcGFsaXZlLiBJdCBsb29rcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkg4oCTIGl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBicmluZyBpbiB0aGUgZW50aXJlIFhGUk0gZnJhbWV3b3JrLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3MgdG8gd29ycnkgYWJvdXQuIE9mIGNvdXJzZSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2LCBgSVBWNmAgaXMgYWxzbyBuZWNlc3NhcnkuIEJ1dCByZWFsbHksIGl0IHNlZW1zIGxpa2UgYFhGUk1fVVNFUmAgaXMgdGhlIGNvcmUgZGVwZW5kZW5jeSBoZXJlLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBlbmFibGUgZm9yIFhGUk0gdG8gd29yayBwcm9wZXJseT8gTm9wZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YC4gSSB3YW50IHRvIGVuc3VyZSB0aGVzZSBhcmUgcmVhY2hhYmxlLiBUaGV5IGFyZS4gVGhleSYjMzk7cmUgcmVhY2hlZCB2aWEgYG5hdF9rZWVwYWxpdmVfd29ya2Agd2hpY2ggaXMgc2NoZWR1bGVkIGJ5IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIEFoYSEgVGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBYRlJNIHN0YXRlIGlzIGFkZGVkIG9yIGRlbGV0ZWQuIENydWNpYWxseSwgdGhlIFhGUk0gc3RhdGUgbmVlZHMgdG8gaGF2ZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgc2V0LiBUaGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUgYFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxgIGF0dHJpYnV0ZSBpbiBlaXRoZXIgYFhGUk1fTVNHX05FV1NBYCBvciBgWEZSTV9NU0dfVVBEU0FgLiBGYW50YXN0aWMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBhbGwgaG9va2VkIHVwIQoKQWxyaWdodCwgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBYRlJNX1VTRVJgCiogICBgSVBWNmAKCkkmIzM5O20ga2VlcGluZyB0aGVzZSBzeW1ib2xzIGluIG1pbmQgYXMga2V5IHRvIHRyYWNrOgoKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRgCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciBOQVQga2VlcGFsaXZlLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB1c2VzIHN0YW5kYXJkIG5ldHdvcmsgZnVuY3Rpb25zIGxpa2UgYHVkcF9oZHJgIGFuZCBgaXBfcm91dGVfb3V0cHV0X2tleWAsIG5vdGhpbmcgc3BlY2lhbGl6ZWQgdGhlcmUuIFNvLCBub3RoaW5nIGVsc2UgdG8gYWN0aXZhdGUsIHRoYXQgaXMgcmVhc3N1cmluZy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGEgYENPTkZJR19YRlJNX05BVGAgb3IgYSBzaW1pbGFyIGxvb2tpbmcgb25lLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9OQVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRlJNIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiBhbmQgdGhlIGFic2VuY2Ugb2YgYFhGUk1fTkFUYCBpcyB0aHJvd2luZyBhIHdyZW5jaCBpbiB0aGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCBgQ09ORklHX1hGUk1fVVNFUmAuIEkgbWVhbiwgdGhhdCB1c3VhbGx5IGdpdmVzIHVzIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3MgdG8gY29uZmlndXJlIFhGUk0gc3RhdGVzLCByaWdodD8gQWxyaWdodCwgeWVzLCBjb25maXJtaW5nIHRoYXQgYFhGUk1fVVNFUmAgaXMgc3VmZmljaWVudCBmb3IgY29uZmlndXJpbmcgdGhlIGNvcmUgWEZSTSBzdGF0ZXMgaXMgYSByZWxpZWYuCgpOb3csIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIEVTUCBzdGF0ZXMuIERvZXMgaXQgcmVxdWlyZSBgQ09ORklHX1hGUk1fRVNQYCBvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfSU5FVF9FU1BgPyBUaGUgYG5hdF9rZWVwYWxpdmVfd29ya2AgZnVuY3Rpb24gd2Fsa3MgYElQUFJPVE9fRVNQYCBzdGF0ZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gRVNQIHN0YXRlcywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIGB4ZnJtX3N0YXRlX3dhbGtfaW5pdCgmYW1wO3dhbGssIElQUFJPVE9fRVNQLCBOVUxMKWAuIFNvLCB0aGUgcXVlc3Rpb24gcmVtYWluczogZG8gd2UgKm5lZWQqIGBJTkVUX0VTUGAgYXMgd2VsbD8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoYXQgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX0VTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzcxOlx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNzItXHRzZWxlY3QgWEZSTV9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozODQ6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgRVNQIFN0YXRlIENyZWF0aW9uIGFuZCBNZW1vcnkgTGVha3MgaW4gTkFUIEtlZXBhbGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyBFU1Agc3RhdGVzIGNvcnJlY3RseS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcmUgdGhlIHR5cGljYWwgaW5ncmVkaWVudHMgZm9yIGNyZWF0aW5nIEVTUCBzdGF0ZXMuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5hZ3MsIGNhbiB3ZSBzaWRlc3RlcCB0aGlzIGFuZCBjcmVhdGUgYW4gRVNQIHN0YXRlIHdpdGhvdXQgYElORVRfRVNQYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSBhIHllcyDigJMgd2UgY2FuIGNyZWF0ZSB0aGUgYHhmcm1fc3RhdGVgIHdpdGggYElQUFJPVE9fRVNQYCBldmVuIHdpdGhvdXQgYSByZWdpc3RlcmVkIHByb3RvY29sIGhhbmRsZXIuIEhvd2V2ZXIsIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBmdWxseSBmdW5jdGlvbmFsIHdpdGhvdXQgYElORVRfRVNQYC4gVG8gYmUgY29tcGxldGVseSBzYWZlIGFuZCBjb3JyZWN0LCBJIHNob3VsZCBpbmNsdWRlIGBJTkVUX0VTUGAgYW5kIGBJTkVUNl9FU1BgLiBHb29kLCBpdCBsb29rcyBsaWtlIGBJTkVUX0VTUGAgaXMgYSB0cmlzdGF0ZSwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBMZXQgbWUgYWRkIGJvdGggdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgcGF0Y2guIEFoLCBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhlIGBza2JgIGlzIGFsbG9jYXRlZCBpbiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBhbmQgcGFzc2VkIGRvd24gdG8gdGhlIGBpcHY0YCBhbmQgYGlwdjZgIHNlbmQgZnVuY3Rpb25zLiBQcmV2aW91c2x5LCBpZiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIHJldHVybmVkIGFuIGVycm9yLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIHNldCBhbmQgdGhlbiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCBmcmVlIGBza2JgLiBIb2xkIG9uLi4uIHdoYXQgaWYgdGhlIGVycm9yIGhhcHBlbmVkICphZnRlciogdGhlIGBza2JgIHdhcyBwb3RlbnRpYWxseSB1c2VkIG9yIGNvbnN1bWVkPyBJJiMzOTttIGdldHRpbmcgYSBsaXR0bGUgYWhlYWQgb2YgbXlzZWxmLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgKmRvZXMqIGZyZWUgYHNrYmAgaWYgYW4gZXJyb3Igb2NjdXJzLgpgYGBjCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAga2EtJmd0O2VuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7CiAKIAlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmYW1wO2ZsNCk7Ci0JaWYgKElTX0VSUihydCkpCiYjNDM7CWlmIChJU19FUlIocnQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIFBUUl9FUlIocnQpOwomIzQzOwl9CiAKIAlza2JfZHN0X3NldChza2IsICZhbXA7cnQtJmd0O2RzdCk7CiAKQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3cobmV0LCBzaywgJmFtcDtmbDYsIE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkgewogCQlsb2NhbF91bmxvY2tfbmVzdGVkX2JoKCZhbXA7bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBQVFJfRVJSKGRzdCk7CiAJfQogCkBAIC0xMTgsNyAmIzQzOzEyMSw2IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXB2NmhkcikpICYjNDM7CiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAljb25zdCB1OCBuYXRfa2FfcGF5bG9hZCA9IDB4RkY7Ci0JaW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIApAQCAtMTQwLDE2ICYjNDM7MTQyLDE3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAKIAlzd2l0Y2ggKGthLSZndDtmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCWVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7CiAJCWJyZWFrOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJY2FzZSBBRl9JTkVUNjoKLQkJZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwogCQlicmVhazsKICNlbmRpZgotCX0KLQlpZiAoZXJyKQomIzQzOwlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiBgYGAKWWVwLCBsb29rcyBsaWtlIGl0LiBga2ZyZWVfc2tiYCBpcyBub3cgY2FsbGVkIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHdoZW4gYSByb3V0aW5nIGVycm9yIG9jY3Vycy4gVGhpcyByZXNvbHZlcyB0aGUgbWVtb3J5IGxlYWsgYnkgZW5zdXJpbmcgdGhlIGBza2JgIGlzIGFsd2F5cyBmcmVlZCBpbiBjYXNlIG9mIGZhaWx1cmUgd2l0aGluIHRoZSBgKl9zZW5kYCBmdW5jdGlvbnMuIExvb2tzIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQyOlx0c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA0MzpcdFx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuICA0NDpcdHtcbiAgNDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGthLVx1MDAzZW5ldDtcbiAgNDY6XHRcdHN0cnVjdCBmbG93aTQgZmw0O1xuICA0NzpcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gIDQ4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gIDQ5Olx0XHRfX3U4IHRvcyA9IDA7XG4gIDUwOlx0XHRpbnQgZXJyO1xuICA1MTpcdFxuICA1MjpcdFx0Zmxvd2k0X2luaXRfb3V0cHV0KFx1MDAyNmZsNCwgMCAvKiBvaWYgKi8sIHNrYi1cdTAwM2VtYXJrLCB0b3MsXG4gIDUzOlx0XHRcdFx0ICAgUlRfU0NPUEVfVU5JVkVSU0UsIElQUFJPVE9fVURQLCAwLFxuICA1NDpcdFx0XHRcdCAgIGthLVx1MDAzZWRhZGRyLmE0LCBrYS1cdTAwM2VzYWRkci5hNCwga2EtXHUwMDNlZW5jYXBfZHBvcnQsXG4gIDU1Olx0XHRcdFx0ICAga2EtXHUwMDNlZW5jYXBfc3BvcnQsIHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpKTtcbiAgNTY6XHRcbiAgNTc6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG4gIDU4Olx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuICA1OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNjA6XHRcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuICA2MTpcdFx0fVxuICA2MjpcdFxuICA2MzpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA2NDpcdFxuICA2NTpcdFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY0LmJoX2xvY2spO1xuICA2NjpcdFx0c2sgPSB0aGlzX2NwdV9yZWFkKG5hdF9rZWVwYWxpdmVfc2tfaXB2NC5zb2NrKTtcbiAgNjc6XHRcdHNvY2tfbmV0X3NldChzaywgbmV0KTtcbiAgNjg6XHRcdGVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgTlVMTCwgdG9zKTtcbiAgNjk6XHRcdHNvY2tfbmV0X3NldChzaywgXHUwMDI2aW5pdF9uZXQpO1xuICA3MDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjQuYmhfbG9jayk7XG4gIDcxOlx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI5NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEb3VibGUgRnJlZSBWdWxuZXJhYmlsaXR5IGluIE5BVCBLZWVwYWxpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgaXMgY29uc3VtaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb24gZXJyb3IsIHdoaWNoIGlzIGtleS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldCB1cCBzdWNoIHRoYXQgaWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbGVkLCBhbiBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBjYWxsIGNoYWluLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCB0aGVuIGZyZWUgdGhlIGBza2JgLiBIb3dldmVyLCBpZiBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBpdHNlbGYgZmFpbGVkLCBpdCBhbHJlYWR5IGZyZWVkIHRoZSBgc2tiYCwgbGVhZGluZyB0byBhIGNsYXNzaWMgZG91YmxlLWZyZWUgc2NlbmFyaW8hCgpFc3NlbnRpYWxseSwgdGhlcmUgYXJlIHR3byBkaXN0aW5jdCBmYWlsdXJlIHBhdGhzIHdlIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBmaXJzdCBpbnZvbHZlcyByb3V0aW5nIGZhaWx1cmVzIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGBza2JgICp3YXNuJiMzOTt0KiBjb25zdW1lZCwgYW5kIHRoZSBzZWNvbmQgaW52b2x2ZXMgYWN0dWFsIHRyYW5zbWlzc2lvbiBmYWlsdXJlcyB3aGVyZSB0aGUgYHNrYmAgKndhcyogY29uc3VtZWQsIGJ1dCB0aGUgdHJhbnNtaXNzaW9uIGZhaWxlZC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFuZGxlcyByb3V0aW5nIGZhaWx1cmVzIGNvcnJlY3RseSwgYnV0IGl04oCZcyB0aGUgdHJhbnNtaXNzaW9uIGZhaWx1cmUgY2FzZSB3aGVyZSBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBjYXVzZXMgdGhlIHByb2JsZW0uCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSBieSBjaGFuZ2luZyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MuIE5vdywgdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYHNrYmAgb24gZXJyb3IsICpvbmx5KiBpZiB0aGUgaW5pdGlhbCByb3V0aW5nIG9wZXJhdGlvbiBmYWlscy4gSWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbHMsIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBub3cgKm9ubHkqIGZyZWVzIGluIHRoZSBkZWZhdWx0LCBvciBzdWNjZXNzZnVsLCBjYXNlLiBUaGlzIGVuc3VyZXMgdGhlIGBza2JgIGlzIG9ubHkgZnJlZWQgb25jZSwgcmVnYXJkbGVzcyBvZiB0aGUgZmFpbHVyZSBwb2ludC4KClRoaXMgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBmaXguIEEgZG91YmxlIGZyZWUgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGV4cGxvaXRhdGlvbiwgYW5kIEkgYmVsaWV2ZSB0aGlzIGRlc2VydmVzIGltbWVkaWF0ZSBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuCgpNeSBjb25maWdzIGluY2x1ZGUgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBgSU5FVF9FU1BgIGVuYWJsZXMgYFhGUk1gIGZ1bmN0aW9uYWxpdHksIGFuZCBgWEZSTV9VU0VSYCBpcyBuZWVkZWQgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzLiBPa2F5LCBhbGwgY2hlY2tzIG91dCwgYW5kIHRoZXNlIGFyZSBhbGwgY29ycmVjdCBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGlzIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlIGJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX2luaXQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjQyOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzU6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cdGNhc2UgQUZfSU5FVDpcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXHRcdGJyZWFrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDk6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1MC1cdFx0YnJlYWs7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkyLVx0aWYgKHNlbmRfa2VlcGFsaXZlKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTkzOlx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlhGUk0gU3RhdGUgQ29uZmlndXJhdGlvbjogRXhwbG9yaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB3ZSYjMzk7cmUgY29uZmlndXJpbmcgWEZSTSBzdGF0ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYW0gSSBvdmVybG9va2luZyBhbnl0aGluZz8gSXMgYFhGUk1fVVNFUmAgdGhlICpvbmx5KiB3YXkgdG8gY29uZmlndXJlIHRoZXNlIHN0YXRlcz8gSSBrbm93IGl0JiMzOTtzIHRoZSBjb250ZW1wb3JhcnkgTmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdCYjMzk7cyB3aGF0IHdlJiMzOTt2ZSBwcmltYXJpbHkgYmVlbiB1c2luZy4KCkJ1dCwgaGFuZyBvbiwgdGhlcmUmIzM5O3MgYWxzbyBgTkVUX0tFWWAsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBQRl9LRVkgc29ja2V0IG1ldGhvZC4gSXQmIzM5O3Mgb2xkZXIsIGFyZ3VhYmx5IGxlc3MgZWxlZ2FudCwgYnV0IGl0JiMzOTtzIHN0aWxsIG91dCB0aGVyZS4gR2l2ZW4gdGhhdCB3ZSBoYXZlIGFuIGFjdGl2ZSBkaXNjdXNzaW9uIG9uIGl0LCBpdCBtaWdodCBiZSBiZW5lZmljaWFsIHRvIHN1cHBvcnQgaXQganVzdCB0byBjb3ZlciBvdXIgYmFzZXMuIFdoaWxlIGBYRlJNX1VTRVJgIGlzIHRoZSBwcmVmZXJyZWQgYW5kIG1vZGVybiBhcHByb2FjaCwgc3VwcG9ydGluZyBgTkVUX0tFWWAgY291bGQgcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9yIGFkZHJlc3MgbmljaGUgdXNlIGNhc2VzLiBJIHRoaW5rIHdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgYE5FVF9LRVlgIHN1cHBvcnQgYXMgd2VsbC4gSXTigJlzIGFuIG9wdGlvbiB0byBicm9hZGVuIGNvbXBhdGliaWxpdHkgYW5kIGZsZXhpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfS0VZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcbi0tXG5uZXQveGZybS9LY29uZmlnLTExMS1cbm5ldC94ZnJtL0tjb25maWc6MTEyOmNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTI0LVxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O1BGX0tFWSBNSUdSQVRFXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjEyNzpcdGRlcGVuZHMgb24gTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXHRzZWxlY3QgWEZSTV9NSUdSQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIFhGUk0gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBgTkVUX0tFWWAgaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkLiBNYWtlcyBzZW5zZTsgYFhGUk1fVVNFUmAgaGFzIGJlZW4gdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIGEgd2hpbGUgbm93LiBJdCYjMzk7cyB0aW1lIHRvIGZ1bGx5IHRyYW5zaXRpb24gYW5kIHN0YXJ0IHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBtb3JlIG1vZGVybiBmcmFtZXdvcmsuCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGluIG9yZGVyLiBXZSYjMzk7dmUgZ290IGBYRlJNX1VTRVJgLi4uIGJ1dCBkb2VzIGBYRlJNX05BVGAgc3RpbGwgZXhpc3Q/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBsZXQgbWUgcG9rZSBhcm91bmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCAqbmV0L2lwdjQvS2NvbmZpZyogaW4gcGFydGljdWxhci4gTmVlZCB0byBjb25maXJtIGlmIGl04oCZcyBzdGlsbCBpbiB0aGUgbWl4LCBhbmQgaG93IGl04oCZcyBkZWZpbmVkIG5vdywgaWYgYXQgYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMga2V5IHRvIGVuc3VyaW5nIHByb3BlciBoYW5kbGluZyBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgbGF0ZXN0IGFkdmFuY2VtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX05BVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDb25maWd1cmF0aW9uKioKCk5vcGUuIFRoYXQgaW5pdGlhbCBsaW5lIG9mIGlucXVpcnkganVzdCBkaWRuJiMzOTt0IHBhbiBvdXQsIGRpZG4mIzM5O3QgaXQ/IE9rYXksIGJhY2sgdG8gYmFzaWNzLiBJZiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHRoZSBtb3N0IGxpa2VseSBwb2ludHMgb2YgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHRoZSBgWEZSTWAgc2V0dGluZ3MgaWYgSSYjMzk7bSBoYXZpbmcgaXNzdWVzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBvdmVyc2lnaHRzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNTY6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU3LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6Mzg0Olx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozOTY6XHRzZWxlY3QgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozOTc6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9NDA0PWNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkyCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGhlcmUuIEl0IGxvb2tzIGxpa2UgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYXJlIHRoZSBrZXkgZHJpdmVycyBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LCBhcyBleHBlY3RlZCBpbiBYRlJNLgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTt2ZSBmb3VuZCwgY29uY2lzZWx5OgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCB0aGUgaWRlbnRpZmllZCBjb2RlIHBhdGhzIGhhdmUgZXhwbG9pdGFibGUgcG90ZW50aWFsLgoqICAgKipGb2N1c1N5bWJvbHM6KiogU3BlY2lmaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyaWMgYG5hdF9rZWVwYWxpdmVfc2VuZGAgYXJlIHRoZSBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBkaXNjb3ZlcmVkIGVycm9yIGhhbmRsaW5nLgoqICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gYnVpbGQgd2l0aCBgWEZSTV9VU0VSYCwgYElORVRfRVNQYCwgYElORVQ2X0VTUGAsIGFuZCBgSVBWNmAgY29uZmlndXJlZC4gYFhGUk1fVVNFUmAgaXMgY3J1Y2lhbCBmb3IgYWxsb3dpbmcgdXNlcnNwYWNlIGludGVyYWN0aW9uLCB3aGlsZSB0aGUgRVNQIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgdnVsbmVyYWJsZSBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uYWxpdHksIGFuZCBJUHY2IGlzIGltcGxpY2F0ZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGlzIGEgZG91YmxlIGZyZWUgaXNzdWUuIFJvdXRpbmcgZmFpbHVyZXMgd2l0aGluIHRoZSBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHBhdGhzIGluY29ycmVjdGx5IHJlbGVhc2UgYW4gYHNrYmAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gWEZSTS4gVGhpcyBtZWFucyBpdCYjMzk7cyBub3QganVzdCBhIHB1cmVseSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgZXJyb3I7IHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LCB3aGVuIG1pc2NvbmZpZ3VyZWQsIGNhbiBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLiBUaGlzIHVzZXJzcGFjZSByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSB0aGUgYWJpbGl0eSB0byBzZXQgWEZSTSBzdGF0ZSB3aXRoIGEga2VlcGFsaXZlIGludGVydmFsLCBjb25maXJtcyB0aGUgZXhwbG9pdGFiaWxpdHkgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQmIzM0OywKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYmIzM0OywKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgb2YgYW4gc2tiIGluIHRoZSBlcnJvciBwYXRoIG9mIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0IGFuZCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NiB3aGVuIHJvdXRpbmcgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBhbiBYRlJNIHN0YXRlIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjM6MzIuNjcxNzU1OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MjM5MDUyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjM6MzIuNjcxNzY1NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ3MjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MjU1NmM1ODMwMzBhMjFmZjNlYWU2MjBlMzgyNDU4ZmUxZTU2YzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6MjM6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbmluZGV4IDQ1ODkzMTA2MmEwNGVmLi5lYjFiNmY2NzczOWUxZCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuQEAgLTU1LDggKzU1LDEwIEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAga2EtXFx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XFxuIFxcbiBcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcXHUwMDI2Zmw0KTtcXG4tXFx0aWYgKElTX0VSUihydCkpXFxuK1xcdGlmIChJU19FUlIocnQpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuK1xcdH1cXG4gXFxuIFxcdHNrYl9kc3Rfc2V0KHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXG5AQCAtMTAxLDYgKzEwMyw3IEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhuZXQsIHNrLCBcXHUwMDI2Zmw2LCBOVUxMKTtcXG4gXFx0aWYgKElTX0VSUihkc3QpKSB7XFxuIFxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNm5hdF9rZWVwYWxpdmVfc2tfaXB2Ni5iaF9sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuIFxcdH1cXG4gXFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbiBcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuIFxcdGNvbnN0IHU4IG5hdF9rYV9wYXlsb2FkID0gMHhGRjtcXG4tXFx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCB1ZHBoZHIgKnVoO1xcbiBcXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gXFxuIFxcdHN3aXRjaCAoa2EtXFx1MDAzZWZhbWlseSkge1xcbiBcXHRjYXNlIEFGX0lORVQ6XFxuLVxcdFxcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbitcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcXG4gXFx0XFx0YnJlYWs7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRjYXNlIEFGX0lORVQ2Olxcbi1cXHRcXHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxuK1xcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcXG4gXFx0XFx0YnJlYWs7XFxuICNlbmRpZlxcbi1cXHR9XFxuLVxcdGlmIChlcnIpXFxuK1xcdGRlZmF1bHQ6XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjMzLjI2MDQxMTYyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTM1MjMwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NlwiLFxuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBvZiBhbiBza2IgaW4gdGhlIGVycm9yIHBhdGggb2YgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQgYW5kIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2IHdoZW4gcm91dGluZyBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBYRlJNIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIGFuIFhGUk0gc3RhdGUgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjcyNTU2YzU4MzAzMGEyMWZmM2VhZTYyMGUzODI0NThmZTFlNTZjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjIzOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggNDU4OTMxMDYyYTA0ZWYuLmViMWI2ZjY3NzM5ZTFkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4rXHRpZiAoSVNfRVJSKHJ0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICsxMDMsNyBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KG5ldCwgc2ssIFx1MDAyNmZsNiwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpIHtcbiBcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjYuYmhfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkc3QpO1xuIFx0fVxuIFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0Y29uc3QgdTggbmF0X2thX3BheWxvYWQgPSAweEZGO1xuLVx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4gXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcbiBcdHN3aXRjaCAoa2EtXHUwMDNlZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4tXHRcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xuK1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4rXHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbiBcdFx0YnJlYWs7XG4gI2VuZGlmXG4tXHR9XG4tXHRpZiAoZXJyKVxuK1x0ZGVmYXVsdDpcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzozMy4yNjA0MTQyNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE3NzAzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBYRlJNIE5BVCBLZWVwYWxpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBtZW1vcnkgbGVhayB3aXRoIGBza2JgIGluIHRoZSBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIGZ1bmN0aW9ucy4gQXBwYXJlbnRseSwgdGhpcyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcm91dGluZyBmYWlscy4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGBuYXRfa2VlcGFsaXZlX3NlbmRgIOKAkyBtb3ZpbmcgYXdheSBmcm9tIHVzaW5nIGBlcnJgIGFuZCBjZW50cmFsaXppbmcgYHNrYmAgZnJlZWluZyBpbiB0aGUgYGRlZmF1bHRgIGNhc2UsIHdoaWxlIGFsbG93aW5nIHRoZSBJUHY0IGFuZCBJUHY2IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBoYW5kbGUgaXQgaWYgdGhleSBlbmNvdW50ZXIgYW4gZXJyb3IuIFRoaXMgaXMgZ29vZDsgdGlkeWluZyB1cCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYSBwbHVzLCBhbmQgc2hvdWxkIHNpbXBsaWZ5IGRlYnVnZ2luZyBkb3duIHRoZSByb2FkLlxuXG5JIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgY2hhbmdlcy4gRmlyc3QsIEnigJlsbCBvcGVuIHVwIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXRzZWxmIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBzZWUgaG93IHRoZSBleGlzdGluZyBjb2RlIGZ1bmN0aW9ucywgYW5kIHVuZGVyc3RhbmQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGVzLiBUaGVuLCBzaW5jZSB0aGlzIGlzIFhGUk0tcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IHNlYXJjaCB0aHJvdWdoIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIGFuZCBgbmV0L3hmcm0vS2NvbmZpZ2AgZm9yIGBDT05GSUdfWEZSTWAgb3IgYW55dGhpbmcgc2ltaWxhciB0byBjb25maXJtIHdoYXQgWEZSTSBmZWF0dXJlcyBhcmUgaW4gdXNlIG9yIG5lZWRlZCBmb3IgdGhpcyBtb2R1bGUsIGFuZCBob3cgdGhlIGNoYW5nZXMgbWlnaHQgYWZmZWN0IHRob3NlLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBkZXBlbmRpbmcgb24gYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzozOC4yNzgxMTk0MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDEwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNzpcXHRcXHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xcbm5ldC94ZnJtL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19YRlJNX1NUQVRJU1RJQ1MpICs9IHhmcm1fcHJvYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjM4LjM3MzYyOTQ3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTg2Nzk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19YRlJNYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIE5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dCB0aGF0IG1pZ2h0IGFsc28gbmVlZCBvdXIgYXR0ZW50aW9uLiBCYXNlZCBvbiB0aGUgY2hhbmdlcywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGJhc2UgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZnVuY3Rpb24gaXRzZWxmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIGxpa2VseSBjb3JlIGNvbXBvbmVudHMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHN1cmUgb2YgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcHMgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYW5kIHBvc3NpYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbkl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAgLSBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWUuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGBuYXRfa2VlcGFsaXZlX3NlbmRgLCBsZXQncyBmb2N1cyBvdXIgYXR0ZW50aW9uIHRoZXJlIGZvciBub3cgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjQyLjA3MjMxMTczOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUwNDYyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMxPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfaW5pdChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NDI6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjc1OnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTQ1OlxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0OTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTUwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTItXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MzpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjQyLjE4NzM2NTEzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzczNzAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQVQgS2VlcGFsaXZlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCwgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRgLiBUaGV5J3JlIGFsbCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkncmUgaW50ZXJuYWwgdG8gYSBtb2R1bGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBXaGVyZSBkb2VzIHRoZSB3b3JrIGFjdHVhbGx5ICpzdGFydCo/XG5cbkFoLCByaWdodCwgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgLiBUaGF0J3MgbGlrZWx5IHRoZSBvbmUuIEFuZCBnaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGEgc2luZ2xlIHVuaXQgb2Ygd29yay4gTXkgZ3V0IHNheXMgdGhhdCBpdCdzIHByb2JhYmx5IGdldHRpbmcgY2FsbGVkIGZyb20gZWl0aGVyIGEgd29ya3F1ZXVlIG9yIGEgdGltZXIsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgYXN5bmNocm9ub3VzIHRhc2tzIGxpa2UgdGhlc2UuXG5cblRvIGNvbmZpcm0gYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgSSBzaG91bGQgZGVmaW5pdGVseSBqdW1wIG92ZXIgdG8gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBob3cgdGhpcyBhbGwgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBYRlJNIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0NS43NjQ3Mzg0MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxNTE5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xNTg9c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTYyLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NC17XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yMDA9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcXHR4ZnJtX3N0YXRlX3dhbGsobmV0LCBcXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEyLVxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0NS44NjE4OTgyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMjAzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgV29ya3F1ZXVlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5hdF9rZWVwYWxpdmVfd29ya2Agd29ya3F1ZXVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgdGhlIHNjaGVkdWxpbmcgbWVjaGFuaXNtIGhlcmU/IEhvdyBkb2VzIHRoaXMgdGhpbmcgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSBgbmF0X2tlZXBhbGl2ZV93b3JrYCB0byBleGVjdXRlLiBLbm93aW5nIHRoZSBzY2hlZHVsaW5nIHBhdGggaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIE5BVCBzeXN0ZW0uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgaG93IGl0J3MgZW5xdWV1ZWQgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IHJ1bnMuIEFyZSB3ZSB0YWxraW5nIHRpbWVycywgaW50ZXJydXB0cywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBtZXRob2Qgb2Ygc2NoZWR1bGluZyB3aWxsIHRlbGwgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHVyZ2VuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0OC45MjIxMDQzOTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk3MTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTktXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjItXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTYzOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY0LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjU6XFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjYtXFx0Ym9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk5LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwMDpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIwMS17XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAyOlxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMDMtXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjA4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwOTpcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEwLVxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjExOlxcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCBcXHUwMDI2Y3R4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEzLVxcdGlmIChjdHgubmV4dF9ydW4pXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjE0OlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTUtXFx0XFx0XFx0XFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQ4PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTUtXFx0bmV0ID0geHNfbmV0KHgpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI1NjpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Ny19XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNTk9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjAte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI2MTpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjItXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNjU9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY2LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNjc6XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY4LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0OS4wMzcxNTQxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMzgwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOQVQgS2VlcGFsaXZlIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgdGhlIHRyaWdnZXIgZm9yIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTdGF0ZSB1cGRhdGVzIGtpY2sgb2ZmIHRoZSBrZWVwYWxpdmUgcHJvY2Vzcy5cIiBCdXQgbm93IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCouIFdoZXJlIGV4YWN0bHkgaXMgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBiZWluZyBjYWxsZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyB0aGlzIGtlZXBhbGl2ZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Mi4wOTc1MzkxMTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDgyODQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQwPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ3LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0ODp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODExPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzMi1cXHRcXHRuZXQtXFx1MDAzZXhmcm0uc3RhdGVfbnVtLS07XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgzMzpcXHRcXHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODM0LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNzE1PXN0YXRpYyB2b2lkIF9feGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc1OS1cXHR4ZnJtX2hhc2hfZ3Jvd19jaGVjayhuZXQsIHgtXFx1MDAzZWJ5ZHN0Lm5leHQgIT0gTlVMTCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE3NjA6XFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Mi4yMDIzNzcxNjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTgwNzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTkFUIEtlZXBhbGl2ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBmdW5jdGlvbiBpcyB0aGUga2V5IHRyaWdnZXIgaGVyZS4gSXQncyBjYWxsZWQgZXZlcnkgdGltZSBhbiB4ZnJtIHN0YXRl4oCUZWl0aGVyIGEgbmV3IG9uZSBpcyBhZGRlZCBvciBhbiBleGlzdGluZyBvbmUgcmVtb3ZlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbnkgY2hhbmdlIGluIHRoZSBzdGF0ZSB0YWJsZSBuZWNlc3NpdGF0ZXMgYSBjaGVjayBvbiB3aGV0aGVyIE5BVCBrZWVwYWxpdmVzIGFyZSBuZWVkZWQuIFRoaXMgdGhlbiBzY2hlZHVsZXMgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGlzIGEgd29yayBxdWV1ZSBpdGVtLiBJJ20gZ3Vlc3NpbmcgdGhpcyB3b3JrIGl0ZW0ncyBwdXJwb3NlIGlzIHRvIGl0ZXJhdGUgb3ZlciAqYWxsKiBleGlzdGluZyB4ZnJtIHN0YXRlcy4gQW5kIHdpdGhpbiB0aGF0IGxvb3AsIGl0IGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBmb3IgZWFjaCBzdGF0ZS5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIHByb2Nlc3Mgc2VlbXMgdG8gbGllIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gd2hlbiBgc2VuZF9rZWVwYWxpdmVgIGlzIHNldCB0byB0cnVlIGJlY2F1c2UgKnRoYXQqIGRlY2lkZXMgd2hldGhlciB3ZSBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCBvciBub3QuIFRoZSBmdW5jdGlvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdGhlbiBjYWxscyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgd2hpY2ggZGlzcGF0Y2hlcyB0byBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIG9yIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGBzZW5kX2tlZXBhbGl2ZWAuIEkgbmVlZCB0byBkaWcgaW50byBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBrZWVwYWxpdmUgaXMgYWN0dWFsbHkgc2VudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBsb2dpYyB0byBldmFsdWF0ZSB3aGV0aGVyIG9yIG5vdCBrZWVwYWxpdmUgcGFja2V0cyBhcmUgdG8gYmUgc2VudCBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjU2LjU1MjE4Nzc3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTA2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbmRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY1LVxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTY2OlxcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjctXFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXFx0XFx0bmF0X2tlZXBhbGl2ZV9pbml0KFxcdTAwMjZrYSwgeCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg3OlxcdFxcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODgtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkxLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MjpcXHRpZiAoc2VuZF9rZWVwYWxpdmUpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkzLVxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZChcXHUwMDI2a2EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Ni42NjYxMDA2MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwOTIxNzg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIGZ1bmN0aW9uLiBJIHNlZSB0aGlzIGFzIHRoZSBjb3JlIG9mIHRoZSBrZWVwYWxpdmUgbWVjaGFuaXNtLCB0aGUgdW5pdCBvZiB3b3JrIHRoYXQga2VlcHMgb3VyIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBzZXNzaW9ucyBhbGl2ZS4gSeKAmW0gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgZW5zdXJpbmcgdGhvc2UgYmluZGluZ3MgZG9u4oCZdCB0aW1lIG91dCwgbWFraW5nIHN1cmUgdHJhZmZpYyBjb250aW51ZXMgdG8gZmxvdyBzbW9vdGhseSB0aHJvdWdoIHRoZSBOQVQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBOQVQgdGFibGVzIG9yIGNvbnRleHRzIOKAkyBpcyB0aGlzIGEgc2hhcmVkIHJlc291cmNlIHNjZW5hcmlvIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtPyBPciBkb2VzIGVhY2ggTkFUIGtlZXAgdHJhY2sgb2YgaXRzIG93bj8gVGhlIGRldmls4oCZcyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB0aGF04oCZcyB3aGVyZSBhbGwgdGhlIGJ1Z3MgdGVuZCB0byBoaWRlIGFuZCB0aGF0IGlzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDAuMDc1MzIxMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYzOlxcdHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuIDE2NDpcXHR7XFxuIDE2NTpcXHRcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xcbiAxNjY6XFx0XFx0Ym9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlO1xcbiAxNjc6XFx0XFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuIDE2ODpcXHRcXHR0aW1lNjRfdCBuZXh0X3J1bjtcXG4gMTY5OlxcdFxcdHUzMiBpbnRlcnZhbDtcXG4gMTcwOlxcdFxcdGludCBkZWx0YTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aW50ZXJ2YWwgPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbiAxNzM6XFx0XFx0aWYgKCFpbnRlcnZhbClcXG4gMTc0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRkZWx0YSA9IChpbnQpKGN0eC1cXHUwMDNlbm93IC0geC1cXHUwMDNlbGFzdHVzZWQpO1xcbiAxNzk6XFx0XFx0aWYgKGRlbHRhIFxcdTAwM2MgaW50ZXJ2YWwpIHtcXG4gMTgwOlxcdFxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfZXhwaXJhdGlvbiA9IGN0eC1cXHUwMDNlbm93ICsgaW50ZXJ2YWwgLSBkZWx0YTtcXG4gMTgxOlxcdFxcdFxcdG5leHRfcnVuID0geC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xcbiAxODI6XFx0XFx0fSBlbHNlIGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2V4cGlyYXRpb24gXFx1MDAzZSBjdHgtXFx1MDAzZW5vdykge1xcbiAxODM6XFx0XFx0XFx0bmV4dF9ydW4gPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2V4cGlyYXRpb247XFxuIDE4NDpcXHRcXHR9IGVsc2Uge1xcbiAxODU6XFx0XFx0XFx0bmV4dF9ydW4gPSBjdHgtXFx1MDAzZW5vdyArIGludGVydmFsO1xcbiAxODY6XFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV9pbml0KFxcdTAwMjZrYSwgeCk7XFxuIDE4NzpcXHRcXHRcXHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbiAxOTM6XFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFxcdTAwMjZrYSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGlmICghY3R4LVxcdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcXHUwMDNjIGN0eC1cXHUwMDNlbmV4dF9ydW4pXFxuIDE5NjpcXHRcXHRcXHRjdHgtXFx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XFxuIDE5NzpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDAuMDc1NDExNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDYzOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaW4gWEZSTSBTdGF0ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gVGhlIGNvZGUncyBjbGVhcmx5IGV4cGVjdGluZyB0aGlzIHZhbHVlIHRvIGJlIG5vbi16ZXJvIGF0IHNvbWUgcG9pbnQsIGFuZCBteSBleHBlcmllbmNlIHNheXMgdGhhdCBpdCdzIHByb2JhYmx5IHNldCBkdXJpbmcgdGhlIFhGUk0gc3RhdGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBNYWtlcyBzZW5zZTsgTkFUIGtlZXBhbGl2ZXMgd291bGQgYmUgY29uZmlndXJlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGF0ZS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSdsbCBzdGFydCB3aXRoIGEgY29kZSBzZWFyY2gsIGxvb2tpbmcgZm9yIGFzc2lnbm1lbnRzIHRvIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMDUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjAzLjQ5MDA1NDYyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MjYzMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTcxLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MjpcXHRpbnRlcnZhbCA9IHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTczLVxcdGlmICghaW50ZXJ2YWwpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1MS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTI6XFx0aWYgKCF4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1My1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2NDI9c3RhdGljIHZvaWQgeGZybV9taWdyYXRlX2NvcHlfb2xkKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ3LVxcdG1wLVxcdTAwM2VuZXdfcmVxaWQgICAgICAgICAgICAgID0geC1cXHUwMDNlcHJvcHMucmVxaWQ7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NjQ4OlxcdG1wLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0geC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2NDktXFx0bXAtXFx1MDAzZW1hcHBpbmdfbWF4YWdlICAgICAgICAgPSB4LVxcdTAwM2VtYXBwaW5nX21heGFnZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTY4PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjAyOC1cXHRcXHR4LVxcdTAwM2VtYXBwaW5nX21heGFnZSA9IG0tXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMDI5OlxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSBtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMDMwLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMTk5PWludCBfX3hmcm1faW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjYtXFx0eC1cXHUwMDNlb3V0ZXJfbW9kZSA9ICpvdXRlcl9tb2RlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMjY3OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjgtXFx0XFx0aWYgKHgtXFx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9PVVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk3NC1cXHRpZiAoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0pXFxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1OlxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk3Ni1cXHRcXHRcXHRubGFfZ2V0X3UzMihhdHRyc1tYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMXSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzYzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDY3OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2OC1cXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ2OTpcXHRcXHRcXHRcXHQgIHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NzAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMyMjI9c3RhdGljIGludCBidWlsZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjY4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyNjk6XFx0aWYgKG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjcwLVxcdFxcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjcxOlxcdFxcdFxcdFxcdCAgbS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI3Mi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzI5MD1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjk4LVxcdFxcdChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjk5OlxcdFxcdChtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgK1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMDAtXFx0XFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHgtXFx1MDAzZW1hcHBpbmdfbWF4YWdlKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDMzOlxcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQzNDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQzNS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0ODUtXFx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVxcdTAwM2VtYXBwaW5nX21heGFnZTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDg2OlxcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0ODctXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDIwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc2FfbGVuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDA2OC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDY5OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNzA6XFx0XFx0bCArPSBubGFfdG90YWxfc2l6ZShzaXplb2YoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwNzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjAzLjk4NDMyNDg5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgwNDQ1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxgIGF0dHJpYnV0ZSwgd2hpY2gsIG9mIGNvdXJzZSwgc2V0cyB0aGUgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLiBJIGtub3cgdGhpcyBpcyBhbGwgcGFydCBvZiB0aGUgWEZSTSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBJUHNlYy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gdGhvc2UgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCwgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIHRoZSBnZW5lcmljIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlc2UgYXJlIHRyaWdnZXJlZCB2aWEgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGdldHMgc2NoZWR1bGVkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBhZGRlZCB0aGF0IGFjdHVhbGx5IHVzZXMgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYnVnIGZpeDsgaXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGlwX3JvdXRlX291dHB1dF9rZXlgIGFuZCBgaXA2X2RzdF9sb29rdXBfZmxvd2AuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBmaXggaXMgYm90aCBmdW5jdGlvbmFsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnJlYWNoYWJsZSogdW5kZXIgcmVhbC13b3JsZCBjb25kaXRpb25zLlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogSSdtIHByZXR0eSBzdXJlIHdlIG5lZWQgYENPTkZJR19YRlJNX1VTRVJgIGlmIHdlJ3JlIGludGVuZGluZyB0byBjb25maWd1cmUgdGhlc2UgWEZSTSBzdGF0ZXMgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzLCBnZW5lcmFsbHksIHRoZSBjYXNlLiBZZXAsIGp1c3QgY29uZmlybWVkIGl0LiBBbmQgb2YgY291cnNlLCBgQ09ORklHX1hGUk1gIGl0c2VsZiBpcyBhIHByZXJlcXVpc2l0ZS4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBzdXJlLCBidXQgbXkgZ3V0IHRlbGxzIG1lIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDkuMTY0NzczNDc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY2NzI2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9VU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC94ZnJtL0tjb25maWctMzUtXFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMTI9Y29uZmlnIE5FVF9LRVlcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTIwLVxcdCAgbm8gbG9uZ2VyIG5lZWQgUEZfS0VZIHNvY2tldHMuIFBsZWFzZSB1c2UgdGhlIG5ldGxpbmtcXG5uZXQveGZybS9LY29uZmlnOjEyMTpcXHQgIGludGVyZmFjZSAoWEZSTV9VU0VSKSB0byBjb25maWd1cmUgSVBzZWMuXFxubmV0L3hmcm0vS2NvbmZpZy0xMjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjA5LjI4MTQ1MzE1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzY1MjgzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIHdlJ3JlIG1vZGlmeWluZyBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhhdCdzIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFJpZ2h0LCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSByZWxldmFudCB0b28uXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgZ2VuZXJhbCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gVGhlc2Ugc2VlbSBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBvdXIgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIENydWNpYWxseSwgSSBzZWUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGluIHRoZSBob3QgcGF0aDsgdGhleSBhcmUgY2FsbGVkIHBlcmlvZGljYWxseSwgZGVwZW5kZW50IG9uIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gVGhpcyBtYWtlcyB0aGVtIGdvb2QgY2FuZGlkYXRlcyBiZWNhdXNlIGFueSBwZXJmb3JtYW5jZSBjb3N0IGlzIGdvaW5nIHRvIGJlIHNtYWxsLlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIHF1aWNrIHNjYW4gZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX1hGUk1gIGlzIGZ1bmRhbWVudGFsLiAgV2UnbGwgbmVlZCBgQ09ORklHX1hGUk1fVVNFUmAgdG8gYWN0dWFsbHkgY29uZmlndXJlIGl0LiAgT2YgY291cnNlLCBgQ09ORklHX0lQVjZgIGNvbWVzIGludG8gcGxheSBmb3IgdGhlIElQdjYgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGZvciBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MTQuNjQ2NzQwMzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNjQ5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzE9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9pbml0KHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSwgc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo0MjpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDQtXFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjE0Ljc0NzA1MDM1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2MDI1MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZWVwYWxpdmUgRnVuY3Rpb25zIGZvciBTeW1ib2xpYyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzIGZvciwgSSBzdXNwZWN0LCBzb21lIHNvcnQgb2YgY29kZSBhbmFseXNpcyBvciBzeW1ib2xpYyBleGVjdXRpb24uIEkgc2VlIHRocmVlIGtleSBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgY29tcGxldGUgc2V0IG9mIHN5bWJvbHMgZm9yIHRoZSBhbmFseXNpcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGVtIGFsbC5cblxuRmlyc3QsIGEgcXVpY2sgY2hlY2suLi5pcyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgYXBwZWFycyB0aGF0IGl0IGlzLCB5ZXMuIEV4Y2VsbGVudC4gVGhpcyBtZWFucyBpdCBpc24ndCBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBmaWxlcyBpbiBhIGdlbmVyaWMgd2F5LCBhbmQgc28gSSBzaG91bGQgYWRkIGl0IHRvIHRoZSBzeW1ib2xzIHRvIGJlIGFuYWx5emVkLCBzaW5jZSBpdCBpcyBhIGxpa2VseSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IG15IGBGb2N1c1N5bWJvbHNgIGxpc3Qgc2hvdWxkIGluZGVlZCBpbmNsdWRlOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIFxuXG5OZXh0LCBJIHNlZSBhIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcG90ZW50aWFsbHkgY29uc2lkZXIuIFRoZXNlIGluY2x1ZGUgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYW5kIGBJUFY2YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtYXkgYmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGVzZSBzZXR0aW5ncy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5hdHVyZSBvZiBgQ09ORklHX1hGUk1gLiBJcyBpdCBhIGJvb2xlYW4gb3IgYSB0cmlzdGF0ZT8gVGhpcyB3aWxsIGFmZmVjdCBob3cgSSBtb2RlbCBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSB0byBnZXQgYSBkZWZpbml0ZSBhbnN3ZXIgb24gdGhhdC4gSXQncyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjE5Ljk0MzA3ODc5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzMwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZy00LSNcXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTYtXFx0Ym9vbFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5uZXQveGZybS9LY29uZmlnLTEzLVxcbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy00Mi1cXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbm5ldC94ZnJtL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy01MC1cXG5uZXQveGZybS9LY29uZmlnOjUxOmNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNjAtXFxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy03MS1cXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1NcXG5uZXQveGZybS9LY29uZmlnLTczLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjg0OmNvbmZpZyBYRlJNX0FIXFxubmV0L3hmcm0vS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXFxubmV0L3hmcm0vS2NvbmZpZy05NC1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMDUtXFxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjIwLjA3OTQxNDY3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg5MDU5NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBYRlJNYCBCb29sZWFuKipcblxuT2theSwgc28gYFhGUk1gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBhIGJpbmFyeSBzdGF0ZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGJlaW5nIHNldC4gVGhlIGNvcmUgb2YgbXkgY3VycmVudCB0YXNrIGlzIGZpbmRpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBlc3NlbnRpYWxseSBhIHF1ZXN0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGJlaGluZCB0aGlzIGJvb2xlYW4uIFdoYXQgY29uZGl0aW9ucywgb3RoZXIgdmFyaWFibGVzLCBvciBmdW5jdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBzdGF0ZSBvZiBgWEZSTWA/IExldCBtZSB0cmFjZSB0aGUgY29kZSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBgWEZSTWAncyB2YWx1ZSBpcyBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBvdGhlciBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBib29sZWFuLCB3aGV0aGVyIHRoYXQncyB0aHJvdWdoIGRpcmVjdCBhc3NpZ25tZW50LCBsb2dpY2FsIG9wZXJhdGlvbnMsIG9yIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbWFuaXB1bGF0ZSBpdCBpbmRpcmVjdGx5LiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MsIEkgY2FuIGJldHRlciBhc3Nlc3MgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQwMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjI0LjA2ODQ3ODE5OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTQxNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MjQuMjUyNDMyODM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTkwODA2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWEZSTSBjb25maWd1cmF0aW9uIGZvciBOQVQga2VlcGFsaXZlLiBJdCBsb29rcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkg4oCTIGl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBicmluZyBpbiB0aGUgZW50aXJlIFhGUk0gZnJhbWV3b3JrLiBUaGF0J3MgZ29vZCwgbGVzcyB0byB3b3JyeSBhYm91dC4gT2YgY291cnNlLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggSVB2NiwgYElQVjZgIGlzIGFsc28gbmVjZXNzYXJ5LiBCdXQgcmVhbGx5LCBpdCBzZWVtcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZW5hYmxlIGZvciBYRlJNIHRvIHdvcmsgcHJvcGVybHk/IE5vcGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLiBJIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUuIFRoZXkgYXJlLiBUaGV5J3JlIHJlYWNoZWQgdmlhIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdoaWNoIGlzIHNjaGVkdWxlZCBieSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBBaGEhIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBhZGRlZCBvciBkZWxldGVkLiBDcnVjaWFsbHksIHRoZSBYRlJNIHN0YXRlIG5lZWRzIHRvIGhhdmUgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgIHNldC4gVGhpcyBpcyBkb25lIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgaW4gZWl0aGVyIGBYRlJNX01TR19ORVdTQWAgb3IgYFhGUk1fTVNHX1VQRFNBYC4gRmFudGFzdGljLCB0aGF0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCdzIGFsbCBob29rZWQgdXAhXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYFhGUk1fVVNFUmBcbiogICBgSVBWNmBcblxuSSdtIGtlZXBpbmcgdGhlc2Ugc3ltYm9scyBpbiBtaW5kIGFzIGtleSB0byB0cmFjazpcblxuKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGBcbiogICBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgXG4qICAgYG5hdF9rZWVwYWxpdmVfc2VuZGBcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciBOQVQga2VlcGFsaXZlLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB1c2VzIHN0YW5kYXJkIG5ldHdvcmsgZnVuY3Rpb25zIGxpa2UgYHVkcF9oZHJgIGFuZCBgaXBfcm91dGVfb3V0cHV0X2tleWAsIG5vdGhpbmcgc3BlY2lhbGl6ZWQgdGhlcmUuIFNvLCBub3RoaW5nIGVsc2UgdG8gYWN0aXZhdGUsIHRoYXQgaXMgcmVhc3N1cmluZy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYSBgQ09ORklHX1hGUk1fTkFUYCBvciBhIHNpbWlsYXIgbG9va2luZyBvbmUsIGp1c3QgaW4gY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzEuMTcxNTE1NTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5MzkzNjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTkFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzEuMjg0NDY4NTk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTc2ODYzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGFuZCB0aGUgYWJzZW5jZSBvZiBgWEZSTV9OQVRgIGlzIHRocm93aW5nIGEgd3JlbmNoIGluIHRoaW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGBDT05GSUdfWEZSTV9VU0VSYC4gSSBtZWFuLCB0aGF0IHVzdWFsbHkgZ2l2ZXMgdXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyB0byBjb25maWd1cmUgWEZSTSBzdGF0ZXMsIHJpZ2h0PyBBbHJpZ2h0LCB5ZXMsIGNvbmZpcm1pbmcgdGhhdCBgWEZSTV9VU0VSYCBpcyBzdWZmaWNpZW50IGZvciBjb25maWd1cmluZyB0aGUgY29yZSBYRlJNIHN0YXRlcyBpcyBhIHJlbGllZi5cblxuTm93LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBFU1Agc3RhdGVzLiBEb2VzIGl0IHJlcXVpcmUgYENPTkZJR19YRlJNX0VTUGAgb3IgcG9zc2libHkganVzdCBgQ09ORklHX0lORVRfRVNQYD8gVGhlIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGZ1bmN0aW9uIHdhbGtzIGBJUFBST1RPX0VTUGAgc3RhdGVzLiBMb29rcyBsaWtlIGl0J3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gRVNQIHN0YXRlcywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIGB4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTClgLiBTbywgdGhlIHF1ZXN0aW9uIHJlbWFpbnM6IGRvIHdlICpuZWVkKiBgSU5FVF9FU1BgIGFzIHdlbGw/IExldCdzIGludmVzdGlnYXRlIHRoYXQgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDozNi4zNDIxNTg2NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzcyNjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUX0VTUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM3MTpcXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNzItXFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODEtXFxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozODQ6XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzYuNDY1ODkwNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0OTE0MzYwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyBFU1AgU3RhdGUgQ3JlYXRpb24gYW5kIE1lbW9yeSBMZWFrcyBpbiBOQVQgS2VlcGFsaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoYW5kbGluZyBFU1Agc3RhdGVzIGNvcnJlY3RseS4gSXQncyBjbGVhciB0aGF0IGBJTkVUX0VTUGAgYW5kIGBJTkVUNl9FU1BgIGFyZSB0aGUgdHlwaWNhbCBpbmdyZWRpZW50cyBmb3IgY3JlYXRpbmcgRVNQIHN0YXRlcy4gQnV0LCB0aGUgcXVlc3Rpb24gbmFncywgY2FuIHdlIHNpZGVzdGVwIHRoaXMgYW5kIGNyZWF0ZSBhbiBFU1Agc3RhdGUgd2l0aG91dCBgSU5FVF9FU1BgPyBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlIGEgeWVzIOKAkyB3ZSBjYW4gY3JlYXRlIHRoZSBgeGZybV9zdGF0ZWAgd2l0aCBgSVBQUk9UT19FU1BgIGV2ZW4gd2l0aG91dCBhIHJlZ2lzdGVyZWQgcHJvdG9jb2wgaGFuZGxlci4gSG93ZXZlciwgaXQncyBwcm9iYWJseSBub3QgZnVsbHkgZnVuY3Rpb25hbCB3aXRob3V0IGBJTkVUX0VTUGAuIFRvIGJlIGNvbXBsZXRlbHkgc2FmZSBhbmQgY29ycmVjdCwgSSBzaG91bGQgaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYC4gR29vZCwgaXQgbG9va3MgbGlrZSBgSU5FVF9FU1BgIGlzIGEgdHJpc3RhdGUsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBMZXQgbWUgYWRkIGJvdGggdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZC5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGlzIHBhdGNoLiBBaCwgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgc2tiYCBpcyBhbGxvY2F0ZWQgaW4gYG5hdF9rZWVwYWxpdmVfc2VuZGAgYW5kIHBhc3NlZCBkb3duIHRvIHRoZSBgaXB2NGAgYW5kIGBpcHY2YCBzZW5kIGZ1bmN0aW9ucy4gUHJldmlvdXNseSwgaWYgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCByZXR1cm5lZCBhbiBlcnJvciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBzZXQgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfc2VuZGAgd291bGQgZnJlZSBgc2tiYC4gSG9sZCBvbi4uLiB3aGF0IGlmIHRoZSBlcnJvciBoYXBwZW5lZCAqYWZ0ZXIqIHRoZSBgc2tiYCB3YXMgcG90ZW50aWFsbHkgdXNlZCBvciBjb25zdW1lZD8gSSdtIGdldHRpbmcgYSBsaXR0bGUgYWhlYWQgb2YgbXlzZWxmLiBMZXQncyBtYWtlIHN1cmUgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCAqZG9lcyogZnJlZSBgc2tiYCBpZiBhbiBlcnJvciBvY2N1cnMuXG5gYGBjXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4rXHRpZiAoSVNfRVJSKHJ0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICsxMDMsNyBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KG5ldCwgc2ssIFx1MDAyNmZsNiwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpIHtcbiBcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjYuYmhfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkc3QpO1xuIFx0fVxuIFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0Y29uc3QgdTggbmF0X2thX3BheWxvYWQgPSAweEZGO1xuLVx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4gXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcbiBcdHN3aXRjaCAoa2EtXHUwMDNlZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4tXHRcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xuK1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4rXHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbiBcdFx0YnJlYWs7XG4gI2VuZGlmXG4tXHR9XG4tXHRpZiAoZXJyKVxuK1x0ZGVmYXVsdDpcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBgYGBcblllcCwgbG9va3MgbGlrZSBpdC4gYGtmcmVlX3NrYmAgaXMgbm93IGNhbGxlZCB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCB3aGVuIGEgcm91dGluZyBlcnJvciBvY2N1cnMuIFRoaXMgcmVzb2x2ZXMgdGhlIG1lbW9yeSBsZWFrIGJ5IGVuc3VyaW5nIHRoZSBgc2tiYCBpcyBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlIHdpdGhpbiB0aGUgYCpfc2VuZGAgZnVuY3Rpb25zLiBMb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDo1MC45NTczMzAwOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQyOlxcdHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDQzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gIDQ0OlxcdHtcXG4gIDQ1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGthLVxcdTAwM2VuZXQ7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgZmxvd2k0IGZsNDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbiAgNDg6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAgNDk6XFx0XFx0X191OCB0b3MgPSAwO1xcbiAgNTA6XFx0XFx0aW50IGVycjtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0Zmxvd2k0X2luaXRfb3V0cHV0KFxcdTAwMjZmbDQsIDAgLyogb2lmICovLCBza2ItXFx1MDAzZW1hcmssIHRvcyxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgIFJUX1NDT1BFX1VOSVZFUlNFLCBJUFBST1RPX1VEUCwgMCxcXG4gIDU0OlxcdFxcdFxcdFxcdCAgIGthLVxcdTAwM2VkYWRkci5hNCwga2EtXFx1MDAzZXNhZGRyLmE0LCBrYS1cXHUwMDNlZW5jYXBfZHBvcnQsXFxuICA1NTpcXHRcXHRcXHRcXHQgICBrYS1cXHUwMDNlZW5jYXBfc3BvcnQsIHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxuICA1ODpcXHRcXHRpZiAoSVNfRVJSKHJ0KSkge1xcbiAgNTk6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA2MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuICA2MTpcXHRcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY0LmJoX2xvY2spO1xcbiAgNjY6XFx0XFx0c2sgPSB0aGlzX2NwdV9yZWFkKG5hdF9rZWVwYWxpdmVfc2tfaXB2NC5zb2NrKTtcXG4gIDY3OlxcdFxcdHNvY2tfbmV0X3NldChzaywgbmV0KTtcXG4gIDY4OlxcdFxcdGVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgTlVMTCwgdG9zKTtcXG4gIDY5OlxcdFxcdHNvY2tfbmV0X3NldChzaywgXFx1MDAyNmluaXRfbmV0KTtcXG4gIDcwOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNm5hdF9rZWVwYWxpdmVfc2tfaXB2NC5iaF9sb2NrKTtcXG4gIDcxOlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjUwLjk1NzQ2NzQ0MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkzNjgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERvdWJsZSBGcmVlIFZ1bG5lcmFiaWxpdHkgaW4gTkFUIEtlZXBhbGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgaXMgY29uc3VtaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb24gZXJyb3IsIHdoaWNoIGlzIGtleS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldCB1cCBzdWNoIHRoYXQgaWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbGVkLCBhbiBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBjYWxsIGNoYWluLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCB0aGVuIGZyZWUgdGhlIGBza2JgLiBIb3dldmVyLCBpZiBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBpdHNlbGYgZmFpbGVkLCBpdCBhbHJlYWR5IGZyZWVkIHRoZSBgc2tiYCwgbGVhZGluZyB0byBhIGNsYXNzaWMgZG91YmxlLWZyZWUgc2NlbmFyaW8hXG5cbkVzc2VudGlhbGx5LCB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IGZhaWx1cmUgcGF0aHMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIGZpcnN0IGludm9sdmVzIHJvdXRpbmcgZmFpbHVyZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgYHNrYmAgKndhc24ndCogY29uc3VtZWQsIGFuZCB0aGUgc2Vjb25kIGludm9sdmVzIGFjdHVhbCB0cmFuc21pc3Npb24gZmFpbHVyZXMgd2hlcmUgdGhlIGBza2JgICp3YXMqIGNvbnN1bWVkLCBidXQgdGhlIHRyYW5zbWlzc2lvbiBmYWlsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIGhhbmRsZXMgcm91dGluZyBmYWlsdXJlcyBjb3JyZWN0bHksIGJ1dCBpdOKAmXMgdGhlIHRyYW5zbWlzc2lvbiBmYWlsdXJlIGNhc2Ugd2hlcmUgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgY2F1c2VzIHRoZSBwcm9ibGVtLlxuXG5UaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSBieSBjaGFuZ2luZyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MuIE5vdywgdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYHNrYmAgb24gZXJyb3IsICpvbmx5KiBpZiB0aGUgaW5pdGlhbCByb3V0aW5nIG9wZXJhdGlvbiBmYWlscy4gSWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbHMsIGl0J3MgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcuIGBuYXRfa2VlcGFsaXZlX3NlbmRgIG5vdyAqb25seSogZnJlZXMgaW4gdGhlIGRlZmF1bHQsIG9yIHN1Y2Nlc3NmdWwsIGNhc2UuIFRoaXMgZW5zdXJlcyB0aGUgYHNrYmAgaXMgb25seSBmcmVlZCBvbmNlLCByZWdhcmRsZXNzIG9mIHRoZSBmYWlsdXJlIHBvaW50LlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZml4LiBBIGRvdWJsZSBmcmVlIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBleHBsb2l0YXRpb24sIGFuZCBJIGJlbGlldmUgdGhpcyBkZXNlcnZlcyBpbW1lZGlhdGUgYXR0ZW50aW9uIGFuZCB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBjb25maWdzIGluY2x1ZGUgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBgSU5FVF9FU1BgIGVuYWJsZXMgYFhGUk1gIGZ1bmN0aW9uYWxpdHksIGFuZCBgWEZSTV9VU0VSYCBpcyBuZWVkZWQgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzLiBPa2F5LCBhbGwgY2hlY2tzIG91dCwgYW5kIHRoZXNlIGFyZSBhbGwgY29ycmVjdCBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5hdF9rZWVwYWxpdmVfc2VuZGAgaXMgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyOTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDo1OS4wNTExNTQxMTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU1ODc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMxPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfaW5pdChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NDI6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjc1OnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTQ1OlxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0OTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTUwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTItXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MzpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjU5LjE2NDcxOTYwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzNDAzMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYRlJNIFN0YXRlIENvbmZpZ3VyYXRpb246IEV4cGxvcmluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHdlJ3JlIGNvbmZpZ3VyaW5nIFhGUk0gc3RhdGVzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFtIEkgb3Zlcmxvb2tpbmcgYW55dGhpbmc/IElzIGBYRlJNX1VTRVJgIHRoZSAqb25seSogd2F5IHRvIGNvbmZpZ3VyZSB0aGVzZSBzdGF0ZXM/IEkga25vdyBpdCdzIHRoZSBjb250ZW1wb3JhcnkgTmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdCdzIHdoYXQgd2UndmUgcHJpbWFyaWx5IGJlZW4gdXNpbmcuXG5cbkJ1dCwgaGFuZyBvbiwgdGhlcmUncyBhbHNvIGBORVRfS0VZYCwgcmlnaHQ/IFRoYXQncyB0aGUgUEZfS0VZIHNvY2tldCBtZXRob2QuIEl0J3Mgb2xkZXIsIGFyZ3VhYmx5IGxlc3MgZWxlZ2FudCwgYnV0IGl0J3Mgc3RpbGwgb3V0IHRoZXJlLiBHaXZlbiB0aGF0IHdlIGhhdmUgYW4gYWN0aXZlIGRpc2N1c3Npb24gb24gaXQsIGl0IG1pZ2h0IGJlIGJlbmVmaWNpYWwgdG8gc3VwcG9ydCBpdCBqdXN0IHRvIGNvdmVyIG91ciBiYXNlcy4gV2hpbGUgYFhGUk1fVVNFUmAgaXMgdGhlIHByZWZlcnJlZCBhbmQgbW9kZXJuIGFwcHJvYWNoLCBzdXBwb3J0aW5nIGBORVRfS0VZYCBjb3VsZCBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IgYWRkcmVzcyBuaWNoZSB1c2UgY2FzZXMuIEkgdGhpbmsgd2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBgTkVUX0tFWWAgc3VwcG9ydCBhcyB3ZWxsLiBJdOKAmXMgYW4gb3B0aW9uIHRvIGJyb2FkZW4gY29tcGF0aWJpbGl0eSBhbmQgZmxleGliaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDIuNTk4MTI1MjQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk4NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfS0VZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTExMS1cXG5uZXQveGZybS9LY29uZmlnOjExMjpjb25maWcgTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEyNC1cXG5uZXQveGZybS9LY29uZmlnOjEyNTpjb25maWcgTkVUX0tFWV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXFx0Ym9vbCBcXFwiUEZfS0VZIE1JR1JBVEVcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMjc6XFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNTowMi42ODcxMTcxOTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NzkyNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYE5FVF9LRVlgIGlzIG9mZmljaWFsbHkgZGVwcmVjYXRlZC4gTWFrZXMgc2Vuc2U7IGBYRlJNX1VTRVJgIGhhcyBiZWVuIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBhIHdoaWxlIG5vdy4gSXQncyB0aW1lIHRvIGZ1bGx5IHRyYW5zaXRpb24gYW5kIHN0YXJ0IHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBtb3JlIG1vZGVybiBmcmFtZXdvcmsuXG5cbk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgaW4gb3JkZXIuIFdlJ3ZlIGdvdCBgWEZSTV9VU0VSYC4uLiBidXQgZG9lcyBgWEZSTV9OQVRgIHN0aWxsIGV4aXN0PyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuIFNwZWNpZmljYWxseSwgbGV0IG1lIHBva2UgYXJvdW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgKm5ldC9pcHY0L0tjb25maWcqIGluIHBhcnRpY3VsYXIuIE5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3RpbGwgaW4gdGhlIG1peCwgYW5kIGhvdyBpdOKAmXMgZGVmaW5lZCBub3csIGlmIGF0IGFsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSB0byBlbnN1cmluZyBwcm9wZXIgaGFuZGxpbmcgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIGxhdGVzdCBhZHZhbmNlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDYuMDc1MDQ2NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDUyNjk0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDYuNDg1NTgyNzIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDMwOTIzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuTm9wZS4gVGhhdCBpbml0aWFsIGxpbmUgb2YgaW5xdWlyeSBqdXN0IGRpZG4ndCBwYW4gb3V0LCBkaWRuJ3QgaXQ/IE9rYXksIGJhY2sgdG8gYmFzaWNzLiBJZiBJJ20gaGl0dGluZyBhIHdhbGwsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgcmV0cmFjZSBteSBzdGVwcyBhbmQgY29uc2lkZXIgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHRoZSBgWEZSTWAgc2V0dGluZ3MgaWYgSSdtIGhhdmluZyBpc3N1ZXMsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG92ZXJzaWdodHMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODQzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDkuMjI4Njc3NjIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3ODQ2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzA3LVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozNDE6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM1NjpcXHRzZWxlY3QgWEZSTV9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6Mzg0OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zOTQ9Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozOTY6XFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQwND1jb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDE1LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI1OjA5LjMzNjQ2Nzg0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTQ0NDE5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBwaW5uZWQgZG93biB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcmUgdGhlIGtleSBkcml2ZXJzIGZvciB0aGlzIHZ1bG5lcmFiaWxpdHksIGFzIGV4cGVjdGVkIGluIFhGUk0uXG5cbkxldCBtZSBicmVhayBkb3duIHdoYXQgSSd2ZSBmb3VuZCwgY29uY2lzZWx5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUuKiogQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZSBpZGVudGlmaWVkIGNvZGUgcGF0aHMgaGF2ZSBleHBsb2l0YWJsZSBwb3RlbnRpYWwuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogU3BlY2lmaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyaWMgYG5hdF9rZWVwYWxpdmVfc2VuZGAgYXJlIHRoZSBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBkaXNjb3ZlcmVkIGVycm9yIGhhbmRsaW5nLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGJ1aWxkIHdpdGggYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIGBYRlJNX1VTRVJgIGlzIGNydWNpYWwgZm9yIGFsbG93aW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiwgd2hpbGUgdGhlIEVTUCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlIHZ1bG5lcmFibGUgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LCBhbmQgSVB2NiBpcyBpbXBsaWNhdGVkLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgaXMgYSBkb3VibGUgZnJlZSBpc3N1ZS4gUm91dGluZyBmYWlsdXJlcyB3aXRoaW4gdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgcGF0aHMgaW5jb3JyZWN0bHkgcmVsZWFzZSBhbiBgc2tiYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBYRlJNLiBUaGlzIG1lYW5zIGl0J3Mgbm90IGp1c3QgYSBwdXJlbHkgZGVmZW5zaXZlIHByb2dyYW1taW5nIGVycm9yOyB0aGlzIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSwgd2hlbiBtaXNjb25maWd1cmVkLCBjYW4gbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyB1c2Vyc3BhY2UgcmVhY2hhYmlsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGFiaWxpdHkgdG8gc2V0IFhGUk0gc3RhdGUgd2l0aCBhIGtlZXBhbGl2ZSBpbnRlcnZhbCwgY29uZmlybXMgdGhlIGV4cGxvaXRhYmlsaXR5IGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjkyLCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNToxNi4xOTA5MzgyNzJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ2OTU0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NlwiLFxuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBvZiBhbiBza2IgaW4gdGhlIGVycm9yIHBhdGggb2YgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQgYW5kIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2IHdoZW4gcm91dGluZyBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBYRlJNIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIGFuIFhGUk0gc3RhdGUgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowht5n2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 06:10:24 +0000 UTC FinishedAt: 2026-06-25 06:25:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET6_ESP", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "INET_ESP", "INET6_ESP", "IPV6" ], "series_id": "29467679-a887-43f6-8a06-4ebb29538b1b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nat_keepalive_send_ipv4", "nat_keepalive_send_ipv6", "nat_keepalive_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MjU1NmM1ODMwMzBhMjFmZjNlYWU2MjBlMzgyNDU4ZmUxZTU2YzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjoyMzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5pbmRleCA0NTg5MzEwNjJhMDRlZi4uZWIxYjZmNjc3MzllMWQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4mIzQzO1x0aWYgKElTX0VSUihydCkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4mIzQzO1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhuZXQsIHNrLCBcdTAwMjZmbDYsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihkc3QpKSB7XG4gXHRcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG4gXHR9XG4gXG5AQCAtMTE4LDcgJiM0MzsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSAmIzQzO1xuIFx0XHRcdFx0ICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiBcdGNvbnN0IHU4IG5hdF9rYV9wYXlsb2FkID0gMHhGRjtcbi1cdGludCBlcnIgPSAtRUFGTk9TVVBQT1JUO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuIFxuQEAgLTE0MCwxNiAmIzQzOzE0MiwxNyBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFxuIFx0c3dpdGNoIChrYS1cdTAwM2VmYW1pbHkpIHtcbiBcdGNhc2UgQUZfSU5FVDpcbi1cdFx0ZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4mIzQzO1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4gXHRcdGJyZWFrO1xuICNlbmRpZlxuLVx0fVxuLVx0aWYgKGVycilcbiYjNDM7XHRkZWZhdWx0OlxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyNTU2YzU4MzAzMGEyMWZmM2VhZTYyMGUzODI0NThmZTFlNTZjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDA2OjIzOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYwppbmRleCA0NTg5MzEwNjJhMDRlZi4uZWIxYjZmNjc3MzllMWQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAga2EtJmd0O2VuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7CiAKIAlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmYW1wO2ZsNCk7Ci0JaWYgKElTX0VSUihydCkpCiYjNDM7CWlmIChJU19FUlIocnQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIFBUUl9FUlIocnQpOwomIzQzOwl9CiAKIAlza2JfZHN0X3NldChza2IsICZhbXA7cnQtJmd0O2RzdCk7CiAKQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3cobmV0LCBzaywgJmFtcDtmbDYsIE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkgewogCQlsb2NhbF91bmxvY2tfbmVzdGVkX2JoKCZhbXA7bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBQVFJfRVJSKGRzdCk7CiAJfQogCkBAIC0xMTgsNyAmIzQzOzEyMSw2IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXB2NmhkcikpICYjNDM7CiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAljb25zdCB1OCBuYXRfa2FfcGF5bG9hZCA9IDB4RkY7Ci0JaW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIApAQCAtMTQwLDE2ICYjNDM7MTQyLDE3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAKIAlzd2l0Y2ggKGthLSZndDtmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCWVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7CiAJCWJyZWFrOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJY2FzZSBBRl9JTkVUNjoKLQkJZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwogCQlicmVhazsKICNlbmRpZgotCX0KLQlpZiAoZXJyKQomIzQzOwlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiAKIHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgWEZSTSBOQVQgS2VlcGFsaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIGEgbWVtb3J5IGxlYWsgd2l0aCBgc2tiYCBpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCBmdW5jdGlvbnMuIEFwcGFyZW50bHksIHRoaXMgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHJvdXRpbmcgZmFpbHMuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCDigJMgbW92aW5nIGF3YXkgZnJvbSB1c2luZyBgZXJyYCBhbmQgY2VudHJhbGl6aW5nIGBza2JgIGZyZWVpbmcgaW4gdGhlIGBkZWZhdWx0YCBjYXNlLCB3aGlsZSBhbGxvd2luZyB0aGUgSVB2NCBhbmQgSVB2NiBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gaGFuZGxlIGl0IGlmIHRoZXkgZW5jb3VudGVyIGFuIGVycm9yLiBUaGlzIGlzIGdvb2Q7IHRpZHlpbmcgdXAgZXJyb3IgaGFuZGxpbmcgaXMgYWx3YXlzIGEgcGx1cywgYW5kIHNob3VsZCBzaW1wbGlmeSBkZWJ1Z2dpbmcgZG93biB0aGUgcm9hZC4KCkkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBjaGFuZ2VzLiBGaXJzdCwgSeKAmWxsIG9wZW4gdXAgYG5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jYCBpdHNlbGYgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCBzZWUgaG93IHRoZSBleGlzdGluZyBjb2RlIGZ1bmN0aW9ucywgYW5kIHVuZGVyc3RhbmQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGVzLiBUaGVuLCBzaW5jZSB0aGlzIGlzIFhGUk0tcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBzZWFyY2ggdGhyb3VnaCB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCBhbmQgYG5ldC94ZnJtL0tjb25maWdgIGZvciBgQ09ORklHX1hGUk1gIG9yIGFueXRoaW5nIHNpbWlsYXIgdG8gY29uZmlybSB3aGF0IFhGUk0gZmVhdHVyZXMgYXJlIGluIHVzZSBvciBuZWVkZWQgZm9yIHRoaXMgbW9kdWxlLCBhbmQgaG93IHRoZSBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aG9zZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIGRlcGVuZGluZyBvbiBidWlsZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX25hdF9rZWVwYWxpdmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxuLS1cbm5ldC94ZnJtL01ha2VmaWxlLTE2LVx0XHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTc6XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG5uZXQveGZybS9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSAmIzQzOz0geGZybV9wcm9jLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDU2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGBDT05GSUdfWEZSTWAgb3B0aW9uIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0IHRoYXQgbWlnaHQgYWxzbyBuZWVkIG91ciBhdHRlbnRpb24uIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgYmFzZSBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBmdW5jdGlvbiBpdHNlbGYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGVzZSBhcmUgbGlrZWx5IGNvcmUgY29tcG9uZW50cy4gSSBzaG91bGQgcHJvYmFibHkgYmUgc3VyZSBvZiB0aGUgZXhhY3QgcmVsYXRpb25zaGlwcyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYW5kIHBvc3NpYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuCgpJdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gd2l0aGluIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG5hdF9rZWVwYWxpdmVfd29ya19jdHhgIC0gb3IgYSBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lLiBHaXZlbiB0aGUgaW1wb3J0YW5jZSBvZiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgbGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUgZm9yIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX2luaXQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjQyOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzU6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cdGNhc2UgQUZfSU5FVDpcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXHRcdGJyZWFrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDk6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1MC1cdFx0YnJlYWs7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkyLVx0aWYgKHNlbmRfa2VlcGFsaXZlKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTkzOlx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhleSYjMzk7cmUgaW50ZXJuYWwgdG8gYSBtb2R1bGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBXaGVyZSBkb2VzIHRoZSB3b3JrIGFjdHVhbGx5ICpzdGFydCo/CgpBaCwgcmlnaHQsIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIG9uZS4gQW5kIGdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGEgc2luZ2xlIHVuaXQgb2Ygd29yay4gTXkgZ3V0IHNheXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnZXR0aW5nIGNhbGxlZCBmcm9tIGVpdGhlciBhIHdvcmtxdWV1ZSBvciBhIHRpbWVyLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGFzeW5jaHJvbm91cyB0YXNrcyBsaWtlIHRoZXNlLgoKVG8gY29uZmlybSBhbmQgZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBJIHNob3VsZCBkZWZpbml0ZWx5IGp1bXAgb3ZlciB0byBgeGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIGhvdyB0aGlzIGFsbCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIFhGUk0gZnJhbWV3b3JrLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE1OD1zdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTYyLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTYzOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjQte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTIwMD1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgV29ya3F1ZXVlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmF0X2tlZXBhbGl2ZV93b3JrYCB3b3JrcXVldWUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIHNjaGVkdWxpbmcgbWVjaGFuaXNtIGhlcmU/IEhvdyBkb2VzIHRoaXMgdGhpbmcgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSBgbmF0X2tlZXBhbGl2ZV93b3JrYCB0byBleGVjdXRlLiBLbm93aW5nIHRoZSBzY2hlZHVsaW5nIHBhdGggaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIE5BVCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBlbnF1ZXVlZCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgcnVucy4gQXJlIHdlIHRhbGtpbmcgdGltZXJzLCBpbnRlcnJ1cHRzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG1ldGhvZCBvZiBzY2hlZHVsaW5nIHdpbGwgdGVsbCBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgdXJnZW5jeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmF0X2tlZXBhbGl2ZV93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTU3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1OS1cdHRpbWU2NF90IG5leHRfcnVuO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2Mi1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY0LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2NTpcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjYtXHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk5LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAwOnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMDEte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAyOlx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggY3R4O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjAzLVx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIwOC1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwOTpcdG5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0LCB4ZnJtLm5hdF9rZWVwYWxpdmVfd29yay53b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cdHhmcm1fc3RhdGVfd2Fsa19pbml0KFx1MDAyNndhbGssIElQUFJPVE9fRVNQLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFx1MDAyNndhbGssIG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUsIFx1MDAyNmN0eCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXHR4ZnJtX3N0YXRlX3dhbGtfZG9uZShcdTAwMjZ3YWxrLCBuZXQpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEzLVx0aWYgKGN0eC5uZXh0X3J1bilcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxNDpcdFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxNS1cdFx0XHRcdCAgICAgIChjdHgubmV4dF9ydW4gLSBjdHgubm93KSAqIEhaKTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTUtXHRuZXQgPSB4c19uZXQoeCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTY6XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCAwKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Ny19XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjU5PWludCBfX25ldF9pbml0IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjAte1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjYxOlx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrLCBuYXRfa2VlcGFsaXZlX3dvcmspO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjYyLVx0cmV0dXJuIDA7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjY1PWludCB4ZnJtX25hdF9rZWVwYWxpdmVfbmV0X2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY2LXtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI2NzpcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXhmcm0ubmF0X2tlZXBhbGl2ZV93b3JrKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI2OC1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDMxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5BVCBLZWVwYWxpdmUgTWVjaGFuaXNtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyB0aGUgdHJpZ2dlciBmb3IgYG5hdF9rZWVwYWxpdmVfd29ya2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIFN0YXRlIHVwZGF0ZXMga2ljayBvZmYgdGhlIGtlZXBhbGl2ZSBwcm9jZXNzLiYjMzQ7IEJ1dCBub3cgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0Ki4gV2hlcmUgZXhhY3RseSBpcyBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGJlaW5nIGNhbGxlZD8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHZhcmlvdXMgc2NlbmFyaW9zIHRoaXMga2VlcGFsaXZlIG1lY2hhbmlzbSBpcyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyB0cmFjZSBiYWNrIGZyb20gaGVyZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQwPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0Ny1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0ODp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ5LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODExPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MzItXHRcdG5ldC1cdTAwM2V4ZnJtLnN0YXRlX251bS0tO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgzMzpcdFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODM0LVx0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNzE1PXN0YXRpYyB2b2lkIF9feGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NTktXHR4ZnJtX2hhc2hfZ3Jvd19jaGVjayhuZXQsIHgtXHUwMDNlYnlkc3QubmV4dCAhPSBOVUxMKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNzYwOlx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc2MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5BVCBLZWVwYWxpdmUgTWVjaGFuaXNtKioKCk9rYXksIHNvIHRoZSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgIGZ1bmN0aW9uIGlzIHRoZSBrZXkgdHJpZ2dlciBoZXJlLiBJdCYjMzk7cyBjYWxsZWQgZXZlcnkgdGltZSBhbiB4ZnJtIHN0YXRl4oCUZWl0aGVyIGEgbmV3IG9uZSBpcyBhZGRlZCBvciBhbiBleGlzdGluZyBvbmUgcmVtb3ZlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbnkgY2hhbmdlIGluIHRoZSBzdGF0ZSB0YWJsZSBuZWNlc3NpdGF0ZXMgYSBjaGVjayBvbiB3aGV0aGVyIE5BVCBrZWVwYWxpdmVzIGFyZSBuZWVkZWQuIFRoaXMgdGhlbiBzY2hlZHVsZXMgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGlzIGEgd29yayBxdWV1ZSBpdGVtLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgd29yayBpdGVtJiMzOTtzIHB1cnBvc2UgaXMgdG8gaXRlcmF0ZSBvdmVyICphbGwqIGV4aXN0aW5nIHhmcm0gc3RhdGVzLiBBbmQgd2l0aGluIHRoYXQgbG9vcCwgaXQgY2FsbHMgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIGZvciBlYWNoIHN0YXRlLgoKTm93LCB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIHByb2Nlc3Mgc2VlbXMgdG8gbGllIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gd2hlbiBgc2VuZF9rZWVwYWxpdmVgIGlzIHNldCB0byB0cnVlIGJlY2F1c2UgKnRoYXQqIGRlY2lkZXMgd2hldGhlciB3ZSBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCBvciBub3QuIFRoZSBmdW5jdGlvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdGhlbiBjYWxscyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgd2hpY2ggZGlzcGF0Y2hlcyB0byBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIG9yIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBgc2VuZF9rZWVwYWxpdmVgLiBJIG5lZWQgdG8gZGlnIGludG8gYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUga2VlcGFsaXZlIGlzIGFjdHVhbGx5IHNlbnQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBsb2dpYyB0byBldmFsdWF0ZSB3aGV0aGVyIG9yIG5vdCBrZWVwYWxpdmUgcGFja2V0cyBhcmUgdG8gYmUgc2VudCBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX2tlZXBhbGl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NS1cdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjY6XHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjctXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXHRcdG5hdF9rZWVwYWxpdmVfaW5pdChcdTAwMjZrYSwgeCk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxODc6XHRcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE4OC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxOTI6XHRpZiAoc2VuZF9rZWVwYWxpdmUpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTMtXHRcdG5hdF9rZWVwYWxpdmVfc2VuZChcdTAwMjZrYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBmdW5jdGlvbi4gSSBzZWUgdGhpcyBhcyB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIG1lY2hhbmlzbSwgdGhlIHVuaXQgb2Ygd29yayB0aGF0IGtlZXBzIG91ciBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2Vzc2lvbnMgYWxpdmUuIEnigJltIHRoaW5raW5nLCB0aGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBlbnN1cmluZyB0aG9zZSBiaW5kaW5ncyBkb27igJl0IHRpbWUgb3V0LCBtYWtpbmcgc3VyZSB0cmFmZmljIGNvbnRpbnVlcyB0byBmbG93IHNtb290aGx5IHRocm91Z2ggdGhlIE5BVC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBOQVQgdGFibGVzIG9yIGNvbnRleHRzIOKAkyBpcyB0aGlzIGEgc2hhcmVkIHJlc291cmNlIHNjZW5hcmlvIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtPyBPciBkb2VzIGVhY2ggTkFUIGtlZXAgdHJhY2sgb2YgaXRzIG93bj8gVGhlIGRldmls4oCZcyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB0aGF04oCZcyB3aGVyZSBhbGwgdGhlIGJ1Z3MgdGVuZCB0byBoaWRlIGFuZCB0aGF0IGlzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjM6XHRzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuIDE2NDpcdHtcbiAxNjU6XHRcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XG4gMTY2Olx0XHRib29sIHNlbmRfa2VlcGFsaXZlID0gZmFsc2U7XG4gMTY3Olx0XHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSBrYTtcbiAxNjg6XHRcdHRpbWU2NF90IG5leHRfcnVuO1xuIDE2OTpcdFx0dTMyIGludGVydmFsO1xuIDE3MDpcdFx0aW50IGRlbHRhO1xuIDE3MTpcdFxuIDE3MjpcdFx0aW50ZXJ2YWwgPSB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG4gMTczOlx0XHRpZiAoIWludGVydmFsKVxuIDE3NDpcdFx0XHRyZXR1cm4gMDtcbiAxNzU6XHRcbiAxNzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIDE3NzpcdFxuIDE3ODpcdFx0ZGVsdGEgPSAoaW50KShjdHgtXHUwMDNlbm93IC0geC1cdTAwM2VsYXN0dXNlZCk7XG4gMTc5Olx0XHRpZiAoZGVsdGEgXHUwMDNjIGludGVydmFsKSB7XG4gMTgwOlx0XHRcdHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uID0gY3R4LVx1MDAzZW5vdyAmIzQzOyBpbnRlcnZhbCAtIGRlbHRhO1xuIDE4MTpcdFx0XHRuZXh0X3J1biA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xuIDE4MjpcdFx0fSBlbHNlIGlmICh4LVx1MDAzZW5hdF9rZWVwYWxpdmVfZXhwaXJhdGlvbiBcdTAwM2UgY3R4LVx1MDAzZW5vdykge1xuIDE4MzpcdFx0XHRuZXh0X3J1biA9IHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xuIDE4NDpcdFx0fSBlbHNlIHtcbiAxODU6XHRcdFx0bmV4dF9ydW4gPSBjdHgtXHUwMDNlbm93ICYjNDM7IGludGVydmFsO1xuIDE4NjpcdFx0XHRuYXRfa2VlcGFsaXZlX2luaXQoXHUwMDI2a2EsIHgpO1xuIDE4NzpcdFx0XHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XG4gMTg4Olx0XHR9XG4gMTg5Olx0XG4gMTkwOlx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIDE5MTpcdFxuIDE5MjpcdFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxuIDE5MzpcdFx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xuIDE5NDpcdFxuIDE5NTpcdFx0aWYgKCFjdHgtXHUwMDNlbmV4dF9ydW4gfHwgbmV4dF9ydW4gXHUwMDNjIGN0eC1cdTAwM2VuZXh0X3J1bilcbiAxOTY6XHRcdFx0Y3R4LVx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XG4gMTk3Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgIGluIFhGUk0gU3RhdGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgeC0mZ3Q7bmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAuIFRoZSBjb2RlJiMzOTtzIGNsZWFybHkgZXhwZWN0aW5nIHRoaXMgdmFsdWUgdG8gYmUgbm9uLXplcm8gYXQgc29tZSBwb2ludCwgYW5kIG15IGV4cGVyaWVuY2Ugc2F5cyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHNldCBkdXJpbmcgdGhlIFhGUk0gc3RhdGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBNYWtlcyBzZW5zZTsgTkFUIGtlZXBhbGl2ZXMgd291bGQgYmUgY29uZmlndXJlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGF0ZS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoLCBsb29raW5nIGZvciBhc3NpZ25tZW50cyB0byB0aGF0IHNwZWNpZmljIHZhcmlhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYXRfa2VlcGFsaXZlX2ludGVydmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE3MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MjpcdGludGVydmFsID0geC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTczLVx0aWYgKCFpbnRlcnZhbClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTI6XHRpZiAoIXgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbClcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1My1cdFx0cmV0dXJuO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDY0Mj1zdGF0aWMgdm9pZCB4ZnJtX21pZ3JhdGVfY29weV9vbGQoY29uc3Qgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ3LVx0bXAtXHUwMDNlbmV3X3JlcWlkICAgICAgICAgICAgICA9IHgtXHUwMDNlcHJvcHMucmVxaWQ7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ2NDg6XHRtcC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0geC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ5LVx0bXAtXHUwMDNlbWFwcGluZ19tYXhhZ2UgICAgICAgICA9IHgtXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTE5Njg9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2Nsb25lX2FuZF9zZXR1cChzdHJ1Y3QgeGZybV9zdGF0ZSAqb3JpZyxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjAyOC1cdFx0eC1cdTAwM2VtYXBwaW5nX21heGFnZSA9IG0tXHUwMDNlbWFwcGluZ19tYXhhZ2U7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MjAyOTpcdFx0eC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0gbS1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTIwMzAtXHR9XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMxOTk9aW50IF9feGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjYtXHR4LVx1MDAzZW91dGVyX21vZGUgPSAqb3V0ZXJfbW9kZTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMjY3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjgtXHRcdGlmICh4LVx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9PVVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc0LVx0aWYgKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKVxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1Olx0XHR4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxubmV0L3hmcm0veGZybV91c2VyLmMtOTc2LVx0XHRcdG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdKTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzYzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NjYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDY3Olx0aWYgKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2OC1cdFx0cmV0ID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ2OTpcdFx0XHRcdCAgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NzAtXHRcdGlmIChyZXQpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzIyMj1zdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjY4LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzI2OTpcdGlmIChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyNzAtXHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyNzE6XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjcyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMyOTA9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMyOTgtXHRcdChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgJiM0Mztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyOTk6XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzMwMC1cdFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjQ9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzQzMi1cdFx0XHRcdFx0ICAgICAgIHgtXHUwMDNlbWFwcGluZ19tYXhhZ2UpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQzMzpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDM0Olx0XHRcdFx0XHRcdCAgICAgICB4LVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xubmV0L3hmcm0veGZybV91c2VyLmMtMzQzNS1cbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDg1LVx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVx1MDAzZW1hcHBpbmdfbWF4YWdlO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQ4NjpcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDg3LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTQwMjA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGZybV9zYV9sZW4oc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNDA2OC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNjk6XHRpZiAoeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxubmV0L3hmcm0veGZybV91c2VyLmM6NDA3MDpcdFx0bCAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHgtXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNDA3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUsIHdoaWNoLCBvZiBjb3Vyc2UsIHNldHMgdGhlIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gSSBrbm93IHRoaXMgaXMgYWxsIHBhcnQgb2YgdGhlIFhGUk0gZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgSVBzZWMuIFRoZSBjaGFuZ2VzIGZvY3VzIG9uIHRob3NlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgZ2VuZXJpYyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBmdW5jdGlvbnMuIENsZWFybHksIHRoZXNlIGFyZSB0cmlnZ2VyZWQgdmlhIGBuYXRfa2VlcGFsaXZlX3dvcmtgLCB3aGljaCBnZXRzIHNjaGVkdWxlZCB3aGVuIGFuIFhGUk0gc3RhdGUgaXMgYWRkZWQgdGhhdCBhY3R1YWxseSB1c2VzIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBidWcgZml4OyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGlwX3JvdXRlX291dHB1dF9rZXlgIGFuZCBgaXA2X2RzdF9sb29rdXBfZmxvd2AuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGZpeCBpcyBib3RoIGZ1bmN0aW9uYWwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqcmVhY2hhYmxlKiB1bmRlciByZWFsLXdvcmxkIGNvbmRpdGlvbnMuCgpOb3csIGEgcXVpY2sgdGhvdWdodDogSSYjMzk7bSBwcmV0dHkgc3VyZSB3ZSBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCBpZiB3ZSYjMzk7cmUgaW50ZW5kaW5nIHRvIGNvbmZpZ3VyZSB0aGVzZSBYRlJNIHN0YXRlcyBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggaXMsIGdlbmVyYWxseSwgdGhlIGNhc2UuIFllcCwganVzdCBjb25maXJtZWQgaXQuIEFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfWEZSTWAgaXRzZWxmIGlzIGEgcHJlcmVxdWlzaXRlLiBJIHNob3VsZCBwcm9iYWJseSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC94ZnJtL0tjb25maWdgIHRvIGJlIHN1cmUsIGJ1dCBteSBndXQgdGVsbHMgbWUgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjAtXHQgIG5vIGxvbmdlciBuZWVkIFBGX0tFWSBzb2NrZXRzLiBQbGVhc2UgdXNlIHRoZSBuZXRsaW5rXG5uZXQveGZybS9LY29uZmlnOjEyMTpcdCAgaW50ZXJmYWNlIChYRlJNX1VTRVIpIHRvIGNvbmZpZ3VyZSBJUHNlYy5cbm5ldC94ZnJtL0tjb25maWctMTIyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIHdlJiMzOTtyZSBtb2RpZnlpbmcgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIHRoYXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYC4gUmlnaHQsIHNvIGBJUFY2YCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IHRvby4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyYWwgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIFRoZXNlIHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcyBmb3Igb3VyIGBGb2N1c1N5bWJvbHNgIGFwcHJvYWNoLiBDcnVjaWFsbHksIEkgc2VlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW4gdGhlIGhvdCBwYXRoOyB0aGV5IGFyZSBjYWxsZWQgcGVyaW9kaWNhbGx5LCBkZXBlbmRlbnQgb24gYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLiBUaGlzIG1ha2VzIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGJlY2F1c2UgYW55IHBlcmZvcm1hbmNlIGNvc3QgaXMgZ29pbmcgdG8gYmUgc21hbGwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIGZvciBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYENPTkZJR19YRlJNYCBpcyBmdW5kYW1lbnRhbC4gIFdlJiMzOTtsbCBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYCB0byBhY3R1YWxseSBjb25maWd1cmUgaXQuICBPZiBjb3Vyc2UsIGBDT05GSUdfSVBWNmAgY29tZXMgaW50byBwbGF5IGZvciB0aGUgSVB2NiBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZi4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzE9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9pbml0KHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo0MjpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00My1cdFx0XHRcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xMTg9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDQtXHRjYXNlIEFGX0lORVQ6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDU6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTQ2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNzQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlZXBhbGl2ZSBGdW5jdGlvbnMgZm9yIFN5bWJvbGljIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IsIEkgc3VzcGVjdCwgc29tZSBzb3J0IG9mIGNvZGUgYW5hbHlzaXMgb3Igc3ltYm9saWMgZXhlY3V0aW9uLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIE5vdywgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHNldCBvZiBzeW1ib2xzIGZvciB0aGUgYW5hbHlzaXMsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlbSBhbGwuCgpGaXJzdCwgYSBxdWljayBjaGVjay4uLmlzIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGEgc3RhdGljIGZ1bmN0aW9uPyBJdCBhcHBlYXJzIHRoYXQgaXQgaXMsIHllcy4gRXhjZWxsZW50LiBUaGlzIG1lYW5zIGl0IGlzbiYjMzk7dCBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBmaWxlcyBpbiBhIGdlbmVyaWMgd2F5LCBhbmQgc28gSSBzaG91bGQgYWRkIGl0IHRvIHRoZSBzeW1ib2xzIHRvIGJlIGFuYWx5emVkLCBzaW5jZSBpdCBpcyBhIGxpa2VseSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCBzaG91bGQgaW5kZWVkIGluY2x1ZGU6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gCgpOZXh0LCBJIHNlZSBhIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcG90ZW50aWFsbHkgY29uc2lkZXIuIFRoZXNlIGluY2x1ZGUgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYW5kIGBJUFY2YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtYXkgYmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGVzZSBzZXR0aW5ncy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBuYXR1cmUgb2YgYENPTkZJR19YRlJNYC4gSXMgaXQgYSBib29sZWFuIG9yIGEgdHJpc3RhdGU/IFRoaXMgd2lsbCBhZmZlY3QgaG93IEkgbW9kZWwgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIHRvIGdldCBhIGRlZmluaXRlIGFuc3dlciBvbiB0aGF0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDAzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYFhGUk1gIEJvb2xlYW4qKgoKT2theSwgc28gYFhGUk1gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBhIGJpbmFyeSBzdGF0ZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyBzZXQuIFRoZSBjb3JlIG9mIG15IGN1cnJlbnQgdGFzayBpcyBmaW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgcXVlc3Rpb24gb2YgdW5kZXJzdGFuZGluZyB0aGUgKndoeSogYmVoaW5kIHRoaXMgYm9vbGVhbi4gV2hhdCBjb25kaXRpb25zLCBvdGhlciB2YXJpYWJsZXMsIG9yIGZ1bmN0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIHN0YXRlIG9mIGBYRlJNYD8gTGV0IG1lIHRyYWNlIHRoZSBjb2RlIGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb25zIHdoZXJlIGBYRlJNYCYjMzk7cyB2YWx1ZSBpcyBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBvdGhlciBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBib29sZWFuLCB3aGV0aGVyIHRoYXQmIzM5O3MgdGhyb3VnaCBkaXJlY3QgYXNzaWdubWVudCwgbG9naWNhbCBvcGVyYXRpb25zLCBvciBmdW5jdGlvbiBjYWxscyB0aGF0IG1hbmlwdWxhdGUgaXQgaW5kaXJlY3RseS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNTY6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU3LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzk2LVx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWc6Mzk3Olx0c2VsZWN0IFhGUk1fSVBDT01QXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxubmV0L2lwdjYvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjQ5Olx0c2VsZWN0IFhGUk1fQUhcbm5ldC9pcHY2L0tjb25maWctNTAtXHRoZWxwXG4tLVxubmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjY0Olx0c2VsZWN0IFhGUk1fRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTY1LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03OS1cdGRlcGVuZHMgb24gSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy04MS1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDQtXHRzZWxlY3QgSU5FVDZfWEZSTV9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTA1Olx0c2VsZWN0IFhGUk1fSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwNi1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTExMj1jb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjExNDpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE1My1cdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjE1NDpcdHNlbGVjdCBYRlJNXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzoxNjpcdHNlbGVjdCBYRlJNXG5uZXQveGZybS9LY29uZmlnLTE3LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MjM9Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MjU6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTI2LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo4NjpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctODctXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz05Mz1jb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxubmV0L3hmcm0vS2NvbmZpZzo5NTpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctOTYtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG5uZXQveGZybS9LY29uZmlnOjEwODpcdHNlbGVjdCBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTA5LVx0c2VsZWN0IENSWVBUT1xuLS1cbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxMTQ6XHRzZWxlY3QgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTExNS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMjctXHRkZXBlbmRzIG9uIE5FVF9LRVlcbm5ldC94ZnJtL0tjb25maWc6MTI4Olx0c2VsZWN0IFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjA1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGhvdWdodCBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWEZSTSBjb25maWd1cmF0aW9uIGZvciBOQVQga2VlcGFsaXZlLiBJdCBsb29rcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkg4oCTIGl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBicmluZyBpbiB0aGUgZW50aXJlIFhGUk0gZnJhbWV3b3JrLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3MgdG8gd29ycnkgYWJvdXQuIE9mIGNvdXJzZSwgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBJUHY2LCBgSVBWNmAgaXMgYWxzbyBuZWNlc3NhcnkuIEJ1dCByZWFsbHksIGl0IHNlZW1zIGxpa2UgYFhGUk1fVVNFUmAgaXMgdGhlIGNvcmUgZGVwZW5kZW5jeSBoZXJlLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBlbmFibGUgZm9yIFhGUk0gdG8gd29yayBwcm9wZXJseT8gTm9wZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YC4gSSB3YW50IHRvIGVuc3VyZSB0aGVzZSBhcmUgcmVhY2hhYmxlLiBUaGV5IGFyZS4gVGhleSYjMzk7cmUgcmVhY2hlZCB2aWEgYG5hdF9rZWVwYWxpdmVfd29ya2Agd2hpY2ggaXMgc2NoZWR1bGVkIGJ5IGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAuIEFoYSEgVGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBYRlJNIHN0YXRlIGlzIGFkZGVkIG9yIGRlbGV0ZWQuIENydWNpYWxseSwgdGhlIFhGUk0gc3RhdGUgbmVlZHMgdG8gaGF2ZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgc2V0LiBUaGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUgYFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxgIGF0dHJpYnV0ZSBpbiBlaXRoZXIgYFhGUk1fTVNHX05FV1NBYCBvciBgWEZSTV9NU0dfVVBEU0FgLiBGYW50YXN0aWMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCYjMzk7cyBhbGwgaG9va2VkIHVwIQoKQWxyaWdodCwgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBYRlJNX1VTRVJgCiogICBgSVBWNmAKCkkmIzM5O20ga2VlcGluZyB0aGVzZSBzeW1ib2xzIGluIG1pbmQgYXMga2V5IHRvIHRyYWNrOgoKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAKKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRgCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciBOQVQga2VlcGFsaXZlLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB1c2VzIHN0YW5kYXJkIG5ldHdvcmsgZnVuY3Rpb25zIGxpa2UgYHVkcF9oZHJgIGFuZCBgaXBfcm91dGVfb3V0cHV0X2tleWAsIG5vdGhpbmcgc3BlY2lhbGl6ZWQgdGhlcmUuIFNvLCBub3RoaW5nIGVsc2UgdG8gYWN0aXZhdGUsIHRoYXQgaXMgcmVhc3N1cmluZy4KCkkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGEgYENPTkZJR19YRlJNX05BVGAgb3IgYSBzaW1pbGFyIGxvb2tpbmcgb25lLCBqdXN0IGluIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9OQVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA5MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRlJNIENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiBhbmQgdGhlIGFic2VuY2Ugb2YgYFhGUk1fTkFUYCBpcyB0aHJvd2luZyBhIHdyZW5jaCBpbiB0aGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCBgQ09ORklHX1hGUk1fVVNFUmAuIEkgbWVhbiwgdGhhdCB1c3VhbGx5IGdpdmVzIHVzIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3MgdG8gY29uZmlndXJlIFhGUk0gc3RhdGVzLCByaWdodD8gQWxyaWdodCwgeWVzLCBjb25maXJtaW5nIHRoYXQgYFhGUk1fVVNFUmAgaXMgc3VmZmljaWVudCBmb3IgY29uZmlndXJpbmcgdGhlIGNvcmUgWEZSTSBzdGF0ZXMgaXMgYSByZWxpZWYuCgpOb3csIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIEVTUCBzdGF0ZXMuIERvZXMgaXQgcmVxdWlyZSBgQ09ORklHX1hGUk1fRVNQYCBvciBwb3NzaWJseSBqdXN0IGBDT05GSUdfSU5FVF9FU1BgPyBUaGUgYG5hdF9rZWVwYWxpdmVfd29ya2AgZnVuY3Rpb24gd2Fsa3MgYElQUFJPVE9fRVNQYCBzdGF0ZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gRVNQIHN0YXRlcywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIGB4ZnJtX3N0YXRlX3dhbGtfaW5pdCgmYW1wO3dhbGssIElQUFJPVE9fRVNQLCBOVUxMKWAuIFNvLCB0aGUgcXVlc3Rpb24gcmVtYWluczogZG8gd2UgKm5lZWQqIGBJTkVUX0VTUGAgYXMgd2VsbD8gTGV0JiMzOTtzIGludmVzdGlnYXRlIHRoYXQgbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX0VTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzcxOlx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNzItXHRzZWxlY3QgWEZSTV9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozODQ6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZHJlc3NpbmcgRVNQIFN0YXRlIENyZWF0aW9uIGFuZCBNZW1vcnkgTGVha3MgaW4gTkFUIEtlZXBhbGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBoYW5kbGluZyBFU1Agc3RhdGVzIGNvcnJlY3RseS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcmUgdGhlIHR5cGljYWwgaW5ncmVkaWVudHMgZm9yIGNyZWF0aW5nIEVTUCBzdGF0ZXMuIEJ1dCwgdGhlIHF1ZXN0aW9uIG5hZ3MsIGNhbiB3ZSBzaWRlc3RlcCB0aGlzIGFuZCBjcmVhdGUgYW4gRVNQIHN0YXRlIHdpdGhvdXQgYElORVRfRVNQYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSBhIHllcyDigJMgd2UgY2FuIGNyZWF0ZSB0aGUgYHhmcm1fc3RhdGVgIHdpdGggYElQUFJPVE9fRVNQYCBldmVuIHdpdGhvdXQgYSByZWdpc3RlcmVkIHByb3RvY29sIGhhbmRsZXIuIEhvd2V2ZXIsIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBmdWxseSBmdW5jdGlvbmFsIHdpdGhvdXQgYElORVRfRVNQYC4gVG8gYmUgY29tcGxldGVseSBzYWZlIGFuZCBjb3JyZWN0LCBJIHNob3VsZCBpbmNsdWRlIGBJTkVUX0VTUGAgYW5kIGBJTkVUNl9FU1BgLiBHb29kLCBpdCBsb29rcyBsaWtlIGBJTkVUX0VTUGAgaXMgYSB0cmlzdGF0ZSwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBMZXQgbWUgYWRkIGJvdGggdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZC4KCk5vdywgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgcGF0Y2guIEFoLCBpdCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhlIGBza2JgIGlzIGFsbG9jYXRlZCBpbiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBhbmQgcGFzc2VkIGRvd24gdG8gdGhlIGBpcHY0YCBhbmQgYGlwdjZgIHNlbmQgZnVuY3Rpb25zLiBQcmV2aW91c2x5LCBpZiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIHJldHVybmVkIGFuIGVycm9yLCB0aGUgYGVycmAgdmFyaWFibGUgd2FzIHNldCBhbmQgdGhlbiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCBmcmVlIGBza2JgLiBIb2xkIG9uLi4uIHdoYXQgaWYgdGhlIGVycm9yIGhhcHBlbmVkICphZnRlciogdGhlIGBza2JgIHdhcyBwb3RlbnRpYWxseSB1c2VkIG9yIGNvbnN1bWVkPyBJJiMzOTttIGdldHRpbmcgYSBsaXR0bGUgYWhlYWQgb2YgbXlzZWxmLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgKmRvZXMqIGZyZWUgYHNrYmAgaWYgYW4gZXJyb3Igb2NjdXJzLgpgYGBjCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAga2EtJmd0O2VuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7CiAKIAlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmYW1wO2ZsNCk7Ci0JaWYgKElTX0VSUihydCkpCiYjNDM7CWlmIChJU19FUlIocnQpKSB7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIFBUUl9FUlIocnQpOwomIzQzOwl9CiAKIAlza2JfZHN0X3NldChza2IsICZhbXA7cnQtJmd0O2RzdCk7CiAKQEAgLTEwMSw2ICYjNDM7MTAzLDcgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWRzdCA9IGlwNl9kc3RfbG9va3VwX2Zsb3cobmV0LCBzaywgJmFtcDtmbDYsIE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkgewogCQlsb2NhbF91bmxvY2tfbmVzdGVkX2JoKCZhbXA7bmF0X2tlZXBhbGl2ZV9za19pcHY2LmJoX2xvY2spOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBQVFJfRVJSKGRzdCk7CiAJfQogCkBAIC0xMTgsNyAmIzQzOzEyMSw2IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAJCQkJCXNpemVvZihzdHJ1Y3QgaXB2NmhkcikpICYjNDM7CiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAljb25zdCB1OCBuYXRfa2FfcGF5bG9hZCA9IDB4RkY7Ci0JaW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIApAQCAtMTQwLDE2ICYjNDM7MTQyLDE3IEBAIHN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpCiAKIAlzd2l0Y2ggKGthLSZndDtmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCWVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7CiAJCWJyZWFrOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJY2FzZSBBRl9JTkVUNjoKLQkJZXJyID0gbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwomIzQzOwkJbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc2tiLCBrYSwgdWgpOwogCQlicmVhazsKICNlbmRpZgotCX0KLQlpZiAoZXJyKQomIzQzOwlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiBgYGAKWWVwLCBsb29rcyBsaWtlIGl0LiBga2ZyZWVfc2tiYCBpcyBub3cgY2FsbGVkIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHdoZW4gYSByb3V0aW5nIGVycm9yIG9jY3Vycy4gVGhpcyByZXNvbHZlcyB0aGUgbWVtb3J5IGxlYWsgYnkgZW5zdXJpbmcgdGhlIGBza2JgIGlzIGFsd2F5cyBmcmVlZCBpbiBjYXNlIG9mIGZhaWx1cmUgd2l0aGluIHRoZSBgKl9zZW5kYCBmdW5jdGlvbnMuIExvb2tzIGdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQyOlx0c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA0MzpcdFx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuICA0NDpcdHtcbiAgNDU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGthLVx1MDAzZW5ldDtcbiAgNDY6XHRcdHN0cnVjdCBmbG93aTQgZmw0O1xuICA0NzpcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gIDQ4Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gIDQ5Olx0XHRfX3U4IHRvcyA9IDA7XG4gIDUwOlx0XHRpbnQgZXJyO1xuICA1MTpcdFxuICA1MjpcdFx0Zmxvd2k0X2luaXRfb3V0cHV0KFx1MDAyNmZsNCwgMCAvKiBvaWYgKi8sIHNrYi1cdTAwM2VtYXJrLCB0b3MsXG4gIDUzOlx0XHRcdFx0ICAgUlRfU0NPUEVfVU5JVkVSU0UsIElQUFJPVE9fVURQLCAwLFxuICA1NDpcdFx0XHRcdCAgIGthLVx1MDAzZWRhZGRyLmE0LCBrYS1cdTAwM2VzYWRkci5hNCwga2EtXHUwMDNlZW5jYXBfZHBvcnQsXG4gIDU1Olx0XHRcdFx0ICAga2EtXHUwMDNlZW5jYXBfc3BvcnQsIHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpKTtcbiAgNTY6XHRcbiAgNTc6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG4gIDU4Olx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuICA1OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNjA6XHRcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuICA2MTpcdFx0fVxuICA2MjpcdFxuICA2MzpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA2NDpcdFxuICA2NTpcdFx0bG9jYWxfbG9ja19uZXN0ZWRfYmgoXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY0LmJoX2xvY2spO1xuICA2NjpcdFx0c2sgPSB0aGlzX2NwdV9yZWFkKG5hdF9rZWVwYWxpdmVfc2tfaXB2NC5zb2NrKTtcbiAgNjc6XHRcdHNvY2tfbmV0X3NldChzaywgbmV0KTtcbiAgNjg6XHRcdGVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgTlVMTCwgdG9zKTtcbiAgNjk6XHRcdHNvY2tfbmV0X3NldChzaywgXHUwMDI2aW5pdF9uZXQpO1xuICA3MDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjQuYmhfbG9jayk7XG4gIDcxOlx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI5NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEb3VibGUgRnJlZSBWdWxuZXJhYmlsaXR5IGluIE5BVCBLZWVwYWxpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgaXMgY29uc3VtaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb24gZXJyb3IsIHdoaWNoIGlzIGtleS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldCB1cCBzdWNoIHRoYXQgaWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbGVkLCBhbiBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBjYWxsIGNoYWluLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCB0aGVuIGZyZWUgdGhlIGBza2JgLiBIb3dldmVyLCBpZiBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBpdHNlbGYgZmFpbGVkLCBpdCBhbHJlYWR5IGZyZWVkIHRoZSBgc2tiYCwgbGVhZGluZyB0byBhIGNsYXNzaWMgZG91YmxlLWZyZWUgc2NlbmFyaW8hCgpFc3NlbnRpYWxseSwgdGhlcmUgYXJlIHR3byBkaXN0aW5jdCBmYWlsdXJlIHBhdGhzIHdlIG5lZWQgdG8gY29uc2lkZXIuIFRoZSBmaXJzdCBpbnZvbHZlcyByb3V0aW5nIGZhaWx1cmVzIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGBza2JgICp3YXNuJiMzOTt0KiBjb25zdW1lZCwgYW5kIHRoZSBzZWNvbmQgaW52b2x2ZXMgYWN0dWFsIHRyYW5zbWlzc2lvbiBmYWlsdXJlcyB3aGVyZSB0aGUgYHNrYmAgKndhcyogY29uc3VtZWQsIGJ1dCB0aGUgdHJhbnNtaXNzaW9uIGZhaWxlZC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFuZGxlcyByb3V0aW5nIGZhaWx1cmVzIGNvcnJlY3RseSwgYnV0IGl04oCZcyB0aGUgdHJhbnNtaXNzaW9uIGZhaWx1cmUgY2FzZSB3aGVyZSBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBjYXVzZXMgdGhlIHByb2JsZW0uCgpUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSBieSBjaGFuZ2luZyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MuIE5vdywgdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYHNrYmAgb24gZXJyb3IsICpvbmx5KiBpZiB0aGUgaW5pdGlhbCByb3V0aW5nIG9wZXJhdGlvbiBmYWlscy4gSWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbHMsIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBub3cgKm9ubHkqIGZyZWVzIGluIHRoZSBkZWZhdWx0LCBvciBzdWNjZXNzZnVsLCBjYXNlLiBUaGlzIGVuc3VyZXMgdGhlIGBza2JgIGlzIG9ubHkgZnJlZWQgb25jZSwgcmVnYXJkbGVzcyBvZiB0aGUgZmFpbHVyZSBwb2ludC4KClRoaXMgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBmaXguIEEgZG91YmxlIGZyZWUgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGV4cGxvaXRhdGlvbiwgYW5kIEkgYmVsaWV2ZSB0aGlzIGRlc2VydmVzIGltbWVkaWF0ZSBhdHRlbnRpb24gYW5kIHRob3JvdWdoIGZ1enppbmcuCgpNeSBjb25maWdzIGluY2x1ZGUgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBgSU5FVF9FU1BgIGVuYWJsZXMgYFhGUk1gIGZ1bmN0aW9uYWxpdHksIGFuZCBgWEZSTV9VU0VSYCBpcyBuZWVkZWQgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzLiBPa2F5LCBhbGwgY2hlY2tzIG91dCwgYW5kIHRoZXNlIGFyZSBhbGwgY29ycmVjdCBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGlzIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlIGJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0zMT1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX2luaXQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjQyOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NzU6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE3LVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTkte1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cdGNhc2UgQUZfSU5FVDpcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcdFx0bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc2tiLCBrYSk7XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXHRcdGJyZWFrO1xuLS1cbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cdGNhc2UgQUZfSU5FVDY6XG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNDk6XHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE1MC1cdFx0YnJlYWs7XG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkyLVx0aWYgKHNlbmRfa2VlcGFsaXZlKVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTkzOlx0XHRuYXRfa2VlcGFsaXZlX3NlbmQoXHUwMDI2a2EpO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlhGUk0gU3RhdGUgQ29uZmlndXJhdGlvbjogRXhwbG9yaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB3ZSYjMzk7cmUgY29uZmlndXJpbmcgWEZSTSBzdGF0ZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogYW0gSSBvdmVybG9va2luZyBhbnl0aGluZz8gSXMgYFhGUk1fVVNFUmAgdGhlICpvbmx5KiB3YXkgdG8gY29uZmlndXJlIHRoZXNlIHN0YXRlcz8gSSBrbm93IGl0JiMzOTtzIHRoZSBjb250ZW1wb3JhcnkgTmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdCYjMzk7cyB3aGF0IHdlJiMzOTt2ZSBwcmltYXJpbHkgYmVlbiB1c2luZy4KCkJ1dCwgaGFuZyBvbiwgdGhlcmUmIzM5O3MgYWxzbyBgTkVUX0tFWWAsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBQRl9LRVkgc29ja2V0IG1ldGhvZC4gSXQmIzM5O3Mgb2xkZXIsIGFyZ3VhYmx5IGxlc3MgZWxlZ2FudCwgYnV0IGl0JiMzOTtzIHN0aWxsIG91dCB0aGVyZS4gR2l2ZW4gdGhhdCB3ZSBoYXZlIGFuIGFjdGl2ZSBkaXNjdXNzaW9uIG9uIGl0LCBpdCBtaWdodCBiZSBiZW5lZmljaWFsIHRvIHN1cHBvcnQgaXQganVzdCB0byBjb3ZlciBvdXIgYmFzZXMuIFdoaWxlIGBYRlJNX1VTRVJgIGlzIHRoZSBwcmVmZXJyZWQgYW5kIG1vZGVybiBhcHByb2FjaCwgc3VwcG9ydGluZyBgTkVUX0tFWWAgY291bGQgcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9yIGFkZHJlc3MgbmljaGUgdXNlIGNhc2VzLiBJIHRoaW5rIHdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgYE5FVF9LRVlgIHN1cHBvcnQgYXMgd2VsbC4gSXTigJlzIGFuIG9wdGlvbiB0byBicm9hZGVuIGNvbXBhdGliaWxpdHkgYW5kIGZsZXhpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfS0VZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEwNj1jb25maWcgWEZSTV9JUENPTVBcbi0tXG5uZXQveGZybS9LY29uZmlnLTExMS1cbm5ldC94ZnJtL0tjb25maWc6MTEyOmNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTI0LVxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O1BGX0tFWSBNSUdSQVRFXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjEyNzpcdGRlcGVuZHMgb24gTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXHRzZWxlY3QgWEZSTV9NSUdSQVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5hdmlnYXRpbmcgdGhlIFhGUk0gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBgTkVUX0tFWWAgaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkLiBNYWtlcyBzZW5zZTsgYFhGUk1fVVNFUmAgaGFzIGJlZW4gdGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIGEgd2hpbGUgbm93LiBJdCYjMzk7cyB0aW1lIHRvIGZ1bGx5IHRyYW5zaXRpb24gYW5kIHN0YXJ0IHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBtb3JlIG1vZGVybiBmcmFtZXdvcmsuCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGluIG9yZGVyLiBXZSYjMzk7dmUgZ290IGBYRlJNX1VTRVJgLi4uIGJ1dCBkb2VzIGBYRlJNX05BVGAgc3RpbGwgZXhpc3Q/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBsZXQgbWUgcG9rZSBhcm91bmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCAqbmV0L2lwdjQvS2NvbmZpZyogaW4gcGFydGljdWxhci4gTmVlZCB0byBjb25maXJtIGlmIGl04oCZcyBzdGlsbCBpbiB0aGUgbWl4LCBhbmQgaG93IGl04oCZcyBkZWZpbmVkIG5vdywgaWYgYXQgYWxsLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMga2V5IHRvIGVuc3VyaW5nIHByb3BlciBoYW5kbGluZyBhbmQgaW50ZWdyYXRpb24gd2l0aCB0aGUgbGF0ZXN0IGFkdmFuY2VtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNX05BVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg0MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZCwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDb25maWd1cmF0aW9uKioKCk5vcGUuIFRoYXQgaW5pdGlhbCBsaW5lIG9mIGlucXVpcnkganVzdCBkaWRuJiMzOTt0IHBhbiBvdXQsIGRpZG4mIzM5O3QgaXQ/IE9rYXksIGJhY2sgdG8gYmFzaWNzLiBJZiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHJldHJhY2UgbXkgc3RlcHMgYW5kIGNvbnNpZGVyIHRoZSBtb3N0IGxpa2VseSBwb2ludHMgb2YgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHRoZSBgWEZSTWAgc2V0dGluZ3MgaWYgSSYjMzk7bSBoYXZpbmcgaXNzdWVzLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBvdmVyc2lnaHRzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYRlJNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMwND1jb25maWcgTkVUX0lQVlRJXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMDctXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XHRzZWxlY3QgWEZSTVxubmV0L2lwdjQvS2NvbmZpZy0zMDktXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbm5ldC9pcHY0L0tjb25maWctMzQwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEFIIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcdHNlbGVjdCBYRlJNX0FIXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozNTY6XHRzZWxlY3QgWEZSTV9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU3LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6Mzg0Olx0ZGVwZW5kcyBvbiBYRlJNIFx1MDAyNlx1MDAyNiBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L2lwdjQvS2NvbmZpZy0zODYtXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcdHNlbGVjdCBYRlJNX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM5ND1jb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzozOTY6XHRzZWxlY3QgSU5FVF9YRlJNX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozOTc6XHRzZWxlY3QgWEZSTV9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk4LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9NDA0PWNvbmZpZyBJTkVUX1RBQkxFX1BFUlRVUkJfT1JERVJcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjkyCgkJCQkJCQlvdXRwdXQ6IDE1NwoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgWEZSTSBOQVQgS2VlcGFsaXZlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgcGlubmVkIGRvd24gdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGhlcmUuIEl0IGxvb2tzIGxpa2UgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYXJlIHRoZSBrZXkgZHJpdmVycyBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LCBhcyBleHBlY3RlZCBpbiBYRlJNLgoKTGV0IG1lIGJyZWFrIGRvd24gd2hhdCBJJiMzOTt2ZSBmb3VuZCwgY29uY2lzZWx5OgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCB0aGUgaWRlbnRpZmllZCBjb2RlIHBhdGhzIGhhdmUgZXhwbG9pdGFibGUgcG90ZW50aWFsLgoqICAgKipGb2N1c1N5bWJvbHM6KiogU3BlY2lmaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyaWMgYG5hdF9rZWVwYWxpdmVfc2VuZGAgYXJlIHRoZSBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBkaXNjb3ZlcmVkIGVycm9yIGhhbmRsaW5nLgoqICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gYnVpbGQgd2l0aCBgWEZSTV9VU0VSYCwgYElORVRfRVNQYCwgYElORVQ2X0VTUGAsIGFuZCBgSVBWNmAgY29uZmlndXJlZC4gYFhGUk1fVVNFUmAgaXMgY3J1Y2lhbCBmb3IgYWxsb3dpbmcgdXNlcnNwYWNlIGludGVyYWN0aW9uLCB3aGlsZSB0aGUgRVNQIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSB0aGUgdnVsbmVyYWJsZSBOQVQga2VlcGFsaXZlIGZ1bmN0aW9uYWxpdHksIGFuZCBJUHY2IGlzIGltcGxpY2F0ZWQuCiogICAqKlJlYXNvbmluZzoqKiBUaGUgYnVnIGlzIGEgZG91YmxlIGZyZWUgaXNzdWUuIFJvdXRpbmcgZmFpbHVyZXMgd2l0aGluIHRoZSBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHBhdGhzIGluY29ycmVjdGx5IHJlbGVhc2UgYW4gYHNrYmAuIFRoZSBrZXkgaGVyZSBpcyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gWEZSTS4gVGhpcyBtZWFucyBpdCYjMzk7cyBub3QganVzdCBhIHB1cmVseSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgZXJyb3I7IHRoaXMgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LCB3aGVuIG1pc2NvbmZpZ3VyZWQsIGNhbiBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLiBUaGlzIHVzZXJzcGFjZSByZWFjaGFiaWxpdHksIHNwZWNpZmljYWxseSB0aGUgYWJpbGl0eSB0byBzZXQgWEZSTSBzdGF0ZSB3aXRoIGEga2VlcGFsaXZlIGludGVydmFsLCBjb25maXJtcyB0aGUgZXhwbG9pdGFiaWxpdHkgZnJvbSBhIGRlc2lnbiBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1AmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY0JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZF9pcHY2JiMzNDssCiAgICAmIzM0O25hdF9rZWVwYWxpdmVfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQmIzM0OywKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYmIzM0OywKICAgICYjMzQ7bmF0X2tlZXBhbGl2ZV9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlIGZyZWUgb2YgYW4gc2tiIGluIHRoZSBlcnJvciBwYXRoIG9mIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0IGFuZCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NiB3aGVuIHJvdXRpbmcgZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBjb25maWd1cmluZyBhbiBYRlJNIHN0YXRlIHdpdGggYSBOQVQga2VlcGFsaXZlIGludGVydmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjM6MzIuNjcxNzU1OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3MjM5MDUyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjM6MzIuNjcxNzY1NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ3MjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MjU1NmM1ODMwMzBhMjFmZjNlYWU2MjBlMzgyNDU4ZmUxZTU2YzFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6MjM6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbmluZGV4IDQ1ODkzMTA2MmEwNGVmLi5lYjFiNmY2NzczOWUxZCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXFxuQEAgLTU1LDggKzU1LDEwIEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAga2EtXFx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XFxuIFxcbiBcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcXHUwMDI2Zmw0KTtcXG4tXFx0aWYgKElTX0VSUihydCkpXFxuK1xcdGlmIChJU19FUlIocnQpKSB7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuK1xcdH1cXG4gXFxuIFxcdHNrYl9kc3Rfc2V0KHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXG5AQCAtMTAxLDYgKzEwMyw3IEBAIHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0ZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhuZXQsIHNrLCBcXHUwMDI2Zmw2LCBOVUxMKTtcXG4gXFx0aWYgKElTX0VSUihkc3QpKSB7XFxuIFxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNm5hdF9rZWVwYWxpdmVfc2tfaXB2Ni5iaF9sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuIFxcdH1cXG4gXFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbiBcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuIFxcdGNvbnN0IHU4IG5hdF9rYV9wYXlsb2FkID0gMHhGRjtcXG4tXFx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCB1ZHBoZHIgKnVoO1xcbiBcXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gXFxuIFxcdHN3aXRjaCAoa2EtXFx1MDAzZWZhbWlseSkge1xcbiBcXHRjYXNlIEFGX0lORVQ6XFxuLVxcdFxcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbitcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcXG4gXFx0XFx0YnJlYWs7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRjYXNlIEFGX0lORVQ2Olxcbi1cXHRcXHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxuK1xcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcXG4gXFx0XFx0YnJlYWs7XFxuICNlbmRpZlxcbi1cXHR9XFxuLVxcdGlmIChlcnIpXFxuK1xcdGRlZmF1bHQ6XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjMzLjI2MDQxMTYyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMTM1MjMwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NlwiLFxuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBvZiBhbiBza2IgaW4gdGhlIGVycm9yIHBhdGggb2YgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQgYW5kIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2IHdoZW4gcm91dGluZyBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBYRlJNIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIGFuIFhGUk0gc3RhdGUgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjcyNTU2YzU4MzAzMGEyMWZmM2VhZTYyMGUzODI0NThmZTFlNTZjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjIzOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMgYi9uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1xuaW5kZXggNDU4OTMxMDYyYTA0ZWYuLmViMWI2ZjY3NzM5ZTFkIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4rXHRpZiAoSVNfRVJSKHJ0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICsxMDMsNyBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KG5ldCwgc2ssIFx1MDAyNmZsNiwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpIHtcbiBcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjYuYmhfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkc3QpO1xuIFx0fVxuIFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0Y29uc3QgdTggbmF0X2thX3BheWxvYWQgPSAweEZGO1xuLVx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4gXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcbiBcdHN3aXRjaCAoa2EtXHUwMDNlZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4tXHRcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xuK1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4rXHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbiBcdFx0YnJlYWs7XG4gI2VuZGlmXG4tXHR9XG4tXHRpZiAoZXJyKVxuK1x0ZGVmYXVsdDpcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBcbiBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzozMy4yNjA0MTQyNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE3NzAzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBYRlJNIE5BVCBLZWVwYWxpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNgLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgYSBtZW1vcnkgbGVhayB3aXRoIGBza2JgIGluIHRoZSBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIGZ1bmN0aW9ucy4gQXBwYXJlbnRseSwgdGhpcyBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcm91dGluZyBmYWlscy4gSW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBhbHNvIHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGBuYXRfa2VlcGFsaXZlX3NlbmRgIOKAkyBtb3ZpbmcgYXdheSBmcm9tIHVzaW5nIGBlcnJgIGFuZCBjZW50cmFsaXppbmcgYHNrYmAgZnJlZWluZyBpbiB0aGUgYGRlZmF1bHRgIGNhc2UsIHdoaWxlIGFsbG93aW5nIHRoZSBJUHY0IGFuZCBJUHY2IHNwZWNpZmljIGZ1bmN0aW9ucyB0byBoYW5kbGUgaXQgaWYgdGhleSBlbmNvdW50ZXIgYW4gZXJyb3IuIFRoaXMgaXMgZ29vZDsgdGlkeWluZyB1cCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgYSBwbHVzLCBhbmQgc2hvdWxkIHNpbXBsaWZ5IGRlYnVnZ2luZyBkb3duIHRoZSByb2FkLlxuXG5JIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgY2hhbmdlcy4gRmlyc3QsIEnigJlsbCBvcGVuIHVwIGBuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY2AgaXRzZWxmIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBzZWUgaG93IHRoZSBleGlzdGluZyBjb2RlIGZ1bmN0aW9ucywgYW5kIHVuZGVyc3RhbmQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgc3RhdGVzLiBUaGVuLCBzaW5jZSB0aGlzIGlzIFhGUk0tcmVsYXRlZCwgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IHNlYXJjaCB0aHJvdWdoIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIGFuZCBgbmV0L3hmcm0vS2NvbmZpZ2AgZm9yIGBDT05GSUdfWEZSTWAgb3IgYW55dGhpbmcgc2ltaWxhciB0byBjb25maXJtIHdoYXQgWEZSTSBmZWF0dXJlcyBhcmUgaW4gdXNlIG9yIG5lZWRlZCBmb3IgdGhpcyBtb2R1bGUsIGFuZCBob3cgdGhlIGNoYW5nZXMgbWlnaHQgYWZmZWN0IHRob3NlLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBkZXBlbmRpbmcgb24gYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzozOC4yNzgxMTk0MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDEwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9uYXRfa2VlcGFsaXZlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vTWFrZWZpbGU9MTQ9b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNzpcXHRcXHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xcbm5ldC94ZnJtL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19YRlJNX1NUQVRJU1RJQ1MpICs9IHhmcm1fcHJvYy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjM4LjM3MzYyOTQ3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTg2Nzk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19YRlJNYCBvcHRpb24gaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0IG11Y2ggaXMgY2xlYXIuIE5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dCB0aGF0IG1pZ2h0IGFsc28gbmVlZCBvdXIgYXR0ZW50aW9uLiBCYXNlZCBvbiB0aGUgY2hhbmdlcywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgdGhlIHByaW1hcnkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGJhc2UgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZnVuY3Rpb24gaXRzZWxmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIGxpa2VseSBjb3JlIGNvbXBvbmVudHMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHN1cmUgb2YgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcHMgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgYW5kIHBvc3NpYmx5IGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbkl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eGAgLSBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIG5hbWUuIEdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIGBuYXRfa2VlcGFsaXZlX3NlbmRgLCBsZXQncyBmb2N1cyBvdXIgYXR0ZW50aW9uIHRoZXJlIGZvciBub3cgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBhcmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjQyLjA3MjMxMTczOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUwNDYyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMxPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfaW5pdChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NDI6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjc1OnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTQ1OlxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0OTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTUwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTItXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MzpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjQyLjE4NzM2NTEzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzczNzAxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQVQgS2VlcGFsaXZlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCwgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRgLiBUaGV5J3JlIGFsbCBzdGF0aWMsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkncmUgaW50ZXJuYWwgdG8gYSBtb2R1bGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdGhlIGVudHJ5IHBvaW50LiBXaGVyZSBkb2VzIHRoZSB3b3JrIGFjdHVhbGx5ICpzdGFydCo/XG5cbkFoLCByaWdodCwgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgLiBUaGF0J3MgbGlrZWx5IHRoZSBvbmUuIEFuZCBnaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGEgc2luZ2xlIHVuaXQgb2Ygd29yay4gTXkgZ3V0IHNheXMgdGhhdCBpdCdzIHByb2JhYmx5IGdldHRpbmcgY2FsbGVkIGZyb20gZWl0aGVyIGEgd29ya3F1ZXVlIG9yIGEgdGltZXIsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgYXN5bmNocm9ub3VzIHRhc2tzIGxpa2UgdGhlc2UuXG5cblRvIGNvbmZpcm0gYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgSSBzaG91bGQgZGVmaW5pdGVseSBqdW1wIG92ZXIgdG8gYHhmcm1fbmF0X2tlZXBhbGl2ZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCBob3cgdGhpcyBhbGwgZml0cyB3aXRoaW4gdGhlIGxhcmdlciBYRlJNIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDcsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0NS43NjQ3Mzg0MzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxNTE5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0xNTg9c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHgge1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTYyLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE2MzpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE2NC17XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yMDA9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIxMC1cXHR4ZnJtX3N0YXRlX3dhbGtfaW5pdChcXHUwMDI2d2FsaywgSVBQUk9UT19FU1AsIE5VTEwpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIxMTpcXHR4ZnJtX3N0YXRlX3dhbGsobmV0LCBcXHUwMDI2d2FsaywgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZSwgXFx1MDAyNmN0eCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEyLVxcdHhmcm1fc3RhdGVfd2Fsa19kb25lKFxcdTAwMjZ3YWxrLCBuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0NS44NjE4OTgyMzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMjAzMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgdGhlIE5BVCBLZWVwYWxpdmUgV29ya3F1ZXVlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5hdF9rZWVwYWxpdmVfd29ya2Agd29ya3F1ZXVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGF0J3MgdGhlIHNjaGVkdWxpbmcgbWVjaGFuaXNtIGhlcmU/IEhvdyBkb2VzIHRoaXMgdGhpbmcgYWN0dWFsbHkgZ2V0IHRyaWdnZXJlZD9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2VxdWVuY2luZyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjYXVzZSBgbmF0X2tlZXBhbGl2ZV93b3JrYCB0byBleGVjdXRlLiBLbm93aW5nIHRoZSBzY2hlZHVsaW5nIHBhdGggaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aXRoaW4gdGhlIE5BVCBzeXN0ZW0uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSB0byBzZWUgaG93IGl0J3MgZW5xdWV1ZWQgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IHJ1bnMuIEFyZSB3ZSB0YWxraW5nIHRpbWVycywgaW50ZXJydXB0cywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBtZXRob2Qgb2Ygc2NoZWR1bGluZyB3aWxsIHRlbGwgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHVyZ2VuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0OC45MjIxMDQzOTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDk3MTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3dvcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTU4OnN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IHtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNTktXFx0dGltZTY0X3QgbmV4dF9ydW47XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjItXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTYzOnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY0LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoxNjU6XFx0c3RydWN0IG5hdF9rZWVwYWxpdmVfd29ya19jdHggKmN0eCA9IHB0cjtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjYtXFx0Ym9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTk5LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwMDpzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTIwMS17XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjAyOlxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4IGN0eDtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMDMtXFx0c3RydWN0IHhmcm1fc3RhdGVfd2FsayB3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjA4LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjIwOTpcXHRuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldCwgeGZybS5uYXRfa2VlcGFsaXZlX3dvcmsud29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEwLVxcdHhmcm1fc3RhdGVfd2Fsa19pbml0KFxcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjExOlxcdHhmcm1fc3RhdGVfd2FsayhuZXQsIFxcdTAwMjZ3YWxrLCBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlLCBcXHUwMDI2Y3R4KTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTItXFx0eGZybV9zdGF0ZV93YWxrX2RvbmUoXFx1MDAyNndhbGssIG5ldCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjEzLVxcdGlmIChjdHgubmV4dF9ydW4pXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MjE0OlxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayxcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yMTUtXFx0XFx0XFx0XFx0ICAgICAgKGN0eC5uZXh0X3J1biAtIGN0eC5ub3cpICogSFopO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQ4PXZvaWQgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNTUtXFx0bmV0ID0geHNfbmV0KHgpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI1NjpcXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXFx1MDAyNm5ldC1cXHUwMDNleGZybS5uYXRfa2VlcGFsaXZlX3dvcmssIDApO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1Ny19XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNTk9aW50IF9fbmV0X2luaXQgeGZybV9uYXRfa2VlcGFsaXZlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjAte1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI2MTpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yaywgbmF0X2tlZXBhbGl2ZV93b3JrKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0yNjItXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNjU9aW50IHhmcm1fbmF0X2tlZXBhbGl2ZV9uZXRfZmluaShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY2LXtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNjc6XFx0ZGlzYWJsZV9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLm5hdF9rZWVwYWxpdmVfd29yayk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjY4LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo0OS4wMzcxNTQxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwMzgwOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOQVQgS2VlcGFsaXZlIE1lY2hhbmlzbSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZGAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgdGhlIHRyaWdnZXIgZm9yIGBuYXRfa2VlcGFsaXZlX3dvcmtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTdGF0ZSB1cGRhdGVzIGtpY2sgb2ZmIHRoZSBrZWVwYWxpdmUgcHJvY2Vzcy5cIiBCdXQgbm93IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCouIFdoZXJlIGV4YWN0bHkgaXMgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBiZWluZyBjYWxsZWQ/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIHNjZW5hcmlvcyB0aGlzIGtlZXBhbGl2ZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gaGFuZGxlLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIHRyYWNlIGJhY2sgZnJvbSBoZXJlIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Mi4wOTc1MzkxMTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDgyODQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MjQwPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2tfZmluaShzdHJ1Y3Qgc29ja19iaF9sb2NrZWQgX19wZXJjcHUgKnNvY2tzKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMjQ3LVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjI0ODp2b2lkIHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI0OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODExPWludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgzMi1cXHRcXHRuZXQtXFx1MDAzZXhmcm0uc3RhdGVfbnVtLS07XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgzMzpcXHRcXHR4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZCh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODM0LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xNzE1PXN0YXRpYyB2b2lkIF9feGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTc1OS1cXHR4ZnJtX2hhc2hfZ3Jvd19jaGVjayhuZXQsIHgtXFx1MDAzZWJ5ZHN0Lm5leHQgIT0gTlVMTCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE3NjA6XFx0eGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWQoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE3NjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Mi4yMDIzNzcxNjZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0OTgwNzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTkFUIEtlZXBhbGl2ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyB0aGUgYHhmcm1fbmF0X2tlZXBhbGl2ZV9zdGF0ZV91cGRhdGVkYCBmdW5jdGlvbiBpcyB0aGUga2V5IHRyaWdnZXIgaGVyZS4gSXQncyBjYWxsZWQgZXZlcnkgdGltZSBhbiB4ZnJtIHN0YXRl4oCUZWl0aGVyIGEgbmV3IG9uZSBpcyBhZGRlZCBvciBhbiBleGlzdGluZyBvbmUgcmVtb3ZlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBhbnkgY2hhbmdlIGluIHRoZSBzdGF0ZSB0YWJsZSBuZWNlc3NpdGF0ZXMgYSBjaGVjayBvbiB3aGV0aGVyIE5BVCBrZWVwYWxpdmVzIGFyZSBuZWVkZWQuIFRoaXMgdGhlbiBzY2hlZHVsZXMgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGlzIGEgd29yayBxdWV1ZSBpdGVtLiBJJ20gZ3Vlc3NpbmcgdGhpcyB3b3JrIGl0ZW0ncyBwdXJwb3NlIGlzIHRvIGl0ZXJhdGUgb3ZlciAqYWxsKiBleGlzdGluZyB4ZnJtIHN0YXRlcy4gQW5kIHdpdGhpbiB0aGF0IGxvb3AsIGl0IGNhbGxzIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBmb3IgZWFjaCBzdGF0ZS5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUga2VlcGFsaXZlIHByb2Nlc3Mgc2VlbXMgdG8gbGllIHdpdGhpbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gd2hlbiBgc2VuZF9rZWVwYWxpdmVgIGlzIHNldCB0byB0cnVlIGJlY2F1c2UgKnRoYXQqIGRlY2lkZXMgd2hldGhlciB3ZSBzZW5kIGEga2VlcGFsaXZlIHBhY2tldCBvciBub3QuIFRoZSBmdW5jdGlvbiBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdGhlbiBjYWxscyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCwgd2hpY2ggZGlzcGF0Y2hlcyB0byBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIG9yIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGRlcGVuZGluZyBvbiB0aGUgSVAgdmVyc2lvbi5cblxuVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGBzZW5kX2tlZXBhbGl2ZWAuIEkgbmVlZCB0byBkaWcgaW50byBgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBrZWVwYWxpdmUgaXMgYWN0dWFsbHkgc2VudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBsb2dpYyB0byBldmFsdWF0ZSB3aGV0aGVyIG9yIG5vdCBrZWVwYWxpdmUgcGFja2V0cyBhcmUgdG8gYmUgc2VudCBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjIzOjU2LjU1MjE4Nzc3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTA2Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbmRfa2VlcGFsaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTY1LVxcdHN0cnVjdCBuYXRfa2VlcGFsaXZlX3dvcmtfY3R4ICpjdHggPSBwdHI7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTY2OlxcdGJvb2wgc2VuZF9rZWVwYWxpdmUgPSBmYWxzZTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNjctXFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODYtXFx0XFx0bmF0X2tlZXBhbGl2ZV9pbml0KFxcdTAwMjZrYSwgeCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTg3OlxcdFxcdHNlbmRfa2VlcGFsaXZlID0gdHJ1ZTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xODgtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkxLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MjpcXHRpZiAoc2VuZF9rZWVwYWxpdmUpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTkzLVxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZChcXHUwMDI2a2EpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyMzo1Ni42NjYxMDA2MDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwOTIxNzg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgYG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGVgIGZ1bmN0aW9uLiBJIHNlZSB0aGlzIGFzIHRoZSBjb3JlIG9mIHRoZSBrZWVwYWxpdmUgbWVjaGFuaXNtLCB0aGUgdW5pdCBvZiB3b3JrIHRoYXQga2VlcHMgb3VyIE5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiAoTkFUKSBzZXNzaW9ucyBhbGl2ZS4gSeKAmW0gdGhpbmtpbmcsIHRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gV2UncmUgdGFsa2luZyBhYm91dCB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgZW5zdXJpbmcgdGhvc2UgYmluZGluZ3MgZG9u4oCZdCB0aW1lIG91dCwgbWFraW5nIHN1cmUgdHJhZmZpYyBjb250aW51ZXMgdG8gZmxvdyBzbW9vdGhseSB0aHJvdWdoIHRoZSBOQVQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBOQVQgdGFibGVzIG9yIGNvbnRleHRzIOKAkyBpcyB0aGlzIGEgc2hhcmVkIHJlc291cmNlIHNjZW5hcmlvIHdpdGggdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtPyBPciBkb2VzIGVhY2ggTkFUIGtlZXAgdHJhY2sgb2YgaXRzIG93bj8gVGhlIGRldmls4oCZcyBpbiB0aGUgZGV0YWlscyB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB0aGF04oCZcyB3aGVyZSBhbGwgdGhlIGJ1Z3MgdGVuZCB0byBoaWRlIGFuZCB0aGF0IGlzIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDAuMDc1MzIxMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYzLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYzOlxcdHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuIDE2NDpcXHR7XFxuIDE2NTpcXHRcXHRzdHJ1Y3QgbmF0X2tlZXBhbGl2ZV93b3JrX2N0eCAqY3R4ID0gcHRyO1xcbiAxNjY6XFx0XFx0Ym9vbCBzZW5kX2tlZXBhbGl2ZSA9IGZhbHNlO1xcbiAxNjc6XFx0XFx0c3RydWN0IG5hdF9rZWVwYWxpdmUga2E7XFxuIDE2ODpcXHRcXHR0aW1lNjRfdCBuZXh0X3J1bjtcXG4gMTY5OlxcdFxcdHUzMiBpbnRlcnZhbDtcXG4gMTcwOlxcdFxcdGludCBkZWx0YTtcXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0aW50ZXJ2YWwgPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbiAxNzM6XFx0XFx0aWYgKCFpbnRlcnZhbClcXG4gMTc0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRkZWx0YSA9IChpbnQpKGN0eC1cXHUwMDNlbm93IC0geC1cXHUwMDNlbGFzdHVzZWQpO1xcbiAxNzk6XFx0XFx0aWYgKGRlbHRhIFxcdTAwM2MgaW50ZXJ2YWwpIHtcXG4gMTgwOlxcdFxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfZXhwaXJhdGlvbiA9IGN0eC1cXHUwMDNlbm93ICsgaW50ZXJ2YWwgLSBkZWx0YTtcXG4gMTgxOlxcdFxcdFxcdG5leHRfcnVuID0geC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9leHBpcmF0aW9uO1xcbiAxODI6XFx0XFx0fSBlbHNlIGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2V4cGlyYXRpb24gXFx1MDAzZSBjdHgtXFx1MDAzZW5vdykge1xcbiAxODM6XFx0XFx0XFx0bmV4dF9ydW4gPSB4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2V4cGlyYXRpb247XFxuIDE4NDpcXHRcXHR9IGVsc2Uge1xcbiAxODU6XFx0XFx0XFx0bmV4dF9ydW4gPSBjdHgtXFx1MDAzZW5vdyArIGludGVydmFsO1xcbiAxODY6XFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV9pbml0KFxcdTAwMjZrYSwgeCk7XFxuIDE4NzpcXHRcXHRcXHRzZW5kX2tlZXBhbGl2ZSA9IHRydWU7XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbiAxOTM6XFx0XFx0XFx0bmF0X2tlZXBhbGl2ZV9zZW5kKFxcdTAwMjZrYSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGlmICghY3R4LVxcdTAwM2VuZXh0X3J1biB8fCBuZXh0X3J1biBcXHUwMDNjIGN0eC1cXHUwMDNlbmV4dF9ydW4pXFxuIDE5NjpcXHRcXHRcXHRjdHgtXFx1MDAzZW5leHRfcnVuID0gbmV4dF9ydW47XFxuIDE5NzpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDAuMDc1NDExNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNDYzOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaW4gWEZSTSBTdGF0ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBgeC1cdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gVGhlIGNvZGUncyBjbGVhcmx5IGV4cGVjdGluZyB0aGlzIHZhbHVlIHRvIGJlIG5vbi16ZXJvIGF0IHNvbWUgcG9pbnQsIGFuZCBteSBleHBlcmllbmNlIHNheXMgdGhhdCBpdCdzIHByb2JhYmx5IHNldCBkdXJpbmcgdGhlIFhGUk0gc3RhdGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBNYWtlcyBzZW5zZTsgTkFUIGtlZXBhbGl2ZXMgd291bGQgYmUgY29uZmlndXJlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGF0ZS4gTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgb3IgbW9kaWZpZWQuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbGAgaXMgYWN0dWFsbHkgYXNzaWduZWQgYSB2YWx1ZS4gSSdsbCBzdGFydCB3aXRoIGEgY29kZSBzZWFyY2gsIGxvb2tpbmcgZm9yIGFzc2lnbm1lbnRzIHRvIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMDUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjAzLjQ5MDA1NDYyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MjYzMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTE2Mz1zdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfd29ya19zaW5nbGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBjb3VudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTcxLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE3MjpcXHRpbnRlcnZhbCA9IHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWw7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTczLVxcdGlmICghaW50ZXJ2YWwpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYz0yNDg9dm9pZCB4ZnJtX25hdF9rZWVwYWxpdmVfc3RhdGVfdXBkYXRlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1MS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzoyNTI6XFx0aWYgKCF4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTI1My1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ2NDI9c3RhdGljIHZvaWQgeGZybV9taWdyYXRlX2NvcHlfb2xkKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NjQ3LVxcdG1wLVxcdTAwM2VuZXdfcmVxaWQgICAgICAgICAgICAgID0geC1cXHUwMDNlcHJvcHMucmVxaWQ7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0NjQ4OlxcdG1wLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID0geC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbDtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2NDktXFx0bXAtXFx1MDAzZW1hcHBpbmdfbWF4YWdlICAgICAgICAgPSB4LVxcdTAwM2VtYXBwaW5nX21heGFnZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTY4PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjAyOC1cXHRcXHR4LVxcdTAwM2VtYXBwaW5nX21heGFnZSA9IG0tXFx1MDAzZW1hcHBpbmdfbWF4YWdlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyMDI5OlxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSBtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yMDMwLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMTk5PWludCBfX3hmcm1faW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjYtXFx0eC1cXHUwMDNlb3V0ZXJfbW9kZSA9ICpvdXRlcl9tb2RlO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMjY3OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMyNjgtXFx0XFx0aWYgKHgtXFx1MDAzZWRpciAhPSBYRlJNX1NBX0RJUl9PVVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk3NC1cXHRpZiAoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0pXFxubmV0L3hmcm0veGZybV91c2VyLmM6OTc1OlxcdFxcdHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk3Ni1cXHRcXHRcXHRubGFfZ2V0X3UzMihhdHRyc1tYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMXSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMzYzPXN0YXRpYyBpbnQgY29weV90b191c2VyX3N0YXRlX2V4dHJhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2Ni1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNDY3OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTQ2OC1cXHRcXHRyZXQgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTQ2OTpcXHRcXHRcXHRcXHQgIHgtXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE0NzAtXFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMyMjI9c3RhdGljIGludCBidWlsZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjY4LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMyNjk6XFx0aWYgKG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjcwLVxcdFxcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjcxOlxcdFxcdFxcdFxcdCAgbS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzI3Mi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzI5MD1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMjk4LVxcdFxcdChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMjk5OlxcdFxcdChtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgK1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMDAtXFx0XFx0KGRpciA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpIDogMCk7IC8qIFhGUk1BX1NBX0RJUiAqL1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzMyND1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIHgtXFx1MDAzZW1hcHBpbmdfbWF4YWdlKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDMzOlxcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyX2RlZmF1bHQoYXR0cnNbWEZSTUFfTkFUX0tFRVBBTElWRV9JTlRFUlZBTF0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQzNDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQzNS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0ODUtXFx0bS5tYXBwaW5nX21heGFnZSA9IHhjLVxcdTAwM2VtYXBwaW5nX21heGFnZTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDg2OlxcdG0ubmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IHhjLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0ODctXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz00MDIwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fc2FfbGVuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtNDA2OC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo0MDY5OlxcdGlmICh4LVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjQwNzA6XFx0XFx0bCArPSBubGFfdG90YWxfc2l6ZShzaXplb2YoeC1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTQwNzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjAzLjk4NDMyNDg5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgwNDQ1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgYFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxgIGF0dHJpYnV0ZSwgd2hpY2gsIG9mIGNvdXJzZSwgc2V0cyB0aGUgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLiBJIGtub3cgdGhpcyBpcyBhbGwgcGFydCBvZiB0aGUgWEZSTSBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBJUHNlYy4gVGhlIGNoYW5nZXMgZm9jdXMgb24gdGhvc2UgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCwgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCwgYW5kIHRoZSBnZW5lcmljIGBuYXRfa2VlcGFsaXZlX3NlbmRgIGZ1bmN0aW9ucy4gQ2xlYXJseSwgdGhlc2UgYXJlIHRyaWdnZXJlZCB2aWEgYG5hdF9rZWVwYWxpdmVfd29ya2AsIHdoaWNoIGdldHMgc2NoZWR1bGVkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBhZGRlZCB0aGF0IGFjdHVhbGx5IHVzZXMgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgLlxuXG5UaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYnVnIGZpeDsgaXQncyBhZGRyZXNzaW5nIGEgbWVtb3J5IGxlYWsgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGlwX3JvdXRlX291dHB1dF9rZXlgIGFuZCBgaXA2X2RzdF9sb29rdXBfZmxvd2AuIFRoYXQncyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBmaXggaXMgYm90aCBmdW5jdGlvbmFsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnJlYWNoYWJsZSogdW5kZXIgcmVhbC13b3JsZCBjb25kaXRpb25zLlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogSSdtIHByZXR0eSBzdXJlIHdlIG5lZWQgYENPTkZJR19YRlJNX1VTRVJgIGlmIHdlJ3JlIGludGVuZGluZyB0byBjb25maWd1cmUgdGhlc2UgWEZSTSBzdGF0ZXMgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIGlzLCBnZW5lcmFsbHksIHRoZSBjYXNlLiBZZXAsIGp1c3QgY29uZmlybWVkIGl0LiBBbmQgb2YgY291cnNlLCBgQ09ORklHX1hGUk1gIGl0c2VsZiBpcyBhIHByZXJlcXVpc2l0ZS4gSSBzaG91bGQgcHJvYmFibHkganVzdCBkb3VibGUtY2hlY2sgdGhhdCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQveGZybS9LY29uZmlnYCB0byBiZSBzdXJlLCBidXQgbXkgZ3V0IHRlbGxzIG1lIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MDkuMTY0NzczNDc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY2NzI2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9VU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC94ZnJtL0tjb25maWctMzUtXFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMTI9Y29uZmlnIE5FVF9LRVlcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTIwLVxcdCAgbm8gbG9uZ2VyIG5lZWQgUEZfS0VZIHNvY2tldHMuIFBsZWFzZSB1c2UgdGhlIG5ldGxpbmtcXG5uZXQveGZybS9LY29uZmlnOjEyMTpcXHQgIGludGVyZmFjZSAoWEZSTV9VU0VSKSB0byBjb25maWd1cmUgSVBzZWMuXFxubmV0L3hmcm0vS2NvbmZpZy0xMjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjA5LjI4MTQ1MzE1M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzY1MjgzNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgWEZSTV9VU0VSYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIHdlJ3JlIG1vZGlmeWluZyBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhhdCdzIGd1YXJkZWQgYnkgYCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KWAuIFJpZ2h0LCBzbyBgSVBWNmAgaXMgZGVmaW5pdGVseSByZWxldmFudCB0b28uXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCB0aGUgZ2VuZXJhbCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gVGhlc2Ugc2VlbSBsaWtlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBvdXIgYEZvY3VzU3ltYm9sc2AgYXBwcm9hY2guIENydWNpYWxseSwgSSBzZWUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGluIHRoZSBob3QgcGF0aDsgdGhleSBhcmUgY2FsbGVkIHBlcmlvZGljYWxseSwgZGVwZW5kZW50IG9uIGBuYXRfa2VlcGFsaXZlX2ludGVydmFsYC4gVGhpcyBtYWtlcyB0aGVtIGdvb2QgY2FuZGlkYXRlcyBiZWNhdXNlIGFueSBwZXJmb3JtYW5jZSBjb3N0IGlzIGdvaW5nIHRvIGJlIHNtYWxsLlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIHF1aWNrIHNjYW4gZm9yIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQ09ORklHX1hGUk1gIGlzIGZ1bmRhbWVudGFsLiAgV2UnbGwgbmVlZCBgQ09ORklHX1hGUk1fVVNFUmAgdG8gYWN0dWFsbHkgY29uZmlndXJlIGl0LiAgT2YgY291cnNlLCBgQ09ORklHX0lQVjZgIGNvbWVzIGludG8gcGxheSBmb3IgdGhlIElQdjYgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGZvciBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMDQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MTQuNjQ2NzQwMzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNjQ5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MzE9c3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9pbml0KHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSwgc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy00MS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYzo0MjpzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDQtXFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0NTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xNDYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjE0Ljc0NzA1MDM1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk2MDI1MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZWVwYWxpdmUgRnVuY3Rpb25zIGZvciBTeW1ib2xpYyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBzeW1ib2xzIGZvciwgSSBzdXNwZWN0LCBzb21lIHNvcnQgb2YgY29kZSBhbmFseXNpcyBvciBzeW1ib2xpYyBleGVjdXRpb24uIEkgc2VlIHRocmVlIGtleSBmdW5jdGlvbnM6IGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAsIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAsIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kYC4gTm93LCBJIG5lZWQgdG8ga25vdyB0aGUgY29tcGxldGUgc2V0IG9mIHN5bWJvbHMgZm9yIHRoZSBhbmFseXNpcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGVtIGFsbC5cblxuRmlyc3QsIGEgcXVpY2sgY2hlY2suLi5pcyBgbmF0X2tlZXBhbGl2ZV9zZW5kYCBhIHN0YXRpYyBmdW5jdGlvbj8gSXQgYXBwZWFycyB0aGF0IGl0IGlzLCB5ZXMuIEV4Y2VsbGVudC4gVGhpcyBtZWFucyBpdCBpc24ndCBsaWtlbHkgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBmaWxlcyBpbiBhIGdlbmVyaWMgd2F5LCBhbmQgc28gSSBzaG91bGQgYWRkIGl0IHRvIHRoZSBzeW1ib2xzIHRvIGJlIGFuYWx5emVkLCBzaW5jZSBpdCBpcyBhIGxpa2VseSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IG15IGBGb2N1c1N5bWJvbHNgIGxpc3Qgc2hvdWxkIGluZGVlZCBpbmNsdWRlOiBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZGAuIFxuXG5OZXh0LCBJIHNlZSBhIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gcG90ZW50aWFsbHkgY29uc2lkZXIuIFRoZXNlIGluY2x1ZGUgYFhGUk1gLCBgWEZSTV9VU0VSYCwgYW5kIGBJUFY2YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtYXkgYmUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGVzZSBzZXR0aW5ncy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5hdHVyZSBvZiBgQ09ORklHX1hGUk1gLiBJcyBpdCBhIGJvb2xlYW4gb3IgYSB0cmlzdGF0ZT8gVGhpcyB3aWxsIGFmZmVjdCBob3cgSSBtb2RlbCBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSB0byBnZXQgYSBkZWZpbml0ZSBhbnN3ZXIgb24gdGhhdC4gSXQncyBpbXBvcnRhbnQgdG8gYmUgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjE5Ljk0MzA3ODc5NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzMwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZy00LSNcXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTYtXFx0Ym9vbFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5uZXQveGZybS9LY29uZmlnLTEzLVxcbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy00Mi1cXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxcbm5ldC94ZnJtL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy01MC1cXG5uZXQveGZybS9LY29uZmlnOjUxOmNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNjAtXFxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy03MS1cXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1NcXG5uZXQveGZybS9LY29uZmlnLTczLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjg0OmNvbmZpZyBYRlJNX0FIXFxubmV0L3hmcm0vS2NvbmZpZy04NS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXFxubmV0L3hmcm0vS2NvbmZpZy05NC1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMDUtXFxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjIwLjA3OTQxNDY3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg5MDU5NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBYRlJNYCBCb29sZWFuKipcblxuT2theSwgc28gYFhGUk1gIGlzIGRlZmluZWQgYXMgYSBib29sZWFuLCBhIGJpbmFyeSBzdGF0ZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGJlaW5nIHNldC4gVGhlIGNvcmUgb2YgbXkgY3VycmVudCB0YXNrIGlzIGZpbmRpbmcgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBlc3NlbnRpYWxseSBhIHF1ZXN0aW9uIG9mIHVuZGVyc3RhbmRpbmcgdGhlICp3aHkqIGJlaGluZCB0aGlzIGJvb2xlYW4uIFdoYXQgY29uZGl0aW9ucywgb3RoZXIgdmFyaWFibGVzLCBvciBmdW5jdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBzdGF0ZSBvZiBgWEZSTWA/IExldCBtZSB0cmFjZSB0aGUgY29kZSBhbmQgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyB3aGVyZSBgWEZSTWAncyB2YWx1ZSBpcyBiZWluZyBtb2RpZmllZC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBvdGhlciBlbGVtZW50cyB0aGF0IGNvbnRyb2wgdGhpcyBib29sZWFuLCB3aGV0aGVyIHRoYXQncyB0aHJvdWdoIGRpcmVjdCBhc3NpZ25tZW50LCBsb2dpY2FsIG9wZXJhdGlvbnMsIG9yIGZ1bmN0aW9uIGNhbGxzIHRoYXQgbWFuaXB1bGF0ZSBpdCBpbmRpcmVjdGx5LiBPbmNlIEkgdW5kZXJzdGFuZCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MsIEkgY2FuIGJldHRlciBhc3Nlc3MgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQwMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjI0LjA2ODQ3ODE5OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTQxNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDctXFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjMwODpcXHRzZWxlY3QgWEZSTVxcbm5ldC9pcHY0L0tjb25maWctMzA5LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXFx0dHJpc3RhdGUgXFxcIklQOiBBSCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM0MTpcXHRzZWxlY3QgWEZSTV9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MzU2OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU3LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg2LVxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnOjM4NzpcXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9Mzk0PWNvbmZpZyBJTkVUX0lQQ09NUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTYtXFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbm5ldC9pcHY2L0tjb25maWctNDgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbm5ldC9pcHY2L0tjb25maWc6NDk6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2Ni9LY29uZmlnLTUwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjY0OlxcdHNlbGVjdCBYRlJNX0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjUtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTA0LVxcdHNlbGVjdCBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTA1OlxcdHNlbGVjdCBYRlJNX0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTA2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTEyPWNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxubmV0L2lwdjYvS2NvbmZpZzoxMTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE1MD1jb25maWcgSVBWNl9WVElcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTUzLVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTE0PWNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxNjpcXHRzZWxlY3QgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTctXFx0c2VsZWN0IENSWVBUT1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMz1jb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjI1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTI2LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9ODQ9Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzo4NjpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy04Ny1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTkzPWNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG5uZXQveGZybS9LY29uZmlnOjk1OlxcdHNlbGVjdCBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTk2LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxubmV0L3hmcm0vS2NvbmZpZzoxMDg6XFx0c2VsZWN0IFhGUk1fQUxHT1xcbm5ldC94ZnJtL0tjb25maWctMTA5LVxcdHNlbGVjdCBDUllQVE9cXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTEyPWNvbmZpZyBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIlBGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjExNDpcXHRzZWxlY3QgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xMTUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjctXFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZzoxMjg6XFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI5LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MjQuMjUyNDMyODM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MTkwODA2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBUaG91Z2h0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWEZSTSBjb25maWd1cmF0aW9uIGZvciBOQVQga2VlcGFsaXZlLiBJdCBsb29rcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkg4oCTIGl0IHNlZW1zIHRvIGJlIGVub3VnaCB0byBicmluZyBpbiB0aGUgZW50aXJlIFhGUk0gZnJhbWV3b3JrLiBUaGF0J3MgZ29vZCwgbGVzcyB0byB3b3JyeSBhYm91dC4gT2YgY291cnNlLCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggSVB2NiwgYElQVjZgIGlzIGFsc28gbmVjZXNzYXJ5LiBCdXQgcmVhbGx5LCBpdCBzZWVtcyBsaWtlIGBYRlJNX1VTRVJgIGlzIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZS4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZW5hYmxlIGZvciBYRlJNIHRvIHdvcmsgcHJvcGVybHk/IE5vcGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgIGFuZCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLiBJIHdhbnQgdG8gZW5zdXJlIHRoZXNlIGFyZSByZWFjaGFibGUuIFRoZXkgYXJlLiBUaGV5J3JlIHJlYWNoZWQgdmlhIGBuYXRfa2VlcGFsaXZlX3dvcmtgIHdoaWNoIGlzIHNjaGVkdWxlZCBieSBgeGZybV9uYXRfa2VlcGFsaXZlX3N0YXRlX3VwZGF0ZWRgLiBBaGEhIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBhZGRlZCBvciBkZWxldGVkLiBDcnVjaWFsbHksIHRoZSBYRlJNIHN0YXRlIG5lZWRzIHRvIGhhdmUgYG5hdF9rZWVwYWxpdmVfaW50ZXJ2YWxgIHNldC4gVGhpcyBpcyBkb25lIHRocm91Z2ggdGhlIGBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMYCBhdHRyaWJ1dGUgaW4gZWl0aGVyIGBYRlJNX01TR19ORVdTQWAgb3IgYFhGUk1fTVNHX1VQRFNBYC4gRmFudGFzdGljLCB0aGF0J3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBJdCdzIGFsbCBob29rZWQgdXAhXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOlxuXG4qICAgYFhGUk1fVVNFUmBcbiogICBgSVBWNmBcblxuSSdtIGtlZXBpbmcgdGhlc2Ugc3ltYm9scyBpbiBtaW5kIGFzIGtleSB0byB0cmFjazpcblxuKiAgIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGBcbiogICBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgXG4qICAgYG5hdF9rZWVwYWxpdmVfc2VuZGBcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciBOQVQga2VlcGFsaXZlLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB1c2VzIHN0YW5kYXJkIG5ldHdvcmsgZnVuY3Rpb25zIGxpa2UgYHVkcF9oZHJgIGFuZCBgaXBfcm91dGVfb3V0cHV0X2tleWAsIG5vdGhpbmcgc3BlY2lhbGl6ZWQgdGhlcmUuIFNvLCBub3RoaW5nIGVsc2UgdG8gYWN0aXZhdGUsIHRoYXQgaXMgcmVhc3N1cmluZy5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBmb3IgYSBgQ09ORklHX1hGUk1fTkFUYCBvciBhIHNpbWlsYXIgbG9va2luZyBvbmUsIGp1c3QgaW4gY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzEuMTcxNTE1NTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5MzkzNjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fTkFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzEuMjg0NDY4NTk1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNTc2ODYzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uIGFuZCB0aGUgYWJzZW5jZSBvZiBgWEZSTV9OQVRgIGlzIHRocm93aW5nIGEgd3JlbmNoIGluIHRoaW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGBDT05GSUdfWEZSTV9VU0VSYC4gSSBtZWFuLCB0aGF0IHVzdWFsbHkgZ2l2ZXMgdXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyB0byBjb25maWd1cmUgWEZSTSBzdGF0ZXMsIHJpZ2h0PyBBbHJpZ2h0LCB5ZXMsIGNvbmZpcm1pbmcgdGhhdCBgWEZSTV9VU0VSYCBpcyBzdWZmaWNpZW50IGZvciBjb25maWd1cmluZyB0aGUgY29yZSBYRlJNIHN0YXRlcyBpcyBhIHJlbGllZi5cblxuTm93LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBFU1Agc3RhdGVzLiBEb2VzIGl0IHJlcXVpcmUgYENPTkZJR19YRlJNX0VTUGAgb3IgcG9zc2libHkganVzdCBgQ09ORklHX0lORVRfRVNQYD8gVGhlIGBuYXRfa2VlcGFsaXZlX3dvcmtgIGZ1bmN0aW9uIHdhbGtzIGBJUFBST1RPX0VTUGAgc3RhdGVzLiBMb29rcyBsaWtlIGl0J3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gRVNQIHN0YXRlcywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jaW5nIGB4ZnJtX3N0YXRlX3dhbGtfaW5pdChcdTAwMjZ3YWxrLCBJUFBST1RPX0VTUCwgTlVMTClgLiBTbywgdGhlIHF1ZXN0aW9uIHJlbWFpbnM6IGRvIHdlICpuZWVkKiBgSU5FVF9FU1BgIGFzIHdlbGw/IExldCdzIGludmVzdGlnYXRlIHRoYXQgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDozNi4zNDIxNTg2NTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzcyNjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUX0VTUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM3MTpcXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNzItXFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODEtXFxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cXHRib29sIFxcXCJJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozODQ6XFx0ZGVwZW5kcyBvbiBYRlJNIFxcdTAwMjZcXHUwMDI2IElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zODUtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjQ6MzYuNDY1ODkwNjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0OTE0MzYwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkcmVzc2luZyBFU1AgU3RhdGUgQ3JlYXRpb24gYW5kIE1lbW9yeSBMZWFrcyBpbiBOQVQgS2VlcGFsaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBoYW5kbGluZyBFU1Agc3RhdGVzIGNvcnJlY3RseS4gSXQncyBjbGVhciB0aGF0IGBJTkVUX0VTUGAgYW5kIGBJTkVUNl9FU1BgIGFyZSB0aGUgdHlwaWNhbCBpbmdyZWRpZW50cyBmb3IgY3JlYXRpbmcgRVNQIHN0YXRlcy4gQnV0LCB0aGUgcXVlc3Rpb24gbmFncywgY2FuIHdlIHNpZGVzdGVwIHRoaXMgYW5kIGNyZWF0ZSBhbiBFU1Agc3RhdGUgd2l0aG91dCBgSU5FVF9FU1BgPyBUaGUgYW5zd2VyIHNlZW1zIHRvIGJlIGEgeWVzIOKAkyB3ZSBjYW4gY3JlYXRlIHRoZSBgeGZybV9zdGF0ZWAgd2l0aCBgSVBQUk9UT19FU1BgIGV2ZW4gd2l0aG91dCBhIHJlZ2lzdGVyZWQgcHJvdG9jb2wgaGFuZGxlci4gSG93ZXZlciwgaXQncyBwcm9iYWJseSBub3QgZnVsbHkgZnVuY3Rpb25hbCB3aXRob3V0IGBJTkVUX0VTUGAuIFRvIGJlIGNvbXBsZXRlbHkgc2FmZSBhbmQgY29ycmVjdCwgSSBzaG91bGQgaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYC4gR29vZCwgaXQgbG9va3MgbGlrZSBgSU5FVF9FU1BgIGlzIGEgdHJpc3RhdGUsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBMZXQgbWUgYWRkIGJvdGggdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZC5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGlzIHBhdGNoLiBBaCwgaXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBgc2tiYCBpcyBhbGxvY2F0ZWQgaW4gYG5hdF9rZWVwYWxpdmVfc2VuZGAgYW5kIHBhc3NlZCBkb3duIHRvIHRoZSBgaXB2NGAgYW5kIGBpcHY2YCBzZW5kIGZ1bmN0aW9ucy4gUHJldmlvdXNseSwgaWYgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCByZXR1cm5lZCBhbiBlcnJvciwgdGhlIGBlcnJgIHZhcmlhYmxlIHdhcyBzZXQgYW5kIHRoZW4gYG5hdF9rZWVwYWxpdmVfc2VuZGAgd291bGQgZnJlZSBgc2tiYC4gSG9sZCBvbi4uLiB3aGF0IGlmIHRoZSBlcnJvciBoYXBwZW5lZCAqYWZ0ZXIqIHRoZSBgc2tiYCB3YXMgcG90ZW50aWFsbHkgdXNlZCBvciBjb25zdW1lZD8gSSdtIGdldHRpbmcgYSBsaXR0bGUgYWhlYWQgb2YgbXlzZWxmLiBMZXQncyBtYWtlIHN1cmUgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCAqZG9lcyogZnJlZSBgc2tiYCBpZiBhbiBlcnJvciBvY2N1cnMuXG5gYGBjXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgIGthLVx1MDAzZWVuY2FwX3Nwb3J0LCBzb2NrX25ldF91aWQobmV0LCBOVUxMKSk7XG4gXG4gXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xuLVx0aWYgKElTX0VSUihydCkpXG4rXHRpZiAoSVNfRVJSKHJ0KSkge1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuK1x0fVxuIFxuIFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIFxuQEAgLTEwMSw2ICsxMDMsNyBAQCBzdGF0aWMgaW50IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRkc3QgPSBpcDZfZHN0X2xvb2t1cF9mbG93KG5ldCwgc2ssIFx1MDAyNmZsNiwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpIHtcbiBcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZuYXRfa2VlcGFsaXZlX3NrX2lwdjYuYmhfbG9jayk7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihkc3QpO1xuIFx0fVxuIFxuQEAgLTExOCw3ICsxMjEsNiBAQCBzdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSArXG4gXHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIFx0Y29uc3QgdTggbmF0X2thX3BheWxvYWQgPSAweEZGO1xuLVx0aW50IGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4gXG5AQCAtMTQwLDE2ICsxNDIsMTcgQEAgc3RhdGljIHZvaWQgbmF0X2tlZXBhbGl2ZV9zZW5kKHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcbiBcbiBcdHN3aXRjaCAoa2EtXHUwMDNlZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4tXHRcdGVyciA9IG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xuK1x0XHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChza2IsIGthKTtcbiBcdFx0YnJlYWs7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRjYXNlIEFGX0lORVQ2OlxuLVx0XHRlcnIgPSBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XG4rXHRcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2KHNrYiwga2EsIHVoKTtcbiBcdFx0YnJlYWs7XG4gI2VuZGlmXG4tXHR9XG4tXHRpZiAoZXJyKVxuK1x0ZGVmYXVsdDpcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBgYGBcblllcCwgbG9va3MgbGlrZSBpdC4gYGtmcmVlX3NrYmAgaXMgbm93IGNhbGxlZCB3aXRoaW4gYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0YCBhbmQgYG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2YCB3aGVuIGEgcm91dGluZyBlcnJvciBvY2N1cnMuIFRoaXMgcmVzb2x2ZXMgdGhlIG1lbW9yeSBsZWFrIGJ5IGVuc3VyaW5nIHRoZSBgc2tiYCBpcyBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlIHdpdGhpbiB0aGUgYCpfc2VuZGAgZnVuY3Rpb25zLiBMb29rcyBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDo1MC45NTczMzAwOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQyOlxcdHN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gIDQzOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4gIDQ0OlxcdHtcXG4gIDQ1OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGthLVxcdTAwM2VuZXQ7XFxuICA0NjpcXHRcXHRzdHJ1Y3QgZmxvd2k0IGZsNDtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbiAgNDg6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAgNDk6XFx0XFx0X191OCB0b3MgPSAwO1xcbiAgNTA6XFx0XFx0aW50IGVycjtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0Zmxvd2k0X2luaXRfb3V0cHV0KFxcdTAwMjZmbDQsIDAgLyogb2lmICovLCBza2ItXFx1MDAzZW1hcmssIHRvcyxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgIFJUX1NDT1BFX1VOSVZFUlNFLCBJUFBST1RPX1VEUCwgMCxcXG4gIDU0OlxcdFxcdFxcdFxcdCAgIGthLVxcdTAwM2VkYWRkci5hNCwga2EtXFx1MDAzZXNhZGRyLmE0LCBrYS1cXHUwMDNlZW5jYXBfZHBvcnQsXFxuICA1NTpcXHRcXHRcXHRcXHQgICBrYS1cXHUwMDNlZW5jYXBfc3BvcnQsIHNvY2tfbmV0X3VpZChuZXQsIE5VTEwpKTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxuICA1ODpcXHRcXHRpZiAoSVNfRVJSKHJ0KSkge1xcbiAgNTk6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA2MDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuICA2MTpcXHRcXHR9XFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2bmF0X2tlZXBhbGl2ZV9za19pcHY0LmJoX2xvY2spO1xcbiAgNjY6XFx0XFx0c2sgPSB0aGlzX2NwdV9yZWFkKG5hdF9rZWVwYWxpdmVfc2tfaXB2NC5zb2NrKTtcXG4gIDY3OlxcdFxcdHNvY2tfbmV0X3NldChzaywgbmV0KTtcXG4gIDY4OlxcdFxcdGVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgTlVMTCwgdG9zKTtcXG4gIDY5OlxcdFxcdHNvY2tfbmV0X3NldChzaywgXFx1MDAyNmluaXRfbmV0KTtcXG4gIDcwOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNm5hdF9rZWVwYWxpdmVfc2tfaXB2NC5iaF9sb2NrKTtcXG4gIDcxOlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjUwLjk1NzQ2NzQ0MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkzNjgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERvdWJsZSBGcmVlIFZ1bG5lcmFiaWxpdHkgaW4gTkFUIEtlZXBhbGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgcHJvYmxlbSBsaWVzIHdpdGhpbiB0aGUgYG5hdF9rZWVwYWxpdmVfc2VuZGAgZmFtaWx5IG9mIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgaXMgY29uc3VtaW5nIGFuZCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgb24gZXJyb3IsIHdoaWNoIGlzIGtleS4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldCB1cCBzdWNoIHRoYXQgaWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbGVkLCBhbiBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBjYWxsIGNoYWluLiBgbmF0X2tlZXBhbGl2ZV9zZW5kYCB3b3VsZCB0aGVuIGZyZWUgdGhlIGBza2JgLiBIb3dldmVyLCBpZiBgaXBfYnVpbGRfYW5kX3NlbmRfcGt0YCBpdHNlbGYgZmFpbGVkLCBpdCBhbHJlYWR5IGZyZWVkIHRoZSBgc2tiYCwgbGVhZGluZyB0byBhIGNsYXNzaWMgZG91YmxlLWZyZWUgc2NlbmFyaW8hXG5cbkVzc2VudGlhbGx5LCB0aGVyZSBhcmUgdHdvIGRpc3RpbmN0IGZhaWx1cmUgcGF0aHMgd2UgbmVlZCB0byBjb25zaWRlci4gVGhlIGZpcnN0IGludm9sdmVzIHJvdXRpbmcgZmFpbHVyZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgYHNrYmAgKndhc24ndCogY29uc3VtZWQsIGFuZCB0aGUgc2Vjb25kIGludm9sdmVzIGFjdHVhbCB0cmFuc21pc3Npb24gZmFpbHVyZXMgd2hlcmUgdGhlIGBza2JgICp3YXMqIGNvbnN1bWVkLCBidXQgdGhlIHRyYW5zbWlzc2lvbiBmYWlsZWQuIFRoZSBvcmlnaW5hbCBjb2RlIGhhbmRsZXMgcm91dGluZyBmYWlsdXJlcyBjb3JyZWN0bHksIGJ1dCBpdOKAmXMgdGhlIHRyYW5zbWlzc2lvbiBmYWlsdXJlIGNhc2Ugd2hlcmUgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgY2F1c2VzIHRoZSBwcm9ibGVtLlxuXG5UaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0eSBieSBjaGFuZ2luZyBob3cgZXJyb3IgaGFuZGxpbmcgd29ya3MuIE5vdywgdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYHNrYmAgb24gZXJyb3IsICpvbmx5KiBpZiB0aGUgaW5pdGlhbCByb3V0aW5nIG9wZXJhdGlvbiBmYWlscy4gSWYgYGlwX2J1aWxkX2FuZF9zZW5kX3BrdGAgZmFpbHMsIGl0J3MgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcuIGBuYXRfa2VlcGFsaXZlX3NlbmRgIG5vdyAqb25seSogZnJlZXMgaW4gdGhlIGRlZmF1bHQsIG9yIHN1Y2Nlc3NmdWwsIGNhc2UuIFRoaXMgZW5zdXJlcyB0aGUgYHNrYmAgaXMgb25seSBmcmVlZCBvbmNlLCByZWdhcmRsZXNzIG9mIHRoZSBmYWlsdXJlIHBvaW50LlxuXG5UaGlzIGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZml4LiBBIGRvdWJsZSBmcmVlIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBleHBsb2l0YXRpb24sIGFuZCBJIGJlbGlldmUgdGhpcyBkZXNlcnZlcyBpbW1lZGlhdGUgYXR0ZW50aW9uIGFuZCB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBjb25maWdzIGluY2x1ZGUgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgLiBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBgSU5FVF9FU1BgIGVuYWJsZXMgYFhGUk1gIGZ1bmN0aW9uYWxpdHksIGFuZCBgWEZSTV9VU0VSYCBpcyBuZWVkZWQgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzLiBPa2F5LCBhbGwgY2hlY2tzIG91dCwgYW5kIHRoZXNlIGFyZSBhbGwgY29ycmVjdCBmb3IgdGhpcyB2dWxuZXJhYmlsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5hdF9rZWVwYWxpdmVfc2VuZGAgaXMgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyOTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNDo1OS4wNTExNTQxMTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzU1ODc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYXRfa2VlcGFsaXZlX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTMxPXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfaW5pdChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtNDEtXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6NDI6c3RhdGljIGludCBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYXRfa2VlcGFsaXZlICprYSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTc0LSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjc1OnN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy03Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EsXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xMTctXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTE4OnN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTE5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0NC1cXHRjYXNlIEFGX0lORVQ6XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTQ1OlxcdFxcdG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0KHNrYiwga2EpO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0Ni1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTE0OC1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE0OTpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmRfaXB2Nihza2IsIGthLCB1aCk7XFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTUwLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTYzPXN0YXRpYyBpbnQgbmF0X2tlZXBhbGl2ZV93b3JrX3NpbmdsZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGNvdW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTItXFx0aWYgKHNlbmRfa2VlcGFsaXZlKVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjE5MzpcXHRcXHRuYXRfa2VlcGFsaXZlX3NlbmQoXFx1MDAyNmthKTtcXG5uZXQveGZybS94ZnJtX25hdF9rZWVwYWxpdmUuYy0xOTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI0OjU5LjE2NDcxOTYwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzNDAzMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYRlJNIFN0YXRlIENvbmZpZ3VyYXRpb246IEV4cGxvcmluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIGBuYXRfa2VlcGFsaXZlX3dvcmtfc2luZ2xlYCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHdlJ3JlIGNvbmZpZ3VyaW5nIFhGUk0gc3RhdGVzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGFtIEkgb3Zlcmxvb2tpbmcgYW55dGhpbmc/IElzIGBYRlJNX1VTRVJgIHRoZSAqb25seSogd2F5IHRvIGNvbmZpZ3VyZSB0aGVzZSBzdGF0ZXM/IEkga25vdyBpdCdzIHRoZSBjb250ZW1wb3JhcnkgTmV0bGluayBpbnRlcmZhY2UsIGFuZCBpdCdzIHdoYXQgd2UndmUgcHJpbWFyaWx5IGJlZW4gdXNpbmcuXG5cbkJ1dCwgaGFuZyBvbiwgdGhlcmUncyBhbHNvIGBORVRfS0VZYCwgcmlnaHQ/IFRoYXQncyB0aGUgUEZfS0VZIHNvY2tldCBtZXRob2QuIEl0J3Mgb2xkZXIsIGFyZ3VhYmx5IGxlc3MgZWxlZ2FudCwgYnV0IGl0J3Mgc3RpbGwgb3V0IHRoZXJlLiBHaXZlbiB0aGF0IHdlIGhhdmUgYW4gYWN0aXZlIGRpc2N1c3Npb24gb24gaXQsIGl0IG1pZ2h0IGJlIGJlbmVmaWNpYWwgdG8gc3VwcG9ydCBpdCBqdXN0IHRvIGNvdmVyIG91ciBiYXNlcy4gV2hpbGUgYFhGUk1fVVNFUmAgaXMgdGhlIHByZWZlcnJlZCBhbmQgbW9kZXJuIGFwcHJvYWNoLCBzdXBwb3J0aW5nIGBORVRfS0VZYCBjb3VsZCBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb3IgYWRkcmVzcyBuaWNoZSB1c2UgY2FzZXMuIEkgdGhpbmsgd2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBgTkVUX0tFWWAgc3VwcG9ydCBhcyB3ZWxsLiBJdOKAmXMgYW4gb3B0aW9uIHRvIGJyb2FkZW4gY29tcGF0aWJpbGl0eSBhbmQgZmxleGliaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDI4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDIuNTk4MTI1MjQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk4NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfS0VZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTExMS1cXG5uZXQveGZybS9LY29uZmlnOjExMjpjb25maWcgTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEyNC1cXG5uZXQveGZybS9LY29uZmlnOjEyNTpjb25maWcgTkVUX0tFWV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXFx0Ym9vbCBcXFwiUEZfS0VZIE1JR1JBVEVcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzoxMjc6XFx0ZGVwZW5kcyBvbiBORVRfS0VZXFxubmV0L3hmcm0vS2NvbmZpZy0xMjgtXFx0c2VsZWN0IFhGUk1fTUlHUkFURVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNTowMi42ODcxMTcxOTNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NzkyNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYE5FVF9LRVlgIGlzIG9mZmljaWFsbHkgZGVwcmVjYXRlZC4gTWFrZXMgc2Vuc2U7IGBYRlJNX1VTRVJgIGhhcyBiZWVuIHRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBhIHdoaWxlIG5vdy4gSXQncyB0aW1lIHRvIGZ1bGx5IHRyYW5zaXRpb24gYW5kIHN0YXJ0IHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSBtb3JlIG1vZGVybiBmcmFtZXdvcmsuXG5cbk5vdywgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgaW4gb3JkZXIuIFdlJ3ZlIGdvdCBgWEZSTV9VU0VSYC4uLiBidXQgZG9lcyBgWEZSTV9OQVRgIHN0aWxsIGV4aXN0PyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBhdmFpbGFiaWxpdHkuIFNwZWNpZmljYWxseSwgbGV0IG1lIHBva2UgYXJvdW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgKm5ldC9pcHY0L0tjb25maWcqIGluIHBhcnRpY3VsYXIuIE5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgc3RpbGwgaW4gdGhlIG1peCwgYW5kIGhvdyBpdOKAmXMgZGVmaW5lZCBub3csIGlmIGF0IGFsbC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSB0byBlbnN1cmluZyBwcm9wZXIgaGFuZGxpbmcgYW5kIGludGVncmF0aW9uIHdpdGggdGhlIGxhdGVzdCBhZHZhbmNlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDYuMDc1MDQ2NjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDUyNjk0MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDYuNDg1NTgyNzIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NDMwOTIzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuTm9wZS4gVGhhdCBpbml0aWFsIGxpbmUgb2YgaW5xdWlyeSBqdXN0IGRpZG4ndCBwYW4gb3V0LCBkaWRuJ3QgaXQ/IE9rYXksIGJhY2sgdG8gYmFzaWNzLiBJZiBJJ20gaGl0dGluZyBhIHdhbGwsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgcmV0cmFjZSBteSBzdGVwcyBhbmQgY29uc2lkZXIgdGhlIG1vc3QgbGlrZWx5IHBvaW50cyBvZiBjb25maWd1cmF0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHRoZSBgWEZSTWAgc2V0dGluZ3MgaWYgSSdtIGhhdmluZyBpc3N1ZXMsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG92ZXJzaWdodHMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODQzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6MjU6MDkuMjI4Njc3NjIyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc3ODQ2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzA3LVxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDg6XFx0c2VsZWN0IFhGUk1cXG5uZXQvaXB2NC9LY29uZmlnLTMwOS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozNDE6XFx0c2VsZWN0IFhGUk1fQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0Mi1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjM1NjpcXHRzZWxlY3QgWEZSTV9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1Ny1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6Mzg0OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zOTQ9Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozOTY6XFx0c2VsZWN0IElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnOjM5NzpcXHRzZWxlY3QgWEZSTV9JUENPTVBcXG5uZXQvaXB2NC9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTQwND1jb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQxMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQxNDpjb25maWcgSU5FVF9YRlJNX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDE1LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjI1OjA5LjMzNjQ2Nzg0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NTQ0NDE5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTkFUIEtlZXBhbGl2ZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBwaW5uZWQgZG93biB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcmUgdGhlIGtleSBkcml2ZXJzIGZvciB0aGlzIHZ1bG5lcmFiaWxpdHksIGFzIGV4cGVjdGVkIGluIFhGUk0uXG5cbkxldCBtZSBicmVhayBkb3duIHdoYXQgSSd2ZSBmb3VuZCwgY29uY2lzZWx5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6IFRydWUuKiogQWJzb2x1dGVseS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZSBpZGVudGlmaWVkIGNvZGUgcGF0aHMgaGF2ZSBleHBsb2l0YWJsZSBwb3RlbnRpYWwuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogU3BlY2lmaWNhbGx5LCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRgLCBgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjZgLCBhbmQgdGhlIGdlbmVyaWMgYG5hdF9rZWVwYWxpdmVfc2VuZGAgYXJlIHRoZSBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdG8gdGFyZ2V0LiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBkaXNjb3ZlcmVkIGVycm9yIGhhbmRsaW5nLlxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGJ1aWxkIHdpdGggYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGBJTkVUNl9FU1BgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIGBYRlJNX1VTRVJgIGlzIGNydWNpYWwgZm9yIGFsbG93aW5nIHVzZXJzcGFjZSBpbnRlcmFjdGlvbiwgd2hpbGUgdGhlIEVTUCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhlIHZ1bG5lcmFibGUgTkFUIGtlZXBhbGl2ZSBmdW5jdGlvbmFsaXR5LCBhbmQgSVB2NiBpcyBpbXBsaWNhdGVkLlxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBidWcgaXMgYSBkb3VibGUgZnJlZSBpc3N1ZS4gUm91dGluZyBmYWlsdXJlcyB3aXRoaW4gdGhlIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NGAgYW5kIGBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NmAgcGF0aHMgaW5jb3JyZWN0bHkgcmVsZWFzZSBhbiBgc2tiYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBYRlJNLiBUaGlzIG1lYW5zIGl0J3Mgbm90IGp1c3QgYSBwdXJlbHkgZGVmZW5zaXZlIHByb2dyYW1taW5nIGVycm9yOyB0aGlzIE5BVCBrZWVwYWxpdmUgZnVuY3Rpb25hbGl0eSwgd2hlbiBtaXNjb25maWd1cmVkLCBjYW4gbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gVGhpcyB1c2Vyc3BhY2UgcmVhY2hhYmlsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGFiaWxpdHkgdG8gc2V0IFhGUk0gc3RhdGUgd2l0aCBhIGtlZXBhbGl2ZSBpbnRlcnZhbCwgY29uZmlybXMgdGhlIGV4cGxvaXRhYmlsaXR5IGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjkyLCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjoyNToxNi4xOTA5MzgyNzJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ2OTU0NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY0XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NlwiLFxuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUgZnJlZSBvZiBhbiBza2IgaW4gdGhlIGVycm9yIHBhdGggb2YgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjQgYW5kIG5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2IHdoZW4gcm91dGluZyBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBYRlJNIHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IGNvbmZpZ3VyaW5nIGFuIFhGUk0gc3RhdGUgd2l0aCBhIE5BVCBrZWVwYWxpdmUgaW50ZXJ2YWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjRcIixcbiAgICBcIm5hdF9rZWVwYWxpdmVfc2VuZF9pcHY2XCIsXG4gICAgXCJuYXRfa2VlcGFsaXZlX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZSBmcmVlIG9mIGFuIHNrYiBpbiB0aGUgZXJyb3IgcGF0aCBvZiBuYXRfa2VlcGFsaXZlX3NlbmRfaXB2NCBhbmQgbmF0X2tlZXBhbGl2ZV9zZW5kX2lwdjYgd2hlbiByb3V0aW5nIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgY29uZmlndXJpbmcgYW4gWEZSTSBzdGF0ZSB3aXRoIGEgTkFUIGtlZXBhbGl2ZSBpbnRlcnZhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowht5n2[1] Phase: Succeeded StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 06:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 06:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2] Phase: Succeeded StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 06:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 06:25:27 +0000 UTC FinishedAt: 2026-06-25 06:25:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowht5n2/series-workflowht5n2-convert-artifact-3384243416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 06:25:37 +0000 UTC FinishedAt: 2026-06-25 06:58:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 06:25:37 +0000 UTC FinishedAt: 2026-06-25 06:58:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc6d8a2f-5320-45d6-af9d-f7881f968cd3,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-workflowht5n2/series-workflowht5n2-convert-artifact-3384243416/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": "3f2cb70d-54b1-4aec-bc79-6e143457cb27", "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-workflowht5n2/series-workflowht5n2-build-action-2309229838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 06:25:37 +0000 UTC FinishedAt: 2026-06-25 06:58:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc6d8a2f-5320-45d6-af9d-f7881f968cd3,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-workflowht5n2/series-workflowht5n2-convert-artifact-3384243416/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": "3f2cb70d-54b1-4aec-bc79-6e143457cb27", "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-workflowht5n2/series-workflowht5n2-build-action-2309229838/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 06:58:18 +0000 UTC FinishedAt: 2026-06-25 06:58:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 06:58:18 +0000 UTC FinishedAt: 2026-06-25 06:58:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 06:58:18 +0000 UTC FinishedAt: 2026-06-25 06:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 06:58:18 +0000 UTC FinishedAt: 2026-06-25 06:58:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowht5n2/series-workflowht5n2-convert-artifact-839440191/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 06:58:39 +0000 UTC FinishedAt: 2026-06-25 07:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 06:58:39 +0000 UTC FinishedAt: 2026-06-25 07:00:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f2cb70d-54b1-4aec-bc79-6e143457cb27,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-workflowht5n2/series-workflowht5n2-build-action-2309229838/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-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 07:00:33 +0000 UTC FinishedAt: 2026-06-25 07:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 07:00:33 +0000 UTC FinishedAt: 2026-06-25 07:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 07:00:33 +0000 UTC FinishedAt: 2026-06-25 07:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 07:00:33 +0000 UTC FinishedAt: 2026-06-25 07:30:06 +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:*cc6d8a2f-5320-45d6-af9d-f7881f968cd3,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-workflowht5n2/series-workflowht5n2-convert-artifact-839440191/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": "b7e3f338-fc83-45ab-83db-1d22bdbeab92", "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-workflowht5n2/series-workflowht5n2-build-action-1694423891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 07:00:33 +0000 UTC FinishedAt: 2026-06-25 07:29:55 +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:*cc6d8a2f-5320-45d6-af9d-f7881f968cd3,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-workflowht5n2/series-workflowht5n2-convert-artifact-839440191/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": "b7e3f338-fc83-45ab-83db-1d22bdbeab92", "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-workflowht5n2/series-workflowht5n2-build-action-1694423891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 07:30:06 +0000 UTC FinishedAt: 2026-06-25 07:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 07:30:06 +0000 UTC FinishedAt: 2026-06-25 07:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 07:30:06 +0000 UTC FinishedAt: 2026-06-25 07:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 07:30:06 +0000 UTC FinishedAt: 2026-06-25 07:32:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7e3f338-fc83-45ab-83db-1d22bdbeab92,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-workflowht5n2/series-workflowht5n2-build-action-1694423891/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-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +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":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"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:*3f2cb70d-54b1-4aec-bc79-6e143457cb27,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7e3f338-fc83-45ab-83db-1d22bdbeab92,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-workflowht5n2/series-workflowht5n2-build-action-2309229838/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-workflowht5n2/series-workflowht5n2-build-action-1694423891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 07:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 07:32:38 +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":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"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-workflowht5n2/series-workflowht5n2-convert-artifact-3547894232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 07:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 07:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 07:32:10 +0000 UTC FinishedAt: 2026-06-25 07:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 07:32:50 +0000 UTC FinishedAt: 2026-06-25 10:34:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowht5n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nat_keepalive_send_ipv4","nat_keepalive_send_ipv6","nat_keepalive_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b85966adbf5de0668a815c6e3527f87e0c387fb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","INET_ESP","INET6_ESP","IPV6"],"series_id":"29467679-a887-43f6-8a06-4ebb29538b1b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 07:32:50 +0000 UTC FinishedAt: 2026-06-25 10:33:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3f2cb70d-54b1-4aec-bc79-6e143457cb27,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b7e3f338-fc83-45ab-83db-1d22bdbeab92,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-workflowht5n2/series-workflowht5n2-build-action-2309229838/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-workflowht5n2/series-workflowht5n2-build-action-1694423891/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-workflowht5n2/series-workflowht5n2-convert-artifact-3547894232/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,}