Name: series-workflowbkz7j Phase: Running StartedAt: 2026-07-28 00:41:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[0] Phase: Succeeded StartedAt: 2026-07-28 00:41:02 +0000 UTC FinishedAt: 2026-07-28 01:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 00:41:02 +0000 UTC FinishedAt: 2026-07-28 01:18:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bd0e9289e2642f6a5c54faad304ce0f41e926d22", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bd0e9289e2642f6a5c54faad304ce0f41e926d22", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "65839df7-7272-4674-b0ce-ab0edc4f280e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_meter_cmd_set", "ovs_meter_cmd_get", "ovs_meter_cmd_del", "ovs_meter_cmd_features" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDE6MTY6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xuaW5kZXggYTAyYzQ3Mjc3MzM3YmYuLjRhYWVlYWUzYWY1YmRlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jXG5AQCAtMTMzLDE4ICYjNDM7MTMzLDEwIEBAIHN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuIFxuIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIHtcbi1cdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXHUwMDNldGkpO1xuLVx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG4mIzQzO1x0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aTtcbiYjNDM7XHR1MzIgaGFzaDtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbiBnZW5lcmFsbHksIHNsb3RzIHNlbGVjdGVkIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZVxuLVx0ICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4tXG4gXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xuIFx0dGJsLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbiBcdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0YmwtXHUwMDNlbWF4X21ldGVyc19hbGxvd2VkKSB7XG5AQCAtMTUyLDE2ICYjNDM7MTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGktXHUwMDNlbl9tZXRlcnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVx1MDAzZW5fbWV0ZXJzICogMikpIHtcbi1cdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHR0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4mIzQzO1x0aWYgKHRibC1cdTAwM2Vjb3VudCBcdTAwM2U9IHRpLVx1MDAzZW5fbWV0ZXJzKSB7XG4mIzQzO1x0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gYXR0YWNoX2VycjtcbiYjNDM7XG4mIzQzO1x0XHR0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiBnZW5lcmFsLCBzZWxlY3RlZCBzbG90cyBzaG91bGQgYmUgZW1wdHksIGJlY2F1c2VcbiYjNDM7XHQgKiBPdlMgdXNlcyBpZC1wb29sIHRvIGZldGNoIGF2YWlsYWJsZSBpZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gYXR0YWNoX2VycjtcbiBcdH1cbiBcbiYjNDM7XHRkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQodGksIG1ldGVyKTtcbiBcdHJldHVybiAwO1xuIFxuIGF0dGFjaF9lcnI6XG4tXHRkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKTtcbiBcdHRibC1cdTAwM2Vjb3VudC0tO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDE6MTY6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jCmluZGV4IGEwMmM0NzI3NzMzN2JmLi40YWFlZWFlM2FmNWJkZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL21ldGVyLmMKQEAgLTEzMywxOCAmIzQzOzEzMywxMCBAQCBzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSwKIAogc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpCiB7Ci0Jc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC0mZ3Q7dGkpOwotCXUzMiBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKTsKJiM0MzsJc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aTsKJiM0MzsJdTMyIGhhc2g7CiAJaW50IGVycjsKIAotCS8qIEluIGdlbmVyYWxseSwgc2xvdHMgc2VsZWN0ZWQgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlCi0JICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC4KLQkgKi8KLQlpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktJmd0O2RwX21ldGVyc1toYXNoXSkpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7Ci0KIAkvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqLwogCXRibC0mZ3Q7Y291bnQmIzQzOyYjNDM7OwogCWlmICh0YmwtJmd0O2NvdW50ICZndDs9IHRibC0mZ3Q7bWF4X21ldGVyc19hbGxvd2VkKSB7CkBAIC0xNTIsMTYgJiM0MzsxNDQsMjkgQEAgc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpCiAJCWdvdG8gYXR0YWNoX2VycjsKIAl9CiAKLQlpZiAodGJsLSZndDtjb3VudCAmZ3Q7PSB0aS0mZ3Q7bl9tZXRlcnMgJmFtcDsmYW1wOwotCSAgICBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktJmd0O25fbWV0ZXJzICogMikpIHsKLQkJZXJyID0gLUVOT01FTTsKJiM0MzsJdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtJmd0O3RpKTsKJiM0MzsJaWYgKHRibC0mZ3Q7Y291bnQgJmd0Oz0gdGktJmd0O25fbWV0ZXJzKSB7CiYjNDM7CQllcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktJmd0O25fbWV0ZXJzICogMik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYXR0YWNoX2VycjsKJiM0MzsKJiM0MzsJCXRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLSZndDt0aSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLSZndDtpZCk7CiYjNDM7CiYjNDM7CS8qIEluIGdlbmVyYWwsIHNlbGVjdGVkIHNsb3RzIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZQomIzQzOwkgKiBPdlMgdXNlcyBpZC1wb29sIHRvIGZldGNoIGF2YWlsYWJsZSBpZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktJmd0O2RwX21ldGVyc1toYXNoXSkpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gYXR0YWNoX2VycjsKIAl9CiAKJiM0MzsJZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7CiAJcmV0dXJuIDA7CiAKIGF0dGFjaF9lcnI6Ci0JZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHRpLCBtZXRlcik7CiAJdGJsLSZndDtjb3VudC0tOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZXRlciBBdHRhY2htZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL21ldGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBhdHRhY2hfbWV0ZXJgIGZ1bmN0aW9uLiBUaGUgZ2lzdCBvZiBpdCBpcyBhIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIG1ldGVyIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhlIGdvYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWUgd2hlbiBhZGRpbmcgbmV3IG1ldGVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlYWxsb2NhdGluZyB0aGUgbWV0ZXIgdGFibGUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3MuIEluaXRpYWxseSwgSSBzZWUgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGBhdHRhY2hfbWV0ZXJgLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LiBMb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2Ugd2FzOiBpbnNlcnQgdGhlIG1ldGVyLCBpbmNyZW1lbnQgdGhlIGNvdW50LCBhbmQgdGhlbiBjaGVjayBmb3IgYW5kIGhhbmRsZSByZWFsbG9jYXRpb24uIFRoZSByZXZpc2VkIGNvZGUgc2hpZnRzIHRoZSByZWFsbG9jYXRpb24gY2hlY2sgZWFybGllciwgKmJlZm9yZSogdGhlIGluc2VydGlvbi4gVGhlIHNwZWNpZmljIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBjYWxsIGFoZWFkIG9mIHRoZSBtZXRlciBpbnNlcnRpb24uCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtXaHkgdGhlIHJlb3JkZXJpbmc/JiMzNDsgSW5pdGlhbGx5LCBteSB1bmRlcnN0YW5kaW5nIHdhcyBhIHBvdGVudGlhbCByYWNlLiBTcGVjaWZpY2FsbHksIHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAgd2FzIGNhbGxlZCBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHRhYmxlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkLiBJZiByZWFsbG9jYXRpb24gd2FzIG5lZWRlZCAqYW5kIGZhaWxlZCosIHRoZSBuZXcgbWV0ZXIgd291bGQgaGF2ZSBiZWVuIGluIHRoZSB3cm9uZyBpbnN0YW5jZS4gQnV0IHRoZW4gSSBsb29rZWQgZGVlcGVyLgoKVGhlIGJ1ZyB3YXMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCB3YXMgY2FsbGVkIGJlZm9yZSBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB3YXMgY2FsbGVkLCBpdCB3b3VsZCBjb3B5IHRoZSBtZXRlcnMgdG8gYSBuZXcgaW5zdGFuY2UsIGJ1dCBpZiBpdCBmYWlsZWQsIGl0IHdvdWxkIGdvIHRvIGBhdHRhY2hfZXJyYCwgd2hpY2ggY2FsbGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKWAuIEJ1dCB0aGUgYWN0dWFsIHByb2JsZW0gaXMgYSBsaXR0bGUgbW9yZSBzdWJ0bGUuIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqcmVwbGFjZXMqIHRoZSBpbnN0YW5jZS4gSWYgcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgdGhlIG5ldyBtZXRlciB3YXMgbW92ZWQgYmVmb3JlIHRoZSByZWFsbG9jYXRpb24gb2YgdGhlIGluc3RhbmNlLCBzbyB0aGUgZWxlbWVudCB3b3VsZCBnZXQgY29waWVkIHRvIHRoZSBuZXcgaW5zdGFuY2UuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGVycm9yIHBhdGgsIG5vdyB0aGF0IEkgbG9vayBhdCBpdCBhZ2Fpbi4KCk5vdyBJIHRoaW5rIEkgZ2V0IGl0LiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBtaWdodCBmYWlsLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzb21lIG90aGVyIHJlYXNvbi4gSWYgdGhhdCBoYXBwZW5zIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgbWV0ZXIgd291bGQgYmUgKmluc2VydGVkKiBpbnRvIHRoZSAqb2xkKiBpbnN0YW5jZSwgYW5kIG9ubHkgdGhlbiB3b3VsZCB0aGUgcmVhbGxvY2F0aW9uIGNoZWNrIGhhcHBlbi4gSWYgdGhlIHJlYWxsb2NhdGlvbiB0aGVuIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgYXR0YWNoX2VycmAsIGFuZCB0aGUgbWV0ZXIgd291bGQgYmUgKnJlbW92ZWQqIGZyb20gdGhlICpvbGQqIGluc3RhbmNlLgoKVGhlIHJldmlzZWQgY29kZSBhZGRyZXNzZXMgdGhpcyBieSBjaGVja2luZyBmb3IgcmVhbGxvY2F0aW9uICpmaXJzdCouIElmIHJlYWxsb2NhdGlvbiBpcyBuZWVkZWQsIGl0JiMzOTtzIGF0dGVtcHRlZCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBJZiBpdCBmYWlscywgdGhlIGVycm9yIHBhdGggaXMgdGFrZW4gKmJlZm9yZSogdGhlIGluc2VydGlvbiwgc28gbm8gbWV0ZXIgaXMgbGVmdCBkYW5nbGluZyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBsaWtlbHkgY29tbWl0IG1lc3NhZ2Ugd291bGQgcHJvYmFibHkgaGlnaGxpZ2h0IHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvdWxkIGZhaWwsIG9yIHBlcmhhcHMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCBtb2RpZmllcyB0aGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZW4gcmVhbGxvY2F0ZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY2AgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0dGFjaF9tZXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzMtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzQ6c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzUte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDUyLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDUzOlx0ZXJyID0gYXR0YWNoX21ldGVyKG1ldGVyX3RibCwgbWV0ZXIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDU0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXR0YWNoX21ldGVyYCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYC4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBmdW5jdGlvbmFsLCByaWdodD8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmssIGFuZCBzcGVjaWZpY2FsbHksIG1ldGVycy4gQW5kLCBzaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBvdnNfbWV0ZXJfY21kX3NldGApLCBJJiMzOTttIGNvbmZpZGVudCBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBub3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gTGV0IG1lIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgT3BlbiB2U3dpdGNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdGhpcyBwYXRjaCBtaWdodCByZWx5IG9uLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscyDigJMgdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBjb25maWcga25vYnMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9QRU5WU1dJVENIYCBjb25maWd1cmF0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBJIGRpdmUgZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBhIHN0YW5kYWxvbmUgZGVwbG95bWVudCwgb3IgaXMgaXQgcmVseWluZyBvbiBvdGhlciBjb21wb25lbnRzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IGNyaXRpY2FsIHVwc3RyZWFtIHNlcnZpY2VzLCBrZXJuZWwgbW9kdWxlcywgb3IgbGlicmFyaWVzIHRoYXQgYE9QRU5WU1dJVENIYCBpcyBpbmhlcmVudGx5IHRpZWQgdG8uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB1cGZyb250IHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgdHJvdWJsZXNob290aW5nLCBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3IgYW55IHBsYW5uZWQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgY29ubmVjdGVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYE9QRU5WU1dJVENIYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYE9QRU5WU1dJVENIYCBpbiBteSBjb25zaWRlcmF0aW9ucy4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGBvdnNfbWV0ZXJfY21kX3NldGAuIFRoYXQmIzM5O3MgbXkgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgb2YgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCB0aGlzIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfbWV0ZXJfY21kX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTctXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njk4Olx0XHQuZG9pdCA9IG92c19tZXRlcl9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk5LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgQ29tbWFuZCBFeGVjdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZXRlciBjb21tYW5kIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaGVyZSBpcyB0aGUgYG92c19tZXRlcl9jbWRfc2V0YCBzeW1ib2wuIFRoYXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIG5ldGxpbmsgaW50ZXJhY3Rpb24sIHNlZW1zIGxpa2UgdGhlIHBsYWNlIHdoZXJlIHRoZSByZWFsIHdvcmsgZ2V0cyBkb25lLiBCdXQsIGhhbmcgb24uLi4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gc2VlaW5nIGBhdHRhY2hfbWV0ZXJgIGluIHRoZSBjb2RlLCBidXQgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXTigJlzIGxpa2VseSBpbmxpbmVkIG9yIGF0IGxlYXN0IG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEl0IHdvbiYjMzk7dCBiZSBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIFRoZXJlZm9yZSwgaXQgd29uJiMzOTt0IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgaXRzICYjMzQ7d29ybGQmIzM0Oy4KClNvLCBmb2N1c2luZyBiYWNrIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAsIHRoYXQmIzM5O3MgbXkgcHJpbWFyeSB0YXJnZXQuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBJICpyZWFsbHkqIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGF0dGFjaF9tZXRlcmAgaXNuJiMzOTt0IGJlaW5nIHVzZWQgYW55d2hlcmUgZWxzZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIHRyYWNlIGFsbCBvZiB0aGUgY2FsbHMgdG8gYGF0dGFjaF9tZXRlcmAganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXR0YWNoX21ldGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzNDpzdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzNS17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NDExPXN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTItXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0NTM6XHRlcnIgPSBhdHRhY2hfbWV0ZXIobWV0ZXJfdGJsLCBtZXRlcik7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG92c19tZXRlcl9jbWRfc2V0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLiBGaXJzdCwgSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBvdGhlciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gT2theSwgbm9wZSwgYG92c19tZXRlcl9jbWRfc2V0YCAqaXMqIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIG1ldGVyIHNldHRpbmdzLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIGBvdnNfbWV0ZXJfY21kX3NldGAgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgb24gdGhpczogd2UgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBtYXhpbWl6ZSB0ZXN0YWJpbGl0eSB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgKmJlY2F1c2UqIGBvdnNfbWV0ZXJfY21kX3NldGAgaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrIGluIGBkcF9tZXRlcl9nZW5sX29wc2AsIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGF0IG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCwgaXQmIzM5O3Mgbm90IGludGVybmFsIGhlbHBlciBzdGF0aWMgaW5saW5lZCBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGFsdGVybmF0aXZlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9tZXRlcl9nZW5sX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU5Nz1ib29sIG92c19tZXRlcl9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjg2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njg3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY4OC1cdHsgLmNtZCA9IE9WU19NRVRFUl9DTURfRkVBVFVSRVMsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NzE4PXN0cnVjdCBnZW5sX2ZhbWlseSBkcF9tZXRlcl9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzI1LVx0LnBhcmFsbGVsX29wcyA9IHRydWUsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MjY6XHQuc21hbGxfb3BzID0gZHBfbWV0ZXJfZ2VubF9vcHMsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3Mjc6XHQubl9zbWFsbF9vcHMgPSBBUlJBWV9TSVpFKGRwX21ldGVyX2dlbmxfb3BzKSxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcyOC1cdC5yZXN2X3N0YXJ0X29wID0gT1ZTX01FVEVSX0NNRF9HRVQgJiM0MzsgMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOZXRsaW5rIEZhbWlseSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgbmV0bGluayBmYW1pbHkgaW4gcXVlc3Rpb24gaXMgYGRwX21ldGVyX2dlbmxfZmFtaWx5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguJiMzNDsgTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzOiAqSG93KiBpcyB0aGlzIHRoaW5nIGdldHRpbmcgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBob29raW5nIGl0IHVwPyBGaW5kaW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgaXMgdGhlIGZpcnN0IHN0ZXAgd2hlbiBkZWJ1Z2dpbmcgbmV0bGluayBpbXBsZW1lbnRhdGlvbnMsIHdoZXRoZXIgaXQmIzM5O3MgdW5kZXJzdGFuZGluZyB0aGUgc2V0dXAgcHJvY2VzcyBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJcyBpdCBleHBvcnRlZCwgb3IgYW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIG1vZHVsZT8gVGhpcyBpcyB0aGUgY29yZSBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBmaW5kIHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBfbWV0ZXJfZ2VubF9mYW1pbHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI2NTc9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSAqIGNvbnN0IGRwX2dlbmxfZmFtaWxpZXNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjYxLVx0XHUwMDI2ZHBfcGFja2V0X2dlbmxfZmFtaWx5LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY2MjpcdFx1MDAyNmRwX21ldGVyX2dlbmxfZmFtaWx5LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY2My0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE1PW92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIyNi1cdFx0XHRcdFx0aW5mby1cdTAwM2VzbmRfc2VxLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjI3Olx0XHRcdFx0XHRcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSwgMCwgY21kKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIyOC1cdGlmICghKm92c19yZXBseV9oZWFkZXIpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz03MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBvdnNfbWV0ZXJfbXVsdGljYXN0X2dyb3VwID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxNy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcxODpzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzE5LVx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oPTUwPXN0cnVjdCBkcF9tZXRlcl90YWJsZSB7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTUtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuaDo1NjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX21ldGVyX2dlbmxfZmFtaWx5O1xubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTctaW50IG92c19tZXRlcnNfaW5pdChzdHJ1Y3QgZGF0YXBhdGggKmRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBNZXRlciBDb21tYW5kKioKCk9rYXksIHNvIEkmIzM5O3ZlIGRlY2lkZWQgdG8gY29uY2VudHJhdGUgbXkgYW5hbHlzaXMgb24gYG92c19tZXRlcl9jbWRfc2V0YC4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgc3RhdGljLCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBJIGtub3cgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCBpdCYjMzk7bGwgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgdHJhY2luZy4gV2FpdCBhIG1pbnV0ZSwgbm8sIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkcF9tZXRlcl9nZW5sX29wc2AuIFRoYXQmIzM5O3Mgc29saWQgZXZpZGVuY2UuCgpOb3cgdGhhdCBJJiMzOTt2ZSBwaW5uZWQgZG93biB0aGUga2V5IGZ1bmN0aW9uLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBPUEVOVlNXSVRDSGAgZGVwZW5kcyBvbiBgSU5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQmVzdCB0byByZXZpc2l0IGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBHb3R0YSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgQXR0YWNobWVudCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE9QRU5WU1dJVENIYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZXlvbmQgdGhlIG9idmlvdXM/IE5vLCBgT1BFTlZTV0lUQ0hgIHNlZW1zIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb250ZXh0LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGhhbmRsaW5nIG1ldGVyIGF0dGFjaG1lbnQgd2l0aGluIGEgdGFibGUuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZSByZWFsbG9jYXRpb24gYW5kIGluc2VydGlvbiBpbnRlcmFjdC4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgYSBzZXF1ZW5jZTogZ2V0IHRoZSBtZXRlciBpbnN0YW5jZSwgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIG1ldGVyLCBhbmQgaWYgbm9uZSwgKnRoZW4qIGluc2VydC4gQnV0IHRoZW4gd2UgaGF2ZSB0aGUgcmVhbGxvY2F0aW9uIGxvZ2ljOiBpZiB0aGUgdGFibGUgaXMgYXBwcm9hY2hpbmcgY2FwYWNpdHksIHdlIHJlYWxsb2NhdGUsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LgoKSSBzZWUgdGhleSBhcmUgcmVhbGxvY2F0aW5nLCBhbmQgdGhlbiBpbnNlcnRpbmcuIEJ1dCwgbXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgdGhpcyBwcmV2aW91cyBvcmRlciBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24gd2l0aCBSQ1UuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmYWlscywgdGhlcmUmIzM5O3MgYSByb2xsYmFjayAoY2FsbGluZyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlYCBvbiB0aGUgKm9sZCogaW5zdGFuY2UpLiBUaGF0IHNlZW1zIGZpbmUgc2luY2UgaXQgcmVzdG9yZXMgdGhlIHByaW9yIHN0YXRlIG9mIHRoZSB0YWJsZS4KCk5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgICpzdWNjZWVkcyosIGl0IHdvdWxkIGFsbG9jYXRlIGEgbmV3IGluc3RhbmNlLCBjb3B5IGFsbCB0aGUgbWV0ZXJzLCBhbmQgdGhlbiB0aGUgb2xkIGluc3RhbmNlIHdvdWxkIGJlIGZyZWVkIHZpYSBSQ1UuIFRoaXMgc3RpbGwgc2VlbXMgT0sgaW4gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLiBJIGJlbGlldmUgdGhpcyBjaGFuZ2UganVzdCBzaW1wbGlmaWVzIHRoZSBsb2dpYyBieSBtYWtpbmcgdGhlIGxvZ2ljIGNsZWFyZXIuCklmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZmFpbHMqLCB0aGVuIHRoZXkgcm9sbCBiYWNrLiBTdGlsbCBvay4KCkJ1dC4uLndhaXQuIFRoZSBwcm9ibGVtIHdpdGggdGhlIHByZXZpb3VzIHBhdGNoIGlzIG5vdyB0aGUgbG9naWMgaGFwcGVucyBsaWtlIHRoaXM6IGdldCB0aGUgbWV0ZXIgaW5zdGFuY2UsICpwb3NzaWJseSogcmVhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBpbnN0YW5jZSwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoLCBhbmQgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIG1ldGVyLCBhbmQgKnRoZW4qIGluc2VydC4gVGhpcyBsb29rcyB0byBhZGRyZXNzIHRoZSBwcmlvciBpc3N1ZS4KClNvIHRoZSBvcmlnaW5hbCBsb2dpYyB3b3VsZCBmaXJzdCBpbnNlcnQgaW50byB0aGUgb2xkIGluc3RhbmNlLCB0aGVuIHJlYWxsb2NhdGUsIGFuZCB0aGUgbmV3IGluc3RhbmNlIHdvdWxkIGdldCBjb3BpZWQuIEl0IGFsc28gbWVhbnMgdGhhdCBpZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgKmZhaWxzKiwgdGhhdCBtZWFucyB0aGUgb2xkIGluc3RhbmNlIGlzIGxlZnQgdW50b3VjaGVkLCBhbmQgdGhlcmVmb3JlIHJvbGxpbmcgYmFjayBpcyBmaW5lLgoKVGhpcyBjdXJyZW50IHBhdGNoIGlzIHNhZmUuIE5vIHdvcnJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwX21ldGVyX2luc3RhbmNlX3JlYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz05ND1zdGF0aWMgaW50XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo5NTpkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTk2LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMzQ9c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTQ4LVx0aWYgKHRibC1cdTAwM2Vjb3VudCBcdTAwM2U9IHRpLVx1MDAzZW5fbWV0ZXJzKSB7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNDk6XHRcdGVyciA9IGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2ModGJsLCB0aS1cdTAwM2VuX21ldGVycyAqIDIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTUwLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTE3ND1zdGF0aWMgaW50IGRldGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDAtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMDE6XHRcdGlmIChkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgaGFsZl9zaXplKSlcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIwMi1cdFx0XHRnb3RvIHNocmlua19lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYDoKCioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBmcmFtaW5nIHRoaXMgYXMgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYSBgZHBfbWV0ZXJfaW5zdGFuY2VgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgYSByb3V0aW5lIGRlc2lnbmVkIHRvIHJlc2l6ZSBvciByZWxvY2F0ZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSBtZXRlciBpbnN0YW5jZS4gUHJvYmFibHkgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlICYjMzQ7cmVhbGxvYyYjMzQ7IHBhcnQgc3VnZ2VzdHMgdGhhdCBpdCBpcyBtb3JlIGR5bmFtaWMgdGhhbiBhIHN0YXRpYyBhbGxvY2F0aW9uLiBUaGUgbmVlZCBmb3IgcmVhbGxvY2F0aW9uIHVzdWFsbHkgbWVhbnMgdGhlIGluc3RhbmNlIG5lZWRzIG1vcmUgc3BhY2UgdG8gc3RvcmUgZGF0YSwgbWV0YWRhdGEsIG9yIGludGVybmFsIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGluIG9yZGVyIHRvIHNlZSBpZiBpdCBpcyBkeW5hbWljLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uLCBlcnJvciBjb25kaXRpb25zIChsaWtlIGFsbG9jYXRpb24gZmFpbHVyZXMpLCBhbmQgaG93IGdyYWNlZnVsbHkgaXQgZGVhbHMgd2l0aCB0aGUgdHJhbnNmZXIgb2YgZXhpc3RpbmcgZGF0YSB0byB0aGUgbmV3IG1lbW9yeSBsb2NhdGlvbi4gSSBhbHNvIHdhbnQgdG8gc2VlIHdoZXRoZXIgaXQgY29waWVzIGRhdGEgb3IgbW92ZXMgaXQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IHRyaWdnZXJzIHRoaXMgcmUtYWxsb2NhdGlvbj8gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgZG91YmxpbmcgdGhlIHNpemUgb3IgdXNpbmcgc29tZSBvdGhlciBpbmNyZW1lbnQ/IEkmIzM5O20gY3VyaW91cyB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYGRwX21ldGVyX2luc3RhbmNlYCBzbyB0aGF0IGl0IHdvdWxkIG5lZWQgcmVhbGxvY2F0aW5nLiBJIGNhbiBhbnRpY2lwYXRlIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaWYgbm90IGNhcmVmdWxseSBpbXBsZW1lbnRlZC4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdGF0aWMgaW50XG4gIDk1Olx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4gIDk4Olx0XHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXHUwMDNlbl9tZXRlcnMpO1xuICA5OTpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICpuZXdfdGk7XG4gMTAwOlx0XHRpbnQgaTtcbiAxMDE6XHRcbiAxMDI6XHRcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xuIDEwMzpcdFx0aWYgKCFuZXdfdGkpXG4gMTA0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNTpcdFxuIDEwNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9tZXRlcnM7IGkmIzQzOyYjNDM7KVxuIDEwNzpcdFx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXHUwMDNlZHBfbWV0ZXJzW2ldKSlcbiAxMDg6XHRcdFx0XHRuZXdfdGktXHUwMDNlZHBfbWV0ZXJzW2ldID0gdGktXHUwMDNlZHBfbWV0ZXJzW2ldO1xuIDEwOTpcdFxuIDExMDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2V0aSwgbmV3X3RpKTtcbiAxMTE6XHRcdGNhbGxfcmN1KFx1MDAyNnRpLVx1MDAzZXJjdSwgZHBfbWV0ZXJfaW5zdGFuY2VfZnJlZV9yY3UpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIDA7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuIDExNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIDExODpcdHtcbiAxMTk6XHRcdHUzMiBoYXNoO1xuIDEyMDpcdFxuIDEyMTpcdFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKTtcbiAxMjI6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0sIG1ldGVyKTtcbiAxMjM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipSZS1ldmFsdWF0aW5nIE1ldGVyIFJlYWxsb2NhdGlvbiBMb2dpYyoqCgpSaWdodCwgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBpdGVyYXRpbmcgZnJvbSBgMGAgdXAgdG8gYG5fbWV0ZXJzYCwgd2hlcmUgYG5fbWV0ZXJzYCBpcyBlZmZlY3RpdmVseSB0aGUgc21hbGxlciBvZiB0aGUgY3VycmVudCBzaXplIChsZXQmIzM5O3MgY2FsbCB0aGF0IGBzaXplYCkgYW5kIGB0aS0mZ3Q7bl9tZXRlcnNgLiBIb2xkIG9uLCBgdGktJmd0O25fbWV0ZXJzYCAqaXMqIHRoZSBzaXplIG9mIHRoZSAqb2xkKiBtZXRlciBpbnN0YW5jZSwgaXNuJiMzOTt0IGl0PyBTbywgd2UgYXJlIGVzc2VudGlhbGx5IHJlYWxsb2NhdGluZyBiYXNlZCBvbiB0aGUgb2xkIHNpemUsIG5vdCB0aGUgcG90ZW50aWFsIG5ldyBzaXplLgoKTm93LCBteSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSBzb21ldGhpbmcgaXMgdXAgd2l0aCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YC4uLiBpdCBpbnNlcnRzIGludG8gdGhlICpvbGQqIGluc3RhbmNlIGF0IGBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAuIE9rYXksIHNvIGl04oCZcyBjYWxjdWxhdGluZyBhIGhhc2ggYmFzZWQgb24gdGhlIG9sZCB0YWJsZS4gQnV0IGlzbiYjMzk7dCB0aGUgd2hvbGUgcG9pbnQgdG8gcmVhbGxvY2F0ZSB0byBhICpuZXcqIGluc3RhbmNlPyBBbmQgdGhhdCBoYXNoPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgbWV0ZXJfaGFzaGAuIEkgaGF2ZSBhIHN1c3BpY2lvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRlcl9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJhbmRfcG9saWN5W09WU19CQU5EX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTM5LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDA6c3RhdGljIHUzMiBtZXRlcl9oYXNoKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksIHUzMiBpZClcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz01ND1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpsb29rdXBfbWV0ZXIoY29uc3Qgc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTctXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU4Olx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlcl9pZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01OS1cdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTE2PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMC1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEyMTpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjItXHRyY3VfYXNzaWduX3BvaW50ZXIodGktXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyOS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzMDpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzEtXHRSQ1VfSU5JVF9QT0lOVEVSKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSwgTlVMTCk7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1NS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE1NjpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbWV0ZXJfaGFzaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBjaGVja2luZyBvdXQgdGhpcyBgbWV0ZXJfaGFzaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gSXMgaXQgYSB1bmlxdWUgaWRlbnRpZmllcj8gQSBrZXk/IEEgZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmPyBLbm93aW5nIHRoYXQgaXMgZm91bmRhdGlvbmFsIHRvIGFueSBkZWVwZXIgYW5hbHlzaXMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCBpcyBsaWtlbHkgYSBoYXNoIHZhbHVlIGdlbmVyYXRlZCBmcm9tIHNvbWUgY29tYmluYXRpb24gb2YgbWV0ZXIgZGF0YSBhbmQgc29tZSBmb3JtIG9mIG1ldGVyIGlkZW50aWZpZXIuIFRoaXMgd291bGQgYWxsb3cgZm9yIHF1aWNrIGxvb2t1cCBhbmQgY29tcGFyaXNvbiBvZiByZWxhdGVkIG1ldGVyIGluZm9ybWF0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGlzIGNhbGN1bGF0ZWQgYW5kIHVzZWQuIEFyZSB0aGVyZSBhbnkgY29sbGlzaW9uIGNvbmNlcm5zIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW5wdXRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpcyB3ZWFrIG9yIHBvb3JseSBpbXBsZW1lbnRlZD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNoaW5nIGFsZ29yaXRobSBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXNoIGFyZSBhbHNvIGltcG9ydGFudDsgc3BlZWQgb2YgZ2VuZXJhdGlvbiBhbmQgbG9va3VwIGFyZSBrZXkgY29uc2lkZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlIHZhcmlhYmxlIG5hbWUgcHJvdmlkZXMgYW55IGNsdWUgYXMgdG8gaXRzIHVzZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29tbWVudHMgb3IgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUuIFdpdGhvdXQgbW9yZSBjb250ZXh0LCBJIGhhdmUgdG8gYXNzdW1lIGl0cyByb2xlIGlzIHRvIG1ha2UgYSBsb29rIHVwIG9yIG1ha2UgYSBjb21wYXJpc29uIGZhc3QgYW5kIHNpbXBsZSwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IGl0IGlzIGp1c3QgYSBuYW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdHN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXG4gIDQxOlx0e1xuICA0MjpcdFx0cmV0dXJuIGlkICUgdGktXHUwMDNlbl9tZXRlcnM7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB2b2lkIG92c19tZXRlcl9mcmVlKHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKCFtZXRlcilcbiAgNDg6XHRcdFx0cmV0dXJuO1xuICA0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFsbG9jYXRpb24gTG9naWMgLSBBIFBvdGVudGlhbCBCdWc/KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcmVhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIG1ldGVyIGluc3RhbmNlcywgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGJ1ZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIGhvdyB0aGUgaGFzaCBrZXksIGBtZXRlcl9oYXNoYCwgcmVsYXRlcyB0byB0aGUgbnVtYmVyIG9mIG1ldGVycywgYHRpLSZndDtuX21ldGVyc2AuIFRoZSBjdXJyZW50IGxvZ2ljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgZnJhZ2lsZS4KCklmIGBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnRgIGlzIGluc2VydGluZyBpbnRvIHRoZSAmIzM0O29sZCYjMzQ7IG1ldGVyIGluc3RhbmNlLCB0aGUgaGFzaCBrZXkgY2FsY3VsYXRpb24gdXNlcyB0aGUgb2xkIG1vZHVsdXM6IGBpZCAlIG9sZF9uX21ldGVyc2AuIE1ha2VzIHNlbnNlLCBzbyBmYXIuIEJ1dCwgdGhlbiwgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvbWVzIGludG8gcGxheSB0byBleHBhbmQgdGhlIHNpemUgYW5kIHRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBhIGJpdCBjb25mdXNpbmcuCgpJdCAqY29waWVzKiB0aGUgZWxlbWVudHMgdG8gdGhlIG5ldyBtZXRlciBpbnN0YW5jZS4gSXQgaXMgY29weWluZyB0aGUgZWxlbWVudHMgd2l0aCBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV0gPSB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYC4gU28sIHRoZSBjb3B5IG1haW50YWlucyB0aGUgc2FtZSBpbmRleCwgJiMzOTtpJiMzOTssIGluIHRoZSBuZXcgbGFyZ2VyIGFsbG9jYXRpb24uIEhvd2V2ZXIsIGBuZXdfdGktJmd0O25fbWV0ZXJzYCBpcyBkaWZmZXJlbnQsIGl0IGlzIGFjdHVhbGx5IGRvdWJsZWQgdG8gYG9sZF9uX21ldGVycyAqIDJgLiBUaGF0IG1lYW5zIHRoZSAqY29ycmVjdCogbmV3IGhhc2ggZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG5ldyBtZXRlciBpbnN0YW5jZSBzaG91bGQgYmUgYGlkICUgbmV3X25fbWV0ZXJzYC4gCgpCdXQsIGlmIHRoZSBjb3B5IGp1c3QgcGxhY2VzIHRoZSBtZXRlciBlbGVtZW50cyBhdCB0aGUgKnNhbWUgaW5kZXgqIGBpYCwgaW4gdGhlIGV4cGFuZGVkIGFycmF5LCB0aGVuIGBpZCAlIG5ld19uX21ldGVyc2AgbWlnaHQgKm5vdCogZXF1YWwgYGlgISBUaGUgaGFzaCBrZXkgd2lsbCBub3QgYmUgdGhlIHNhbWUhIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29sbGlzaW9uIG9yIG1pcy1oYXNoaW5nIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgY2FyZWZ1bGx5LiBUaGVyZSBtYXkgYmUgYSBzdWJ0bGUgZmxhdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NDpcdHN0YXRpYyBpbnRcbiAgOTU6XHRkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbiAgOTg6XHRcdGludCBuX21ldGVycyA9IG1pbihzaXplLCB0aS1cdTAwM2VuX21ldGVycyk7XG4gIDk5Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcbiAxMDA6XHRcdGludCBpO1xuIDEwMTpcdFxuIDEwMjpcdFx0bmV3X3RpID0gZHBfbWV0ZXJfaW5zdGFuY2VfYWxsb2Moc2l6ZSk7XG4gMTAzOlx0XHRpZiAoIW5ld190aSlcbiAxMDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTA1Olx0XG4gMTA2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX21ldGVyczsgaSYjNDM7JiM0MzspXG4gMTA3Olx0XHRcdGlmIChyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaV0pKVxuIDEwODpcdFx0XHRcdG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV07XG4gMTA5Olx0XG4gMTEwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZXRpLCBuZXdfdGkpO1xuIDExMTpcdFx0Y2FsbF9yY3UoXHUwMDI2dGktXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XG4gMTEyOlx0XG4gMTEzOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhbGxvY2F0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzdHJhaWdodCBjb3B5IG9mIHRoZSBtZXRlciBpbnN0YW5jZXMgZnJvbSB0aGUgb2xkIHRhYmxlIChgdGktJmd0O2RwX21ldGVyc2ApIHRvIHRoZSBuZXcgb25lIChgbmV3X3RpLSZndDtkcF9tZXRlcnNgKS4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlIGhhc2gga2V5IGZvciBlYWNoIGNvcGllZCBpbnN0YW5jZSBpbiB0aGUgKm5ldyogdGFibGUgaXMgKnN0aWxsKiBqdXN0IHRoZSBvcmlnaW5hbCBpbmRleCBgaWAuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgYG1ldGVyX2hhc2gobmV3X3RpLCBpZClgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGhhc2hpbmcgdXNpbmcgYGlkICUgbmV3X25fbWV0ZXJzYC4gRG9lcyB0aGlzIG1lYW4gdGhhdCBgaWRgIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdWNoIHRoYXQgYGlkICUgb2xkX25fbWV0ZXJzID09IGlkICUgbmV3X25fbWV0ZXJzYD8gTm8sIGFic29sdXRlbHkgbm90ISBJdCYjMzk7cyBub3QuIFRha2UgZm9yIGV4YW1wbGUsIGlmIGBpZCA9IG9sZF9uX21ldGVycyAmIzQzOyAxYC4gSW4gdGhlIG9yaWdpbmFsIHRhYmxlLCB0aGUgaGFzaCB3b3VsZCBiZSBgMWAsIGJ1dCBpbiB0aGUgbmV3IHRhYmxlLCB0aGUgaGFzaCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLCBhc3N1bWluZyBgbmV3X25fbWV0ZXJzYCBpcyBhIGRpZmZlcmVudCBzaXplIQoKQWgsIEkgc2VlIHRoZSBwcm9ibGVtLiBJZiB3ZSBqdXN0IGNvcHkgdGhlIGluc3RhbmNlcyBvdmVyLCB0aGVuIHdoZW4gYGxvb2t1cF9tZXRlcmAgaXMgY2FsbGVkLCBpdCYjMzk7cyBnb2luZyB0byBjYWxjdWxhdGUgdGhlIGhhc2gga2V5IHVzaW5nIHRoZSAqbmV3KiBtb2R1bHVzIChgbmV3X25fbWV0ZXJzYCkuIEFuZCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBpbnN0YW5jZXMgd2lsbCBiZSBoYXNoZWQgdXNpbmcgdGhlIG5ldyBtb2R1bHVzIGFuZCBub3QgdGhlIG9sZCBvbmUsIHdlJiMzOTtsbCBlbmQgdXAgbG9va2luZyBhdCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgKGFuZCBsaWtlbHkgdW51c2VkKSBzbG90IGluIHRoZSB0YWJsZSwgYW5kIHdlJiMzOTtsbCBwdWxsIGJhY2sgYSBOVUxMIHBvaW50ZXIhCgpPa2F5LCB0aW1lIHRvIHRyYWNlIHdoZXJlIHRoYXQgYGlkYCBpcyBjb21pbmcgZnJvbS4gTmVlZCB0byBzZWUgaG93IHRob3NlIG1ldGVyIElEcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBmaXJzdCBwbGFjZS4uLiB0aGlzIHJlYWxsb2MgY291bGQgYmUgYSBkaXNhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBfbWV0ZXJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9Mjc4PXN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMC1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjMzMTpzdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0zMzIte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDI2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDI3Olx0bWV0ZXIgPSBkcF9tZXRlcl9jcmVhdGUoYSk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MjgtXHRpZiAoSVNfRVJSKG1ldGVyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBkcF9tZXRlcl9jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkcF9tZXRlcl9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdvIHRvIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY2FsbCBmb3Igc29tZSBraW5kIG9mIHNwZWNpYWxpemVkIG1ldGVyaW5nIGRldmljZT8gT3IgcGVyaGFwcyBhIG1vcmUgYWJzdHJhY3Qgc29mdHdhcmUgY29uc3RydWN0IGRlc2lnbmVkIHRvIHRyYWNrIHNvbWUgc3lzdGVtIHJlc291cmNlIHVzYWdlPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gbGVhbnMgdG93YXJkcyB0aGUgZm9ybWVyIOKAkyB0aGF0IOKAnGRw4oCdIHByZWZpeCBvZnRlbiBzdWdnZXN0cyBEaWdpdGFsIFByb2Nlc3Npbmcgb3IgRGV2aWNlIFByb2ZpbGUsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLgoKTXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbnMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgZmllbGRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzLCBpbnRlZ2VycywgZmxvYXRzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYXRvbWljIGNvdW50ZXJzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbXV0ZXhlcyBvciBzZW1hcGhvcmVzIGludm9sdmVkIHRvIHByb3RlY3QgYWNjZXNzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEltbWVkaWF0ZWx5IEkgc3RhcnQgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMsIHBvc3NpYmxlIHJlc291cmNlIGxpbWl0cy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIEFQSS4gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0IHJldHVybj8gQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBtZXRlciBvYmplY3QsIEkgcHJlc3VtZT8gT3IgcGVyaGFwcyBhbiBlcnJvciBjb2RlPyBXaGF0IGtpbmQgb2YgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGNhbiBiZSBwYXNzZWQ/IFRoZSBtb3JlIEkga25vdyBhYm91dCB0aGUgcGFyYW1ldGVycywgdGhlIHF1aWNrZXIgSSBjYW4gZW52aXNpb24gaXRzIHVzZSBjYXNlcy4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBpbXBsaWNpdGx5IHNldCBpZiBJIGRvIG5vdCBzZXQgdGhlc2Ugb3B0aW9uYWwgZmxhZ3M/CgpGaW5hbGx5LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBJIHdvbmRlciBhYm91dCB0aGUgbGlmZWN5Y2xlLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYGRwX21ldGVyX2Rlc3Ryb3lgIGZ1bmN0aW9uPyBIb3cgaXMgdGhlIG1ldGVyIHJlbGVhc2VkIGFuZCBjbGVhbmVkIHVwIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zIOKAkyB0cmFja2luZyBkb3duIHJlc291cmNlIGxlYWtzIGlzIGEgcGFpbi4gSeKAmW0gYWxzbyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHBvc3NpYmxlIGludGVncmF0aW9uIHRlc3RzIHRvIGVuc3VyZSB0aGF0IGFsbG9jYXRpb24sIHByb3BlciB1c2FnZSwgYW5kIGRlYWxsb2NhdGlvbiBhcmUgd29ya2luZyBjb3JyZWN0bHkgaW4gbXkgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzE6XHRzdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4gMzMyOlx0e1xuIDMzMzpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDMzNDpcdFx0aW50IHJlbTtcbiAzMzU6XHRcdHUxNiBuX2JhbmRzID0gMDtcbiAzMzY6XHRcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XG4gMzM3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfYmFuZCAqYmFuZDtcbiAzMzg6XHRcdGludCBlcnI7XG4gMzM5Olx0XG4gMzQwOlx0XHQvKiBWYWxpZGF0ZSBhdHRyaWJ1dGVzLCBjb3VudCB0aGUgYmFuZHMuICovXG4gMzQxOlx0XHRpZiAoIWFbT1ZTX01FVEVSX0FUVFJfQkFORFNdKVxuIDM0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAzNDM6XHRcbiAzNDQ6XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhLCBhW09WU19NRVRFUl9BVFRSX0JBTkRTXSwgcmVtKVxuIDM0NTpcdFx0XHRpZiAoJiM0MzsmIzQzO25fYmFuZHMgXHUwMDNlIERQX01BWF9CQU5EUylcbiAzNDY6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIG1ldGVyIGJlZm9yZSBsb2NraW5nIGFueXRoaW5nLiAqL1xuIDM0OTpcdFx0bWV0ZXIgPSBremFsbG9jX2ZsZXgoKm1ldGVyLCBiYW5kcywgbl9iYW5kcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAzNTA6XHRcdGlmICghbWV0ZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVW5wYWNraW5nIE1ldGVyIElEIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyBsaWtlIGBtZXRlci0mZ3Q7aWRgLiBJIG5lZWQgdG8gc3RvcCBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgYG1ldGVyLSZndDtpZGAgZmllbGQgZ2V0dGluZyBwb3B1bGF0ZWQ/IEkgY2FuIHNlZSBpdCBiZWluZyB1c2VkLCBidXQgSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgdHJhY2UgaXRzIGluaXRpYWxpemF0aW9uLiBJcyBpdCBiZWluZyBzZXQgZHVyaW5nIHRoZSBgbWV0ZXJgIHN0cnVjdCYjMzk7cyBhbGxvY2F0aW9uPyBJcyB0aGVyZSBzb21lIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQ/IE9yIGlzIGl0IGNvbWluZyBmcm9tIGEgZnVuY3Rpb24gY2FsbCBJJiMzOTt2ZSBtaXNzZWQgaW4gbXkgaW5pdGlhbCBzY2FuPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGhlcmU7IGEgbWlzc2VkIGluaXRpYWxpemF0aW9uIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBidWdzIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiB1bmRlZmluZWQgYmVoYXZpb3Igb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgdGhpcyBJRCBpcyBsYXRlciB1c2VkIGluIGEgY3JpdGljYWwgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCB0aGUgY29udGV4dCB0byByZXNvbHZlIG15IGNvbmNlcm5zLiBBIHF1aWNrIHNlYXJjaCBzaG91bGQgcmVzb2x2ZSBteSBxdWVzdGlvbnMsIG9yIEkgbWF5IGJlIHJlcXVpcmVkIHRvIHdvcmsgYmFja3dhcmRzIHRvIGlkZW50aWZ5IHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMTpcdHN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA0MTI6XHR7XG4gNDEzOlx0XHRzdHJ1Y3QgbmxhdHRyICoqYSA9IGluZm8tXHUwMDNlYXR0cnM7XG4gNDE0Olx0XHRzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyLCAqb2xkX21ldGVyO1xuIDQxNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIDQxNjpcdFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gNDE3Olx0XHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlciA9IGdlbmxfaW5mb191c2VyaGRyKGluZm8pO1xuIDQxODpcdFx0c3RydWN0IGRwX21ldGVyX3RhYmxlICptZXRlcl90Ymw7XG4gNDE5Olx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuIDQyMDpcdFx0aW50IGVycjtcbiA0MjE6XHRcdHUzMiBtZXRlcl9pZDtcbiA0MjI6XHRcdGJvb2wgZmFpbGVkO1xuIDQyMzpcdFxuIDQyNDpcdFx0aWYgKCFhW09WU19NRVRFUl9BVFRSX0lEXSlcbiA0MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XG4gNDI3Olx0XHRtZXRlciA9IGRwX21ldGVyX2NyZWF0ZShhKTtcbiA0Mjg6XHRcdGlmIChJU19FUlIobWV0ZXIpKVxuIDQyOTpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZXRlcik7XG4gNDMwOlx0XG4gNDMxOlx0XHRyZXBseSA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX01FVEVSX0NNRF9TRVQsXG4gNDMyOlx0XHRcdFx0XHRcdCAgXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XG4gNDMzOlx0XHRpZiAoSVNfRVJSKHJlcGx5KSkge1xuIDQzNDpcdFx0XHRlcnIgPSBQVFJfRVJSKHJlcGx5KTtcbiA0MzU6XHRcdFx0Z290byBleGl0X2ZyZWVfbWV0ZXI7XG4gNDM2Olx0XHR9XG4gNDM3Olx0XG4gNDM4Olx0XHRvdnNfbG9jaygpO1xuIDQzOTpcdFx0ZHAgPSBnZXRfZHAoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbiA0NDA6XHRcdGlmICghZHApIHtcbiA0NDE6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiA0NDI6XHRcdFx0Z290byBleGl0X3VubG9jaztcbiA0NDM6XHRcdH1cbiA0NDQ6XHRcbiA0NDU6XHRcdG1ldGVyX3RibCA9IFx1MDAyNmRwLVx1MDAzZW1ldGVyX3RibDtcbiA0NDY6XHRcdG1ldGVyX2lkID0gbmxhX2dldF91MzIoYVtPVlNfTUVURVJfQVRUUl9JRF0pO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0b2xkX21ldGVyID0gbG9va3VwX21ldGVyKG1ldGVyX3RibCwgbWV0ZXJfaWQpO1xuIDQ0OTpcdFx0ZXJyID0gZGV0YWNoX21ldGVyKG1ldGVyX3RibCwgb2xkX21ldGVyKTtcbiA0NTA6XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE1ldGVyIElkZW50aWZpY2F0aW9uKioKCkFscmlnaHQsIHRoZSB1c2VyJiMzOTtzIHByb3ZpZGVkIGEgYG1ldGVyX2lkYC4gR29vZC4gVGhpcyBpbmRpY2F0ZXMgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBhIHNwZWNpZmljIG1ldGVyIG9iamVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIElEIGdldHMgYXNzaWduZWQgdG8gdGhlIGBtZXRlcmAgb2JqZWN0LiBTZWVtcyBsaWtlIHRoZSBuZXh0IGxpbmUgb2YgY29kZSwgYG1ldGVyLSZndDtpZCA9IG1ldGVyX2lkYCwgd2lsbCBoYW5kbGUgdGhpcyBkaXJlY3RseS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdvcmtzIGFzIGV4cGVjdGVkLiBXZSBjYW4gdGhlbiBwcm9jZWVkIHRvIGxldmVyYWdlIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0ZXJyID0gYXR0YWNoX21ldGVyKG1ldGVyX3RibCwgbWV0ZXIpO1xuIDQ1NDpcdFx0aWYgKGVycilcbiA0NTU6XHRcdFx0Z290byBleGl0X2ZyZWVfb2xkX21ldGVyO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0b3ZzX3VubG9jaygpO1xuIDQ1ODpcdFxuIDQ1OTpcdFx0LyogQnVpbGQgcmVzcG9uc2Ugd2l0aCB0aGUgbWV0ZXJfaWQgYW5kIHN0YXRzIGZyb21cbiA0NjA6XHRcdCAqIHRoZSBvbGQgbWV0ZXIsIGlmIGFueS5cbiA0NjE6XHRcdCAqL1xuIDQ2MjpcdFx0ZmFpbGVkID0gbmxhX3B1dF91MzIocmVwbHksIE9WU19NRVRFUl9BVFRSX0lELCBtZXRlcl9pZCk7XG4gNDYzOlx0XHRXQVJOX09OKGZhaWxlZCk7XG4gNDY0Olx0XHRpZiAob2xkX21ldGVyKSB7XG4gNDY1Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZvbGRfbWV0ZXItXHUwMDNlbG9jayk7XG4gNDY2Olx0XHRcdGlmIChvbGRfbWV0ZXItXHUwMDNla2VlcF9zdGF0cykge1xuIDQ2NzpcdFx0XHRcdGVyciA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMocmVwbHksIG1ldGVyX2lkLFxuIDQ2ODpcdFx0XHRcdFx0XHRcdFx0b2xkX21ldGVyKTtcbiA0Njk6XHRcdFx0XHRXQVJOX09OKGVycik7XG4gNDcwOlx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEZWJ1Z2dpbmcgdGhlIE1ldGVyIElEIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSBoaXQgd2l0aCBhIHF1ZXN0aW9uOiBXaGVyZSAqZXhhY3RseSogaXMgYG1ldGVyLSZndDtpZGAgYmVpbmcgc2V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBiZWNhdXNlIHdpdGhvdXQga25vd2luZyB3aGVyZSB0aGUgSUQgaXMgcG9wdWxhdGVkLCBhbnkgc3Vic2VxdWVudCBpc3N1ZXMgd2l0aCB0aGF0IElEIGFyZSBnb2luZyB0byBiZSBhIHdpbGQgZ29vc2UgY2hhc2UuIElzIGl0IGR1cmluZyB0aGUgbWV0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24/IElzIGl0IGJlaW5nIHNldCBieSBzb21lIGV4dGVybmFsIGZ1bmN0aW9uIGNhbGw/IElzIHRoZXJlIGEgZGVmYXVsdCB2YWx1ZSBiZWluZyBhc3NpZ25lZCBzb21ld2hlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhc3NpZ25tZW50IHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGJ1Zy4gVGltZSB0byBkaWchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ldGVyLVx1MDAzZWlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9NTQ9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqbG9va3VwX21ldGVyKGNvbnN0IHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYxLVx0bWV0ZXIgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0pO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjI6XHRpZiAobWV0ZXIgXHUwMDI2XHUwMDI2IGxpa2VseShtZXRlci1cdTAwM2VpZCA9PSBtZXRlcl9pZCkpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02My1cdFx0cmV0dXJuIG1ldGVyO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTExNj1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjAtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMjE6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTIyLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSwgbWV0ZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjktXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzA6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTMxLVx0UkNVX0lOSVRfUE9JTlRFUih0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0sIE5VTEwpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTUtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNTY6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU3LVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzUyLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MzUzOlx0bWV0ZXItXHUwMDNlaWQgPSBubGFfZ2V0X3UzMihhW09WU19NRVRFUl9BVFRSX0lEXSk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0zNTQtXHRtZXRlci1cdTAwM2V1c2VkID0gZGl2X3U2NChrdGltZV9nZXRfbnMoKSwgMTAwMCAqIDEwMDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNZXRlciBJRCBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcF9tZXRlcl9jcmVhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxpbmUgYG1ldGVyLSZndDtpZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBgbWV0ZXItJmd0O2lkYCBpcyBnZXR0aW5nIGl0cyB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLiBMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uCgpJZiB0aGUgdXNlciBzZXRzIGBtZXRlci0mZ3Q7aWRgLCB0aGVuIHRoZSBgbWV0ZXJfaGFzaGAgdmFsdWUgaXMganVzdCB0aGF0IElEIG1vZHVsbyBgbl9tZXRlcnNgLCB3aGljaCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1ldGVycywgcmlnaHQ/IE5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgYmxpbmRseSBjb3BpZXMgdGhlIG1ldGVycyBmcm9tIHRoZSBvbGQgdGFibGUgdG8gdGhlIG5ldyBvbmUsIGxldCYjMzk7cyBzYXkgaXQgY29waWVzIGB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYCB0byBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gLCB0aGUgaGFzaCBpbiB0aGUgbmV3IGluc3RhbmNlICppcyogYGlgLiBCdXQsIGBtZXRlcl9oYXNoKG5ld190aSwgaWQpYCB3b3VsZCBub3cgdXNlIGBpZCAlIG5ld19uX21ldGVyc2AuCgpIYW5nIG9uLCBsZXQmIzM5O3MgY29ubmVjdCB0aGUgZG90cy4gVGhlIG9sZCBoYXNoIChgaWApIGlzIHRoZSBzYW1lIGFzIGBpZCAlIG9sZF9uX21ldGVyc2AuIERvZXMgdGhhdCBtZWFuIHRoYXQgYGlkICUgbmV3X25fbWV0ZXJzYCAqYWxzbyogZXF1YWxzIGBpYD8gTm8sIG5vdCBuZWNlc3NhcmlseSEgSWYgYGlkYCBpcywgc2F5LCBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgaXMganVzdCBgMWAuIEJ1dCwgYGlkICUgbmV3X25fbWV0ZXJzYCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLgoKU28sICppZiogYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgY29waWVzIHRvIHRoZSBzYW1lIGluZGV4LCBgbG9va3VwX21ldGVyYCB3b3VsZCBsb29rIGF0IGBpZCAlIG5ld19uX21ldGVyc2AsIHdoaWNoIHdvdWxkIGJlIGBvbGRfbl9tZXRlcnMgJiM0MzsgMWAgaW4gb3VyIGV4YW1wbGUsIGFuZCBpdCB3b3VsZCBmaW5kLi4uIE5VTEwhIEJlY2F1c2UgaXQmIzM5O3MgbG9va2luZyBmb3IgYDFgIHdoaWNoIGlzIG5vdyBhdCBgb2xkX25fbWV0ZXJzICYjNDM7IDFgISBUaGF0JiMzOTtzIGEgc2VyaW91cyBpbmNvbnNpc3RlbmN5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IHJldmlldyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdGF0aWMgaW50XG4gIDk1Olx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4gIDk4Olx0XHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXHUwMDNlbl9tZXRlcnMpO1xuICA5OTpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICpuZXdfdGk7XG4gMTAwOlx0XHRpbnQgaTtcbiAxMDE6XHRcbiAxMDI6XHRcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xuIDEwMzpcdFx0aWYgKCFuZXdfdGkpXG4gMTA0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNTpcdFxuIDEwNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9tZXRlcnM7IGkmIzQzOyYjNDM7KVxuIDEwNzpcdFx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXHUwMDNlZHBfbWV0ZXJzW2ldKSlcbiAxMDg6XHRcdFx0XHRuZXdfdGktXHUwMDNlZHBfbWV0ZXJzW2ldID0gdGktXHUwMDNlZHBfbWV0ZXJzW2ldO1xuIDEwOTpcdFxuIDExMDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2V0aSwgbmV3X3RpKTtcbiAxMTE6XHRcdGNhbGxfcmN1KFx1MDAyNnRpLVx1MDAzZXJjdSwgZHBfbWV0ZXJfaW5zdGFuY2VfZnJlZV9yY3UpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgSW5zdGFuY2UgUmVhbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGRvZXMgYSBzdHJhaWdodCBjb3B5IGZyb20gdGhlIG9sZCBtZXRlciBhcnJheSAoYHRpLSZndDtkcF9tZXRlcnNgKSB0byB0aGUgbmV3IG9uZSAoYG5ld190aS0mZ3Q7ZHBfbWV0ZXJzYCkuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdoZW4gYHRibC0mZ3Q7Y291bnRgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgdGktJmd0O25fbWV0ZXJzYC4gQW5kIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGUgYG1ldGVyX2hhc2hgIGNhbGN1bGF0aW9uOiBgaWQgJSB0aS0mZ3Q7bl9tZXRlcnNgLgoKV2FpdCBhIG1pbnV0ZSwgT1ZTIHVzZXJzcGFjZSBhbGxvY2F0ZXMgbWV0ZXIgSURzIGZyb20gYW4gSUQgcG9vbCwgcmlnaHQ/IFRoZSBjb2RlIGNvbW1lbnQgZXZlbiBzYXlzIHRoZSBzbG90cyBzaG91bGQgZ2VuZXJhbGx5IGJlIGVtcHR5IGJlY2F1c2Ugb2YgdGhlIElEIHBvb2wgbWFuYWdlbWVudC4gSWYgdGhlIElEcyBjb21lIGZyb20gYSBwb29sLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBzZXF1ZW50aWFsLiBJZiB0aGUgSUQgaXMgc2VxdWVudGlhbCwgYW5kIHRoZSBJRCBpcyBsZXNzIHRoYW4gYG5fbWV0ZXJzYCwgdGhlbiBgaWQgJSBuX21ldGVyc2AgaXMganVzdCBgaWRgLiBTbywgaWYgYGlkICZsdDsgbl9tZXRlcnNgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVycyA9PSBpZCAlIG5ld19uX21ldGVycyA9PSBpZGAsIGFuZCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IHNlZW1zIHRvIHdvcmsuCgpCdXQgd2hhdCBpZiBgaWRgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbl9tZXRlcnNgPyBJbiB0aGF0IGNhc2UsIGBpZCAlIG9sZF9uX21ldGVyc2AgaXNuJiMzOTt0IGp1c3QgYGlkYC4gSG93ZXZlciwgaWYgYGlkICZndDs9IG5fbWV0ZXJzYCwgdGhlbiBgdGJsLSZndDtjb3VudGAgd291bGQgYmUgYXQgbGVhc3QgYG5fbWV0ZXJzYCwgcmlnaHQ/IE5vdCBuZWNlc3NhcmlseSEgVXNlcnNwYWNlICpjb3VsZCogc2VuZCBhIGxhcmdlIGBpZGAuIElmIHRoYXQgaGFwcGVucywgdGhlbiBgaWQgJSBvbGRfbl9tZXRlcnNgIG1pZ2h0IGNvbGxpZGUgd2l0aCBhbiBleGlzdGluZyBtZXRlci4gQnV0LCB3YWl0LCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvbiwgYGF0dGFjaF9tZXRlcmAgcmV0dXJucyBgLUVCVVNZYC4KCmBgYGMKCWlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS0mZ3Q7ZHBfbWV0ZXJzW2hhc2hdKSkpIHsKCQllcnIgPSAtRUJVU1k7CgkJZ290byBhdHRhY2hfZXJyOwoJfQpgYGAKClNvLCB5b3UgY2FuJiMzOTt0IGhhdmUgdHdvIG1ldGVycyB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUsIHNpbmNlIGBhdHRhY2hfbWV0ZXJgIHdvbiYjMzk7dCBhbGxvdyBpdC4gQW5kIHNpbmNlIGB0YmwtJmd0O2NvdW50ICZsdDsgdGktJmd0O25fbWV0ZXJzYCAob3RoZXJ3aXNlLCBhIHJlYWxsb2NhdGlvbiB3b3VsZCBvY2N1ciksIHRoZXJlJiMzOTtzICphbHdheXMqIGFuIGVtcHR5IHNsb3QgYXZhaWxhYmxlLgoKQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvcGllcyB0byB0aGUgKnNhbWUqIGluZGV4LCBhc3N1bWluZyBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gIGlzIHRoZSByaWdodCBzbG90IGZvciB0aGUgbWV0ZXIuIEhvd2V2ZXIsIHRoZSAqY29ycmVjdCogc2xvdCBpcyBkZXRlcm1pbmVkIGJ5IGBtZXRlci0mZ3Q7aWQgJSBuZXdfbl9tZXRlcnNgLiBJZiBgbWV0ZXItJmd0O2lkICZndDs9IG9sZF9uX21ldGVyc2AsIHRoZW4gYG1ldGVyLSZndDtpZCAlIG5ld19uX21ldGVyc2AgaXMgKk5PVCogZXF1YWwgdG8gYGlgLiBDb25zZXF1ZW50bHksIGBsb29rdXBfbWV0ZXJgIHdpbGwgZmFpbCB0byBmaW5kIGl0IQoKVGhpcy4uLiB0aGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGluIE9WUyEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgcGF0Y2hlcyBoYXZlIHRvdWNoZWQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIHJlY2VudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9OTQ9c3RhdGljIGludFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6OTU6ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy05Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE0OC1cdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0aS1cdTAwM2VuX21ldGVycykge1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTQ5Olx0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1MC1cdFx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xNzQ9c3RhdGljIGludCBkZXRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjAxOlx0XHRpZiAoZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIGhhbGZfc2l6ZSkpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDItXHRcdFx0Z290byBzaHJpbmtfZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgTWV0ZXIgVGFibGUgUmVzaXppbmcqKgoKT2theSwgc28gdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiBpc24mIzM5O3QgKmRpcmVjdGx5KiBtb2RpZmllZCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gVGhlIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlIGBhdHRhY2hfbWV0ZXJgIGZ1bmN0aW9uLiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4KCkJlZm9yZSB0aGUgcGF0Y2gsIGhlcmXigJlzIHdoYXQgaGFwcGVuZWQ6IGEgbmV3IG1ldGVyLCBgbWV0ZXJgLCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgY3VycmVudCBtZXRlciB0YWJsZSBpbnN0YW5jZSwgYHRpYC4gIENydWNpYWxseSwgdGhlIGhhc2ggaW5kZXggY2FsY3VsYXRpb24sIGBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAsIHdhcyBwZXJmb3JtZWQgdXNpbmcgdGhlIGN1cnJlbnQgYHRpYCwgKmJlZm9yZSogYW55IHJlc2l6aW5nIGhhcHBlbmVkLiBJZiB0aGUgdGFibGUgd2FzIGdvaW5nIHRvIGJlIHJlYWxsb2NhdGVkIGR1ZSB0byBjYXBhY2l0eSwgdGhpcyBpbnNlcnRpb24gaGFwcGVuZWQgaW50byB0aGUgKm9sZCogdGFibGUuIFRoZW4sIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZGlkKiBnZXQgY2FsbGVkIGlmIG5lY2Vzc2FyeSwgd2hpY2ggYWxsb2NhdGVzIGEgYG5ld190aWAsIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHRpYCB0byBgbmV3X3RpYCwgYW5kIGZyZWVzIHRoZSBvbGQgYHRpYC4gVGhlIGluc2VydCB3YXMgY2FsbGVkICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhlIGNvcGllZCBtZXRlcnMgaW4gYG5ld190aWAgd291bGQgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlcy4KCk15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgcmluZ2luZyBub3cgYmVjYXVzZSBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhICptYWpvciogaW5kZXhpbmcgcHJvYmxlbSBpZiB0aGUgdGFibGUgc2l6ZSBpcyBjaGFuZ2VkLiBgbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAgaXMgYG1ldGVyLSZndDtpZCAlIHRpLSZndDtuX21ldGVyc2AuIElmIGEgcmVhbGxvY2F0aW9uIGhhcHBlbnMsIHRoZSBpbmRleCBjYWxjdWxhdGlvbiBjaGFuZ2VzIGJlY2F1c2UgYG5ld190aS0mZ3Q7bl9tZXRlcnNgIGlzIGRpZmZlcmVudC4gQSBtZXRlciYjMzk7cyBpbnRlbmRlZCBsb2NhdGlvbiB3aXRoaW4gdGhlICpuZXcqIHRhYmxlIGNvdWxkIGJlIGNvbXBsZXRlbHkgd3JvbmchIEFueSBzZWFyY2ggZm9yIHRoZSBtZXRlciBhZnRlciBhIHJlYWxsb2Mgd291bGQgbGlrZWx5IGZhaWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG5ldyBtZXRlciBtaWdodCBnZXQgbG9zdCBpbiB0aGUgc2h1ZmZsZSwgYnV0IHRoaXMgaXMgYSBmYXIgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBleGlzdGluZyBtZXRlcnMgY291bGQgYmUgaW5jb3JyZWN0bHkgaW5kZXhlZCAqYWZ0ZXIqIHRoZSByZWFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIGhvdyBpdCBmaXhlcyB0aGlzLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zISBUaGUgcGF0Y2ggZmlyc3QgY2hlY2tzIGlmIGEgcmVhbGxvY2F0aW9uIGlzIG5lZWRlZC4gSWYgc28sIGl0IGNhbGxzIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYC4gKlRoZW4qLCBhZnRlciB0aGUgdGFibGUgaXMgcmVzaXplZCwgdGhlIGNvZGUgZ2V0cyB0aGUgbmV3IGB0aWAgdGFibGUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC0mZ3Q7dGkpYCwgYW5kIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uIG5vdyBoYXBwZW5zIHVzaW5nIHRoZSAqbmV3KiBgdGlgOiBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLSZndDtpZClgLiBUaGUgbWV0ZXIgaXMgdGhlbiBpbnNlcnRlZCBpbnRvIHRoZSBgbmV3X3RpYCBhdCB0aGUgY29ycmVjdCBsb2NhdGlvbi4KClllcyEgVGhhdCYjMzk7cyBpdC4gSXTigJlzIGEgdmVyeSBzaW1wbGUgYW5kIGVsZWdhbnQgZml4IGJ5IHJlb3JkZXJpbmcgdGhlIGxvZ2ljLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCwgYnV0IG5vdyBpdCYjMzk7cyBjbGVhcjogIHRoZSBpbnNlcnRpb24gaXMgcGVyZm9ybWVkIGFnYWluc3QgdGhlICpyZXNpemVkKiB0YWJsZSBub3csIGFuZCB0aGUgaGFzaCBjYWxjdWxhdGlvbiB1c2VzIHRoZSBuZXcsIGNvcnJlY3QgdGFibGUgc2l6ZS4KCk15IGNvbmNlcm4gbm93IGdvZXMgdG8gYWxsIG9mIHRoZSBleGlzdGluZyBtZXRlcnMgdGhhdCB3ZXJlICphbHJlYWR5KiBpbiB0aGUgdGFibGUgYmVmb3JlIHRoZSByZWFsbG9jLiBXZXJlIHRob3NlIG1ldGVycyByZWluZGV4ZWQgcHJvcGVybHk/IExldCBtZSBjaGVjayBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgYWdhaW4gdG8gZW5zdXJlIGFueSBtZXRlcnMgY29waWVkIGZyb20gYHRpYCB0byBgbmV3X3RpYCBhcmUgcHJvcGVybHkgcmVpbmRleGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NDpcdHN0YXRpYyBpbnRcbiAgOTU6XHRkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbiAgOTg6XHRcdGludCBuX21ldGVycyA9IG1pbihzaXplLCB0aS1cdTAwM2VuX21ldGVycyk7XG4gIDk5Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcbiAxMDA6XHRcdGludCBpO1xuIDEwMTpcdFxuIDEwMjpcdFx0bmV3X3RpID0gZHBfbWV0ZXJfaW5zdGFuY2VfYWxsb2Moc2l6ZSk7XG4gMTAzOlx0XHRpZiAoIW5ld190aSlcbiAxMDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTA1Olx0XG4gMTA2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX21ldGVyczsgaSYjNDM7JiM0MzspXG4gMTA3Olx0XHRcdGlmIChyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaV0pKVxuIDEwODpcdFx0XHRcdG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV07XG4gMTA5Olx0XG4gMTEwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZXRpLCBuZXdfdGkpO1xuIDExMTpcdFx0Y2FsbF9yY3UoXHUwMDI2dGktXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XG4gMTEyOlx0XG4gMTEzOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlZXAgRGl2ZSBpbnRvIGEgU3VidGxlIE1ldGVyIEFsbG9jYXRpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCB0aGlzIGp1c3QgY29waWVzIHN0dWZmIGFyb3VuZC4mIzM0OyBUaGUgY29kZSBzaW1wbHkgY29waWVzIGB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYCB0byBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gLiBFYXN5LCByaWdodD8gSWYgdGhlcmUgYXJlIG90aGVyIG1ldGVycyBpbiB0aGUgYHRpYCBzdHJ1Y3R1cmUsIHRoZXkmIzM5O3JlIGNvcGllZCB0byB0aGUgc2FtZSBpbmRpY2VzLiBCdXQgdGhlbiBpdCBoaXQgbWU6IHdoYXQgYWJvdXQgdGhlIG1ldGVyICpJRCo/IElmIGEgbWV0ZXImIzM5O3MgYGlkYCBpc24mIzM5O3Qgc3VjaCB0aGF0IGBpZCAlIG5ld19uX21ldGVycyA9PSBpYCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhleSYjMzk7bGwgZW5kIHVwIGF0IHRoZSB3cm9uZyBpbmRleCBpbiB0aGUgcmVhbGxvY2F0ZWQgdGFibGUuCgpJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgaG93IE9WUyB1c2Vyc3BhY2UgYWxsb2NhdGVzIElEcy4gSWYgaXQmIzM5O3Mgc2VxdWVudGlhbCwgdGhlIGZpcnN0IG1ldGVyIGdldHMgYGlkID0gMGAsIHNlY29uZCBnZXRzIGBpZCA9IDFgLCBhbmQgc28gb24uIExldCYjMzk7cyBzYXkgd2UmIzM5O3ZlIHJlYWNoZWQgYSB0YWJsZSBzaXplIHdoZXJlIGB0YmwtJmd0O2NvdW50YCBpcyBlcXVhbCB0byBgdGktJmd0O25fbWV0ZXJzYCwgc2F5IGBuX21ldGVycyA9IDEwMjRgLiBUaGUgbWV0ZXIgSURzIHdpbGwgYmUgZnJvbSBgMGAgdG8gYDEwMjNgLiBTbyBmb3IgYWxsIHRoZXNlIG1ldGVycywgYGlkICZsdDsgMTAyNGAuIFRoaXMgbWVhbnMgdGhhdCBgaWQgJSAxMDI0ID09IGlkYC4gTm93LCBpZiB3ZSByZWFsbG9jYXRlIHRvIGAyMDQ4YCwgYGlkICUgMjA0OGAgd2lsbCAqc3RpbGwqIGVxdWFsIGBpZGAuIEl0IG1lYW5zIHRoYXQgZm9yICpleGlzdGluZyogbWV0ZXJzLCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IGlzIGFjdHVhbGx5IGNvcnJlY3QhCgpCdXQuLi4gd2hhdCBhYm91dCAqbmV3KiBtZXRlcnM/IExldCYjMzk7cyBzYXkgYSBuZXcgbWV0ZXIgY29tZXMgYWxvbmcgd2l0aCBJRCBgMTAyNGAuIElmIHdlIGluc2VydCBpdCAqYmVmb3JlKiB0aGUgcmVhbGxvY2F0aW9uLCB3ZSBjYWxjdWxhdGUgYGhhc2ggPSAxMDI0ICUgMTAyNCA9IDBgLiBTbywgaXQgZ29lcyBpbnRvIGluZGV4IGAwYC4gVGhlbiB0aGUgcmVhbGxvY2F0aW9uIGhhcHBlbnMsIGFuZCBpbmRleCBgMGAgaXMgY29waWVkIHRvIGluZGV4IGAwYCBpbiB0aGUgbmV3IHRhYmxlLiBCdXQgaW4gdGhlIG5ldyB0YWJsZSwgaXRzICpjb3JyZWN0KiBoYXNoIHNob3VsZCBiZSBgMTAyNCAlIDIwNDggPSAxMDI0YC4gSXQmIzM5O3Mgbm93IGF0IHRoZSB3cm9uZyBpbmRleCwgb3ZlcndyaXRpbmcgdGhlIG1ldGVyIHdpdGggSUQgYDBgISBCb29tLCBhIHN1YnRsZSBhbmQgYmVhdXRpZnVsIGJ1ZyEKClRoZSBmaXggaGVyZSBpcyB0byBtb3ZlIHRoZSBpbnNlcnRpb24gKmFmdGVyKiB0aGUgcmVhbGxvY2F0aW9uLiBUaGF0IHdheSwgdGhlIG5ldyBtZXRlciB3aXRoIElEIGAxMDI0YCBnZXRzIGhhc2hlZCB3aXRoIGBuZXdfbl9tZXRlcnMgPSAyMDQ4YCwgc28gYGhhc2ggPSAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgaW5kZXggKGAxMDI0YCksIGFuZCBpdCB3b24mIzM5O3Qgb3ZlcndyaXRlIGluZGV4IGAwYC4KClRoZW4gSSBzdGFydGVkIHdvbmRlcmluZy4uLiB3aGF0IGlmIHVzZXJzcGFjZSAqZG9lc24mIzM5O3QqIGFsbG9jYXRlIElEcyBzZXF1ZW50aWFsbHk/IExldCYjMzk7cyBzYXkgdXNlcnNwYWNlIHNlbmRzIGBpZCA9IDEwMjRgIHdoZW4gYG5fbWV0ZXJzID0gMTAyNGAuIEl0JiMzOTtsbCBiZSBpbnNlcnRlZCBhdCBpbmRleCBgMGAuIElmIHRoZXJlJiMzOTtzIGFscmVhZHkgYSBtZXRlciBhdCBpbmRleCBgMGAsIGl0IHJldHVybnMgYC1FQlVTWWAuIElmIGl0JiMzOTtzIGVtcHR5LCBpdCBnb2VzIGluLiBCdXQgaWYgdGhpcyBuZXcgbWV0ZXIgd2l0aCBgaWQ9MTAyNGAgaXMgdGhlICpmaXJzdCogbWV0ZXIgKHNvIGB0YmwtJmd0O2NvdW50ID0gMGApLCB0aGVyZSYjMzk7cyBubyByZWFsbG9jYXRpb24uIFNvIGl0IHN0YXlzIGluIGluZGV4IGAwYC4gV2hlbiByZWFsbG9jYXRpb24gKmRvZXMqIGhhcHBlbiwgaXQgc3RpbGwgZ2V0cyBjb3BpZWQgdG8gaW5kZXggYDBgLCBldmVuIHRob3VnaCBpdHMgaGFzaCBpbiB0aGUgbmV3IHRhYmxlICpzaG91bGQqIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBTbywgc3RpbGwgd3JvbmchIERvZXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGhhbmRsZSB0aGlzPyBOb3BlLiBJdCBqdXN0IGNvcGllcyBgaWAgdG8gYGlgLiBTbywgZXZlbiB3aXRoIG5vbi1zZXF1ZW50aWFsIElEcywgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGlzIHN0aWxsIGJyb2tlbiBmb3IgZXhpc3RpbmcgbWV0ZXJzLgoKQnV0IHdhaXQuLi4gdGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgc2F5cyBPVlMgdXNlcyBgaWQtcG9vbGAgZm9yIGZldGNoaW5nIGF2YWlsYWJsZSBJRHMuIEl0IGFsbG9jYXRlcyB0aGVtIHNlcXVlbnRpYWxseSwgc3RhcnRpbmcgYXQgMC4gU28sIGBpZCAmbHQ7IG5fbWV0ZXJzYCBzaG91bGQgKmFsd2F5cyogYmUgdHJ1ZSBmb3IgZXhpc3RpbmcgbWV0ZXJzLiBJZiBgaWQtcG9vbGAgYWxsb2NhdGVzIHNlcXVlbnRpYWxseSwgdGhlbiB0aGUgSUQgaXMgYWx3YXlzIGAmbHQ7IG1heF9tZXRlcnNfYWxsb3dlZGAuIFRoZSB2YWx1ZSBvZiBgbl9tZXRlcnNgIGdyb3dzIGFzIGBjb3VudGAgKG51bWJlciBvZiBtZXRlcnMpIGdyb3dzLiBTaW5jZSBJRHMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHRoZSBtYXhpbXVtIElEIGlzIHJvdWdobHkgZXF1YWwgdG8gYGNvdW50YC4gQW5kIGBuX21ldGVycyAmZ3Q7IGNvdW50YC4gU28gdGhlIG1heGltdW0gSUQgaXMgYWx3YXlzIGAmbHQ7IG5fbWV0ZXJzYC4gVGhlcmVmb3JlLCBgaWQgJSBuX21ldGVycyA9PSBpZGAgaXMgYWx3YXlzIHRydWUhCgpUaGlzIG1lYW5zIHRoZSBgbWV0ZXJfaGFzaGAgaXMgZWZmZWN0aXZlbHkganVzdCB0aGUgYGlkYC4gVGhlIG1vZHVsbyBvcGVyYXRpb24gaXMgdGhlcmUgYXMgYSBzYWZldHkgbWVhc3VyZSwgaW4gY2FzZSB1c2Vyc3BhY2UgZXZlciBzZW5kcyBhIGxhcmdlIElELiBJbiB0aGF0IGNhc2UsIGl0IG1pZ2h0IGNvbGxpZGUgYW5kIHJldHVybiBgLUVCVVNZYCwgb3IgaXQgY291bGQgYmUgaW5zZXJ0ZWQgYW5kIHRoZW4gbG9zdCB1cG9uIHJlYWxsb2NhdGlvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgaW1tZWRpYXRlIGlzc3VlIHdoZXJlIGEgc2VxdWVudGlhbGx5IGFsbG9jYXRlZCBJRCB0aGF0IHRyaWdnZXJzIHJlYWxsb2NhdGlvbiB3b3VsZCBiZSBpbnNlcnRlZCBhdCBgaWQgJQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19tZXRlcl9jbWRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMTU6b3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1OCBjbWQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMTYtXHRcdFx0ICBzdHJ1Y3Qgb3ZzX2hlYWRlciAqKm92c19yZXBseV9oZWFkZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjM3OnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHksIHUzMiBtZXRlcl9pZCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIzOC1cdFx0XHRcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yNzctXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyNzg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yNzkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI4Ni1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjI4NzpcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0ZFQVRVUkVTLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjg4LVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDMwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDMxOlx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfU0VULFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDMyLVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ2Ni1cdFx0aWYgKG9sZF9tZXRlci1cdTAwM2VrZWVwX3N0YXRzKSB7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0Njc6XHRcdFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjgtXHRcdFx0XHRcdFx0XHRvbGRfbWV0ZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4Ny1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ4ODpzdGF0aWMgaW50IG92c19tZXRlcl9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00ODkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTUwMy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjUwNDpcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0dFVCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTUwNS1cdFx0XHRcdFx0ICBcdTAwMjZvdnNfcmVwbHlfaGVhZGVyKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MjQtXHRzcGluX2xvY2tfYmgoXHUwMDI2bWV0ZXItXHUwMDNlbG9jayk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo1MjU6XHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCwgbWV0ZXIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTI2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bWV0ZXItXHUwMDNlbG9jayk7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTQwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTQxOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU0Mi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU0LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTU1Olx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfREVMLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU2LVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU3MS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm9sZF9tZXRlci1cdTAwM2Vsb2NrKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU3MjpcdFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsIG9sZF9tZXRlcik7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NzMtXHRcdFdBUk5fT04oZXJyKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz02ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBkcF9tZXRlcl9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5MC1cdFx0LmZsYWdzID0gMCxcdFx0ICAvKiBPSyBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiAqL1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjkxOlx0XHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZmVhdHVyZXNcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Mi1cdH0sXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk3LVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjY5ODpcdFx0LmRvaXQgPSBvdnNfbWV0ZXJfY21kX3NldCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5OS1cdH0sXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzAyLVx0XHQuZmxhZ3MgPSAwLFx0XHQgIC8qIE9LIGZvciB1bnByaXZpbGVnZWQgdXNlcnMuICovXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MDM6XHRcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9nZXQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy03MDQtXHR9LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcwOS1cdFx0XHRcdFx0ICAgICAgICovXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MTA6XHRcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9kZWxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxMS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNZXRlciBBUEkqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbWV0ZXIgQVBJIGluIE9wZW4gdlN3aXRjaCBpcyB0aG9yb3VnaGx5IGZ1enplZC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIGFkZCBgb3ZzX21ldGVyX2NtZF9zZXRgLCBgb3ZzX21ldGVyX2NtZF9nZXRgLCBgb3ZzX21ldGVyX2NtZF9kZWxgLCBhbmQgYG92c19tZXRlcl9jbWRfZmVhdHVyZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgY3J1Y2lhbCBjb21tYW5kcy4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyB0aGUgcmlnaHQgb25lIHRvIHRhcmdldC4gWWVwLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBPcGVuIHZTd2l0Y2ggaXRzZWxmLiBJJiMzOTtsbCBoZWRnZSBteSBiZXRzIGFuZCBhZGQgYE5FVGAgYW5kIGBJTkVUYCB0b28sIGp1c3QgYXMgYSBzYWZldHkgbmV0LCB0aG91Z2ggYE9QRU5WU1dJVENIYCBzaG91bGQgYmUgc3VmZmljaWVudC4gT2gsIGhvbGQgb24uLi4gdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeGVzISBSaWdodCwganVzdCBgT1BFTlZTV0lUQ0hgIGl0IGlzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVjYXAgdGhlIHJhdGlvbmFsZSBoZXJlLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhIG5hc3R5IGJ1ZyBpbiBgYXR0YWNoX21ldGVyYC4gQmFzaWNhbGx5LCBuZXcgbWV0ZXJzIHdlcmUgcG90ZW50aWFsbHkgZ2V0dGluZyBhZGRlZCB0byB0aGUgb2xkIG1ldGVyIGFycmF5ICpiZWZvcmUqIGl0IHdhcyByZWFsbG9jYXRlZC4gVGhlbiwgd2hlbiB0aGUgYXJyYXkgZ290IHJlYWxsb2NhdGVkLCB0aGUgbWV0ZXIgd2FzIGNvcGllZCB0byB0aGUgd3JvbmcgaW5kZXgsIHRoYW5rcyB0byB0aGUgaGFzaCBtb2R1bG8gY2hhbmdpbmcsIGxlYWRpbmcgdG8gbG9zdCBvciBvdmVyd3JpdHRlbiBtZXRlcnMuIFRoZSBmaXggZWxlZ2FudGx5IHJlb3JkZXJzIHRoaW5nczogcmVhbGxvY2F0ZSB0aGUgYXJyYXkgKmZpcnN0KiwgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW4gdGhlICpuZXcqIGFycmF5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4IGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSDigJMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKQWxyaWdodCwgd2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19tZXRlcl9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19tZXRlcl9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTguMzEwODg1MDI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDQwNTc0NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX21ldGVyX2NtZF9zZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2RlbFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBhdHRhY2hfbWV0ZXJgIHdoZXJlIGEgbmV3IG1ldGVyIGNvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIG9sZCBtZXRlciBpbnN0YW5jZSBhcnJheSBiZWZvcmUgcmVhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb3BpZWQgdG8gdGhlIG5ldyBhcnJheSBhdCB0aGUgd3JvbmcgaW5kZXggKGJlY2F1c2UgdGhlIGhhc2ggbW9kdWxvIGNoYW5nZXMgYWZ0ZXIgcmVhbGxvY2F0aW9uKS4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgbWV0ZXIgdG8gYmUgbG9zdCBvciBvdmVyd3JpdGUgYW5vdGhlciBtZXRlci4gVGhlIGZpeCByZW9yZGVycyB0aGUgb3BlcmF0aW9ucyB0byByZWFsbG9jYXRlIHRoZSBhcnJheSBmaXJzdCwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBpbnNlcnQgdGhlIG1ldGVyIGludG8gdGhlIG5ldyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTguMzEwOTA0Nzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY4OTIxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjE2OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9tZXRlci5jIGIvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcXG5pbmRleCBhMDJjNDcyNzczMzdiZi4uNGFhZWVhZTNhZjViZGUgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xcbkBAIC0xMzMsMTggKzEzMywxMCBAQCBzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4gXFxuIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbiB7XFxuLVxcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXFx1MDAzZXRpKTtcXG4tXFx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbitcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpO1xcbitcXHR1MzIgaGFzaDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIEluIGdlbmVyYWxseSwgc2xvdHMgc2VsZWN0ZWQgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlXFxuLVxcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYSBhdmFpbGFibGUgaWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXG4tXFx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XFxuLVxcbiBcXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xcbiBcXHR0YmwtXFx1MDAzZWNvdW50Kys7XFxuIFxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRibC1cXHUwMDNlbWF4X21ldGVyc19hbGxvd2VkKSB7XFxuQEAgLTE1MiwxNiArMTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbiBcXHRcXHRnb3RvIGF0dGFjaF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVxcdTAwM2VuX21ldGVycyAqIDIpKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuK1xcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycykge1xcbitcXHRcXHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXFx1MDAzZW5fbWV0ZXJzICogMik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gYXR0YWNoX2VycjtcXG4rXFxuK1xcdFxcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuK1xcdH1cXG4rXFxuK1xcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogSW4gZ2VuZXJhbCwgc2VsZWN0ZWQgc2xvdHMgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlXFxuK1xcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYXZhaWxhYmxlIGlkcy5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdKSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIGF0dGFjaF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGRwX21ldGVyX2luc3RhbmNlX2luc2VydCh0aSwgbWV0ZXIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGF0dGFjaF9lcnI6XFxuLVxcdGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZSh0aSwgbWV0ZXIpO1xcbiBcXHR0YmwtXFx1MDAzZWNvdW50LS07XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTkuMDc4ODA3Njc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1MjcyNjQyMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX21ldGVyX2NtZF9zZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2RlbFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBhdHRhY2hfbWV0ZXJgIHdoZXJlIGEgbmV3IG1ldGVyIGNvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIG9sZCBtZXRlciBpbnN0YW5jZSBhcnJheSBiZWZvcmUgcmVhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb3BpZWQgdG8gdGhlIG5ldyBhcnJheSBhdCB0aGUgd3JvbmcgaW5kZXggKGJlY2F1c2UgdGhlIGhhc2ggbW9kdWxvIGNoYW5nZXMgYWZ0ZXIgcmVhbGxvY2F0aW9uKS4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgbWV0ZXIgdG8gYmUgbG9zdCBvciBvdmVyd3JpdGUgYW5vdGhlciBtZXRlci4gVGhlIGZpeCByZW9yZGVycyB0aGUgb3BlcmF0aW9ucyB0byByZWFsbG9jYXRlIHRoZSBhcnJheSBmaXJzdCwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBpbnNlcnQgdGhlIG1ldGVyIGludG8gdGhlIG5ldyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzYzYjZiOTdkYmZlZjcwZjM0NTcwZjgwNTY0OWM5OTEzY2MyNWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjE2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xuaW5kZXggYTAyYzQ3Mjc3MzM3YmYuLjRhYWVlYWUzYWY1YmRlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jXG5AQCAtMTMzLDE4ICsxMzMsMTAgQEAgc3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXG4gXG4gc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4ge1xuLVx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4tXHR1MzIgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKTtcbitcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGk7XG4rXHR1MzIgaGFzaDtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbiBnZW5lcmFsbHksIHNsb3RzIHNlbGVjdGVkIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZVxuLVx0ICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4tXG4gXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xuIFx0dGJsLVx1MDAzZWNvdW50Kys7XG4gXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGJsLVx1MDAzZW1heF9tZXRlcnNfYWxsb3dlZCkge1xuQEAgLTE1MiwxNiArMTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGktXHUwMDNlbl9tZXRlcnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVx1MDAzZW5fbWV0ZXJzICogMikpIHtcbi1cdFx0ZXJyID0gLUVOT01FTTtcbitcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbitcdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0aS1cdTAwM2VuX21ldGVycykge1xuK1x0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4rXG4rXHRcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbitcdH1cbitcbitcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG4rXG4rXHQvKiBJbiBnZW5lcmFsLCBzZWxlY3RlZCBzbG90cyBzaG91bGQgYmUgZW1wdHksIGJlY2F1c2VcbitcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYXZhaWxhYmxlIGlkcy5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBhdHRhY2hfZXJyO1xuIFx0fVxuIFxuK1x0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4gXHRyZXR1cm4gMDtcbiBcbiBhdHRhY2hfZXJyOlxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHRpLCBtZXRlcik7XG4gXHR0YmwtXHUwMDNlY291bnQtLTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTkuMDc4ODEwNjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTEwOTAzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXRlciBBdHRhY2htZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbi4gVGhlIGdpc3Qgb2YgaXQgaXMgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBtZXRlciBhdHRhY2htZW50IHByb2Nlc3MuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHdoZW4gYWRkaW5nIG5ldyBtZXRlcnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiByZWFsbG9jYXRpbmcgdGhlIG1ldGVyIHRhYmxlLlxuXG5MZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2Vzcy4gSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBpcyBtb2RpZnlpbmcgYGF0dGFjaF9tZXRlcmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cuIExvb2tpbmcgYXQgdGhlIGRpZmYsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSB3YXM6IGluc2VydCB0aGUgbWV0ZXIsIGluY3JlbWVudCB0aGUgY291bnQsIGFuZCB0aGVuIGNoZWNrIGZvciBhbmQgaGFuZGxlIHJlYWxsb2NhdGlvbi4gVGhlIHJldmlzZWQgY29kZSBzaGlmdHMgdGhlIHJlYWxsb2NhdGlvbiBjaGVjayBlYXJsaWVyLCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBUaGUgc3BlY2lmaWMgY2hhbmdlIGlzIG1vdmluZyB0aGUgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNhbGwgYWhlYWQgb2YgdGhlIG1ldGVyIGluc2VydGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiV2h5IHRoZSByZW9yZGVyaW5nP1wiIEluaXRpYWxseSwgbXkgdW5kZXJzdGFuZGluZyB3YXMgYSBwb3RlbnRpYWwgcmFjZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnRgIHdhcyBjYWxsZWQgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSB0YWJsZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZC4gSWYgcmVhbGxvY2F0aW9uIHdhcyBuZWVkZWQgKmFuZCBmYWlsZWQqLCB0aGUgbmV3IG1ldGVyIHdvdWxkIGhhdmUgYmVlbiBpbiB0aGUgd3JvbmcgaW5zdGFuY2UuIEJ1dCB0aGVuIEkgbG9va2VkIGRlZXBlci5cblxuVGhlIGJ1ZyB3YXMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCB3YXMgY2FsbGVkIGJlZm9yZSBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB3YXMgY2FsbGVkLCBpdCB3b3VsZCBjb3B5IHRoZSBtZXRlcnMgdG8gYSBuZXcgaW5zdGFuY2UsIGJ1dCBpZiBpdCBmYWlsZWQsIGl0IHdvdWxkIGdvIHRvIGBhdHRhY2hfZXJyYCwgd2hpY2ggY2FsbGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKWAuIEJ1dCB0aGUgYWN0dWFsIHByb2JsZW0gaXMgYSBsaXR0bGUgbW9yZSBzdWJ0bGUuIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqcmVwbGFjZXMqIHRoZSBpbnN0YW5jZS4gSWYgcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgdGhlIG5ldyBtZXRlciB3YXMgbW92ZWQgYmVmb3JlIHRoZSByZWFsbG9jYXRpb24gb2YgdGhlIGluc3RhbmNlLCBzbyB0aGUgZWxlbWVudCB3b3VsZCBnZXQgY29waWVkIHRvIHRoZSBuZXcgaW5zdGFuY2UuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGVycm9yIHBhdGgsIG5vdyB0aGF0IEkgbG9vayBhdCBpdCBhZ2Fpbi5cblxuTm93IEkgdGhpbmsgSSBnZXQgaXQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIG1pZ2h0IGZhaWwuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNvbWUgb3RoZXIgcmVhc29uLiBJZiB0aGF0IGhhcHBlbnMgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBtZXRlciB3b3VsZCBiZSAqaW5zZXJ0ZWQqIGludG8gdGhlICpvbGQqIGluc3RhbmNlLCBhbmQgb25seSB0aGVuIHdvdWxkIHRoZSByZWFsbG9jYXRpb24gY2hlY2sgaGFwcGVuLiBJZiB0aGUgcmVhbGxvY2F0aW9uIHRoZW4gZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBhdHRhY2hfZXJyYCwgYW5kIHRoZSBtZXRlciB3b3VsZCBiZSAqcmVtb3ZlZCogZnJvbSB0aGUgKm9sZCogaW5zdGFuY2UuXG5cblRoZSByZXZpc2VkIGNvZGUgYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgZm9yIHJlYWxsb2NhdGlvbiAqZmlyc3QqLiBJZiByZWFsbG9jYXRpb24gaXMgbmVlZGVkLCBpdCdzIGF0dGVtcHRlZCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBJZiBpdCBmYWlscywgdGhlIGVycm9yIHBhdGggaXMgdGFrZW4gKmJlZm9yZSogdGhlIGluc2VydGlvbiwgc28gbm8gbWV0ZXIgaXMgbGVmdCBkYW5nbGluZyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBsaWtlbHkgY29tbWl0IG1lc3NhZ2Ugd291bGQgcHJvYmFibHkgaGlnaGxpZ2h0IHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvdWxkIGZhaWwsIG9yIHBlcmhhcHMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCBtb2RpZmllcyB0aGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZW4gcmVhbGxvY2F0ZWQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjoyOS45ODk5MDQxMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTk3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0dGFjaF9tZXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMjU9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzMtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTM0OnN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzNS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz00MTE9c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDUyLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ1MzpcXHRlcnIgPSBhdHRhY2hfbWV0ZXIobWV0ZXJfdGJsLCBtZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDU0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjMwLjA5MTEwODIzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjgxOTcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdHRhY2hfbWV0ZXJgIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL21ldGVyLmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIGl0J3MgZnVuY3Rpb25hbCwgcmlnaHQ/IFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmssIGFuZCBzcGVjaWZpY2FsbHksIG1ldGVycy4gQW5kLCBzaW5jZSBpdCdzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYG92c19tZXRlcl9jbWRfc2V0YCksIEknbSBjb25maWRlbnQgaXQncyBiZWluZyB1c2VkIGFuZCBub3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gTGV0IG1lIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgT3BlbiB2U3dpdGNoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IHJlbHkgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgY29uZmlnIGtub2JzIGlzIGtleSB0byBncmFzcGluZyB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MzMuNDE5MzA4MTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTcwNjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjozNS40MzYzNzk3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU4ODk5ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBkaXZlIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgYSBzdGFuZGFsb25lIGRlcGxveW1lbnQsIG9yIGlzIGl0IHJlbHlpbmcgb24gb3RoZXIgY29tcG9uZW50cz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBjcml0aWNhbCB1cHN0cmVhbSBzZXJ2aWNlcywga2VybmVsIG1vZHVsZXMsIG9yIGxpYnJhcmllcyB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgaW5oZXJlbnRseSB0aWVkIHRvLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgdXBmcm9udCB3aWxsIGluZm9ybSBteSBzdWJzZXF1ZW50IHRyb3VibGVzaG9vdGluZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGFueSBwbGFubmVkIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpdCdzIGNvbm5lY3RlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjM4LjM5NTI4Mjc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjozOC4zOTU0NTUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjMxNTcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBPUEVOVlNXSVRDSGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSU5FVGAuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgT1BFTlZTV0lUQ0hgIGluIG15IGNvbnNpZGVyYXRpb25zLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGBvdnNfbWV0ZXJfY21kX3NldGAuIFRoYXQncyBteSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGFuZCB3aGF0IHRoaXMgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZXNlIGNvbXBvbmVudHMgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjQxLjU1ODYxNDc4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMjk3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19tZXRlcl9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MTAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MTIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo2OTg6XFx0XFx0LmRvaXQgPSBvdnNfbWV0ZXJfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTktXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDIuMTYwOTIwMTY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg4MzU1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXRlciBDb21tYW5kIEV4ZWN1dGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZXRlciBjb21tYW5kIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaGVyZSBpcyB0aGUgYG92c19tZXRlcl9jbWRfc2V0YCBzeW1ib2wuIFRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgbmV0bGluayBpbnRlcmFjdGlvbiwgc2VlbXMgbGlrZSB0aGUgcGxhY2Ugd2hlcmUgdGhlIHJlYWwgd29yayBnZXRzIGRvbmUuIEJ1dCwgaGFuZyBvbi4uLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHNlZWluZyBgYXR0YWNoX21ldGVyYCBpbiB0aGUgY29kZSwgYnV0IHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXTigJlzIGxpa2VseSBpbmxpbmVkIG9yIGF0IGxlYXN0IG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEl0IHdvbid0IGJlIGEgcHVibGljbHkgZXhwb3NlZCBmdW5jdGlvbi4gVGhlcmVmb3JlLCBpdCB3b24ndCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIGl0cyBcIndvcmxkXCIuXG5cblNvLCBmb2N1c2luZyBiYWNrIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAsIHRoYXQncyBteSBwcmltYXJ5IHRhcmdldC4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIEkgKnJlYWxseSogd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYXR0YWNoX21ldGVyYCBpc24ndCBiZWluZyB1c2VkIGFueXdoZXJlIGVsc2UgdGhhdCBJJ20gbWlzc2luZy4gTGV0J3MgdHJhY2UgYWxsIG9mIHRoZSBjYWxscyB0byBgYXR0YWNoX21ldGVyYCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDYuMjc5NzU5MTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4MTEwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX21ldGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMy1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzQ6c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTM1LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTItXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDUzOlxcdGVyciA9IGF0dGFjaF9tZXRlcihtZXRlcl90YmwsIG1ldGVyKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDYuNDQyNTgwMTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDU3ODYzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYG92c19tZXRlcl9jbWRfc2V0YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYG92c19tZXRlcl9jbWRfc2V0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLiBGaXJzdCwgSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBvdGhlciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gT2theSwgbm9wZSwgYG92c19tZXRlcl9jbWRfc2V0YCAqaXMqIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIG1ldGVyIHNldHRpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYG92c19tZXRlcl9jbWRfc2V0YCBzdGF0aWM/IFllcywgaXQgaXMuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiB3ZSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRlc3RhYmlsaXR5IHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCAqYmVjYXVzZSogYG92c19tZXRlcl9jbWRfc2V0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgaW4gYGRwX21ldGVyX2dlbmxfb3BzYCwgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGFuZCBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBPa2F5LCB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQsIGl0J3Mgbm90IGludGVybmFsIGhlbHBlciBzdGF0aWMgaW5saW5lZCBjb2RlLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBhbHRlcm5hdGl2ZXMuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjUwLjk0ODM2ODYyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMDEwMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX21ldGVyX2dlbmxfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU5Nz1ib29sIG92c19tZXRlcl9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02ODYtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njg3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02ODgtXFx0eyAuY21kID0gT1ZTX01FVEVSX0NNRF9GRUFUVVJFUyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTcxOD1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzI1LVxcdC5wYXJhbGxlbF9vcHMgPSB0cnVlLFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcyNjpcXHQuc21hbGxfb3BzID0gZHBfbWV0ZXJfZ2VubF9vcHMsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NzI3OlxcdC5uX3NtYWxsX29wcyA9IEFSUkFZX1NJWkUoZHBfbWV0ZXJfZ2VubF9vcHMpLFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcyOC1cXHQucmVzdl9zdGFydF9vcCA9IE9WU19NRVRFUl9DTURfR0VUICsgMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NTEuNTUwMzg0OTMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjA0NjE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE5ldGxpbmsgRmFtaWx5IFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgbmV0bGluayBmYW1pbHkgaW4gcXVlc3Rpb24gaXMgYGRwX21ldGVyX2dlbmxfZmFtaWx5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlwiIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5czogKkhvdyogaXMgdGhpcyB0aGluZyBnZXR0aW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWw/IElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaG9va2luZyBpdCB1cD8gRmluZGluZyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGlzIHRoZSBmaXJzdCBzdGVwIHdoZW4gZGVidWdnaW5nIG5ldGxpbmsgaW1wbGVtZW50YXRpb25zLCB3aGV0aGVyIGl0J3MgdW5kZXJzdGFuZGluZyB0aGUgc2V0dXAgcHJvY2VzcyBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJcyBpdCBleHBvcnRlZCwgb3IgYW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIG1vZHVsZT8gVGhpcyBpcyB0aGUgY29yZSBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBmaW5kIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjU0LjQ3MDg0OTcwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3MTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfZ2VubF9mYW1pbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjU3PXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjYxLVxcdFxcdTAwMjZkcF9wYWNrZXRfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY2MjpcXHRcXHUwMDI2ZHBfbWV0ZXJfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY2My0jaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE1PW92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjI2LVxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXNuZF9zZXEsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjI3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSwgMCwgY21kKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMjgtXFx0aWYgKCEqb3ZzX3JlcGx5X2hlYWRlcikge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgb3ZzX21ldGVyX211bHRpY2FzdF9ncm91cCA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxNy1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MTg6c3RydWN0IGdlbmxfZmFtaWx5IGRwX21ldGVyX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy03MTktXFx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmg9NTA9c3RydWN0IGRwX21ldGVyX3RhYmxlIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oLTU1LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oOjU2OmV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTctaW50IG92c19tZXRlcnNfaW5pdChzdHJ1Y3QgZGF0YXBhdGggKmRwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NTQuNTcwNTY1NTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODcwMTUwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgQ29tbWFuZCoqXG5cbk9rYXksIHNvIEkndmUgZGVjaWRlZCB0byBjb25jZW50cmF0ZSBteSBhbmFseXNpcyBvbiBgb3ZzX21ldGVyX2NtZF9zZXRgLiBFdmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYXMgYSBjYWxsYmFjayBmdW5jdGlvbiwgSSBrbm93IGl0J3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCBpdCdsbCBoYXZlIGEgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGlzIG1ha2VzIGl0IGlkZWFsIGZvciB0cmFjaW5nLiBXYWl0IGEgbWludXRlLCBubywgaXQncyAqZGVmaW5pdGVseSogbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkcF9tZXRlcl9nZW5sX29wc2AuIFRoYXQncyBzb2xpZCBldmlkZW5jZS5cblxuTm93IHRoYXQgSSd2ZSBwaW5uZWQgZG93biB0aGUga2V5IGZ1bmN0aW9uLCBsZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuIEkga25vdyBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gYElORVRgLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEJlc3QgdG8gcmV2aXNpdCBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gR290dGEgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjo1OC4xNTc1ODQwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjU4LjE1NzY3OTUzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYyMzMzMjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ldGVyIEF0dGFjaG1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgT1BFTlZTV0lUQ0hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVoYXZpb3IgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGJleW9uZCB0aGUgb2J2aW91cz8gTm8sIGBPUEVOVlNXSVRDSGAgc2VlbXMgdG8gY292ZXIgdGhlIHJlbGV2YW50IGNvbnRleHQuXG5cbkxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgaGFuZGxpbmcgbWV0ZXIgYXR0YWNobWVudCB3aXRoaW4gYSB0YWJsZS4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIHJlYWxsb2NhdGlvbiBhbmQgaW5zZXJ0aW9uIGludGVyYWN0LiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIHNlcXVlbmNlOiBnZXQgdGhlIG1ldGVyIGluc3RhbmNlLCBjaGVjayBmb3IgYW4gZXhpc3RpbmcgbWV0ZXIsIGFuZCBpZiBub25lLCAqdGhlbiogaW5zZXJ0LiBCdXQgdGhlbiB3ZSBoYXZlIHRoZSByZWFsbG9jYXRpb24gbG9naWM6IGlmIHRoZSB0YWJsZSBpcyBhcHByb2FjaGluZyBjYXBhY2l0eSwgd2UgcmVhbGxvY2F0ZSwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuXG5cbkkgc2VlIHRoZXkgYXJlIHJlYWxsb2NhdGluZywgYW5kIHRoZW4gaW5zZXJ0aW5nLiBCdXQsIG15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IHRoaXMgcHJldmlvdXMgb3JkZXIgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uIHdpdGggUkNVLiBJZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgZmFpbHMsIHRoZXJlJ3MgYSByb2xsYmFjayAoY2FsbGluZyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlYCBvbiB0aGUgKm9sZCogaW5zdGFuY2UpLiBUaGF0IHNlZW1zIGZpbmUgc2luY2UgaXQgcmVzdG9yZXMgdGhlIHByaW9yIHN0YXRlIG9mIHRoZSB0YWJsZS5cblxuTm93LCBpZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgKnN1Y2NlZWRzKiwgaXQgd291bGQgYWxsb2NhdGUgYSBuZXcgaW5zdGFuY2UsIGNvcHkgYWxsIHRoZSBtZXRlcnMsIGFuZCB0aGVuIHRoZSBvbGQgaW5zdGFuY2Ugd291bGQgYmUgZnJlZWQgdmlhIFJDVS4gVGhpcyBzdGlsbCBzZWVtcyBPSyBpbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uIEkgYmVsaWV2ZSB0aGlzIGNoYW5nZSBqdXN0IHNpbXBsaWZpZXMgdGhlIGxvZ2ljIGJ5IG1ha2luZyB0aGUgbG9naWMgY2xlYXJlci5cbklmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZmFpbHMqLCB0aGVuIHRoZXkgcm9sbCBiYWNrLiBTdGlsbCBvay5cblxuQnV0Li4ud2FpdC4gVGhlIHByb2JsZW0gd2l0aCB0aGUgcHJldmlvdXMgcGF0Y2ggaXMgbm93IHRoZSBsb2dpYyBoYXBwZW5zIGxpa2UgdGhpczogZ2V0IHRoZSBtZXRlciBpbnN0YW5jZSwgKnBvc3NpYmx5KiByZWFsbG9jYXRlIHRoZSB1bmRlcmx5aW5nIGluc3RhbmNlLCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2gsIGFuZCBjaGVjayBmb3IgYW4gZXhpc3RpbmcgbWV0ZXIsIGFuZCAqdGhlbiogaW5zZXJ0LiBUaGlzIGxvb2tzIHRvIGFkZHJlc3MgdGhlIHByaW9yIGlzc3VlLlxuXG5TbyB0aGUgb3JpZ2luYWwgbG9naWMgd291bGQgZmlyc3QgaW5zZXJ0IGludG8gdGhlIG9sZCBpbnN0YW5jZSwgdGhlbiByZWFsbG9jYXRlLCBhbmQgdGhlIG5ldyBpbnN0YW5jZSB3b3VsZCBnZXQgY29waWVkLiBJdCBhbHNvIG1lYW5zIHRoYXQgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgICpmYWlscyosIHRoYXQgbWVhbnMgdGhlIG9sZCBpbnN0YW5jZSBpcyBsZWZ0IHVudG91Y2hlZCwgYW5kIHRoZXJlZm9yZSByb2xsaW5nIGJhY2sgaXMgZmluZS5cblxuVGhpcyBjdXJyZW50IHBhdGNoIGlzIHNhZmUuIE5vIHdvcnJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MDkuNzgxMDE1NTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI3NTUxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz05ND1zdGF0aWMgaW50XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6OTU6ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtOTYte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTQ4LVxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycykge1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE0OTpcXHRcXHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXFx1MDAzZW5fbWV0ZXJzICogMik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTUwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xNzQ9c3RhdGljIGludCBkZXRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjAxOlxcdFxcdGlmIChkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgaGFsZl9zaXplKSlcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDItXFx0XFx0XFx0Z290byBzaHJpbmtfZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxMC4zMzM3Nzc1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDQ0NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYDpcblxuKipNeSBJbW1lZGlhdGUgQW5hbHlzaXMgb2YgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBmcmFtaW5nIHRoaXMgYXMgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYSBgZHBfbWV0ZXJfaW5zdGFuY2VgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBhIHJvdXRpbmUgZGVzaWduZWQgdG8gcmVzaXplIG9yIHJlbG9jYXRlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIG1ldGVyIGluc3RhbmNlLiBQcm9iYWJseSBpdCdzIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSBcInJlYWxsb2NcIiBwYXJ0IHN1Z2dlc3RzIHRoYXQgaXQgaXMgbW9yZSBkeW5hbWljIHRoYW4gYSBzdGF0aWMgYWxsb2NhdGlvbi4gVGhlIG5lZWQgZm9yIHJlYWxsb2NhdGlvbiB1c3VhbGx5IG1lYW5zIHRoZSBpbnN0YW5jZSBuZWVkcyBtb3JlIHNwYWNlIHRvIHN0b3JlIGRhdGEsIG1ldGFkYXRhLCBvciBpbnRlcm5hbCBzdGF0ZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGluIG9yZGVyIHRvIHNlZSBpZiBpdCBpcyBkeW5hbWljLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgSSdsbCBiZSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgZXJyb3IgY29uZGl0aW9ucyAobGlrZSBhbGxvY2F0aW9uIGZhaWx1cmVzKSwgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IGRlYWxzIHdpdGggdGhlIHRyYW5zZmVyIG9mIGV4aXN0aW5nIGRhdGEgdG8gdGhlIG5ldyBtZW1vcnkgbG9jYXRpb24uIEkgYWxzbyB3YW50IHRvIHNlZSB3aGV0aGVyIGl0IGNvcGllcyBkYXRhIG9yIG1vdmVzIGl0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIHJlLWFsbG9jYXRpb24/IFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgZG91YmxpbmcgdGhlIHNpemUgb3IgdXNpbmcgc29tZSBvdGhlciBpbmNyZW1lbnQ/IEknbSBjdXJpb3VzIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBgZHBfbWV0ZXJfaW5zdGFuY2VgIHNvIHRoYXQgaXQgd291bGQgbmVlZCByZWFsbG9jYXRpbmcuIEkgY2FuIGFudGljaXBhdGUgdGhhdCB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBub3QgY2FyZWZ1bGx5IGltcGxlbWVudGVkLiBMZXQncyBzZWUgaG93IGl0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxNC42OTQyMjc4MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4gMTE4OlxcdHtcXG4gMTE5OlxcdFxcdHUzMiBoYXNoO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG4gMTIyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XFxuIDEyMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjE0LjY5NDM2ODQ0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgzNDEyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlJlLWV2YWx1YXRpbmcgTWV0ZXIgUmVhbGxvY2F0aW9uIExvZ2ljKipcblxuUmlnaHQsIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyBpdGVyYXRpbmcgZnJvbSBgMGAgdXAgdG8gYG5fbWV0ZXJzYCwgd2hlcmUgYG5fbWV0ZXJzYCBpcyBlZmZlY3RpdmVseSB0aGUgc21hbGxlciBvZiB0aGUgY3VycmVudCBzaXplIChsZXQncyBjYWxsIHRoYXQgYHNpemVgKSBhbmQgYHRpLVx1MDAzZW5fbWV0ZXJzYC4gSG9sZCBvbiwgYHRpLVx1MDAzZW5fbWV0ZXJzYCAqaXMqIHRoZSBzaXplIG9mIHRoZSAqb2xkKiBtZXRlciBpbnN0YW5jZSwgaXNuJ3QgaXQ/IFNvLCB3ZSBhcmUgZXNzZW50aWFsbHkgcmVhbGxvY2F0aW5nIGJhc2VkIG9uIHRoZSBvbGQgc2l6ZSwgbm90IHRoZSBwb3RlbnRpYWwgbmV3IHNpemUuXG5cbk5vdywgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGlzIHVwIHdpdGggYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAuLi4gaXQgaW5zZXJ0cyBpbnRvIHRoZSAqb2xkKiBpbnN0YW5jZSBhdCBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAuIE9rYXksIHNvIGl04oCZcyBjYWxjdWxhdGluZyBhIGhhc2ggYmFzZWQgb24gdGhlIG9sZCB0YWJsZS4gQnV0IGlzbid0IHRoZSB3aG9sZSBwb2ludCB0byByZWFsbG9jYXRlIHRvIGEgKm5ldyogaW5zdGFuY2U/IEFuZCB0aGF0IGhhc2g/IExldCBtZSBxdWlja2x5IGNoZWNrIGBtZXRlcl9oYXNoYC4gSSBoYXZlIGEgc3VzcGljaW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MTguODc3Nzg1NzY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3ODUzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWV0ZXJfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYmFuZF9wb2xpY3lbT1ZTX0JBTkRfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTM5LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQwOnN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NTQ9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqbG9va3VwX21ldGVyKGNvbnN0IHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTctXFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU4OlxcdHUzMiBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXJfaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU5LVxcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMTY9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTIxOlxcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMi1cXHRyY3VfYXNzaWduX3BvaW50ZXIodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSwgbWV0ZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTI5LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzMDpcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzEtXFx0UkNVX0lOSVRfUE9JTlRFUih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBOVUxMKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1NS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNTY6XFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxOS4wMzI2Mjg1NzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNzU5ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYG1ldGVyX2hhc2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgY2hlY2tpbmcgb3V0IHRoaXMgYG1ldGVyX2hhc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICppcyouIElzIGl0IGEgdW5pcXVlIGlkZW50aWZpZXI/IEEga2V5PyBBIGRhdGEgc3RydWN0dXJlIGl0c2VsZj8gS25vd2luZyB0aGF0IGlzIGZvdW5kYXRpb25hbCB0byBhbnkgZGVlcGVyIGFuYWx5c2lzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXQgaXMgbGlrZWx5IGEgaGFzaCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBzb21lIGNvbWJpbmF0aW9uIG9mIG1ldGVyIGRhdGEgYW5kIHNvbWUgZm9ybSBvZiBtZXRlciBpZGVudGlmaWVyLiBUaGlzIHdvdWxkIGFsbG93IGZvciBxdWljayBsb29rdXAgYW5kIGNvbXBhcmlzb24gb2YgcmVsYXRlZCBtZXRlciBpbmZvcm1hdGlvbiB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGlzIGNhbGN1bGF0ZWQgYW5kIHVzZWQuIEFyZSB0aGVyZSBhbnkgY29sbGlzaW9uIGNvbmNlcm5zIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW5wdXRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpcyB3ZWFrIG9yIHBvb3JseSBpbXBsZW1lbnRlZD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNoaW5nIGFsZ29yaXRobSBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXNoIGFyZSBhbHNvIGltcG9ydGFudDsgc3BlZWQgb2YgZ2VuZXJhdGlvbiBhbmQgbG9va3VwIGFyZSBrZXkgY29uc2lkZXJhdGlvbnMuIExldCdzIHNlZSBpZiB0aGUgdmFyaWFibGUgbmFtZSBwcm92aWRlcyBhbnkgY2x1ZSBhcyB0byBpdHMgdXNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZS4gV2l0aG91dCBtb3JlIGNvbnRleHQsIEkgaGF2ZSB0byBhc3N1bWUgaXRzIHJvbGUgaXMgdG8gbWFrZSBhIGxvb2sgdXAgb3IgbWFrZSBhIGNvbXBhcmlzb24gZmFzdCBhbmQgc2ltcGxlLCBidXQgd2l0aG91dCBtb3JlIGNvbnRleHQgaXQgaXMganVzdCBhIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyMi41NDAyMzAwNzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRyZXR1cm4gaWQgJSB0aS1cXHUwMDNlbl9tZXRlcnM7XFxuICA0MzpcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyB2b2lkIG92c19tZXRlcl9mcmVlKHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxuICA0NjpcXHR7XFxuICA0NzpcXHRcXHRpZiAoIW1ldGVyKVxcbiAgNDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjIyLjU0MDM5ODYyNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI2OTQ5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxsb2NhdGlvbiBMb2dpYyAtIEEgUG90ZW50aWFsIEJ1Zz8qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcmVhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIG1ldGVyIGluc3RhbmNlcywgYW5kIGl0J3Mgc3RhcnRpbmcgdG8gYnVnIG1lLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBob3cgdGhlIGhhc2gga2V5LCBgbWV0ZXJfaGFzaGAsIHJlbGF0ZXMgdG8gdGhlIG51bWJlciBvZiBtZXRlcnMsIGB0aS1cdTAwM2VuX21ldGVyc2AuIFRoZSBjdXJyZW50IGxvZ2ljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgZnJhZ2lsZS5cblxuSWYgYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAgaXMgaW5zZXJ0aW5nIGludG8gdGhlIFwib2xkXCIgbWV0ZXIgaW5zdGFuY2UsIHRoZSBoYXNoIGtleSBjYWxjdWxhdGlvbiB1c2VzIHRoZSBvbGQgbW9kdWx1czogYGlkICUgb2xkX25fbWV0ZXJzYC4gTWFrZXMgc2Vuc2UsIHNvIGZhci4gQnV0LCB0aGVuLCBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgY29tZXMgaW50byBwbGF5IHRvIGV4cGFuZCB0aGUgc2l6ZSBhbmQgdGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IGNvbmZ1c2luZy5cblxuSXQgKmNvcGllcyogdGhlIGVsZW1lbnRzIHRvIHRoZSBuZXcgbWV0ZXIgaW5zdGFuY2UuIEl0IGlzIGNvcHlpbmcgdGhlIGVsZW1lbnRzIHdpdGggYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV1gLiBTbywgdGhlIGNvcHkgbWFpbnRhaW5zIHRoZSBzYW1lIGluZGV4LCAnaScsIGluIHRoZSBuZXcgbGFyZ2VyIGFsbG9jYXRpb24uIEhvd2V2ZXIsIGBuZXdfdGktXHUwMDNlbl9tZXRlcnNgIGlzIGRpZmZlcmVudCwgaXQgaXMgYWN0dWFsbHkgZG91YmxlZCB0byBgb2xkX25fbWV0ZXJzICogMmAuIFRoYXQgbWVhbnMgdGhlICpjb3JyZWN0KiBuZXcgaGFzaCBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbmV3IG1ldGVyIGluc3RhbmNlIHNob3VsZCBiZSBgaWQgJSBuZXdfbl9tZXRlcnNgLiBcblxuQnV0LCBpZiB0aGUgY29weSBqdXN0IHBsYWNlcyB0aGUgbWV0ZXIgZWxlbWVudHMgYXQgdGhlICpzYW1lIGluZGV4KiBgaWAsIGluIHRoZSBleHBhbmRlZCBhcnJheSwgdGhlbiBgaWQgJSBuZXdfbl9tZXRlcnNgIG1pZ2h0ICpub3QqIGVxdWFsIGBpYCEgVGhlIGhhc2gga2V5IHdpbGwgbm90IGJlIHRoZSBzYW1lISBUaGlzIGlzIGEgcG90ZW50aWFsIGNvbGxpc2lvbiBvciBtaXMtaGFzaGluZyBzaXR1YXRpb24uIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNhcmVmdWxseS4gVGhlcmUgbWF5IGJlIGEgc3VidGxlIGZsYXcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyNy42NjczNTI3ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyNy42Njc1MTI0NDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MzcyNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFsbG9jYXRpb24gRGlsZW1tYSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uIGFuZCBpdCdzIG1ha2luZyBhIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIG1ldGVyIGluc3RhbmNlcyBmcm9tIHRoZSBvbGQgdGFibGUgKGB0aS1cdTAwM2VkcF9tZXRlcnNgKSB0byB0aGUgbmV3IG9uZSAoYG5ld190aS1cdTAwM2VkcF9tZXRlcnNgKS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaGFzaCBrZXkgZm9yIGVhY2ggY29waWVkIGluc3RhbmNlIGluIHRoZSAqbmV3KiB0YWJsZSBpcyAqc3RpbGwqIGp1c3QgdGhlIG9yaWdpbmFsIGluZGV4IGBpYC5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGUgYG1ldGVyX2hhc2gobmV3X3RpLCBpZClgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGhhc2hpbmcgdXNpbmcgYGlkICUgbmV3X25fbWV0ZXJzYC4gRG9lcyB0aGlzIG1lYW4gdGhhdCBgaWRgIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdWNoIHRoYXQgYGlkICUgb2xkX25fbWV0ZXJzID09IGlkICUgbmV3X25fbWV0ZXJzYD8gTm8sIGFic29sdXRlbHkgbm90ISBJdCdzIG5vdC4gVGFrZSBmb3IgZXhhbXBsZSwgaWYgYGlkID0gb2xkX25fbWV0ZXJzICsgMWAuIEluIHRoZSBvcmlnaW5hbCB0YWJsZSwgdGhlIGhhc2ggd291bGQgYmUgYDFgLCBidXQgaW4gdGhlIG5ldyB0YWJsZSwgdGhlIGhhc2ggd291bGQgYmUgYG9sZF9uX21ldGVycyArIDFgLCBhc3N1bWluZyBgbmV3X25fbWV0ZXJzYCBpcyBhIGRpZmZlcmVudCBzaXplIVxuXG5BaCwgSSBzZWUgdGhlIHByb2JsZW0uIElmIHdlIGp1c3QgY29weSB0aGUgaW5zdGFuY2VzIG92ZXIsIHRoZW4gd2hlbiBgbG9va3VwX21ldGVyYCBpcyBjYWxsZWQsIGl0J3MgZ29pbmcgdG8gY2FsY3VsYXRlIHRoZSBoYXNoIGtleSB1c2luZyB0aGUgKm5ldyogbW9kdWx1cyAoYG5ld19uX21ldGVyc2ApLiBBbmQgYmVjYXVzZSB0aGUgb3JpZ2luYWwgaW5zdGFuY2VzIHdpbGwgYmUgaGFzaGVkIHVzaW5nIHRoZSBuZXcgbW9kdWx1cyBhbmQgbm90IHRoZSBvbGQgb25lLCB3ZSdsbCBlbmQgdXAgbG9va2luZyBhdCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgKGFuZCBsaWtlbHkgdW51c2VkKSBzbG90IGluIHRoZSB0YWJsZSwgYW5kIHdlJ2xsIHB1bGwgYmFjayBhIE5VTEwgcG9pbnRlciFcblxuT2theSwgdGltZSB0byB0cmFjZSB3aGVyZSB0aGF0IGBpZGAgaXMgY29taW5nIGZyb20uIE5lZWQgdG8gc2VlIGhvdyB0aG9zZSBtZXRlciBJRHMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuLi4gdGhpcyByZWFsbG9jIGNvdWxkIGJlIGEgZGlzYXN0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MzIuNTQxMjQwNzIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1MDU3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTI3OD1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzozMzE6c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz00MTE9c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDI2LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQyNzpcXHRtZXRlciA9IGRwX21ldGVyX2NyZWF0ZShhKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MjgtXFx0aWYgKElTX0VSUihtZXRlcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjMyLjY1ODc1NTA1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1Njc5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZHBfbWV0ZXJfY3JlYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYGRwX21ldGVyX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodHMgaW1tZWRpYXRlbHkgZ28gdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGNhbGwgZm9yIHNvbWUga2luZCBvZiBzcGVjaWFsaXplZCBtZXRlcmluZyBkZXZpY2U/IE9yIHBlcmhhcHMgYSBtb3JlIGFic3RyYWN0IHNvZnR3YXJlIGNvbnN0cnVjdCBkZXNpZ25lZCB0byB0cmFjayBzb21lIHN5c3RlbSByZXNvdXJjZSB1c2FnZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIGxlYW5zIHRvd2FyZHMgdGhlIGZvcm1lciDigJMgdGhhdCDigJxkcOKAnSBwcmVmaXggb2Z0ZW4gc3VnZ2VzdHMgRGlnaXRhbCBQcm9jZXNzaW5nIG9yIERldmljZSBQcm9maWxlLCBidXQgSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gYmUgc3VyZS5cblxuTXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbnMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgZmllbGRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzLCBpbnRlZ2VycywgZmxvYXRzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYXRvbWljIGNvdW50ZXJzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbXV0ZXhlcyBvciBzZW1hcGhvcmVzIGludm9sdmVkIHRvIHByb3RlY3QgYWNjZXNzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEltbWVkaWF0ZWx5IEkgc3RhcnQgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMsIHBvc3NpYmxlIHJlc291cmNlIGxpbWl0cy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IHRoZSBBUEkuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgbWV0ZXIgb2JqZWN0LCBJIHByZXN1bWU/IE9yIHBlcmhhcHMgYW4gZXJyb3IgY29kZT8gV2hhdCBraW5kIG9mIGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgcGFzc2VkPyBUaGUgbW9yZSBJIGtub3cgYWJvdXQgdGhlIHBhcmFtZXRlcnMsIHRoZSBxdWlja2VyIEkgY2FuIGVudmlzaW9uIGl0cyB1c2UgY2FzZXMuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgaW1wbGljaXRseSBzZXQgaWYgSSBkbyBub3Qgc2V0IHRoZXNlIG9wdGlvbmFsIGZsYWdzP1xuXG5GaW5hbGx5LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBJIHdvbmRlciBhYm91dCB0aGUgbGlmZWN5Y2xlLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYGRwX21ldGVyX2Rlc3Ryb3lgIGZ1bmN0aW9uPyBIb3cgaXMgdGhlIG1ldGVyIHJlbGVhc2VkIGFuZCBjbGVhbmVkIHVwIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGRlYnVnZ2luZyBzY2VuYXJpb3Mg4oCTIHRyYWNraW5nIGRvd24gcmVzb3VyY2UgbGVha3MgaXMgYSBwYWluLiBJ4oCZbSBhbHNvIG1lbnRhbGx5IHNrZXRjaGluZyBvdXQgcG9zc2libGUgaW50ZWdyYXRpb24gdGVzdHMgdG8gZW5zdXJlIHRoYXQgYWxsb2NhdGlvbiwgcHJvcGVyIHVzYWdlLCBhbmQgZGVhbGxvY2F0aW9uIGFyZSB3b3JraW5nIGNvcnJlY3RseSBpbiBteSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MzcuNzc0NDM3Nzc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzE6XFx0c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbiAzMzI6XFx0e1xcbiAzMzM6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiAzMzQ6XFx0XFx0aW50IHJlbTtcXG4gMzM1OlxcdFxcdHUxNiBuX2JhbmRzID0gMDtcXG4gMzM2OlxcdFxcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XFxuIDMzNzpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfYmFuZCAqYmFuZDtcXG4gMzM4OlxcdFxcdGludCBlcnI7XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdC8qIFZhbGlkYXRlIGF0dHJpYnV0ZXMsIGNvdW50IHRoZSBiYW5kcy4gKi9cXG4gMzQxOlxcdFxcdGlmICghYVtPVlNfTUVURVJfQVRUUl9CQU5EU10pXFxuIDM0MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChubGEsIGFbT1ZTX01FVEVSX0FUVFJfQkFORFNdLCByZW0pXFxuIDM0NTpcXHRcXHRcXHRpZiAoKytuX2JhbmRzIFxcdTAwM2UgRFBfTUFYX0JBTkRTKVxcbiAzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIG1ldGVyIGJlZm9yZSBsb2NraW5nIGFueXRoaW5nLiAqL1xcbiAzNDk6XFx0XFx0bWV0ZXIgPSBremFsbG9jX2ZsZXgoKm1ldGVyLCBiYW5kcywgbl9iYW5kcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gMzUwOlxcdFxcdGlmICghbWV0ZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjM3Ljc3NDU4NTkzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE1NzM5ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgTWV0ZXIgSUQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkndmUgaGl0IGEgcG9pbnQgd2hlcmUgSSdtIHNlZWluZyBzb21ldGhpbmcgbGlrZSBgbWV0ZXItXHUwMDNlaWRgLiBJIG5lZWQgdG8gc3RvcCBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgYG1ldGVyLVx1MDAzZWlkYCBmaWVsZCBnZXR0aW5nIHBvcHVsYXRlZD8gSSBjYW4gc2VlIGl0IGJlaW5nIHVzZWQsIGJ1dCBJIGNhbid0IGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBpbml0aWFsaXphdGlvbi4gSXMgaXQgYmVpbmcgc2V0IGR1cmluZyB0aGUgYG1ldGVyYCBzdHJ1Y3QncyBhbGxvY2F0aW9uPyBJcyB0aGVyZSBzb21lIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQ/IE9yIGlzIGl0IGNvbWluZyBmcm9tIGEgZnVuY3Rpb24gY2FsbCBJJ3ZlIG1pc3NlZCBpbiBteSBpbml0aWFsIHNjYW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZTsgYSBtaXNzZWQgaW5pdGlhbGl6YXRpb24gY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MgZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIHVuZGVmaW5lZCBiZWhhdmlvciBvciBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpZiB0aGlzIElEIGlzIGxhdGVyIHVzZWQgaW4gYSBjcml0aWNhbCBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIHRoZSBjb250ZXh0IHRvIHJlc29sdmUgbXkgY29uY2VybnMuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCByZXNvbHZlIG15IHF1ZXN0aW9ucywgb3IgSSBtYXkgYmUgcmVxdWlyZWQgdG8gd29yayBiYWNrd2FyZHMgdG8gaWRlbnRpZnkgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQwLjk5MDMyOTgyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDExLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDExOlxcdHN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gNDEyOlxcdHtcXG4gNDEzOlxcdFxcdHN0cnVjdCBubGF0dHIgKiphID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDQxNDpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyLCAqb2xkX21ldGVyO1xcbiA0MTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiA0MTY6XFx0XFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIDQxNzpcXHRcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlciA9IGdlbmxfaW5mb191c2VyaGRyKGluZm8pO1xcbiA0MTg6XFx0XFx0c3RydWN0IGRwX21ldGVyX3RhYmxlICptZXRlcl90Ymw7XFxuIDQxOTpcXHRcXHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xcbiA0MjA6XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcdHUzMiBtZXRlcl9pZDtcXG4gNDIyOlxcdFxcdGJvb2wgZmFpbGVkO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIWFbT1ZTX01FVEVSX0FUVFJfSURdKVxcbiA0MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdG1ldGVyID0gZHBfbWV0ZXJfY3JlYXRlKGEpO1xcbiA0Mjg6XFx0XFx0aWYgKElTX0VSUihtZXRlcikpXFxuIDQyOTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtZXRlcik7XFxuIDQzMDpcXHRcXG4gNDMxOlxcdFxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX1NFVCxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbiA0MzM6XFx0XFx0aWYgKElTX0VSUihyZXBseSkpIHtcXG4gNDM0OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmVwbHkpO1xcbiA0MzU6XFx0XFx0XFx0Z290byBleGl0X2ZyZWVfbWV0ZXI7XFxuIDQzNjpcXHRcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdG92c19sb2NrKCk7XFxuIDQzOTpcXHRcXHRkcCA9IGdldF9kcChzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cXHUwMDNlZHBfaWZpbmRleCk7XFxuIDQ0MDpcXHRcXHRpZiAoIWRwKSB7XFxuIDQ0MTpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbiA0NDI6XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gNDQzOlxcdFxcdH1cXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0bWV0ZXJfdGJsID0gXFx1MDAyNmRwLVxcdTAwM2VtZXRlcl90Ymw7XFxuIDQ0NjpcXHRcXHRtZXRlcl9pZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0b2xkX21ldGVyID0gbG9va3VwX21ldGVyKG1ldGVyX3RibCwgbWV0ZXJfaWQpO1xcbiA0NDk6XFx0XFx0ZXJyID0gZGV0YWNoX21ldGVyKG1ldGVyX3RibCwgb2xkX21ldGVyKTtcXG4gNDUwOlxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQwLjk5MDQ3NTc5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY1MDk1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTWV0ZXIgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgdXNlcidzIHByb3ZpZGVkIGEgYG1ldGVyX2lkYC4gR29vZC4gVGhpcyBpbmRpY2F0ZXMgd2UncmUgd29ya2luZyB3aXRoIGEgc3BlY2lmaWMgbWV0ZXIgb2JqZWN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgSUQgZ2V0cyBhc3NpZ25lZCB0byB0aGUgYG1ldGVyYCBvYmplY3QuIFNlZW1zIGxpa2UgdGhlIG5leHQgbGluZSBvZiBjb2RlLCBgbWV0ZXItXHUwMDNlaWQgPSBtZXRlcl9pZGAsIHdpbGwgaGFuZGxlIHRoaXMgZGlyZWN0bHkuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHdvcmtzIGFzIGV4cGVjdGVkLiBXZSBjYW4gdGhlbiBwcm9jZWVkIHRvIGxldmVyYWdlIHRoaXMgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo0My44NTU1NzQwODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUxOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdGVyciA9IGF0dGFjaF9tZXRlcihtZXRlcl90YmwsIG1ldGVyKTtcXG4gNDU0OlxcdFxcdGlmIChlcnIpXFxuIDQ1NTpcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZV9vbGRfbWV0ZXI7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdG92c191bmxvY2soKTtcXG4gNDU4OlxcdFxcbiA0NTk6XFx0XFx0LyogQnVpbGQgcmVzcG9uc2Ugd2l0aCB0aGUgbWV0ZXJfaWQgYW5kIHN0YXRzIGZyb21cXG4gNDYwOlxcdFxcdCAqIHRoZSBvbGQgbWV0ZXIsIGlmIGFueS5cXG4gNDYxOlxcdFxcdCAqL1xcbiA0NjI6XFx0XFx0ZmFpbGVkID0gbmxhX3B1dF91MzIocmVwbHksIE9WU19NRVRFUl9BVFRSX0lELCBtZXRlcl9pZCk7XFxuIDQ2MzpcXHRcXHRXQVJOX09OKGZhaWxlZCk7XFxuIDQ2NDpcXHRcXHRpZiAob2xkX21ldGVyKSB7XFxuIDQ2NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm9sZF9tZXRlci1cXHUwMDNlbG9jayk7XFxuIDQ2NjpcXHRcXHRcXHRpZiAob2xkX21ldGVyLVxcdTAwM2VrZWVwX3N0YXRzKSB7XFxuIDQ2NzpcXHRcXHRcXHRcXHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCxcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF9tZXRlcik7XFxuIDQ2OTpcXHRcXHRcXHRcXHRXQVJOX09OKGVycik7XFxuIDQ3MDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQzLjg1NTY1NDA2OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODgwOTY1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEZWJ1Z2dpbmcgdGhlIE1ldGVyIElEIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSBoaXQgd2l0aCBhIHF1ZXN0aW9uOiBXaGVyZSAqZXhhY3RseSogaXMgYG1ldGVyLVx1MDAzZWlkYCBiZWluZyBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGJlY2F1c2Ugd2l0aG91dCBrbm93aW5nIHdoZXJlIHRoZSBJRCBpcyBwb3B1bGF0ZWQsIGFueSBzdWJzZXF1ZW50IGlzc3VlcyB3aXRoIHRoYXQgSUQgYXJlIGdvaW5nIHRvIGJlIGEgd2lsZCBnb29zZSBjaGFzZS4gSXMgaXQgZHVyaW5nIHRoZSBtZXRlcidzIGluaXRpYWxpemF0aW9uPyBJcyBpdCBiZWluZyBzZXQgYnkgc29tZSBleHRlcm5hbCBmdW5jdGlvbiBjYWxsPyBJcyB0aGVyZSBhIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQgc29tZXdoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYXNzaWdubWVudCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBidWcuIFRpbWUgdG8gZGlnIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6NDYuNzM2NjI0NDQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzMzAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWV0ZXItXFx1MDAzZWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU0PXN0YXRpYyBzdHJ1Y3QgZHBfbWV0ZXIgKmxvb2t1cF9tZXRlcihjb25zdCBzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYxLVxcdG1ldGVyID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjI6XFx0aWYgKG1ldGVyIFxcdTAwMjZcXHUwMDI2IGxpa2VseShtZXRlci1cXHUwMDNlaWQgPT0gbWV0ZXJfaWQpKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYzLVxcdFxcdHJldHVybiBtZXRlcjtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTExNj1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMjE6XFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTIyLVxcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMjU9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjktXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTMwOlxcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMS1cXHRSQ1VfSU5JVF9QT0lOVEVSKHRpLVxcdTAwM2VkcF9tZXRlcnNbaGFzaF0sIE5VTEwpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU1LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE1NjpcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTctXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0zMzE9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzUyLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjM1MzpcXHRtZXRlci1cXHUwMDNlaWQgPSBubGFfZ2V0X3UzMihhW09WU19NRVRFUl9BVFRSX0lEXSk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzU0LVxcdG1ldGVyLVxcdTAwM2V1c2VkID0gZGl2X3U2NChrdGltZV9nZXRfbnMoKSwgMTAwMCAqIDEwMDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo0Ny4yNTc5NjAxNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4MTg5NTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZXRlciBJRCBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHBfbWV0ZXJfY3JlYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGF0IHRoZSBsaW5lIGBtZXRlci1cdTAwM2VpZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBgbWV0ZXItXHUwMDNlaWRgIGlzIGdldHRpbmcgaXRzIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIHVzZXIsIHdoaWNoIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcuIExldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi5cblxuSWYgdGhlIHVzZXIgc2V0cyBgbWV0ZXItXHUwMDNlaWRgLCB0aGVuIHRoZSBgbWV0ZXJfaGFzaGAgdmFsdWUgaXMganVzdCB0aGF0IElEIG1vZHVsbyBgbl9tZXRlcnNgLCB3aGljaCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1ldGVycywgcmlnaHQ/IE5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgYmxpbmRseSBjb3BpZXMgdGhlIG1ldGVycyBmcm9tIHRoZSBvbGQgdGFibGUgdG8gdGhlIG5ldyBvbmUsIGxldCdzIHNheSBpdCBjb3BpZXMgYHRpLVx1MDAzZWRwX21ldGVyc1tpXWAgdG8gYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gLCB0aGUgaGFzaCBpbiB0aGUgbmV3IGluc3RhbmNlICppcyogYGlgLiBCdXQsIGBtZXRlcl9oYXNoKG5ld190aSwgaWQpYCB3b3VsZCBub3cgdXNlIGBpZCAlIG5ld19uX21ldGVyc2AuXG5cbkhhbmcgb24sIGxldCdzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBvbGQgaGFzaCAoYGlgKSBpcyB0aGUgc2FtZSBhcyBgaWQgJSBvbGRfbl9tZXRlcnNgLiBEb2VzIHRoYXQgbWVhbiB0aGF0IGBpZCAlIG5ld19uX21ldGVyc2AgKmFsc28qIGVxdWFscyBgaWA/IE5vLCBub3QgbmVjZXNzYXJpbHkhIElmIGBpZGAgaXMsIHNheSwgYG9sZF9uX21ldGVycyArIDFgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgaXMganVzdCBgMWAuIEJ1dCwgYGlkICUgbmV3X25fbWV0ZXJzYCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICsgMWAuXG5cblNvLCAqaWYqIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGNvcGllcyB0byB0aGUgc2FtZSBpbmRleCwgYGxvb2t1cF9tZXRlcmAgd291bGQgbG9vayBhdCBgaWQgJSBuZXdfbl9tZXRlcnNgLCB3aGljaCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICsgMWAgaW4gb3VyIGV4YW1wbGUsIGFuZCBpdCB3b3VsZCBmaW5kLi4uIE5VTEwhIEJlY2F1c2UgaXQncyBsb29raW5nIGZvciBgMWAgd2hpY2ggaXMgbm93IGF0IGBvbGRfbl9tZXRlcnMgKyAxYCEgVGhhdCdzIGEgc2VyaW91cyBpbmNvbnNpc3RlbmN5LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgcmV2aWV3IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo1NC42Mzk4NjI4NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo1NC42NDAwMTQwNzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4NjU2MDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ldGVyIEluc3RhbmNlIFJlYWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGRvZXMgYSBzdHJhaWdodCBjb3B5IGZyb20gdGhlIG9sZCBtZXRlciBhcnJheSAoYHRpLVx1MDAzZWRwX21ldGVyc2ApIHRvIHRoZSBuZXcgb25lIChgbmV3X3RpLVx1MDAzZWRwX21ldGVyc2ApLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGl0J3Mgb25seSBjYWxsZWQgd2hlbiBgdGJsLVx1MDAzZWNvdW50YCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYHRpLVx1MDAzZW5fbWV0ZXJzYC4gQW5kIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGUgYG1ldGVyX2hhc2hgIGNhbGN1bGF0aW9uOiBgaWQgJSB0aS1cdTAwM2VuX21ldGVyc2AuXG5cbldhaXQgYSBtaW51dGUsIE9WUyB1c2Vyc3BhY2UgYWxsb2NhdGVzIG1ldGVyIElEcyBmcm9tIGFuIElEIHBvb2wsIHJpZ2h0PyBUaGUgY29kZSBjb21tZW50IGV2ZW4gc2F5cyB0aGUgc2xvdHMgc2hvdWxkIGdlbmVyYWxseSBiZSBlbXB0eSBiZWNhdXNlIG9mIHRoZSBJRCBwb29sIG1hbmFnZW1lbnQuIElmIHRoZSBJRHMgY29tZSBmcm9tIGEgcG9vbCwgdGhleSBhcmUgbW9zdCBsaWtlbHkgc2VxdWVudGlhbC4gSWYgdGhlIElEIGlzIHNlcXVlbnRpYWwsIGFuZCB0aGUgSUQgaXMgbGVzcyB0aGFuIGBuX21ldGVyc2AsIHRoZW4gYGlkICUgbl9tZXRlcnNgIGlzIGp1c3QgYGlkYC4gU28sIGlmIGBpZCBcdTAwM2Mgbl9tZXRlcnNgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVycyA9PSBpZCAlIG5ld19uX21ldGVycyA9PSBpZGAsIGFuZCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IHNlZW1zIHRvIHdvcmsuXG5cbkJ1dCB3aGF0IGlmIGBpZGAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBuX21ldGVyc2A/IEluIHRoYXQgY2FzZSwgYGlkICUgb2xkX25fbWV0ZXJzYCBpc24ndCBqdXN0IGBpZGAuIEhvd2V2ZXIsIGlmIGBpZCBcdTAwM2U9IG5fbWV0ZXJzYCwgdGhlbiBgdGJsLVx1MDAzZWNvdW50YCB3b3VsZCBiZSBhdCBsZWFzdCBgbl9tZXRlcnNgLCByaWdodD8gTm90IG5lY2Vzc2FyaWx5ISBVc2Vyc3BhY2UgKmNvdWxkKiBzZW5kIGEgbGFyZ2UgYGlkYC4gSWYgdGhhdCBoYXBwZW5zLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgbWlnaHQgY29sbGlkZSB3aXRoIGFuIGV4aXN0aW5nIG1ldGVyLiBCdXQsIHdhaXQsIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24sIGBhdHRhY2hfbWV0ZXJgIHJldHVybnMgYC1FQlVTWWAuXG5cbmBgYGNcblx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG5cdFx0ZXJyID0gLUVCVVNZO1xuXHRcdGdvdG8gYXR0YWNoX2Vycjtcblx0fVxuYGBgXG5cblNvLCB5b3UgY2FuJ3QgaGF2ZSB0d28gbWV0ZXJzIHdpdGggdGhlIHNhbWUgaGFzaCB2YWx1ZSwgc2luY2UgYGF0dGFjaF9tZXRlcmAgd29uJ3QgYWxsb3cgaXQuIEFuZCBzaW5jZSBgdGJsLVx1MDAzZWNvdW50IFx1MDAzYyB0aS1cdTAwM2VuX21ldGVyc2AgKG90aGVyd2lzZSwgYSByZWFsbG9jYXRpb24gd291bGQgb2NjdXIpLCB0aGVyZSdzICphbHdheXMqIGFuIGVtcHR5IHNsb3QgYXZhaWxhYmxlLlxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXI6IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBjb3BpZXMgdG8gdGhlICpzYW1lKiBpbmRleCwgYXNzdW1pbmcgYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gIGlzIHRoZSByaWdodCBzbG90IGZvciB0aGUgbWV0ZXIuIEhvd2V2ZXIsIHRoZSAqY29ycmVjdCogc2xvdCBpcyBkZXRlcm1pbmVkIGJ5IGBtZXRlci1cdTAwM2VpZCAlIG5ld19uX21ldGVyc2AuIElmIGBtZXRlci1cdTAwM2VpZCBcdTAwM2U9IG9sZF9uX21ldGVyc2AsIHRoZW4gYG1ldGVyLVx1MDAzZWlkICUgbmV3X25fbWV0ZXJzYCBpcyAqTk9UKiBlcXVhbCB0byBgaWAuIENvbnNlcXVlbnRseSwgYGxvb2t1cF9tZXRlcmAgd2lsbCBmYWlsIHRvIGZpbmQgaXQhXG5cblRoaXMuLi4gdGhpcyBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBpbiBPVlMhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIHBhdGNoZXMgaGF2ZSB0b3VjaGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCByZWNlbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxODowMy4zMjY1Nzk4NzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjU2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmM9OTQ9c3RhdGljIGludFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjk1OmRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTk2LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE0OC1cXHRpZiAodGJsLVxcdTAwM2Vjb3VudCBcXHUwMDNlPSB0aS1cXHUwMDNlbl9tZXRlcnMpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNDk6XFx0XFx0ZXJyID0gZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVxcdTAwM2VuX21ldGVycyAqIDIpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1MC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTc0PXN0YXRpYyBpbnQgZGV0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAwLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjIwMTpcXHRcXHRpZiAoZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIGhhbGZfc2l6ZSkpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAyLVxcdFxcdFxcdGdvdG8gc2hyaW5rX2VycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6MDMuNDIyMjQzMjM1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzgxNDcwMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1ldGVyIFRhYmxlIFJlc2l6aW5nKipcblxuT2theSwgc28gdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiBpc24ndCAqZGlyZWN0bHkqIG1vZGlmaWVkLCB3aGljaCBpcyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkLiBUaGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiB0aGUgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24uIExldCBtZSBicmVhayB0aGlzIGRvd24gbG9naWNhbGx5LlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBoZXJl4oCZcyB3aGF0IGhhcHBlbmVkOiBhIG5ldyBtZXRlciwgYG1ldGVyYCwgd2FzIGluc2VydGVkIGludG8gdGhlIGN1cnJlbnQgbWV0ZXIgdGFibGUgaW5zdGFuY2UsIGB0aWAuICBDcnVjaWFsbHksIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uLCBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAsIHdhcyBwZXJmb3JtZWQgdXNpbmcgdGhlIGN1cnJlbnQgYHRpYCwgKmJlZm9yZSogYW55IHJlc2l6aW5nIGhhcHBlbmVkLiBJZiB0aGUgdGFibGUgd2FzIGdvaW5nIHRvIGJlIHJlYWxsb2NhdGVkIGR1ZSB0byBjYXBhY2l0eSwgdGhpcyBpbnNlcnRpb24gaGFwcGVuZWQgaW50byB0aGUgKm9sZCogdGFibGUuIFRoZW4sIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZGlkKiBnZXQgY2FsbGVkIGlmIG5lY2Vzc2FyeSwgd2hpY2ggYWxsb2NhdGVzIGEgYG5ld190aWAsIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHRpYCB0byBgbmV3X3RpYCwgYW5kIGZyZWVzIHRoZSBvbGQgYHRpYC4gVGhlIGluc2VydCB3YXMgY2FsbGVkICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhlIGNvcGllZCBtZXRlcnMgaW4gYG5ld190aWAgd291bGQgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlcy5cblxuTXkgbWVudGFsIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIG5vdyBiZWNhdXNlIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgKm1ham9yKiBpbmRleGluZyBwcm9ibGVtIGlmIHRoZSB0YWJsZSBzaXplIGlzIGNoYW5nZWQuIGBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZClgIGlzIGBtZXRlci1cdTAwM2VpZCAlIHRpLVx1MDAzZW5fbWV0ZXJzYC4gSWYgYSByZWFsbG9jYXRpb24gaGFwcGVucywgdGhlIGluZGV4IGNhbGN1bGF0aW9uIGNoYW5nZXMgYmVjYXVzZSBgbmV3X3RpLVx1MDAzZW5fbWV0ZXJzYCBpcyBkaWZmZXJlbnQuIEEgbWV0ZXIncyBpbnRlbmRlZCBsb2NhdGlvbiB3aXRoaW4gdGhlICpuZXcqIHRhYmxlIGNvdWxkIGJlIGNvbXBsZXRlbHkgd3JvbmchIEFueSBzZWFyY2ggZm9yIHRoZSBtZXRlciBhZnRlciBhIHJlYWxsb2Mgd291bGQgbGlrZWx5IGZhaWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG5ldyBtZXRlciBtaWdodCBnZXQgbG9zdCBpbiB0aGUgc2h1ZmZsZSwgYnV0IHRoaXMgaXMgYSBmYXIgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBleGlzdGluZyBtZXRlcnMgY291bGQgYmUgaW5jb3JyZWN0bHkgaW5kZXhlZCAqYWZ0ZXIqIHRoZSByZWFsbG9jYXRpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIHRvIHNlZSBob3cgaXQgZml4ZXMgdGhpcy4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyEgVGhlIHBhdGNoIGZpcnN0IGNoZWNrcyBpZiBhIHJlYWxsb2NhdGlvbiBpcyBuZWVkZWQuIElmIHNvLCBpdCBjYWxscyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuICpUaGVuKiwgYWZ0ZXIgdGhlIHRhYmxlIGlzIHJlc2l6ZWQsIHRoZSBjb2RlIGdldHMgdGhlIG5ldyBgdGlgIHRhYmxlIHVzaW5nIGByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXHUwMDNldGkpYCwgYW5kIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uIG5vdyBoYXBwZW5zIHVzaW5nIHRoZSAqbmV3KiBgdGlgOiBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAuIFRoZSBtZXRlciBpcyB0aGVuIGluc2VydGVkIGludG8gdGhlIGBuZXdfdGlgIGF0IHRoZSBjb3JyZWN0IGxvY2F0aW9uLlxuXG5ZZXMhIFRoYXQncyBpdC4gSXTigJlzIGEgdmVyeSBzaW1wbGUgYW5kIGVsZWdhbnQgZml4IGJ5IHJlb3JkZXJpbmcgdGhlIGxvZ2ljLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCwgYnV0IG5vdyBpdCdzIGNsZWFyOiAgdGhlIGluc2VydGlvbiBpcyBwZXJmb3JtZWQgYWdhaW5zdCB0aGUgKnJlc2l6ZWQqIHRhYmxlIG5vdywgYW5kIHRoZSBoYXNoIGNhbGN1bGF0aW9uIHVzZXMgdGhlIG5ldywgY29ycmVjdCB0YWJsZSBzaXplLlxuXG5NeSBjb25jZXJuIG5vdyBnb2VzIHRvIGFsbCBvZiB0aGUgZXhpc3RpbmcgbWV0ZXJzIHRoYXQgd2VyZSAqYWxyZWFkeSogaW4gdGhlIHRhYmxlIGJlZm9yZSB0aGUgcmVhbGxvYy4gV2VyZSB0aG9zZSBtZXRlcnMgcmVpbmRleGVkIHByb3Blcmx5PyBMZXQgbWUgY2hlY2sgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGFnYWluIHRvIGVuc3VyZSBhbnkgbWV0ZXJzIGNvcGllZCBmcm9tIGB0aWAgdG8gYG5ld190aWAgYXJlIHByb3Blcmx5IHJlaW5kZXhlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjIwLjIwMzcxODI1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTQ6XFx0c3RhdGljIGludFxcbiAgOTU6XFx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXFxuICA5NjpcXHR7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuICA5ODpcXHRcXHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXFx1MDAzZW5fbWV0ZXJzKTtcXG4gIDk5OlxcdFxcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqbmV3X3RpO1xcbiAxMDA6XFx0XFx0aW50IGk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xcbiAxMDM6XFx0XFx0aWYgKCFuZXdfdGkpXFxuIDEwNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbWV0ZXJzOyBpKyspXFxuIDEwNzpcXHRcXHRcXHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1tpXSkpXFxuIDEwODpcXHRcXHRcXHRcXHRuZXdfdGktXFx1MDAzZWRwX21ldGVyc1tpXSA9IHRpLVxcdTAwM2VkcF9tZXRlcnNbaV07XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZXRpLCBuZXdfdGkpO1xcbiAxMTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnRpLVxcdTAwM2VyY3UsIGRwX21ldGVyX2luc3RhbmNlX2ZyZWVfcmN1KTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjIwLjIwMzg5NDYyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjExMjA1NDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBhIFN1YnRsZSBNZXRlciBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIHRoaXMganVzdCBjb3BpZXMgc3R1ZmYgYXJvdW5kLlwiIFRoZSBjb2RlIHNpbXBseSBjb3BpZXMgYHRpLVx1MDAzZWRwX21ldGVyc1tpXWAgdG8gYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gLiBFYXN5LCByaWdodD8gSWYgdGhlcmUgYXJlIG90aGVyIG1ldGVycyBpbiB0aGUgYHRpYCBzdHJ1Y3R1cmUsIHRoZXkncmUgY29waWVkIHRvIHRoZSBzYW1lIGluZGljZXMuIEJ1dCB0aGVuIGl0IGhpdCBtZTogd2hhdCBhYm91dCB0aGUgbWV0ZXIgKklEKj8gSWYgYSBtZXRlcidzIGBpZGAgaXNuJ3Qgc3VjaCB0aGF0IGBpZCAlIG5ld19uX21ldGVycyA9PSBpYCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhleSdsbCBlbmQgdXAgYXQgdGhlIHdyb25nIGluZGV4IGluIHRoZSByZWFsbG9jYXRlZCB0YWJsZS5cblxuSSBzdGFydGVkIHRoaW5raW5nIGFib3V0IGhvdyBPVlMgdXNlcnNwYWNlIGFsbG9jYXRlcyBJRHMuIElmIGl0J3Mgc2VxdWVudGlhbCwgdGhlIGZpcnN0IG1ldGVyIGdldHMgYGlkID0gMGAsIHNlY29uZCBnZXRzIGBpZCA9IDFgLCBhbmQgc28gb24uIExldCdzIHNheSB3ZSd2ZSByZWFjaGVkIGEgdGFibGUgc2l6ZSB3aGVyZSBgdGJsLVx1MDAzZWNvdW50YCBpcyBlcXVhbCB0byBgdGktXHUwMDNlbl9tZXRlcnNgLCBzYXkgYG5fbWV0ZXJzID0gMTAyNGAuIFRoZSBtZXRlciBJRHMgd2lsbCBiZSBmcm9tIGAwYCB0byBgMTAyM2AuIFNvIGZvciBhbGwgdGhlc2UgbWV0ZXJzLCBgaWQgXHUwMDNjIDEwMjRgLiBUaGlzIG1lYW5zIHRoYXQgYGlkICUgMTAyNCA9PSBpZGAuIE5vdywgaWYgd2UgcmVhbGxvY2F0ZSB0byBgMjA0OGAsIGBpZCAlIDIwNDhgIHdpbGwgKnN0aWxsKiBlcXVhbCBgaWRgLiBJdCBtZWFucyB0aGF0IGZvciAqZXhpc3RpbmcqIG1ldGVycywgY29weWluZyB0byB0aGUgc2FtZSBpbmRleCBpcyBhY3R1YWxseSBjb3JyZWN0IVxuXG5CdXQuLi4gd2hhdCBhYm91dCAqbmV3KiBtZXRlcnM/IExldCdzIHNheSBhIG5ldyBtZXRlciBjb21lcyBhbG9uZyB3aXRoIElEIGAxMDI0YC4gSWYgd2UgaW5zZXJ0IGl0ICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24sIHdlIGNhbGN1bGF0ZSBgaGFzaCA9IDEwMjQgJSAxMDI0ID0gMGAuIFNvLCBpdCBnb2VzIGludG8gaW5kZXggYDBgLiBUaGVuIHRoZSByZWFsbG9jYXRpb24gaGFwcGVucywgYW5kIGluZGV4IGAwYCBpcyBjb3BpZWQgdG8gaW5kZXggYDBgIGluIHRoZSBuZXcgdGFibGUuIEJ1dCBpbiB0aGUgbmV3IHRhYmxlLCBpdHMgKmNvcnJlY3QqIGhhc2ggc2hvdWxkIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCdzIG5vdyBhdCB0aGUgd3JvbmcgaW5kZXgsIG92ZXJ3cml0aW5nIHRoZSBtZXRlciB3aXRoIElEIGAwYCEgQm9vbSwgYSBzdWJ0bGUgYW5kIGJlYXV0aWZ1bCBidWchXG5cblRoZSBmaXggaGVyZSBpcyB0byBtb3ZlIHRoZSBpbnNlcnRpb24gKmFmdGVyKiB0aGUgcmVhbGxvY2F0aW9uLiBUaGF0IHdheSwgdGhlIG5ldyBtZXRlciB3aXRoIElEIGAxMDI0YCBnZXRzIGhhc2hlZCB3aXRoIGBuZXdfbl9tZXRlcnMgPSAyMDQ4YCwgc28gYGhhc2ggPSAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgaW5kZXggKGAxMDI0YCksIGFuZCBpdCB3b24ndCBvdmVyd3JpdGUgaW5kZXggYDBgLlxuXG5UaGVuIEkgc3RhcnRlZCB3b25kZXJpbmcuLi4gd2hhdCBpZiB1c2Vyc3BhY2UgKmRvZXNuJ3QqIGFsbG9jYXRlIElEcyBzZXF1ZW50aWFsbHk/IExldCdzIHNheSB1c2Vyc3BhY2Ugc2VuZHMgYGlkID0gMTAyNGAgd2hlbiBgbl9tZXRlcnMgPSAxMDI0YC4gSXQnbGwgYmUgaW5zZXJ0ZWQgYXQgaW5kZXggYDBgLiBJZiB0aGVyZSdzIGFscmVhZHkgYSBtZXRlciBhdCBpbmRleCBgMGAsIGl0IHJldHVybnMgYC1FQlVTWWAuIElmIGl0J3MgZW1wdHksIGl0IGdvZXMgaW4uIEJ1dCBpZiB0aGlzIG5ldyBtZXRlciB3aXRoIGBpZD0xMDI0YCBpcyB0aGUgKmZpcnN0KiBtZXRlciAoc28gYHRibC1cdTAwM2Vjb3VudCA9IDBgKSwgdGhlcmUncyBubyByZWFsbG9jYXRpb24uIFNvIGl0IHN0YXlzIGluIGluZGV4IGAwYC4gV2hlbiByZWFsbG9jYXRpb24gKmRvZXMqIGhhcHBlbiwgaXQgc3RpbGwgZ2V0cyBjb3BpZWQgdG8gaW5kZXggYDBgLCBldmVuIHRob3VnaCBpdHMgaGFzaCBpbiB0aGUgbmV3IHRhYmxlICpzaG91bGQqIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBTbywgc3RpbGwgd3JvbmchIERvZXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGhhbmRsZSB0aGlzPyBOb3BlLiBJdCBqdXN0IGNvcGllcyBgaWAgdG8gYGlgLiBTbywgZXZlbiB3aXRoIG5vbi1zZXF1ZW50aWFsIElEcywgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGlzIHN0aWxsIGJyb2tlbiBmb3IgZXhpc3RpbmcgbWV0ZXJzLlxuXG5CdXQgd2FpdC4uLiB0aGUgY29tbWVudCBpbiB0aGUgY29kZSBzYXlzIE9WUyB1c2VzIGBpZC1wb29sYCBmb3IgZmV0Y2hpbmcgYXZhaWxhYmxlIElEcy4gSXQgYWxsb2NhdGVzIHRoZW0gc2VxdWVudGlhbGx5LCBzdGFydGluZyBhdCAwLiBTbywgYGlkIFx1MDAzYyBuX21ldGVyc2Agc2hvdWxkICphbHdheXMqIGJlIHRydWUgZm9yIGV4aXN0aW5nIG1ldGVycy4gSWYgYGlkLXBvb2xgIGFsbG9jYXRlcyBzZXF1ZW50aWFsbHksIHRoZW4gdGhlIElEIGlzIGFsd2F5cyBgXHUwMDNjIG1heF9tZXRlcnNfYWxsb3dlZGAuIFRoZSB2YWx1ZSBvZiBgbl9tZXRlcnNgIGdyb3dzIGFzIGBjb3VudGAgKG51bWJlciBvZiBtZXRlcnMpIGdyb3dzLiBTaW5jZSBJRHMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHRoZSBtYXhpbXVtIElEIGlzIHJvdWdobHkgZXF1YWwgdG8gYGNvdW50YC4gQW5kIGBuX21ldGVycyBcdTAwM2UgY291bnRgLiBTbyB0aGUgbWF4aW11bSBJRCBpcyBhbHdheXMgYFx1MDAzYyBuX21ldGVyc2AuIFRoZXJlZm9yZSwgYGlkICUgbl9tZXRlcnMgPT0gaWRgIGlzIGFsd2F5cyB0cnVlIVxuXG5UaGlzIG1lYW5zIHRoZSBgbWV0ZXJfaGFzaGAgaXMgZWZmZWN0aXZlbHkganVzdCB0aGUgYGlkYC4gVGhlIG1vZHVsbyBvcGVyYXRpb24gaXMgdGhlcmUgYXMgYSBzYWZldHkgbWVhc3VyZSwgaW4gY2FzZSB1c2Vyc3BhY2UgZXZlciBzZW5kcyBhIGxhcmdlIElELiBJbiB0aGF0IGNhc2UsIGl0IG1pZ2h0IGNvbGxpZGUgYW5kIHJldHVybiBgLUVCVVNZYCwgb3IgaXQgY291bGQgYmUgaW5zZXJ0ZWQgYW5kIHRoZW4gbG9zdCB1cG9uIHJlYWxsb2NhdGlvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgaW1tZWRpYXRlIGlzc3VlIHdoZXJlIGEgc2VxdWVudGlhbGx5IGFsbG9jYXRlZCBJRCB0aGF0IHRyaWdnZXJzIHJlYWxsb2NhdGlvbiB3b3VsZCBiZSBpbnNlcnRlZCBhdCBgaWQgJVxuXG4iLCJJbnB1dFRva2VucyI6MjI0MDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6MzYuMzE1OTUzNjlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjM1NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfbWV0ZXJfY21kX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0yMTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMTU6b3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1OCBjbWQsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjE2LVxcdFxcdFxcdCAgc3RydWN0IG92c19oZWFkZXIgKipvdnNfcmVwbHlfaGVhZGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM2LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjIzNzpzdGF0aWMgaW50IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnJlcGx5LCB1MzIgbWV0ZXJfaWQsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI3Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyNzg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjc5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI4Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyODc6XFx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfRkVBVFVSRVMsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjg4LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MzMxPXN0YXRpYyBzdHJ1Y3QgZHBfbWV0ZXIgKmRwX21ldGVyX2NyZWF0ZShzdHJ1Y3QgbmxhdHRyICoqYSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0MTE6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MzAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDMxOlxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX1NFVCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MzItXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjYtXFx0XFx0aWYgKG9sZF9tZXRlci1cXHUwMDNla2VlcF9zdGF0cykge1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ2NzpcXHRcXHRcXHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0b2xkX21ldGVyKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0ODg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4OS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MDMtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTA0OlxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0dFVCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MDUtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MjQtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtZXRlci1cXHUwMDNlbG9jayk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTI1OlxcdGVyciA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMocmVwbHksIG1ldGVyX2lkLCBtZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTI2LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtZXRlci1cXHUwMDNlbG9jayk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NDAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTQxOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NDIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU0LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU1NTpcXHRyZXBseSA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX01FVEVSX0NNRF9ERUwsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTcxLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2b2xkX21ldGVyLVxcdTAwM2Vsb2NrKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo1NzI6XFx0XFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsIG9sZF9tZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTczLVxcdFxcdFdBUk5fT04oZXJyKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTY4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGRwX21ldGVyX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTAtXFx0XFx0LmZsYWdzID0gMCxcXHRcXHQgIC8qIE9LIGZvciB1bnByaXZpbGVnZWQgdXNlcnMuICovXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjkxOlxcdFxcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9mZWF0dXJlc1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Mi1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk3LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjY5ODpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5OS1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzAyLVxcdFxcdC5mbGFncyA9IDAsXFx0XFx0ICAvKiBPSyBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcwMzpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZ2V0LFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcwNC1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcxMDpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZGVsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzExLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjM2Ljg1ODMxNjgyOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzU5NDYyMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1ldGVyIEFQSSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG1ldGVyIEFQSSBpbiBPcGVuIHZTd2l0Y2ggaXMgdGhvcm91Z2hseSBmdXp6ZWQuIE15IGluaXRpYWwgcGxhbiBpcyB0byBhZGQgYG92c19tZXRlcl9jbWRfc2V0YCwgYG92c19tZXRlcl9jbWRfZ2V0YCwgYG92c19tZXRlcl9jbWRfZGVsYCwgYW5kIGBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGNydWNpYWwgY29tbWFuZHMuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyB0aGUgcmlnaHQgb25lIHRvIHRhcmdldC4gWWVwLCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIE9wZW4gdlN3aXRjaCBpdHNlbGYuIEknbGwgaGVkZ2UgbXkgYmV0cyBhbmQgYWRkIGBORVRgIGFuZCBgSU5FVGAgdG9vLCBqdXN0IGFzIGEgc2FmZXR5IG5ldCwgdGhvdWdoIGBPUEVOVlNXSVRDSGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIE9oLCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBhdm9pZCB0aG9zZSBcIkNPTkZJR19cIiBwcmVmaXhlcyEgUmlnaHQsIGp1c3QgYE9QRU5WU1dJVENIYCBpdCBpcy5cblxuTGV0J3MgcXVpY2tseSByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbmFzdHkgYnVnIGluIGBhdHRhY2hfbWV0ZXJgLiBCYXNpY2FsbHksIG5ldyBtZXRlcnMgd2VyZSBwb3RlbnRpYWxseSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBvbGQgbWV0ZXIgYXJyYXkgKmJlZm9yZSogaXQgd2FzIHJlYWxsb2NhdGVkLiBUaGVuLCB3aGVuIHRoZSBhcnJheSBnb3QgcmVhbGxvY2F0ZWQsIHRoZSBtZXRlciB3YXMgY29waWVkIHRvIHRoZSB3cm9uZyBpbmRleCwgdGhhbmtzIHRvIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2luZywgbGVhZGluZyB0byBsb3N0IG9yIG92ZXJ3cml0dGVuIG1ldGVycy4gVGhlIGZpeCBlbGVnYW50bHkgcmVvcmRlcnMgdGhpbmdzOiByZWFsbG9jYXRlIHRoZSBhcnJheSAqZmlyc3QqLCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbiB0aGUgKm5ldyogYXJyYXkuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJIOKAkyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBpbiBtaW5kLCBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0MiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6NDQuMjE3NzgyNDU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjYyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19tZXRlcl9jbWRfc2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2dldFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9kZWxcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZmVhdHVyZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfbWV0ZXJfY21kX3NldFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9nZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZGVsXCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbkz7j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 00:41:02 +0000 UTC FinishedAt: 2026-07-28 01:18:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bd0e9289e2642f6a5c54faad304ce0f41e926d22", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bd0e9289e2642f6a5c54faad304ce0f41e926d22", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "65839df7-7272-4674-b0ce-ab0edc4f280e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ovs_meter_cmd_set", "ovs_meter_cmd_get", "ovs_meter_cmd_del", "ovs_meter_cmd_features" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDE6MTY6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xuaW5kZXggYTAyYzQ3Mjc3MzM3YmYuLjRhYWVlYWUzYWY1YmRlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jXG5AQCAtMTMzLDE4ICYjNDM7MTMzLDEwIEBAIHN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuIFxuIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIHtcbi1cdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXHUwMDNldGkpO1xuLVx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG4mIzQzO1x0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aTtcbiYjNDM7XHR1MzIgaGFzaDtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbiBnZW5lcmFsbHksIHNsb3RzIHNlbGVjdGVkIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZVxuLVx0ICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4tXG4gXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xuIFx0dGJsLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbiBcdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0YmwtXHUwMDNlbWF4X21ldGVyc19hbGxvd2VkKSB7XG5AQCAtMTUyLDE2ICYjNDM7MTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGktXHUwMDNlbl9tZXRlcnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVx1MDAzZW5fbWV0ZXJzICogMikpIHtcbi1cdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHR0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4mIzQzO1x0aWYgKHRibC1cdTAwM2Vjb3VudCBcdTAwM2U9IHRpLVx1MDAzZW5fbWV0ZXJzKSB7XG4mIzQzO1x0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gYXR0YWNoX2VycjtcbiYjNDM7XG4mIzQzO1x0XHR0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHQvKiBJbiBnZW5lcmFsLCBzZWxlY3RlZCBzbG90cyBzaG91bGQgYmUgZW1wdHksIGJlY2F1c2VcbiYjNDM7XHQgKiBPdlMgdXNlcyBpZC1wb29sIHRvIGZldGNoIGF2YWlsYWJsZSBpZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gYXR0YWNoX2VycjtcbiBcdH1cbiBcbiYjNDM7XHRkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQodGksIG1ldGVyKTtcbiBcdHJldHVybiAwO1xuIFxuIGF0dGFjaF9lcnI6XG4tXHRkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKTtcbiBcdHRibC1cdTAwM2Vjb3VudC0tO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9zZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9nZXQmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9kZWwmIzM0OywKICAgICYjMzQ7b3ZzX21ldGVyX2NtZF9mZWF0dXJlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDE6MTY6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jCmluZGV4IGEwMmM0NzI3NzMzN2JmLi40YWFlZWFlM2FmNWJkZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL21ldGVyLmMKQEAgLTEzMywxOCAmIzQzOzEzMywxMCBAQCBzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSwKIAogc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpCiB7Ci0Jc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC0mZ3Q7dGkpOwotCXUzMiBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKTsKJiM0MzsJc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aTsKJiM0MzsJdTMyIGhhc2g7CiAJaW50IGVycjsKIAotCS8qIEluIGdlbmVyYWxseSwgc2xvdHMgc2VsZWN0ZWQgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlCi0JICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC4KLQkgKi8KLQlpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktJmd0O2RwX21ldGVyc1toYXNoXSkpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7Ci0KIAkvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqLwogCXRibC0mZ3Q7Y291bnQmIzQzOyYjNDM7OwogCWlmICh0YmwtJmd0O2NvdW50ICZndDs9IHRibC0mZ3Q7bWF4X21ldGVyc19hbGxvd2VkKSB7CkBAIC0xNTIsMTYgJiM0MzsxNDQsMjkgQEAgc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpCiAJCWdvdG8gYXR0YWNoX2VycjsKIAl9CiAKLQlpZiAodGJsLSZndDtjb3VudCAmZ3Q7PSB0aS0mZ3Q7bl9tZXRlcnMgJmFtcDsmYW1wOwotCSAgICBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktJmd0O25fbWV0ZXJzICogMikpIHsKLQkJZXJyID0gLUVOT01FTTsKJiM0MzsJdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtJmd0O3RpKTsKJiM0MzsJaWYgKHRibC0mZ3Q7Y291bnQgJmd0Oz0gdGktJmd0O25fbWV0ZXJzKSB7CiYjNDM7CQllcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktJmd0O25fbWV0ZXJzICogMik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gYXR0YWNoX2VycjsKJiM0MzsKJiM0MzsJCXRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLSZndDt0aSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLSZndDtpZCk7CiYjNDM7CiYjNDM7CS8qIEluIGdlbmVyYWwsIHNlbGVjdGVkIHNsb3RzIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZQomIzQzOwkgKiBPdlMgdXNlcyBpZC1wb29sIHRvIGZldGNoIGF2YWlsYWJsZSBpZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktJmd0O2RwX21ldGVyc1toYXNoXSkpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gYXR0YWNoX2VycjsKIAl9CiAKJiM0MzsJZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7CiAJcmV0dXJuIDA7CiAKIGF0dGFjaF9lcnI6Ci0JZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHRpLCBtZXRlcik7CiAJdGJsLSZndDtjb3VudC0tOwogCXJldHVybiBlcnI7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZXRlciBBdHRhY2htZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L29wZW52c3dpdGNoL21ldGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBhdHRhY2hfbWV0ZXJgIGZ1bmN0aW9uLiBUaGUgZ2lzdCBvZiBpdCBpcyBhIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIG1ldGVyIGF0dGFjaG1lbnQgcHJvY2Vzcy4gVGhlIGdvYWwsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYWRkcmVzcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkYXRhIGNvcnJ1cHRpb24gaXNzdWUgd2hlbiBhZGRpbmcgbmV3IG1ldGVycywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlYWxsb2NhdGluZyB0aGUgbWV0ZXIgdGFibGUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3MuIEluaXRpYWxseSwgSSBzZWUgdGhlIGNvZGUgaXMgbW9kaWZ5aW5nIGBhdHRhY2hfbWV0ZXJgLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93LiBMb29raW5nIGF0IHRoZSBkaWZmLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2Ugd2FzOiBpbnNlcnQgdGhlIG1ldGVyLCBpbmNyZW1lbnQgdGhlIGNvdW50LCBhbmQgdGhlbiBjaGVjayBmb3IgYW5kIGhhbmRsZSByZWFsbG9jYXRpb24uIFRoZSByZXZpc2VkIGNvZGUgc2hpZnRzIHRoZSByZWFsbG9jYXRpb24gY2hlY2sgZWFybGllciwgKmJlZm9yZSogdGhlIGluc2VydGlvbi4gVGhlIHNwZWNpZmljIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBjYWxsIGFoZWFkIG9mIHRoZSBtZXRlciBpbnNlcnRpb24uCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtXaHkgdGhlIHJlb3JkZXJpbmc/JiMzNDsgSW5pdGlhbGx5LCBteSB1bmRlcnN0YW5kaW5nIHdhcyBhIHBvdGVudGlhbCByYWNlLiBTcGVjaWZpY2FsbHksIHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAgd2FzIGNhbGxlZCBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHRhYmxlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkLiBJZiByZWFsbG9jYXRpb24gd2FzIG5lZWRlZCAqYW5kIGZhaWxlZCosIHRoZSBuZXcgbWV0ZXIgd291bGQgaGF2ZSBiZWVuIGluIHRoZSB3cm9uZyBpbnN0YW5jZS4gQnV0IHRoZW4gSSBsb29rZWQgZGVlcGVyLgoKVGhlIGJ1ZyB3YXMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCB3YXMgY2FsbGVkIGJlZm9yZSBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB3YXMgY2FsbGVkLCBpdCB3b3VsZCBjb3B5IHRoZSBtZXRlcnMgdG8gYSBuZXcgaW5zdGFuY2UsIGJ1dCBpZiBpdCBmYWlsZWQsIGl0IHdvdWxkIGdvIHRvIGBhdHRhY2hfZXJyYCwgd2hpY2ggY2FsbGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKWAuIEJ1dCB0aGUgYWN0dWFsIHByb2JsZW0gaXMgYSBsaXR0bGUgbW9yZSBzdWJ0bGUuIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqcmVwbGFjZXMqIHRoZSBpbnN0YW5jZS4gSWYgcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgdGhlIG5ldyBtZXRlciB3YXMgbW92ZWQgYmVmb3JlIHRoZSByZWFsbG9jYXRpb24gb2YgdGhlIGluc3RhbmNlLCBzbyB0aGUgZWxlbWVudCB3b3VsZCBnZXQgY29waWVkIHRvIHRoZSBuZXcgaW5zdGFuY2UuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGVycm9yIHBhdGgsIG5vdyB0aGF0IEkgbG9vayBhdCBpdCBhZ2Fpbi4KCk5vdyBJIHRoaW5rIEkgZ2V0IGl0LiBUaGUgcHJvYmxlbSBpcyB0aGF0IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBtaWdodCBmYWlsLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCBvciBzb21lIG90aGVyIHJlYXNvbi4gSWYgdGhhdCBoYXBwZW5zIGluIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgbWV0ZXIgd291bGQgYmUgKmluc2VydGVkKiBpbnRvIHRoZSAqb2xkKiBpbnN0YW5jZSwgYW5kIG9ubHkgdGhlbiB3b3VsZCB0aGUgcmVhbGxvY2F0aW9uIGNoZWNrIGhhcHBlbi4gSWYgdGhlIHJlYWxsb2NhdGlvbiB0aGVuIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgYXR0YWNoX2VycmAsIGFuZCB0aGUgbWV0ZXIgd291bGQgYmUgKnJlbW92ZWQqIGZyb20gdGhlICpvbGQqIGluc3RhbmNlLgoKVGhlIHJldmlzZWQgY29kZSBhZGRyZXNzZXMgdGhpcyBieSBjaGVja2luZyBmb3IgcmVhbGxvY2F0aW9uICpmaXJzdCouIElmIHJlYWxsb2NhdGlvbiBpcyBuZWVkZWQsIGl0JiMzOTtzIGF0dGVtcHRlZCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBJZiBpdCBmYWlscywgdGhlIGVycm9yIHBhdGggaXMgdGFrZW4gKmJlZm9yZSogdGhlIGluc2VydGlvbiwgc28gbm8gbWV0ZXIgaXMgbGVmdCBkYW5nbGluZyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBsaWtlbHkgY29tbWl0IG1lc3NhZ2Ugd291bGQgcHJvYmFibHkgaGlnaGxpZ2h0IHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvdWxkIGZhaWwsIG9yIHBlcmhhcHMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCBtb2RpZmllcyB0aGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZW4gcmVhbGxvY2F0ZWQuCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY2AgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgdG8gc2VlIGlmIGFueXRoaW5nIGVsc2UganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0dGFjaF9tZXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzMtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzQ6c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzUte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDUyLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDUzOlx0ZXJyID0gYXR0YWNoX21ldGVyKG1ldGVyX3RibCwgbWV0ZXIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDU0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXR0YWNoX21ldGVyYCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYC4gUmlnaHQgYXdheSwgdGhhdCB0ZWxscyBtZSBpdCYjMzk7cyBmdW5jdGlvbmFsLCByaWdodD8gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmssIGFuZCBzcGVjaWZpY2FsbHksIG1ldGVycy4gQW5kLCBzaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgdmlhIG5ldGxpbmsgKGBvdnNfbWV0ZXJfY21kX3NldGApLCBJJiMzOTttIGNvbmZpZGVudCBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBub3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gTGV0IG1lIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgT3BlbiB2U3dpdGNoLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgdGhpcyBwYXRjaCBtaWdodCByZWx5IG9uLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscyDigJMgdW5kZXJzdGFuZGluZyB0aGUgdW5kZXJseWluZyBjb25maWcga25vYnMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9QRU5WU1dJVENIYCBjb25maWd1cmF0aW9uLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGJlZm9yZSBJIGRpdmUgZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBhIHN0YW5kYWxvbmUgZGVwbG95bWVudCwgb3IgaXMgaXQgcmVseWluZyBvbiBvdGhlciBjb21wb25lbnRzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IGNyaXRpY2FsIHVwc3RyZWFtIHNlcnZpY2VzLCBrZXJuZWwgbW9kdWxlcywgb3IgbGlicmFyaWVzIHRoYXQgYE9QRU5WU1dJVENIYCBpcyBpbmhlcmVudGx5IHRpZWQgdG8uIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB1cGZyb250IHdpbGwgaW5mb3JtIG15IHN1YnNlcXVlbnQgdHJvdWJsZXNob290aW5nLCBwZXJmb3JtYW5jZSBhbmFseXNpcywgb3IgYW55IHBsYW5uZWQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgY29ubmVjdGVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBPcGVuIHZTd2l0Y2hcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9QRU5WU1dJVENIXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2hcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXG4gIDEwOlx0XHRcdCAgIChORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcdTAwMjZcdTAwMjYgXFxcbiAgMTE6XHRcdFx0XHRcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcdTAwMjZcdTAwMjYgXFxcbiAgMTI6XHRcdFx0XHRcdCAgICAgKCFORVRGSUxURVJfQ09OTkNPVU5UIHx8IE5FVEZJTFRFUl9DT05OQ09VTlQpKSlcbiAgMTM6XHRcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCAhUFNBTVBMRVxuICAxNDpcdFx0c2VsZWN0IE1QTFNcbiAgMTU6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDE2Olx0XHRzZWxlY3QgTkVUX01QTFNfR1NPXG4gIDE3Olx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gIDE4Olx0XHRzZWxlY3QgTkVUX05TSFxuICAxOTpcdFx0c2VsZWN0IE5GX0NPTk5UUkFDS19PVlMgaWYgTkZfQ09OTlRSQUNLXG4gIDIwOlx0XHRzZWxlY3QgTkZfTkFUX09WUyBpZiBORl9OQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIHRoYXQgYE9QRU5WU1dJVENIYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGluY2x1ZGUgYE9QRU5WU1dJVENIYCBpbiBteSBjb25zaWRlcmF0aW9ucy4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbi4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGJ5IGBvdnNfbWV0ZXJfY21kX3NldGAuIFRoYXQmIzM5O3MgbXkgZW50cnkgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgb2YgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCB0aGlzIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGVzZSBjb21wb25lbnRzIHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfbWV0ZXJfY21kX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTctXHRcdFx0XHRcdCAgICAgICAqL1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njk4Olx0XHQuZG9pdCA9IG92c19tZXRlcl9jbWRfc2V0LFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk5LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgQ29tbWFuZCBFeGVjdXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZXRlciBjb21tYW5kIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaGVyZSBpcyB0aGUgYG92c19tZXRlcl9jbWRfc2V0YCBzeW1ib2wuIFRoYXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIG5ldGxpbmsgaW50ZXJhY3Rpb24sIHNlZW1zIGxpa2UgdGhlIHBsYWNlIHdoZXJlIHRoZSByZWFsIHdvcmsgZ2V0cyBkb25lLiBCdXQsIGhhbmcgb24uLi4gSSBuZWVkIHRvIGJlIHN1cmUuIEkmIzM5O20gc2VlaW5nIGBhdHRhY2hfbWV0ZXJgIGluIHRoZSBjb2RlLCBidXQgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXTigJlzIGxpa2VseSBpbmxpbmVkIG9yIGF0IGxlYXN0IG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEl0IHdvbiYjMzk7dCBiZSBhIHB1YmxpY2x5IGV4cG9zZWQgZnVuY3Rpb24uIFRoZXJlZm9yZSwgaXQgd29uJiMzOTt0IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgaXRzICYjMzQ7d29ybGQmIzM0Oy4KClNvLCBmb2N1c2luZyBiYWNrIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAsIHRoYXQmIzM5O3MgbXkgcHJpbWFyeSB0YXJnZXQuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBJICpyZWFsbHkqIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGF0dGFjaF9tZXRlcmAgaXNuJiMzOTt0IGJlaW5nIHVzZWQgYW55d2hlcmUgZWxzZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIHRyYWNlIGFsbCBvZiB0aGUgY2FsbHMgdG8gYGF0dGFjaF9tZXRlcmAganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXR0YWNoX21ldGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzNDpzdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzNS17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NDExPXN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTItXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0NTM6XHRlcnIgPSBhdHRhY2hfbWV0ZXIobWV0ZXJfdGJsLCBtZXRlcik7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG92c19tZXRlcl9jbWRfc2V0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLiBGaXJzdCwgSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBvdGhlciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gT2theSwgbm9wZSwgYG92c19tZXRlcl9jbWRfc2V0YCAqaXMqIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIG1ldGVyIHNldHRpbmdzLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIGBvdnNfbWV0ZXJfY21kX3NldGAgc3RhdGljPyBZZXMsIGl0IGlzLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXIgb24gdGhpczogd2UgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGUgZ29hbCBpcyB0byBtYXhpbWl6ZSB0ZXN0YWJpbGl0eSB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgKmJlY2F1c2UqIGBvdnNfbWV0ZXJfY21kX3NldGAgaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrIGluIGBkcF9tZXRlcl9nZW5sX29wc2AsIGl0cyBhZGRyZXNzIGlzIHRha2VuLiBUaGF0IG1lYW5zIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQgYW5kIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCwgaXQmIzM5O3Mgbm90IGludGVybmFsIGhlbHBlciBzdGF0aWMgaW5saW5lZCBjb2RlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGFsdGVybmF0aXZlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9tZXRlcl9nZW5sX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU5Nz1ib29sIG92c19tZXRlcl9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjg2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njg3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY4OC1cdHsgLmNtZCA9IE9WU19NRVRFUl9DTURfRkVBVFVSRVMsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NzE4PXN0cnVjdCBnZW5sX2ZhbWlseSBkcF9tZXRlcl9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzI1LVx0LnBhcmFsbGVsX29wcyA9IHRydWUsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MjY6XHQuc21hbGxfb3BzID0gZHBfbWV0ZXJfZ2VubF9vcHMsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3Mjc6XHQubl9zbWFsbF9vcHMgPSBBUlJBWV9TSVpFKGRwX21ldGVyX2dlbmxfb3BzKSxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcyOC1cdC5yZXN2X3N0YXJ0X29wID0gT1ZTX01FVEVSX0NNRF9HRVQgJiM0MzsgMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOZXRsaW5rIEZhbWlseSBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgbmV0bGluayBmYW1pbHkgaW4gcXVlc3Rpb24gaXMgYGRwX21ldGVyX2dlbmxfZmFtaWx5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguJiMzNDsgTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzOiAqSG93KiBpcyB0aGlzIHRoaW5nIGdldHRpbmcgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBob29raW5nIGl0IHVwPyBGaW5kaW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgaXMgdGhlIGZpcnN0IHN0ZXAgd2hlbiBkZWJ1Z2dpbmcgbmV0bGluayBpbXBsZW1lbnRhdGlvbnMsIHdoZXRoZXIgaXQmIzM5O3MgdW5kZXJzdGFuZGluZyB0aGUgc2V0dXAgcHJvY2VzcyBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJcyBpdCBleHBvcnRlZCwgb3IgYW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIG1vZHVsZT8gVGhpcyBpcyB0aGUgY29yZSBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBmaW5kIHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBfbWV0ZXJfZ2VubF9mYW1pbHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI2NTc9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSAqIGNvbnN0IGRwX2dlbmxfZmFtaWxpZXNbXSA9IHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjYxLVx0XHUwMDI2ZHBfcGFja2V0X2dlbmxfZmFtaWx5LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY2MjpcdFx1MDAyNmRwX21ldGVyX2dlbmxfZmFtaWx5LFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY2My0jaWZcdElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE1PW92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIyNi1cdFx0XHRcdFx0aW5mby1cdTAwM2VzbmRfc2VxLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjI3Olx0XHRcdFx0XHRcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSwgMCwgY21kKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIyOC1cdGlmICghKm92c19yZXBseV9oZWFkZXIpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz03MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBvdnNfbWV0ZXJfbXVsdGljYXN0X2dyb3VwID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxNy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcxODpzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzE5LVx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oPTUwPXN0cnVjdCBkcF9tZXRlcl90YWJsZSB7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTUtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuaDo1NjpleHRlcm4gc3RydWN0IGdlbmxfZmFtaWx5IGRwX21ldGVyX2dlbmxfZmFtaWx5O1xubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTctaW50IG92c19tZXRlcnNfaW5pdChzdHJ1Y3QgZGF0YXBhdGggKmRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9wZW4gdlN3aXRjaCBNZXRlciBDb21tYW5kKioKCk9rYXksIHNvIEkmIzM5O3ZlIGRlY2lkZWQgdG8gY29uY2VudHJhdGUgbXkgYW5hbHlzaXMgb24gYG92c19tZXRlcl9jbWRfc2V0YC4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgZGVjbGFyZWQgc3RhdGljLCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBJIGtub3cgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCBpdCYjMzk7bGwgaGF2ZSBhIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgdHJhY2luZy4gV2FpdCBhIG1pbnV0ZSwgbm8sIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkcF9tZXRlcl9nZW5sX29wc2AuIFRoYXQmIzM5O3Mgc29saWQgZXZpZGVuY2UuCgpOb3cgdGhhdCBJJiMzOTt2ZSBwaW5uZWQgZG93biB0aGUga2V5IGZ1bmN0aW9uLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBPUEVOVlNXSVRDSGAgZGVwZW5kcyBvbiBgSU5FVGAsIGJ1dCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsZXZhbnQgY29uZmlncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQmVzdCB0byByZXZpc2l0IGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBHb3R0YSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgQXR0YWNobWVudCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoaXMgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE9QRU5WU1dJVENIYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlaGF2aW9yIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZXlvbmQgdGhlIG9idmlvdXM/IE5vLCBgT1BFTlZTV0lUQ0hgIHNlZW1zIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb250ZXh0LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGhhbmRsaW5nIG1ldGVyIGF0dGFjaG1lbnQgd2l0aGluIGEgdGFibGUuIE5vdywgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IHRoZSByZWFsbG9jYXRpb24gYW5kIGluc2VydGlvbiBpbnRlcmFjdC4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgYSBzZXF1ZW5jZTogZ2V0IHRoZSBtZXRlciBpbnN0YW5jZSwgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIG1ldGVyLCBhbmQgaWYgbm9uZSwgKnRoZW4qIGluc2VydC4gQnV0IHRoZW4gd2UgaGF2ZSB0aGUgcmVhbGxvY2F0aW9uIGxvZ2ljOiBpZiB0aGUgdGFibGUgaXMgYXBwcm9hY2hpbmcgY2FwYWNpdHksIHdlIHJlYWxsb2NhdGUsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LgoKSSBzZWUgdGhleSBhcmUgcmVhbGxvY2F0aW5nLCBhbmQgdGhlbiBpbnNlcnRpbmcuIEJ1dCwgbXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgdGhpcyBwcmV2aW91cyBvcmRlciBjb3VsZCBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24gd2l0aCBSQ1UuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmYWlscywgdGhlcmUmIzM5O3MgYSByb2xsYmFjayAoY2FsbGluZyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlYCBvbiB0aGUgKm9sZCogaW5zdGFuY2UpLiBUaGF0IHNlZW1zIGZpbmUgc2luY2UgaXQgcmVzdG9yZXMgdGhlIHByaW9yIHN0YXRlIG9mIHRoZSB0YWJsZS4KCk5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgICpzdWNjZWVkcyosIGl0IHdvdWxkIGFsbG9jYXRlIGEgbmV3IGluc3RhbmNlLCBjb3B5IGFsbCB0aGUgbWV0ZXJzLCBhbmQgdGhlbiB0aGUgb2xkIGluc3RhbmNlIHdvdWxkIGJlIGZyZWVkIHZpYSBSQ1UuIFRoaXMgc3RpbGwgc2VlbXMgT0sgaW4gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLiBJIGJlbGlldmUgdGhpcyBjaGFuZ2UganVzdCBzaW1wbGlmaWVzIHRoZSBsb2dpYyBieSBtYWtpbmcgdGhlIGxvZ2ljIGNsZWFyZXIuCklmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZmFpbHMqLCB0aGVuIHRoZXkgcm9sbCBiYWNrLiBTdGlsbCBvay4KCkJ1dC4uLndhaXQuIFRoZSBwcm9ibGVtIHdpdGggdGhlIHByZXZpb3VzIHBhdGNoIGlzIG5vdyB0aGUgbG9naWMgaGFwcGVucyBsaWtlIHRoaXM6IGdldCB0aGUgbWV0ZXIgaW5zdGFuY2UsICpwb3NzaWJseSogcmVhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBpbnN0YW5jZSwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoLCBhbmQgY2hlY2sgZm9yIGFuIGV4aXN0aW5nIG1ldGVyLCBhbmQgKnRoZW4qIGluc2VydC4gVGhpcyBsb29rcyB0byBhZGRyZXNzIHRoZSBwcmlvciBpc3N1ZS4KClNvIHRoZSBvcmlnaW5hbCBsb2dpYyB3b3VsZCBmaXJzdCBpbnNlcnQgaW50byB0aGUgb2xkIGluc3RhbmNlLCB0aGVuIHJlYWxsb2NhdGUsIGFuZCB0aGUgbmV3IGluc3RhbmNlIHdvdWxkIGdldCBjb3BpZWQuIEl0IGFsc28gbWVhbnMgdGhhdCBpZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgKmZhaWxzKiwgdGhhdCBtZWFucyB0aGUgb2xkIGluc3RhbmNlIGlzIGxlZnQgdW50b3VjaGVkLCBhbmQgdGhlcmVmb3JlIHJvbGxpbmcgYmFjayBpcyBmaW5lLgoKVGhpcyBjdXJyZW50IHBhdGNoIGlzIHNhZmUuIE5vIHdvcnJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwX21ldGVyX2luc3RhbmNlX3JlYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz05ND1zdGF0aWMgaW50XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo5NTpkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTk2LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMzQ9c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTQ4LVx0aWYgKHRibC1cdTAwM2Vjb3VudCBcdTAwM2U9IHRpLVx1MDAzZW5fbWV0ZXJzKSB7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNDk6XHRcdGVyciA9IGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2ModGJsLCB0aS1cdTAwM2VuX21ldGVycyAqIDIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTUwLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTE3ND1zdGF0aWMgaW50IGRldGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDAtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMDE6XHRcdGlmIChkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgaGFsZl9zaXplKSlcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIwMi1cdFx0XHRnb3RvIHNocmlua19lcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYDoKCioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBmcmFtaW5nIHRoaXMgYXMgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYSBgZHBfbWV0ZXJfaW5zdGFuY2VgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgaXMgYSByb3V0aW5lIGRlc2lnbmVkIHRvIHJlc2l6ZSBvciByZWxvY2F0ZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSBtZXRlciBpbnN0YW5jZS4gUHJvYmFibHkgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgcmVzb3VyY2UgbWFuYWdlbWVudC4gVGhlICYjMzQ7cmVhbGxvYyYjMzQ7IHBhcnQgc3VnZ2VzdHMgdGhhdCBpdCBpcyBtb3JlIGR5bmFtaWMgdGhhbiBhIHN0YXRpYyBhbGxvY2F0aW9uLiBUaGUgbmVlZCBmb3IgcmVhbGxvY2F0aW9uIHVzdWFsbHkgbWVhbnMgdGhlIGluc3RhbmNlIG5lZWRzIG1vcmUgc3BhY2UgdG8gc3RvcmUgZGF0YSwgbWV0YWRhdGEsIG9yIGludGVybmFsIHN0YXRlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGluIG9yZGVyIHRvIHNlZSBpZiBpdCBpcyBkeW5hbWljLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uLCBlcnJvciBjb25kaXRpb25zIChsaWtlIGFsbG9jYXRpb24gZmFpbHVyZXMpLCBhbmQgaG93IGdyYWNlZnVsbHkgaXQgZGVhbHMgd2l0aCB0aGUgdHJhbnNmZXIgb2YgZXhpc3RpbmcgZGF0YSB0byB0aGUgbmV3IG1lbW9yeSBsb2NhdGlvbi4gSSBhbHNvIHdhbnQgdG8gc2VlIHdoZXRoZXIgaXQgY29waWVzIGRhdGEgb3IgbW92ZXMgaXQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IHRyaWdnZXJzIHRoaXMgcmUtYWxsb2NhdGlvbj8gV2hhdCYjMzk7cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgZG91YmxpbmcgdGhlIHNpemUgb3IgdXNpbmcgc29tZSBvdGhlciBpbmNyZW1lbnQ/IEkmIzM5O20gY3VyaW91cyB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYGRwX21ldGVyX2luc3RhbmNlYCBzbyB0aGF0IGl0IHdvdWxkIG5lZWQgcmVhbGxvY2F0aW5nLiBJIGNhbiBhbnRpY2lwYXRlIHRoYXQgdGhpcyBjb3VsZCBiZSBhIHBvaW50IG9mIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgaWYgbm90IGNhcmVmdWxseSBpbXBsZW1lbnRlZC4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdGF0aWMgaW50XG4gIDk1Olx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4gIDk4Olx0XHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXHUwMDNlbl9tZXRlcnMpO1xuICA5OTpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICpuZXdfdGk7XG4gMTAwOlx0XHRpbnQgaTtcbiAxMDE6XHRcbiAxMDI6XHRcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xuIDEwMzpcdFx0aWYgKCFuZXdfdGkpXG4gMTA0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNTpcdFxuIDEwNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9tZXRlcnM7IGkmIzQzOyYjNDM7KVxuIDEwNzpcdFx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXHUwMDNlZHBfbWV0ZXJzW2ldKSlcbiAxMDg6XHRcdFx0XHRuZXdfdGktXHUwMDNlZHBfbWV0ZXJzW2ldID0gdGktXHUwMDNlZHBfbWV0ZXJzW2ldO1xuIDEwOTpcdFxuIDExMDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2V0aSwgbmV3X3RpKTtcbiAxMTE6XHRcdGNhbGxfcmN1KFx1MDAyNnRpLVx1MDAzZXJjdSwgZHBfbWV0ZXJfaW5zdGFuY2VfZnJlZV9yY3UpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIDA7XG4gMTE0Olx0fVxuIDExNTpcdFxuIDExNjpcdHN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuIDExNzpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIDExODpcdHtcbiAxMTk6XHRcdHUzMiBoYXNoO1xuIDEyMDpcdFxuIDEyMTpcdFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKTtcbiAxMjI6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0sIG1ldGVyKTtcbiAxMjM6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipSZS1ldmFsdWF0aW5nIE1ldGVyIFJlYWxsb2NhdGlvbiBMb2dpYyoqCgpSaWdodCwgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBpdGVyYXRpbmcgZnJvbSBgMGAgdXAgdG8gYG5fbWV0ZXJzYCwgd2hlcmUgYG5fbWV0ZXJzYCBpcyBlZmZlY3RpdmVseSB0aGUgc21hbGxlciBvZiB0aGUgY3VycmVudCBzaXplIChsZXQmIzM5O3MgY2FsbCB0aGF0IGBzaXplYCkgYW5kIGB0aS0mZ3Q7bl9tZXRlcnNgLiBIb2xkIG9uLCBgdGktJmd0O25fbWV0ZXJzYCAqaXMqIHRoZSBzaXplIG9mIHRoZSAqb2xkKiBtZXRlciBpbnN0YW5jZSwgaXNuJiMzOTt0IGl0PyBTbywgd2UgYXJlIGVzc2VudGlhbGx5IHJlYWxsb2NhdGluZyBiYXNlZCBvbiB0aGUgb2xkIHNpemUsIG5vdCB0aGUgcG90ZW50aWFsIG5ldyBzaXplLgoKTm93LCBteSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSBzb21ldGhpbmcgaXMgdXAgd2l0aCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YC4uLiBpdCBpbnNlcnRzIGludG8gdGhlICpvbGQqIGluc3RhbmNlIGF0IGBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAuIE9rYXksIHNvIGl04oCZcyBjYWxjdWxhdGluZyBhIGhhc2ggYmFzZWQgb24gdGhlIG9sZCB0YWJsZS4gQnV0IGlzbiYjMzk7dCB0aGUgd2hvbGUgcG9pbnQgdG8gcmVhbGxvY2F0ZSB0byBhICpuZXcqIGluc3RhbmNlPyBBbmQgdGhhdCBoYXNoPyBMZXQgbWUgcXVpY2tseSBjaGVjayBgbWV0ZXJfaGFzaGAuIEkgaGF2ZSBhIHN1c3BpY2lvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXRlcl9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGJhbmRfcG9saWN5W09WU19CQU5EX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTM5LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDA6c3RhdGljIHUzMiBtZXRlcl9oYXNoKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksIHUzMiBpZClcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz01ND1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpsb29rdXBfbWV0ZXIoY29uc3Qgc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTctXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU4Olx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlcl9pZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01OS1cdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTE2PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMC1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEyMTpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjItXHRyY3VfYXNzaWduX3BvaW50ZXIodGktXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyOS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzMDpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzEtXHRSQ1VfSU5JVF9QT0lOVEVSKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSwgTlVMTCk7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1NS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE1NjpcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbWV0ZXJfaGFzaGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBjaGVja2luZyBvdXQgdGhpcyBgbWV0ZXJfaGFzaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gSXMgaXQgYSB1bmlxdWUgaWRlbnRpZmllcj8gQSBrZXk/IEEgZGF0YSBzdHJ1Y3R1cmUgaXRzZWxmPyBLbm93aW5nIHRoYXQgaXMgZm91bmRhdGlvbmFsIHRvIGFueSBkZWVwZXIgYW5hbHlzaXMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCBpcyBsaWtlbHkgYSBoYXNoIHZhbHVlIGdlbmVyYXRlZCBmcm9tIHNvbWUgY29tYmluYXRpb24gb2YgbWV0ZXIgZGF0YSBhbmQgc29tZSBmb3JtIG9mIG1ldGVyIGlkZW50aWZpZXIuIFRoaXMgd291bGQgYWxsb3cgZm9yIHF1aWNrIGxvb2t1cCBhbmQgY29tcGFyaXNvbiBvZiByZWxhdGVkIG1ldGVyIGluZm9ybWF0aW9uIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGlzIGNhbGN1bGF0ZWQgYW5kIHVzZWQuIEFyZSB0aGVyZSBhbnkgY29sbGlzaW9uIGNvbmNlcm5zIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW5wdXRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpcyB3ZWFrIG9yIHBvb3JseSBpbXBsZW1lbnRlZD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNoaW5nIGFsZ29yaXRobSBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXNoIGFyZSBhbHNvIGltcG9ydGFudDsgc3BlZWQgb2YgZ2VuZXJhdGlvbiBhbmQgbG9va3VwIGFyZSBrZXkgY29uc2lkZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgaWYgdGhlIHZhcmlhYmxlIG5hbWUgcHJvdmlkZXMgYW55IGNsdWUgYXMgdG8gaXRzIHVzZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29tbWVudHMgb3IgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUuIFdpdGhvdXQgbW9yZSBjb250ZXh0LCBJIGhhdmUgdG8gYXNzdW1lIGl0cyByb2xlIGlzIHRvIG1ha2UgYSBsb29rIHVwIG9yIG1ha2UgYSBjb21wYXJpc29uIGZhc3QgYW5kIHNpbXBsZSwgYnV0IHdpdGhvdXQgbW9yZSBjb250ZXh0IGl0IGlzIGp1c3QgYSBuYW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdHN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXG4gIDQxOlx0e1xuICA0MjpcdFx0cmV0dXJuIGlkICUgdGktXHUwMDNlbl9tZXRlcnM7XG4gIDQzOlx0fVxuICA0NDpcdFxuICA0NTpcdHN0YXRpYyB2b2lkIG92c19tZXRlcl9mcmVlKHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4gIDQ2Olx0e1xuICA0NzpcdFx0aWYgKCFtZXRlcilcbiAgNDg6XHRcdFx0cmV0dXJuO1xuICA0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFsbG9jYXRpb24gTG9naWMgLSBBIFBvdGVudGlhbCBCdWc/KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcmVhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIG1ldGVyIGluc3RhbmNlcywgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGJ1ZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIGhvdyB0aGUgaGFzaCBrZXksIGBtZXRlcl9oYXNoYCwgcmVsYXRlcyB0byB0aGUgbnVtYmVyIG9mIG1ldGVycywgYHRpLSZndDtuX21ldGVyc2AuIFRoZSBjdXJyZW50IGxvZ2ljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgZnJhZ2lsZS4KCklmIGBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnRgIGlzIGluc2VydGluZyBpbnRvIHRoZSAmIzM0O29sZCYjMzQ7IG1ldGVyIGluc3RhbmNlLCB0aGUgaGFzaCBrZXkgY2FsY3VsYXRpb24gdXNlcyB0aGUgb2xkIG1vZHVsdXM6IGBpZCAlIG9sZF9uX21ldGVyc2AuIE1ha2VzIHNlbnNlLCBzbyBmYXIuIEJ1dCwgdGhlbiwgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvbWVzIGludG8gcGxheSB0byBleHBhbmQgdGhlIHNpemUgYW5kIHRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBhIGJpdCBjb25mdXNpbmcuCgpJdCAqY29waWVzKiB0aGUgZWxlbWVudHMgdG8gdGhlIG5ldyBtZXRlciBpbnN0YW5jZS4gSXQgaXMgY29weWluZyB0aGUgZWxlbWVudHMgd2l0aCBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV0gPSB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYC4gU28sIHRoZSBjb3B5IG1haW50YWlucyB0aGUgc2FtZSBpbmRleCwgJiMzOTtpJiMzOTssIGluIHRoZSBuZXcgbGFyZ2VyIGFsbG9jYXRpb24uIEhvd2V2ZXIsIGBuZXdfdGktJmd0O25fbWV0ZXJzYCBpcyBkaWZmZXJlbnQsIGl0IGlzIGFjdHVhbGx5IGRvdWJsZWQgdG8gYG9sZF9uX21ldGVycyAqIDJgLiBUaGF0IG1lYW5zIHRoZSAqY29ycmVjdCogbmV3IGhhc2ggZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG5ldyBtZXRlciBpbnN0YW5jZSBzaG91bGQgYmUgYGlkICUgbmV3X25fbWV0ZXJzYC4gCgpCdXQsIGlmIHRoZSBjb3B5IGp1c3QgcGxhY2VzIHRoZSBtZXRlciBlbGVtZW50cyBhdCB0aGUgKnNhbWUgaW5kZXgqIGBpYCwgaW4gdGhlIGV4cGFuZGVkIGFycmF5LCB0aGVuIGBpZCAlIG5ld19uX21ldGVyc2AgbWlnaHQgKm5vdCogZXF1YWwgYGlgISBUaGUgaGFzaCBrZXkgd2lsbCBub3QgYmUgdGhlIHNhbWUhIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29sbGlzaW9uIG9yIG1pcy1oYXNoaW5nIHNpdHVhdGlvbi4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgY2FyZWZ1bGx5LiBUaGVyZSBtYXkgYmUgYSBzdWJ0bGUgZmxhdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NDpcdHN0YXRpYyBpbnRcbiAgOTU6XHRkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbiAgOTg6XHRcdGludCBuX21ldGVycyA9IG1pbihzaXplLCB0aS1cdTAwM2VuX21ldGVycyk7XG4gIDk5Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcbiAxMDA6XHRcdGludCBpO1xuIDEwMTpcdFxuIDEwMjpcdFx0bmV3X3RpID0gZHBfbWV0ZXJfaW5zdGFuY2VfYWxsb2Moc2l6ZSk7XG4gMTAzOlx0XHRpZiAoIW5ld190aSlcbiAxMDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTA1Olx0XG4gMTA2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX21ldGVyczsgaSYjNDM7JiM0MzspXG4gMTA3Olx0XHRcdGlmIChyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaV0pKVxuIDEwODpcdFx0XHRcdG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV07XG4gMTA5Olx0XG4gMTEwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZXRpLCBuZXdfdGkpO1xuIDExMTpcdFx0Y2FsbF9yY3UoXHUwMDI2dGktXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XG4gMTEyOlx0XG4gMTEzOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhbGxvY2F0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBtYWtpbmcgYSBzdHJhaWdodCBjb3B5IG9mIHRoZSBtZXRlciBpbnN0YW5jZXMgZnJvbSB0aGUgb2xkIHRhYmxlIChgdGktJmd0O2RwX21ldGVyc2ApIHRvIHRoZSBuZXcgb25lIChgbmV3X3RpLSZndDtkcF9tZXRlcnNgKS4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlIGhhc2gga2V5IGZvciBlYWNoIGNvcGllZCBpbnN0YW5jZSBpbiB0aGUgKm5ldyogdGFibGUgaXMgKnN0aWxsKiBqdXN0IHRoZSBvcmlnaW5hbCBpbmRleCBgaWAuCgpCdXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgYG1ldGVyX2hhc2gobmV3X3RpLCBpZClgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGhhc2hpbmcgdXNpbmcgYGlkICUgbmV3X25fbWV0ZXJzYC4gRG9lcyB0aGlzIG1lYW4gdGhhdCBgaWRgIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdWNoIHRoYXQgYGlkICUgb2xkX25fbWV0ZXJzID09IGlkICUgbmV3X25fbWV0ZXJzYD8gTm8sIGFic29sdXRlbHkgbm90ISBJdCYjMzk7cyBub3QuIFRha2UgZm9yIGV4YW1wbGUsIGlmIGBpZCA9IG9sZF9uX21ldGVycyAmIzQzOyAxYC4gSW4gdGhlIG9yaWdpbmFsIHRhYmxlLCB0aGUgaGFzaCB3b3VsZCBiZSBgMWAsIGJ1dCBpbiB0aGUgbmV3IHRhYmxlLCB0aGUgaGFzaCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLCBhc3N1bWluZyBgbmV3X25fbWV0ZXJzYCBpcyBhIGRpZmZlcmVudCBzaXplIQoKQWgsIEkgc2VlIHRoZSBwcm9ibGVtLiBJZiB3ZSBqdXN0IGNvcHkgdGhlIGluc3RhbmNlcyBvdmVyLCB0aGVuIHdoZW4gYGxvb2t1cF9tZXRlcmAgaXMgY2FsbGVkLCBpdCYjMzk7cyBnb2luZyB0byBjYWxjdWxhdGUgdGhlIGhhc2gga2V5IHVzaW5nIHRoZSAqbmV3KiBtb2R1bHVzIChgbmV3X25fbWV0ZXJzYCkuIEFuZCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBpbnN0YW5jZXMgd2lsbCBiZSBoYXNoZWQgdXNpbmcgdGhlIG5ldyBtb2R1bHVzIGFuZCBub3QgdGhlIG9sZCBvbmUsIHdlJiMzOTtsbCBlbmQgdXAgbG9va2luZyBhdCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgKGFuZCBsaWtlbHkgdW51c2VkKSBzbG90IGluIHRoZSB0YWJsZSwgYW5kIHdlJiMzOTtsbCBwdWxsIGJhY2sgYSBOVUxMIHBvaW50ZXIhCgpPa2F5LCB0aW1lIHRvIHRyYWNlIHdoZXJlIHRoYXQgYGlkYCBpcyBjb21pbmcgZnJvbS4gTmVlZCB0byBzZWUgaG93IHRob3NlIG1ldGVyIElEcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBmaXJzdCBwbGFjZS4uLiB0aGlzIHJlYWxsb2MgY291bGQgYmUgYSBkaXNhc3Rlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBfbWV0ZXJfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9Mjc4PXN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMC1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjMzMTpzdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0zMzIte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDI2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDI3Olx0bWV0ZXIgPSBkcF9tZXRlcl9jcmVhdGUoYSk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MjgtXHRpZiAoSVNfRVJSKG1ldGVyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBkcF9tZXRlcl9jcmVhdGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIGBkcF9tZXRlcl9jcmVhdGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdvIHRvIHRoZSBsb3ctbGV2ZWwgZGV0YWlscy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgY2FsbCBmb3Igc29tZSBraW5kIG9mIHNwZWNpYWxpemVkIG1ldGVyaW5nIGRldmljZT8gT3IgcGVyaGFwcyBhIG1vcmUgYWJzdHJhY3Qgc29mdHdhcmUgY29uc3RydWN0IGRlc2lnbmVkIHRvIHRyYWNrIHNvbWUgc3lzdGVtIHJlc291cmNlIHVzYWdlPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gbGVhbnMgdG93YXJkcyB0aGUgZm9ybWVyIOKAkyB0aGF0IOKAnGRw4oCdIHByZWZpeCBvZnRlbiBzdWdnZXN0cyBEaWdpdGFsIFByb2Nlc3Npbmcgb3IgRGV2aWNlIFByb2ZpbGUsIGJ1dCBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZSBzdXJlLgoKTXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbnMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgZmllbGRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzLCBpbnRlZ2VycywgZmxvYXRzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYXRvbWljIGNvdW50ZXJzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbXV0ZXhlcyBvciBzZW1hcGhvcmVzIGludm9sdmVkIHRvIHByb3RlY3QgYWNjZXNzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEltbWVkaWF0ZWx5IEkgc3RhcnQgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMsIHBvc3NpYmxlIHJlc291cmNlIGxpbWl0cy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIEFQSS4gV2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0IHJldHVybj8gQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBtZXRlciBvYmplY3QsIEkgcHJlc3VtZT8gT3IgcGVyaGFwcyBhbiBlcnJvciBjb2RlPyBXaGF0IGtpbmQgb2YgZmxhZ3Mgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIGNhbiBiZSBwYXNzZWQ/IFRoZSBtb3JlIEkga25vdyBhYm91dCB0aGUgcGFyYW1ldGVycywgdGhlIHF1aWNrZXIgSSBjYW4gZW52aXNpb24gaXRzIHVzZSBjYXNlcy4gQXJlIHRoZXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBpbXBsaWNpdGx5IHNldCBpZiBJIGRvIG5vdCBzZXQgdGhlc2Ugb3B0aW9uYWwgZmxhZ3M/CgpGaW5hbGx5LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBJIHdvbmRlciBhYm91dCB0aGUgbGlmZWN5Y2xlLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYGRwX21ldGVyX2Rlc3Ryb3lgIGZ1bmN0aW9uPyBIb3cgaXMgdGhlIG1ldGVyIHJlbGVhc2VkIGFuZCBjbGVhbmVkIHVwIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zIOKAkyB0cmFja2luZyBkb3duIHJlc291cmNlIGxlYWtzIGlzIGEgcGFpbi4gSeKAmW0gYWxzbyBtZW50YWxseSBza2V0Y2hpbmcgb3V0IHBvc3NpYmxlIGludGVncmF0aW9uIHRlc3RzIHRvIGVuc3VyZSB0aGF0IGFsbG9jYXRpb24sIHByb3BlciB1c2FnZSwgYW5kIGRlYWxsb2NhdGlvbiBhcmUgd29ya2luZyBjb3JyZWN0bHkgaW4gbXkgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzE6XHRzdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4gMzMyOlx0e1xuIDMzMzpcdFx0c3RydWN0IG5sYXR0ciAqbmxhO1xuIDMzNDpcdFx0aW50IHJlbTtcbiAzMzU6XHRcdHUxNiBuX2JhbmRzID0gMDtcbiAzMzY6XHRcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XG4gMzM3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfYmFuZCAqYmFuZDtcbiAzMzg6XHRcdGludCBlcnI7XG4gMzM5Olx0XG4gMzQwOlx0XHQvKiBWYWxpZGF0ZSBhdHRyaWJ1dGVzLCBjb3VudCB0aGUgYmFuZHMuICovXG4gMzQxOlx0XHRpZiAoIWFbT1ZTX01FVEVSX0FUVFJfQkFORFNdKVxuIDM0MjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAzNDM6XHRcbiAzNDQ6XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWQobmxhLCBhW09WU19NRVRFUl9BVFRSX0JBTkRTXSwgcmVtKVxuIDM0NTpcdFx0XHRpZiAoJiM0MzsmIzQzO25fYmFuZHMgXHUwMDNlIERQX01BWF9CQU5EUylcbiAzNDY6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiAzNDc6XHRcbiAzNDg6XHRcdC8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIG1ldGVyIGJlZm9yZSBsb2NraW5nIGFueXRoaW5nLiAqL1xuIDM0OTpcdFx0bWV0ZXIgPSBremFsbG9jX2ZsZXgoKm1ldGVyLCBiYW5kcywgbl9iYW5kcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiAzNTA6XHRcdGlmICghbWV0ZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVW5wYWNraW5nIE1ldGVyIElEIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHBvaW50IHdoZXJlIEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyBsaWtlIGBtZXRlci0mZ3Q7aWRgLiBJIG5lZWQgdG8gc3RvcCBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgYG1ldGVyLSZndDtpZGAgZmllbGQgZ2V0dGluZyBwb3B1bGF0ZWQ/IEkgY2FuIHNlZSBpdCBiZWluZyB1c2VkLCBidXQgSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgdHJhY2UgaXRzIGluaXRpYWxpemF0aW9uLiBJcyBpdCBiZWluZyBzZXQgZHVyaW5nIHRoZSBgbWV0ZXJgIHN0cnVjdCYjMzk7cyBhbGxvY2F0aW9uPyBJcyB0aGVyZSBzb21lIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQ/IE9yIGlzIGl0IGNvbWluZyBmcm9tIGEgZnVuY3Rpb24gY2FsbCBJJiMzOTt2ZSBtaXNzZWQgaW4gbXkgaW5pdGlhbCBzY2FuPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGhlcmU7IGEgbWlzc2VkIGluaXRpYWxpemF0aW9uIGNvdWxkIGxlYWQgdG8gc29tZSBuYXN0eSBidWdzIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiB1bmRlZmluZWQgYmVoYXZpb3Igb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgdGhpcyBJRCBpcyBsYXRlciB1c2VkIGluIGEgY3JpdGljYWwgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCB0aGUgY29udGV4dCB0byByZXNvbHZlIG15IGNvbmNlcm5zLiBBIHF1aWNrIHNlYXJjaCBzaG91bGQgcmVzb2x2ZSBteSBxdWVzdGlvbnMsIG9yIEkgbWF5IGJlIHJlcXVpcmVkIHRvIHdvcmsgYmFja3dhcmRzIHRvIGlkZW50aWZ5IHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMTpcdHN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA0MTI6XHR7XG4gNDEzOlx0XHRzdHJ1Y3QgbmxhdHRyICoqYSA9IGluZm8tXHUwMDNlYXR0cnM7XG4gNDE0Olx0XHRzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyLCAqb2xkX21ldGVyO1xuIDQxNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xuIDQxNjpcdFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XG4gNDE3Olx0XHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlciA9IGdlbmxfaW5mb191c2VyaGRyKGluZm8pO1xuIDQxODpcdFx0c3RydWN0IGRwX21ldGVyX3RhYmxlICptZXRlcl90Ymw7XG4gNDE5Olx0XHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xuIDQyMDpcdFx0aW50IGVycjtcbiA0MjE6XHRcdHUzMiBtZXRlcl9pZDtcbiA0MjI6XHRcdGJvb2wgZmFpbGVkO1xuIDQyMzpcdFxuIDQyNDpcdFx0aWYgKCFhW09WU19NRVRFUl9BVFRSX0lEXSlcbiA0MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI2Olx0XG4gNDI3Olx0XHRtZXRlciA9IGRwX21ldGVyX2NyZWF0ZShhKTtcbiA0Mjg6XHRcdGlmIChJU19FUlIobWV0ZXIpKVxuIDQyOTpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZXRlcik7XG4gNDMwOlx0XG4gNDMxOlx0XHRyZXBseSA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX01FVEVSX0NNRF9TRVQsXG4gNDMyOlx0XHRcdFx0XHRcdCAgXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XG4gNDMzOlx0XHRpZiAoSVNfRVJSKHJlcGx5KSkge1xuIDQzNDpcdFx0XHRlcnIgPSBQVFJfRVJSKHJlcGx5KTtcbiA0MzU6XHRcdFx0Z290byBleGl0X2ZyZWVfbWV0ZXI7XG4gNDM2Olx0XHR9XG4gNDM3Olx0XG4gNDM4Olx0XHRvdnNfbG9jaygpO1xuIDQzOTpcdFx0ZHAgPSBnZXRfZHAoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cdTAwM2VkcF9pZmluZGV4KTtcbiA0NDA6XHRcdGlmICghZHApIHtcbiA0NDE6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbiA0NDI6XHRcdFx0Z290byBleGl0X3VubG9jaztcbiA0NDM6XHRcdH1cbiA0NDQ6XHRcbiA0NDU6XHRcdG1ldGVyX3RibCA9IFx1MDAyNmRwLVx1MDAzZW1ldGVyX3RibDtcbiA0NDY6XHRcdG1ldGVyX2lkID0gbmxhX2dldF91MzIoYVtPVlNfTUVURVJfQVRUUl9JRF0pO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0b2xkX21ldGVyID0gbG9va3VwX21ldGVyKG1ldGVyX3RibCwgbWV0ZXJfaWQpO1xuIDQ0OTpcdFx0ZXJyID0gZGV0YWNoX21ldGVyKG1ldGVyX3RibCwgb2xkX21ldGVyKTtcbiA0NTA6XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjAyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE1ldGVyIElkZW50aWZpY2F0aW9uKioKCkFscmlnaHQsIHRoZSB1c2VyJiMzOTtzIHByb3ZpZGVkIGEgYG1ldGVyX2lkYC4gR29vZC4gVGhpcyBpbmRpY2F0ZXMgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBhIHNwZWNpZmljIG1ldGVyIG9iamVjdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIElEIGdldHMgYXNzaWduZWQgdG8gdGhlIGBtZXRlcmAgb2JqZWN0LiBTZWVtcyBsaWtlIHRoZSBuZXh0IGxpbmUgb2YgY29kZSwgYG1ldGVyLSZndDtpZCA9IG1ldGVyX2lkYCwgd2lsbCBoYW5kbGUgdGhpcyBkaXJlY3RseS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IHdvcmtzIGFzIGV4cGVjdGVkLiBXZSBjYW4gdGhlbiBwcm9jZWVkIHRvIGxldmVyYWdlIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0ZXJyID0gYXR0YWNoX21ldGVyKG1ldGVyX3RibCwgbWV0ZXIpO1xuIDQ1NDpcdFx0aWYgKGVycilcbiA0NTU6XHRcdFx0Z290byBleGl0X2ZyZWVfb2xkX21ldGVyO1xuIDQ1NjpcdFxuIDQ1NzpcdFx0b3ZzX3VubG9jaygpO1xuIDQ1ODpcdFxuIDQ1OTpcdFx0LyogQnVpbGQgcmVzcG9uc2Ugd2l0aCB0aGUgbWV0ZXJfaWQgYW5kIHN0YXRzIGZyb21cbiA0NjA6XHRcdCAqIHRoZSBvbGQgbWV0ZXIsIGlmIGFueS5cbiA0NjE6XHRcdCAqL1xuIDQ2MjpcdFx0ZmFpbGVkID0gbmxhX3B1dF91MzIocmVwbHksIE9WU19NRVRFUl9BVFRSX0lELCBtZXRlcl9pZCk7XG4gNDYzOlx0XHRXQVJOX09OKGZhaWxlZCk7XG4gNDY0Olx0XHRpZiAob2xkX21ldGVyKSB7XG4gNDY1Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZvbGRfbWV0ZXItXHUwMDNlbG9jayk7XG4gNDY2Olx0XHRcdGlmIChvbGRfbWV0ZXItXHUwMDNla2VlcF9zdGF0cykge1xuIDQ2NzpcdFx0XHRcdGVyciA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMocmVwbHksIG1ldGVyX2lkLFxuIDQ2ODpcdFx0XHRcdFx0XHRcdFx0b2xkX21ldGVyKTtcbiA0Njk6XHRcdFx0XHRXQVJOX09OKGVycik7XG4gNDcwOlx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEZWJ1Z2dpbmcgdGhlIE1ldGVyIElEIEFzc2lnbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSBoaXQgd2l0aCBhIHF1ZXN0aW9uOiBXaGVyZSAqZXhhY3RseSogaXMgYG1ldGVyLSZndDtpZGAgYmVpbmcgc2V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBiZWNhdXNlIHdpdGhvdXQga25vd2luZyB3aGVyZSB0aGUgSUQgaXMgcG9wdWxhdGVkLCBhbnkgc3Vic2VxdWVudCBpc3N1ZXMgd2l0aCB0aGF0IElEIGFyZSBnb2luZyB0byBiZSBhIHdpbGQgZ29vc2UgY2hhc2UuIElzIGl0IGR1cmluZyB0aGUgbWV0ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24/IElzIGl0IGJlaW5nIHNldCBieSBzb21lIGV4dGVybmFsIGZ1bmN0aW9uIGNhbGw/IElzIHRoZXJlIGEgZGVmYXVsdCB2YWx1ZSBiZWluZyBhc3NpZ25lZCBzb21ld2hlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBhc3NpZ25tZW50IHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGJ1Zy4gVGltZSB0byBkaWchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ldGVyLVx1MDAzZWlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9NTQ9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqbG9va3VwX21ldGVyKGNvbnN0IHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYxLVx0bWV0ZXIgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0pO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjI6XHRpZiAobWV0ZXIgXHUwMDI2XHUwMDI2IGxpa2VseShtZXRlci1cdTAwM2VpZCA9PSBtZXRlcl9pZCkpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02My1cdFx0cmV0dXJuIG1ldGVyO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTExNj1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjAtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMjE6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTIyLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSwgbWV0ZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjktXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzA6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTMxLVx0UkNVX0lOSVRfUE9JTlRFUih0aS1cdTAwM2VkcF9tZXRlcnNbaGFzaF0sIE5VTEwpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTUtXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNTY6XHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXHUwMDNlaWQpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU3LVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzUyLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MzUzOlx0bWV0ZXItXHUwMDNlaWQgPSBubGFfZ2V0X3UzMihhW09WU19NRVRFUl9BVFRSX0lEXSk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0zNTQtXHRtZXRlci1cdTAwM2V1c2VkID0gZGl2X3U2NChrdGltZV9nZXRfbnMoKSwgMTAwMCAqIDEwMDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNZXRlciBJRCBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcF9tZXRlcl9jcmVhdGVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGxpbmUgYG1ldGVyLSZndDtpZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBgbWV0ZXItJmd0O2lkYCBpcyBnZXR0aW5nIGl0cyB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSB1c2VyLCB3aGljaCBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLiBMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uCgpJZiB0aGUgdXNlciBzZXRzIGBtZXRlci0mZ3Q7aWRgLCB0aGVuIHRoZSBgbWV0ZXJfaGFzaGAgdmFsdWUgaXMganVzdCB0aGF0IElEIG1vZHVsbyBgbl9tZXRlcnNgLCB3aGljaCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1ldGVycywgcmlnaHQ/IE5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgYmxpbmRseSBjb3BpZXMgdGhlIG1ldGVycyBmcm9tIHRoZSBvbGQgdGFibGUgdG8gdGhlIG5ldyBvbmUsIGxldCYjMzk7cyBzYXkgaXQgY29waWVzIGB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYCB0byBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gLCB0aGUgaGFzaCBpbiB0aGUgbmV3IGluc3RhbmNlICppcyogYGlgLiBCdXQsIGBtZXRlcl9oYXNoKG5ld190aSwgaWQpYCB3b3VsZCBub3cgdXNlIGBpZCAlIG5ld19uX21ldGVyc2AuCgpIYW5nIG9uLCBsZXQmIzM5O3MgY29ubmVjdCB0aGUgZG90cy4gVGhlIG9sZCBoYXNoIChgaWApIGlzIHRoZSBzYW1lIGFzIGBpZCAlIG9sZF9uX21ldGVyc2AuIERvZXMgdGhhdCBtZWFuIHRoYXQgYGlkICUgbmV3X25fbWV0ZXJzYCAqYWxzbyogZXF1YWxzIGBpYD8gTm8sIG5vdCBuZWNlc3NhcmlseSEgSWYgYGlkYCBpcywgc2F5LCBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgaXMganVzdCBgMWAuIEJ1dCwgYGlkICUgbmV3X25fbWV0ZXJzYCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICYjNDM7IDFgLgoKU28sICppZiogYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgY29waWVzIHRvIHRoZSBzYW1lIGluZGV4LCBgbG9va3VwX21ldGVyYCB3b3VsZCBsb29rIGF0IGBpZCAlIG5ld19uX21ldGVyc2AsIHdoaWNoIHdvdWxkIGJlIGBvbGRfbl9tZXRlcnMgJiM0MzsgMWAgaW4gb3VyIGV4YW1wbGUsIGFuZCBpdCB3b3VsZCBmaW5kLi4uIE5VTEwhIEJlY2F1c2UgaXQmIzM5O3MgbG9va2luZyBmb3IgYDFgIHdoaWNoIGlzIG5vdyBhdCBgb2xkX25fbWV0ZXJzICYjNDM7IDFgISBUaGF0JiMzOTtzIGEgc2VyaW91cyBpbmNvbnNpc3RlbmN5LiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IHJldmlldyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCBtZSBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTQ6XHRzdGF0aWMgaW50XG4gIDk1Olx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4gIDk4Olx0XHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXHUwMDNlbl9tZXRlcnMpO1xuICA5OTpcdFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICpuZXdfdGk7XG4gMTAwOlx0XHRpbnQgaTtcbiAxMDE6XHRcbiAxMDI6XHRcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xuIDEwMzpcdFx0aWYgKCFuZXdfdGkpXG4gMTA0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNTpcdFxuIDEwNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9tZXRlcnM7IGkmIzQzOyYjNDM7KVxuIDEwNzpcdFx0XHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXHUwMDNlZHBfbWV0ZXJzW2ldKSlcbiAxMDg6XHRcdFx0XHRuZXdfdGktXHUwMDNlZHBfbWV0ZXJzW2ldID0gdGktXHUwMDNlZHBfbWV0ZXJzW2ldO1xuIDEwOTpcdFxuIDExMDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2V0aSwgbmV3X3RpKTtcbiAxMTE6XHRcdGNhbGxfcmN1KFx1MDAyNnRpLVx1MDAzZXJjdSwgZHBfbWV0ZXJfaW5zdGFuY2VfZnJlZV9yY3UpO1xuIDExMjpcdFxuIDExMzpcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWV0ZXIgSW5zdGFuY2UgUmVhbGxvY2F0aW9uIExvZ2ljKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGRvZXMgYSBzdHJhaWdodCBjb3B5IGZyb20gdGhlIG9sZCBtZXRlciBhcnJheSAoYHRpLSZndDtkcF9tZXRlcnNgKSB0byB0aGUgbmV3IG9uZSAoYG5ld190aS0mZ3Q7ZHBfbWV0ZXJzYCkuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIHdoZW4gYHRibC0mZ3Q7Y291bnRgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgdGktJmd0O25fbWV0ZXJzYC4gQW5kIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGUgYG1ldGVyX2hhc2hgIGNhbGN1bGF0aW9uOiBgaWQgJSB0aS0mZ3Q7bl9tZXRlcnNgLgoKV2FpdCBhIG1pbnV0ZSwgT1ZTIHVzZXJzcGFjZSBhbGxvY2F0ZXMgbWV0ZXIgSURzIGZyb20gYW4gSUQgcG9vbCwgcmlnaHQ/IFRoZSBjb2RlIGNvbW1lbnQgZXZlbiBzYXlzIHRoZSBzbG90cyBzaG91bGQgZ2VuZXJhbGx5IGJlIGVtcHR5IGJlY2F1c2Ugb2YgdGhlIElEIHBvb2wgbWFuYWdlbWVudC4gSWYgdGhlIElEcyBjb21lIGZyb20gYSBwb29sLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBzZXF1ZW50aWFsLiBJZiB0aGUgSUQgaXMgc2VxdWVudGlhbCwgYW5kIHRoZSBJRCBpcyBsZXNzIHRoYW4gYG5fbWV0ZXJzYCwgdGhlbiBgaWQgJSBuX21ldGVyc2AgaXMganVzdCBgaWRgLiBTbywgaWYgYGlkICZsdDsgbl9tZXRlcnNgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVycyA9PSBpZCAlIG5ld19uX21ldGVycyA9PSBpZGAsIGFuZCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IHNlZW1zIHRvIHdvcmsuCgpCdXQgd2hhdCBpZiBgaWRgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgbl9tZXRlcnNgPyBJbiB0aGF0IGNhc2UsIGBpZCAlIG9sZF9uX21ldGVyc2AgaXNuJiMzOTt0IGp1c3QgYGlkYC4gSG93ZXZlciwgaWYgYGlkICZndDs9IG5fbWV0ZXJzYCwgdGhlbiBgdGJsLSZndDtjb3VudGAgd291bGQgYmUgYXQgbGVhc3QgYG5fbWV0ZXJzYCwgcmlnaHQ/IE5vdCBuZWNlc3NhcmlseSEgVXNlcnNwYWNlICpjb3VsZCogc2VuZCBhIGxhcmdlIGBpZGAuIElmIHRoYXQgaGFwcGVucywgdGhlbiBgaWQgJSBvbGRfbl9tZXRlcnNgIG1pZ2h0IGNvbGxpZGUgd2l0aCBhbiBleGlzdGluZyBtZXRlci4gQnV0LCB3YWl0LCBpZiB0aGVyZSYjMzk7cyBhIGNvbGxpc2lvbiwgYGF0dGFjaF9tZXRlcmAgcmV0dXJucyBgLUVCVVNZYC4KCmBgYGMKCWlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS0mZ3Q7ZHBfbWV0ZXJzW2hhc2hdKSkpIHsKCQllcnIgPSAtRUJVU1k7CgkJZ290byBhdHRhY2hfZXJyOwoJfQpgYGAKClNvLCB5b3UgY2FuJiMzOTt0IGhhdmUgdHdvIG1ldGVycyB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUsIHNpbmNlIGBhdHRhY2hfbWV0ZXJgIHdvbiYjMzk7dCBhbGxvdyBpdC4gQW5kIHNpbmNlIGB0YmwtJmd0O2NvdW50ICZsdDsgdGktJmd0O25fbWV0ZXJzYCAob3RoZXJ3aXNlLCBhIHJlYWxsb2NhdGlvbiB3b3VsZCBvY2N1ciksIHRoZXJlJiMzOTtzICphbHdheXMqIGFuIGVtcHR5IHNsb3QgYXZhaWxhYmxlLgoKQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvcGllcyB0byB0aGUgKnNhbWUqIGluZGV4LCBhc3N1bWluZyBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gIGlzIHRoZSByaWdodCBzbG90IGZvciB0aGUgbWV0ZXIuIEhvd2V2ZXIsIHRoZSAqY29ycmVjdCogc2xvdCBpcyBkZXRlcm1pbmVkIGJ5IGBtZXRlci0mZ3Q7aWQgJSBuZXdfbl9tZXRlcnNgLiBJZiBgbWV0ZXItJmd0O2lkICZndDs9IG9sZF9uX21ldGVyc2AsIHRoZW4gYG1ldGVyLSZndDtpZCAlIG5ld19uX21ldGVyc2AgaXMgKk5PVCogZXF1YWwgdG8gYGlgLiBDb25zZXF1ZW50bHksIGBsb29rdXBfbWV0ZXJgIHdpbGwgZmFpbCB0byBmaW5kIGl0IQoKVGhpcy4uLiB0aGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGluIE9WUyEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgcGF0Y2hlcyBoYXZlIHRvdWNoZWQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIHJlY2VudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9OTQ9c3RhdGljIGludFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6OTU6ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy05Ni17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE0OC1cdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0aS1cdTAwM2VuX21ldGVycykge1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTQ5Olx0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1MC1cdFx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xNzQ9c3RhdGljIGludCBkZXRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjAxOlx0XHRpZiAoZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIGhhbGZfc2l6ZSkpXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDItXHRcdFx0Z290byBzaHJpbmtfZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgTWV0ZXIgVGFibGUgUmVzaXppbmcqKgoKT2theSwgc28gdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiBpc24mIzM5O3QgKmRpcmVjdGx5KiBtb2RpZmllZCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gVGhlIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlIGBhdHRhY2hfbWV0ZXJgIGZ1bmN0aW9uLiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4KCkJlZm9yZSB0aGUgcGF0Y2gsIGhlcmXigJlzIHdoYXQgaGFwcGVuZWQ6IGEgbmV3IG1ldGVyLCBgbWV0ZXJgLCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgY3VycmVudCBtZXRlciB0YWJsZSBpbnN0YW5jZSwgYHRpYC4gIENydWNpYWxseSwgdGhlIGhhc2ggaW5kZXggY2FsY3VsYXRpb24sIGBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAsIHdhcyBwZXJmb3JtZWQgdXNpbmcgdGhlIGN1cnJlbnQgYHRpYCwgKmJlZm9yZSogYW55IHJlc2l6aW5nIGhhcHBlbmVkLiBJZiB0aGUgdGFibGUgd2FzIGdvaW5nIHRvIGJlIHJlYWxsb2NhdGVkIGR1ZSB0byBjYXBhY2l0eSwgdGhpcyBpbnNlcnRpb24gaGFwcGVuZWQgaW50byB0aGUgKm9sZCogdGFibGUuIFRoZW4sIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZGlkKiBnZXQgY2FsbGVkIGlmIG5lY2Vzc2FyeSwgd2hpY2ggYWxsb2NhdGVzIGEgYG5ld190aWAsIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHRpYCB0byBgbmV3X3RpYCwgYW5kIGZyZWVzIHRoZSBvbGQgYHRpYC4gVGhlIGluc2VydCB3YXMgY2FsbGVkICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhlIGNvcGllZCBtZXRlcnMgaW4gYG5ld190aWAgd291bGQgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlcy4KCk15IG1lbnRhbCBhbGFybSBiZWxscyBhcmUgcmluZ2luZyBub3cgYmVjYXVzZSBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhICptYWpvciogaW5kZXhpbmcgcHJvYmxlbSBpZiB0aGUgdGFibGUgc2l6ZSBpcyBjaGFuZ2VkLiBgbWV0ZXJfaGFzaCh0aSwgbWV0ZXItJmd0O2lkKWAgaXMgYG1ldGVyLSZndDtpZCAlIHRpLSZndDtuX21ldGVyc2AuIElmIGEgcmVhbGxvY2F0aW9uIGhhcHBlbnMsIHRoZSBpbmRleCBjYWxjdWxhdGlvbiBjaGFuZ2VzIGJlY2F1c2UgYG5ld190aS0mZ3Q7bl9tZXRlcnNgIGlzIGRpZmZlcmVudC4gQSBtZXRlciYjMzk7cyBpbnRlbmRlZCBsb2NhdGlvbiB3aXRoaW4gdGhlICpuZXcqIHRhYmxlIGNvdWxkIGJlIGNvbXBsZXRlbHkgd3JvbmchIEFueSBzZWFyY2ggZm9yIHRoZSBtZXRlciBhZnRlciBhIHJlYWxsb2Mgd291bGQgbGlrZWx5IGZhaWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG5ldyBtZXRlciBtaWdodCBnZXQgbG9zdCBpbiB0aGUgc2h1ZmZsZSwgYnV0IHRoaXMgaXMgYSBmYXIgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBleGlzdGluZyBtZXRlcnMgY291bGQgYmUgaW5jb3JyZWN0bHkgaW5kZXhlZCAqYWZ0ZXIqIHRoZSByZWFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gc2VlIGhvdyBpdCBmaXhlcyB0aGlzLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zISBUaGUgcGF0Y2ggZmlyc3QgY2hlY2tzIGlmIGEgcmVhbGxvY2F0aW9uIGlzIG5lZWRlZC4gSWYgc28sIGl0IGNhbGxzIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYC4gKlRoZW4qLCBhZnRlciB0aGUgdGFibGUgaXMgcmVzaXplZCwgdGhlIGNvZGUgZ2V0cyB0aGUgbmV3IGB0aWAgdGFibGUgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC0mZ3Q7dGkpYCwgYW5kIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uIG5vdyBoYXBwZW5zIHVzaW5nIHRoZSAqbmV3KiBgdGlgOiBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLSZndDtpZClgLiBUaGUgbWV0ZXIgaXMgdGhlbiBpbnNlcnRlZCBpbnRvIHRoZSBgbmV3X3RpYCBhdCB0aGUgY29ycmVjdCBsb2NhdGlvbi4KClllcyEgVGhhdCYjMzk7cyBpdC4gSXTigJlzIGEgdmVyeSBzaW1wbGUgYW5kIGVsZWdhbnQgZml4IGJ5IHJlb3JkZXJpbmcgdGhlIGxvZ2ljLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCwgYnV0IG5vdyBpdCYjMzk7cyBjbGVhcjogIHRoZSBpbnNlcnRpb24gaXMgcGVyZm9ybWVkIGFnYWluc3QgdGhlICpyZXNpemVkKiB0YWJsZSBub3csIGFuZCB0aGUgaGFzaCBjYWxjdWxhdGlvbiB1c2VzIHRoZSBuZXcsIGNvcnJlY3QgdGFibGUgc2l6ZS4KCk15IGNvbmNlcm4gbm93IGdvZXMgdG8gYWxsIG9mIHRoZSBleGlzdGluZyBtZXRlcnMgdGhhdCB3ZXJlICphbHJlYWR5KiBpbiB0aGUgdGFibGUgYmVmb3JlIHRoZSByZWFsbG9jLiBXZXJlIHRob3NlIG1ldGVycyByZWluZGV4ZWQgcHJvcGVybHk/IExldCBtZSBjaGVjayBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgYWdhaW4gdG8gZW5zdXJlIGFueSBtZXRlcnMgY29waWVkIGZyb20gYHRpYCB0byBgbmV3X3RpYCBhcmUgcHJvcGVybHkgcmVpbmRleGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9tZXRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NDpcdHN0YXRpYyBpbnRcbiAgOTU6XHRkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCB1MzIgc2l6ZSlcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbiAgOTg6XHRcdGludCBuX21ldGVycyA9IG1pbihzaXplLCB0aS1cdTAwM2VuX21ldGVycyk7XG4gIDk5Olx0XHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcbiAxMDA6XHRcdGludCBpO1xuIDEwMTpcdFxuIDEwMjpcdFx0bmV3X3RpID0gZHBfbWV0ZXJfaW5zdGFuY2VfYWxsb2Moc2l6ZSk7XG4gMTAzOlx0XHRpZiAoIW5ld190aSlcbiAxMDQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTA1Olx0XG4gMTA2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX21ldGVyczsgaSYjNDM7JiM0MzspXG4gMTA3Olx0XHRcdGlmIChyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cdTAwM2VkcF9tZXRlcnNbaV0pKVxuIDEwODpcdFx0XHRcdG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV07XG4gMTA5Olx0XG4gMTEwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZXRpLCBuZXdfdGkpO1xuIDExMTpcdFx0Y2FsbF9yY3UoXHUwMDI2dGktXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XG4gMTEyOlx0XG4gMTEzOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlZXAgRGl2ZSBpbnRvIGEgU3VidGxlIE1ldGVyIEFsbG9jYXRpb24gQnVnKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiwgYW5kIG15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCB0aGlzIGp1c3QgY29waWVzIHN0dWZmIGFyb3VuZC4mIzM0OyBUaGUgY29kZSBzaW1wbHkgY29waWVzIGB0aS0mZ3Q7ZHBfbWV0ZXJzW2ldYCB0byBgbmV3X3RpLSZndDtkcF9tZXRlcnNbaV1gLiBFYXN5LCByaWdodD8gSWYgdGhlcmUgYXJlIG90aGVyIG1ldGVycyBpbiB0aGUgYHRpYCBzdHJ1Y3R1cmUsIHRoZXkmIzM5O3JlIGNvcGllZCB0byB0aGUgc2FtZSBpbmRpY2VzLiBCdXQgdGhlbiBpdCBoaXQgbWU6IHdoYXQgYWJvdXQgdGhlIG1ldGVyICpJRCo/IElmIGEgbWV0ZXImIzM5O3MgYGlkYCBpc24mIzM5O3Qgc3VjaCB0aGF0IGBpZCAlIG5ld19uX21ldGVycyA9PSBpYCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhleSYjMzk7bGwgZW5kIHVwIGF0IHRoZSB3cm9uZyBpbmRleCBpbiB0aGUgcmVhbGxvY2F0ZWQgdGFibGUuCgpJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgaG93IE9WUyB1c2Vyc3BhY2UgYWxsb2NhdGVzIElEcy4gSWYgaXQmIzM5O3Mgc2VxdWVudGlhbCwgdGhlIGZpcnN0IG1ldGVyIGdldHMgYGlkID0gMGAsIHNlY29uZCBnZXRzIGBpZCA9IDFgLCBhbmQgc28gb24uIExldCYjMzk7cyBzYXkgd2UmIzM5O3ZlIHJlYWNoZWQgYSB0YWJsZSBzaXplIHdoZXJlIGB0YmwtJmd0O2NvdW50YCBpcyBlcXVhbCB0byBgdGktJmd0O25fbWV0ZXJzYCwgc2F5IGBuX21ldGVycyA9IDEwMjRgLiBUaGUgbWV0ZXIgSURzIHdpbGwgYmUgZnJvbSBgMGAgdG8gYDEwMjNgLiBTbyBmb3IgYWxsIHRoZXNlIG1ldGVycywgYGlkICZsdDsgMTAyNGAuIFRoaXMgbWVhbnMgdGhhdCBgaWQgJSAxMDI0ID09IGlkYC4gTm93LCBpZiB3ZSByZWFsbG9jYXRlIHRvIGAyMDQ4YCwgYGlkICUgMjA0OGAgd2lsbCAqc3RpbGwqIGVxdWFsIGBpZGAuIEl0IG1lYW5zIHRoYXQgZm9yICpleGlzdGluZyogbWV0ZXJzLCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IGlzIGFjdHVhbGx5IGNvcnJlY3QhCgpCdXQuLi4gd2hhdCBhYm91dCAqbmV3KiBtZXRlcnM/IExldCYjMzk7cyBzYXkgYSBuZXcgbWV0ZXIgY29tZXMgYWxvbmcgd2l0aCBJRCBgMTAyNGAuIElmIHdlIGluc2VydCBpdCAqYmVmb3JlKiB0aGUgcmVhbGxvY2F0aW9uLCB3ZSBjYWxjdWxhdGUgYGhhc2ggPSAxMDI0ICUgMTAyNCA9IDBgLiBTbywgaXQgZ29lcyBpbnRvIGluZGV4IGAwYC4gVGhlbiB0aGUgcmVhbGxvY2F0aW9uIGhhcHBlbnMsIGFuZCBpbmRleCBgMGAgaXMgY29waWVkIHRvIGluZGV4IGAwYCBpbiB0aGUgbmV3IHRhYmxlLiBCdXQgaW4gdGhlIG5ldyB0YWJsZSwgaXRzICpjb3JyZWN0KiBoYXNoIHNob3VsZCBiZSBgMTAyNCAlIDIwNDggPSAxMDI0YC4gSXQmIzM5O3Mgbm93IGF0IHRoZSB3cm9uZyBpbmRleCwgb3ZlcndyaXRpbmcgdGhlIG1ldGVyIHdpdGggSUQgYDBgISBCb29tLCBhIHN1YnRsZSBhbmQgYmVhdXRpZnVsIGJ1ZyEKClRoZSBmaXggaGVyZSBpcyB0byBtb3ZlIHRoZSBpbnNlcnRpb24gKmFmdGVyKiB0aGUgcmVhbGxvY2F0aW9uLiBUaGF0IHdheSwgdGhlIG5ldyBtZXRlciB3aXRoIElEIGAxMDI0YCBnZXRzIGhhc2hlZCB3aXRoIGBuZXdfbl9tZXRlcnMgPSAyMDQ4YCwgc28gYGhhc2ggPSAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgaW5kZXggKGAxMDI0YCksIGFuZCBpdCB3b24mIzM5O3Qgb3ZlcndyaXRlIGluZGV4IGAwYC4KClRoZW4gSSBzdGFydGVkIHdvbmRlcmluZy4uLiB3aGF0IGlmIHVzZXJzcGFjZSAqZG9lc24mIzM5O3QqIGFsbG9jYXRlIElEcyBzZXF1ZW50aWFsbHk/IExldCYjMzk7cyBzYXkgdXNlcnNwYWNlIHNlbmRzIGBpZCA9IDEwMjRgIHdoZW4gYG5fbWV0ZXJzID0gMTAyNGAuIEl0JiMzOTtsbCBiZSBpbnNlcnRlZCBhdCBpbmRleCBgMGAuIElmIHRoZXJlJiMzOTtzIGFscmVhZHkgYSBtZXRlciBhdCBpbmRleCBgMGAsIGl0IHJldHVybnMgYC1FQlVTWWAuIElmIGl0JiMzOTtzIGVtcHR5LCBpdCBnb2VzIGluLiBCdXQgaWYgdGhpcyBuZXcgbWV0ZXIgd2l0aCBgaWQ9MTAyNGAgaXMgdGhlICpmaXJzdCogbWV0ZXIgKHNvIGB0YmwtJmd0O2NvdW50ID0gMGApLCB0aGVyZSYjMzk7cyBubyByZWFsbG9jYXRpb24uIFNvIGl0IHN0YXlzIGluIGluZGV4IGAwYC4gV2hlbiByZWFsbG9jYXRpb24gKmRvZXMqIGhhcHBlbiwgaXQgc3RpbGwgZ2V0cyBjb3BpZWQgdG8gaW5kZXggYDBgLCBldmVuIHRob3VnaCBpdHMgaGFzaCBpbiB0aGUgbmV3IHRhYmxlICpzaG91bGQqIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBTbywgc3RpbGwgd3JvbmchIERvZXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGhhbmRsZSB0aGlzPyBOb3BlLiBJdCBqdXN0IGNvcGllcyBgaWAgdG8gYGlgLiBTbywgZXZlbiB3aXRoIG5vbi1zZXF1ZW50aWFsIElEcywgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGlzIHN0aWxsIGJyb2tlbiBmb3IgZXhpc3RpbmcgbWV0ZXJzLgoKQnV0IHdhaXQuLi4gdGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgc2F5cyBPVlMgdXNlcyBgaWQtcG9vbGAgZm9yIGZldGNoaW5nIGF2YWlsYWJsZSBJRHMuIEl0IGFsbG9jYXRlcyB0aGVtIHNlcXVlbnRpYWxseSwgc3RhcnRpbmcgYXQgMC4gU28sIGBpZCAmbHQ7IG5fbWV0ZXJzYCBzaG91bGQgKmFsd2F5cyogYmUgdHJ1ZSBmb3IgZXhpc3RpbmcgbWV0ZXJzLiBJZiBgaWQtcG9vbGAgYWxsb2NhdGVzIHNlcXVlbnRpYWxseSwgdGhlbiB0aGUgSUQgaXMgYWx3YXlzIGAmbHQ7IG1heF9tZXRlcnNfYWxsb3dlZGAuIFRoZSB2YWx1ZSBvZiBgbl9tZXRlcnNgIGdyb3dzIGFzIGBjb3VudGAgKG51bWJlciBvZiBtZXRlcnMpIGdyb3dzLiBTaW5jZSBJRHMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHRoZSBtYXhpbXVtIElEIGlzIHJvdWdobHkgZXF1YWwgdG8gYGNvdW50YC4gQW5kIGBuX21ldGVycyAmZ3Q7IGNvdW50YC4gU28gdGhlIG1heGltdW0gSUQgaXMgYWx3YXlzIGAmbHQ7IG5fbWV0ZXJzYC4gVGhlcmVmb3JlLCBgaWQgJSBuX21ldGVycyA9PSBpZGAgaXMgYWx3YXlzIHRydWUhCgpUaGlzIG1lYW5zIHRoZSBgbWV0ZXJfaGFzaGAgaXMgZWZmZWN0aXZlbHkganVzdCB0aGUgYGlkYC4gVGhlIG1vZHVsbyBvcGVyYXRpb24gaXMgdGhlcmUgYXMgYSBzYWZldHkgbWVhc3VyZSwgaW4gY2FzZSB1c2Vyc3BhY2UgZXZlciBzZW5kcyBhIGxhcmdlIElELiBJbiB0aGF0IGNhc2UsIGl0IG1pZ2h0IGNvbGxpZGUgYW5kIHJldHVybiBgLUVCVVNZYCwgb3IgaXQgY291bGQgYmUgaW5zZXJ0ZWQgYW5kIHRoZW4gbG9zdCB1cG9uIHJlYWxsb2NhdGlvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgaW1tZWRpYXRlIGlzc3VlIHdoZXJlIGEgc2VxdWVudGlhbGx5IGFsbG9jYXRlZCBJRCB0aGF0IHRyaWdnZXJzIHJlYWxsb2NhdGlvbiB3b3VsZCBiZSBpbnNlcnRlZCBhdCBgaWQgJQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O292c19tZXRlcl9jbWRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMTU6b3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1OCBjbWQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMTYtXHRcdFx0ICBzdHJ1Y3Qgb3ZzX2hlYWRlciAqKm92c19yZXBseV9oZWFkZXIpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM2LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjM3OnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHksIHUzMiBtZXRlcl9pZCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTIzOC1cdFx0XHRcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yNzctXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyNzg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yNzkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI4Ni1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjI4NzpcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0ZFQVRVUkVTLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjg4LVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDMwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDMxOlx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfU0VULFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDMyLVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ2Ni1cdFx0aWYgKG9sZF9tZXRlci1cdTAwM2VrZWVwX3N0YXRzKSB7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0Njc6XHRcdFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjgtXHRcdFx0XHRcdFx0XHRvbGRfbWV0ZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4Ny1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ4ODpzdGF0aWMgaW50IG92c19tZXRlcl9jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00ODkte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTUwMy1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjUwNDpcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0dFVCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTUwNS1cdFx0XHRcdFx0ICBcdTAwMjZvdnNfcmVwbHlfaGVhZGVyKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MjQtXHRzcGluX2xvY2tfYmgoXHUwMDI2bWV0ZXItXHUwMDNlbG9jayk7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo1MjU6XHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCwgbWV0ZXIpO1xubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTI2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bWV0ZXItXHUwMDNlbG9jayk7XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTQwLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTQxOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU0Mi17XG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU0LVxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTU1Olx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfREVMLFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU2LVx0XHRcdFx0XHQgIFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU3MS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm9sZF9tZXRlci1cdTAwM2Vsb2NrKTtcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU3MjpcdFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsIG9sZF9tZXRlcik7XG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NzMtXHRcdFdBUk5fT04oZXJyKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz02ODc9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBkcF9tZXRlcl9nZW5sX29wc1tdID0ge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5MC1cdFx0LmZsYWdzID0gMCxcdFx0ICAvKiBPSyBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiAqL1xubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjkxOlx0XHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZmVhdHVyZXNcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Mi1cdH0sXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk3LVx0XHRcdFx0XHQgICAgICAgKi9cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjY5ODpcdFx0LmRvaXQgPSBvdnNfbWV0ZXJfY21kX3NldCxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5OS1cdH0sXG4tLVxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzAyLVx0XHQuZmxhZ3MgPSAwLFx0XHQgIC8qIE9LIGZvciB1bnByaXZpbGVnZWQgdXNlcnMuICovXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MDM6XHRcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9nZXQsXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy03MDQtXHR9LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcwOS1cdFx0XHRcdFx0ICAgICAgICovXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MTA6XHRcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9kZWxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxMS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjQyCgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNZXRlciBBUEkqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbWV0ZXIgQVBJIGluIE9wZW4gdlN3aXRjaCBpcyB0aG9yb3VnaGx5IGZ1enplZC4gTXkgaW5pdGlhbCBwbGFuIGlzIHRvIGFkZCBgb3ZzX21ldGVyX2NtZF9zZXRgLCBgb3ZzX21ldGVyX2NtZF9nZXRgLCBgb3ZzX21ldGVyX2NtZF9kZWxgLCBhbmQgYG92c19tZXRlcl9jbWRfZmVhdHVyZXNgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgY3J1Y2lhbCBjb21tYW5kcy4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyB0aGUgcmlnaHQgb25lIHRvIHRhcmdldC4gWWVwLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBPcGVuIHZTd2l0Y2ggaXRzZWxmLiBJJiMzOTtsbCBoZWRnZSBteSBiZXRzIGFuZCBhZGQgYE5FVGAgYW5kIGBJTkVUYCB0b28sIGp1c3QgYXMgYSBzYWZldHkgbmV0LCB0aG91Z2ggYE9QRU5WU1dJVENIYCBzaG91bGQgYmUgc3VmZmljaWVudC4gT2gsIGhvbGQgb24uLi4gdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIGF2b2lkIHRob3NlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeGVzISBSaWdodCwganVzdCBgT1BFTlZTV0lUQ0hgIGl0IGlzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVjYXAgdGhlIHJhdGlvbmFsZSBoZXJlLiBUaGlzIHBhdGNoIGlzIGZpeGluZyBhIG5hc3R5IGJ1ZyBpbiBgYXR0YWNoX21ldGVyYC4gQmFzaWNhbGx5LCBuZXcgbWV0ZXJzIHdlcmUgcG90ZW50aWFsbHkgZ2V0dGluZyBhZGRlZCB0byB0aGUgb2xkIG1ldGVyIGFycmF5ICpiZWZvcmUqIGl0IHdhcyByZWFsbG9jYXRlZC4gVGhlbiwgd2hlbiB0aGUgYXJyYXkgZ290IHJlYWxsb2NhdGVkLCB0aGUgbWV0ZXIgd2FzIGNvcGllZCB0byB0aGUgd3JvbmcgaW5kZXgsIHRoYW5rcyB0byB0aGUgaGFzaCBtb2R1bG8gY2hhbmdpbmcsIGxlYWRpbmcgdG8gbG9zdCBvciBvdmVyd3JpdHRlbiBtZXRlcnMuIFRoZSBmaXggZWxlZ2FudGx5IHJlb3JkZXJzIHRoaW5nczogcmVhbGxvY2F0ZSB0aGUgYXJyYXkgKmZpcnN0KiwgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW4gdGhlICpuZXcqIGFycmF5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4IGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSDigJMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKQWxyaWdodCwgd2l0aCB0aGF0IGluIG1pbmQsIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19tZXRlcl9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O292c19tZXRlcl9jbWRfc2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZ2V0JiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZGVsJiMzNDssCiAgICAmIzM0O292c19tZXRlcl9jbWRfZmVhdHVyZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTguMzEwODg1MDI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MDQwNTc0NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX21ldGVyX2NtZF9zZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2RlbFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBhdHRhY2hfbWV0ZXJgIHdoZXJlIGEgbmV3IG1ldGVyIGNvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIG9sZCBtZXRlciBpbnN0YW5jZSBhcnJheSBiZWZvcmUgcmVhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb3BpZWQgdG8gdGhlIG5ldyBhcnJheSBhdCB0aGUgd3JvbmcgaW5kZXggKGJlY2F1c2UgdGhlIGhhc2ggbW9kdWxvIGNoYW5nZXMgYWZ0ZXIgcmVhbGxvY2F0aW9uKS4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgbWV0ZXIgdG8gYmUgbG9zdCBvciBvdmVyd3JpdGUgYW5vdGhlciBtZXRlci4gVGhlIGZpeCByZW9yZGVycyB0aGUgb3BlcmF0aW9ucyB0byByZWFsbG9jYXRlIHRoZSBhcnJheSBmaXJzdCwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBpbnNlcnQgdGhlIG1ldGVyIGludG8gdGhlIG5ldyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTguMzEwOTA0Nzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY4OTIxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NjNiNmI5N2RiZmVmNzBmMzQ1NzBmODA1NjQ5Yzk5MTNjYzI1ZjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjE2OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9tZXRlci5jIGIvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcXG5pbmRleCBhMDJjNDcyNzczMzdiZi4uNGFhZWVhZTNhZjViZGUgMTAwNjQ0XFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xcbkBAIC0xMzMsMTggKzEzMywxMCBAQCBzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4gXFxuIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbiB7XFxuLVxcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGkgPSByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXFx1MDAzZXRpKTtcXG4tXFx0dTMyIGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbitcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpO1xcbitcXHR1MzIgaGFzaDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdC8qIEluIGdlbmVyYWxseSwgc2xvdHMgc2VsZWN0ZWQgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlXFxuLVxcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYSBhdmFpbGFibGUgaWQuXFxuLVxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkocmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXG4tXFx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XFxuLVxcbiBcXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xcbiBcXHR0YmwtXFx1MDAzZWNvdW50Kys7XFxuIFxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRibC1cXHUwMDNlbWF4X21ldGVyc19hbGxvd2VkKSB7XFxuQEAgLTE1MiwxNiArMTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbiBcXHRcXHRnb3RvIGF0dGFjaF9lcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVxcdTAwM2VuX21ldGVycyAqIDIpKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuK1xcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycykge1xcbitcXHRcXHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXFx1MDAzZW5fbWV0ZXJzICogMik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gYXR0YWNoX2VycjtcXG4rXFxuK1xcdFxcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuK1xcdH1cXG4rXFxuK1xcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbitcXG4rXFx0LyogSW4gZ2VuZXJhbCwgc2VsZWN0ZWQgc2xvdHMgc2hvdWxkIGJlIGVtcHR5LCBiZWNhdXNlXFxuK1xcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYXZhaWxhYmxlIGlkcy5cXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShyY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdKSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIGF0dGFjaF9lcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGRwX21ldGVyX2luc3RhbmNlX2luc2VydCh0aSwgbWV0ZXIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGF0dGFjaF9lcnI6XFxuLVxcdGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZSh0aSwgbWV0ZXIpO1xcbiBcXHR0YmwtXFx1MDAzZWNvdW50LS07XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTkuMDc4ODA3Njc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ1MjcyNjQyMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3ZzX21ldGVyX2NtZF9zZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZ2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2RlbFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9mZWF0dXJlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBhdHRhY2hfbWV0ZXJgIHdoZXJlIGEgbmV3IG1ldGVyIGNvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIG9sZCBtZXRlciBpbnN0YW5jZSBhcnJheSBiZWZvcmUgcmVhbGxvY2F0aW9uLCBhbmQgdGhlbiBjb3BpZWQgdG8gdGhlIG5ldyBhcnJheSBhdCB0aGUgd3JvbmcgaW5kZXggKGJlY2F1c2UgdGhlIGhhc2ggbW9kdWxvIGNoYW5nZXMgYWZ0ZXIgcmVhbGxvY2F0aW9uKS4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgbWV0ZXIgdG8gYmUgbG9zdCBvciBvdmVyd3JpdGUgYW5vdGhlciBtZXRlci4gVGhlIGZpeCByZW9yZGVycyB0aGUgb3BlcmF0aW9ucyB0byByZWFsbG9jYXRlIHRoZSBhcnJheSBmaXJzdCwgYW5kIHRoZW4gY2FsY3VsYXRlIHRoZSBoYXNoIGFuZCBpbnNlcnQgdGhlIG1ldGVyIGludG8gdGhlIG5ldyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJKSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzYzYjZiOTdkYmZlZjcwZjM0NTcwZjgwNTY0OWM5OTEzY2MyNWY1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjE2OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmMgYi9uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1xuaW5kZXggYTAyYzQ3Mjc3MzM3YmYuLjRhYWVlYWUzYWY1YmRlIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL21ldGVyLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9tZXRlci5jXG5AQCAtMTMzLDE4ICsxMzMsMTAgQEAgc3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXG4gXG4gc3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXG4ge1xuLVx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cdTAwM2V0aSk7XG4tXHR1MzIgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKTtcbitcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGk7XG4rXHR1MzIgaGFzaDtcbiBcdGludCBlcnI7XG4gXG4tXHQvKiBJbiBnZW5lcmFsbHksIHNsb3RzIHNlbGVjdGVkIHNob3VsZCBiZSBlbXB0eSwgYmVjYXVzZVxuLVx0ICogT3ZTIHVzZXMgaWQtcG9vbCB0byBmZXRjaCBhIGF2YWlsYWJsZSBpZC5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4tXG4gXHQvKiBUaGF0IGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLiAqL1xuIFx0dGJsLVx1MDAzZWNvdW50Kys7XG4gXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGJsLVx1MDAzZW1heF9tZXRlcnNfYWxsb3dlZCkge1xuQEAgLTE1MiwxNiArMTQ0LDI5IEBAIHN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxuIFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4gXHR9XG4gXG4tXHRpZiAodGJsLVx1MDAzZWNvdW50IFx1MDAzZT0gdGktXHUwMDNlbl9tZXRlcnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVx1MDAzZW5fbWV0ZXJzICogMikpIHtcbi1cdFx0ZXJyID0gLUVOT01FTTtcbitcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbitcdGlmICh0YmwtXHUwMDNlY291bnQgXHUwMDNlPSB0aS1cdTAwM2VuX21ldGVycykge1xuK1x0XHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXHUwMDNlbl9tZXRlcnMgKiAyKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGF0dGFjaF9lcnI7XG4rXG4rXHRcdHRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVx1MDAzZXRpKTtcbitcdH1cbitcbitcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZCk7XG4rXG4rXHQvKiBJbiBnZW5lcmFsLCBzZWxlY3RlZCBzbG90cyBzaG91bGQgYmUgZW1wdHksIGJlY2F1c2VcbitcdCAqIE92UyB1c2VzIGlkLXBvb2wgdG8gZmV0Y2ggYXZhaWxhYmxlIGlkcy5cbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBhdHRhY2hfZXJyO1xuIFx0fVxuIFxuK1x0ZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHRpLCBtZXRlcik7XG4gXHRyZXR1cm4gMDtcbiBcbiBhdHRhY2hfZXJyOlxuLVx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHRpLCBtZXRlcik7XG4gXHR0YmwtXHUwMDNlY291bnQtLTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MTkuMDc4ODEwNjY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MTEwOTAzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXRlciBBdHRhY2htZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbi4gVGhlIGdpc3Qgb2YgaXQgaXMgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBtZXRlciBhdHRhY2htZW50IHByb2Nlc3MuIFRoZSBnb2FsLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHdoZW4gYWRkaW5nIG5ldyBtZXRlcnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiByZWFsbG9jYXRpbmcgdGhlIG1ldGVyIHRhYmxlLlxuXG5MZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2Vzcy4gSW5pdGlhbGx5LCBJIHNlZSB0aGUgY29kZSBpcyBtb2RpZnlpbmcgYGF0dGFjaF9tZXRlcmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cuIExvb2tpbmcgYXQgdGhlIGRpZmYsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSB3YXM6IGluc2VydCB0aGUgbWV0ZXIsIGluY3JlbWVudCB0aGUgY291bnQsIGFuZCB0aGVuIGNoZWNrIGZvciBhbmQgaGFuZGxlIHJlYWxsb2NhdGlvbi4gVGhlIHJldmlzZWQgY29kZSBzaGlmdHMgdGhlIHJlYWxsb2NhdGlvbiBjaGVjayBlYXJsaWVyLCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBUaGUgc3BlY2lmaWMgY2hhbmdlIGlzIG1vdmluZyB0aGUgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNhbGwgYWhlYWQgb2YgdGhlIG1ldGVyIGluc2VydGlvbi5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIFwiV2h5IHRoZSByZW9yZGVyaW5nP1wiIEluaXRpYWxseSwgbXkgdW5kZXJzdGFuZGluZyB3YXMgYSBwb3RlbnRpYWwgcmFjZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnRgIHdhcyBjYWxsZWQgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSB0YWJsZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZC4gSWYgcmVhbGxvY2F0aW9uIHdhcyBuZWVkZWQgKmFuZCBmYWlsZWQqLCB0aGUgbmV3IG1ldGVyIHdvdWxkIGhhdmUgYmVlbiBpbiB0aGUgd3JvbmcgaW5zdGFuY2UuIEJ1dCB0aGVuIEkgbG9va2VkIGRlZXBlci5cblxuVGhlIGJ1ZyB3YXMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCB3YXMgY2FsbGVkIGJlZm9yZSBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuIElmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB3YXMgY2FsbGVkLCBpdCB3b3VsZCBjb3B5IHRoZSBtZXRlcnMgdG8gYSBuZXcgaW5zdGFuY2UsIGJ1dCBpZiBpdCBmYWlsZWQsIGl0IHdvdWxkIGdvIHRvIGBhdHRhY2hfZXJyYCwgd2hpY2ggY2FsbGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUodGksIG1ldGVyKWAuIEJ1dCB0aGUgYWN0dWFsIHByb2JsZW0gaXMgYSBsaXR0bGUgbW9yZSBzdWJ0bGUuIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqcmVwbGFjZXMqIHRoZSBpbnN0YW5jZS4gSWYgcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCwgdGhlIG5ldyBtZXRlciB3YXMgbW92ZWQgYmVmb3JlIHRoZSByZWFsbG9jYXRpb24gb2YgdGhlIGluc3RhbmNlLCBzbyB0aGUgZWxlbWVudCB3b3VsZCBnZXQgY29waWVkIHRvIHRoZSBuZXcgaW5zdGFuY2UuIFRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIGVycm9yIHBhdGgsIG5vdyB0aGF0IEkgbG9vayBhdCBpdCBhZ2Fpbi5cblxuTm93IEkgdGhpbmsgSSBnZXQgaXQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIG1pZ2h0IGZhaWwuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIG9yIHNvbWUgb3RoZXIgcmVhc29uLiBJZiB0aGF0IGhhcHBlbnMgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBtZXRlciB3b3VsZCBiZSAqaW5zZXJ0ZWQqIGludG8gdGhlICpvbGQqIGluc3RhbmNlLCBhbmQgb25seSB0aGVuIHdvdWxkIHRoZSByZWFsbG9jYXRpb24gY2hlY2sgaGFwcGVuLiBJZiB0aGUgcmVhbGxvY2F0aW9uIHRoZW4gZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBhdHRhY2hfZXJyYCwgYW5kIHRoZSBtZXRlciB3b3VsZCBiZSAqcmVtb3ZlZCogZnJvbSB0aGUgKm9sZCogaW5zdGFuY2UuXG5cblRoZSByZXZpc2VkIGNvZGUgYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgZm9yIHJlYWxsb2NhdGlvbiAqZmlyc3QqLiBJZiByZWFsbG9jYXRpb24gaXMgbmVlZGVkLCBpdCdzIGF0dGVtcHRlZCAqYmVmb3JlKiB0aGUgaW5zZXJ0aW9uLiBJZiBpdCBmYWlscywgdGhlIGVycm9yIHBhdGggaXMgdGFrZW4gKmJlZm9yZSogdGhlIGluc2VydGlvbiwgc28gbm8gbWV0ZXIgaXMgbGVmdCBkYW5nbGluZyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBsaWtlbHkgY29tbWl0IG1lc3NhZ2Ugd291bGQgcHJvYmFibHkgaGlnaGxpZ2h0IHRoYXQgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNvdWxkIGZhaWwsIG9yIHBlcmhhcHMgdGhhdCBgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0YCBtb2RpZmllcyB0aGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZW4gcmVhbGxvY2F0ZWQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYG5ldC9vcGVudnN3aXRjaC9tZXRlci5jYCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBqdW1wcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjoyOS45ODk5MDQxMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMTk3NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0dGFjaF9tZXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMjU9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzMtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTM0OnN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzNS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz00MTE9c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDUyLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ1MzpcXHRlcnIgPSBhdHRhY2hfbWV0ZXIobWV0ZXJfdGJsLCBtZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDU0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjMwLjA5MTEwODIzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjgxOTcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhdHRhY2hfbWV0ZXJgIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL21ldGVyLmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIGl0J3MgZnVuY3Rpb25hbCwgcmlnaHQ/IFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmssIGFuZCBzcGVjaWZpY2FsbHksIG1ldGVycy4gQW5kLCBzaW5jZSBpdCdzIHJlYWNoYWJsZSB2aWEgbmV0bGluayAoYG92c19tZXRlcl9jbWRfc2V0YCksIEknbSBjb25maWRlbnQgaXQncyBiZWluZyB1c2VkIGFuZCBub3Qgc29tZSBkZWFkIGNvZGUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gTGV0IG1lIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgT3BlbiB2U3dpdGNoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1pZ2h0IHJlbHkgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsJ3MgaW4gdGhlIGRldGFpbHMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgY29uZmlnIGtub2JzIGlzIGtleSB0byBncmFzcGluZyB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6MzMuNDE5MzA4MTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTcwNjM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9QRU5WU1dJVENIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjozNS40MzYzNzk3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU4ODk5ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk9wZW4gdlN3aXRjaCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBkaXZlIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgYSBzdGFuZGFsb25lIGRlcGxveW1lbnQsIG9yIGlzIGl0IHJlbHlpbmcgb24gb3RoZXIgY29tcG9uZW50cz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBjcml0aWNhbCB1cHN0cmVhbSBzZXJ2aWNlcywga2VybmVsIG1vZHVsZXMsIG9yIGxpYnJhcmllcyB0aGF0IGBPUEVOVlNXSVRDSGAgaXMgaW5oZXJlbnRseSB0aWVkIHRvLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgdXBmcm9udCB3aWxsIGluZm9ybSBteSBzdWJzZXF1ZW50IHRyb3VibGVzaG9vdGluZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIG9yIGFueSBwbGFubmVkIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQncyBzZWUgd2hhdCBpdCdzIGNvbm5lY3RlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjM4LjM5NTI4Mjc4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjozOC4zOTU0NTUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjMxNTcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBPUEVOVlNXSVRDSGAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgSU5FVGAuIFRoYXQncyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgT1BFTlZTV0lUQ0hgIGluIG15IGNvbnNpZGVyYXRpb25zLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGBvdnNfbWV0ZXJfY21kX3NldGAuIFRoYXQncyBteSBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGFuZCB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGFuZCB3aGF0IHRoaXMgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoZXNlIGNvbXBvbmVudHMgdGVsbHMgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjQxLjU1ODYxNDc4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMjk3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm92c19tZXRlcl9jbWRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTMzMT1zdGF0aWMgc3RydWN0IGRwX21ldGVyICpkcF9tZXRlcl9jcmVhdGUoc3RydWN0IG5sYXR0ciAqKmEpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MTAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDExOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MTIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9Njg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo2OTg6XFx0XFx0LmRvaXQgPSBvdnNfbWV0ZXJfY21kX3NldCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTktXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDIuMTYwOTIwMTY3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg4MzU1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXRlciBDb21tYW5kIEV4ZWN1dGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZXRlciBjb21tYW5kIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGllY2UgaGVyZSBpcyB0aGUgYG92c19tZXRlcl9jbWRfc2V0YCBzeW1ib2wuIFRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgbmV0bGluayBpbnRlcmFjdGlvbiwgc2VlbXMgbGlrZSB0aGUgcGxhY2Ugd2hlcmUgdGhlIHJlYWwgd29yayBnZXRzIGRvbmUuIEJ1dCwgaGFuZyBvbi4uLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHNlZWluZyBgYXR0YWNoX21ldGVyYCBpbiB0aGUgY29kZSwgYnV0IHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXTigJlzIGxpa2VseSBpbmxpbmVkIG9yIGF0IGxlYXN0IG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEl0IHdvbid0IGJlIGEgcHVibGljbHkgZXhwb3NlZCBmdW5jdGlvbi4gVGhlcmVmb3JlLCBpdCB3b24ndCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIG9mIGl0cyBcIndvcmxkXCIuXG5cblNvLCBmb2N1c2luZyBiYWNrIG9uIGBvdnNfbWV0ZXJfY21kX3NldGAsIHRoYXQncyBteSBwcmltYXJ5IHRhcmdldC4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIEkgKnJlYWxseSogd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYXR0YWNoX21ldGVyYCBpc24ndCBiZWluZyB1c2VkIGFueXdoZXJlIGVsc2UgdGhhdCBJJ20gbWlzc2luZy4gTGV0J3MgdHJhY2UgYWxsIG9mIHRoZSBjYWxscyB0byBgYXR0YWNoX21ldGVyYCBqdXN0IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDYuMjc5NzU5MTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4MTEwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX21ldGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEyNT1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9yZW1vdmUoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMy1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMzQ6c3RhdGljIGludCBhdHRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTM1LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTQxMT1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTItXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDUzOlxcdGVyciA9IGF0dGFjaF9tZXRlcihtZXRlcl90YmwsIG1ldGVyKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NTQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NDYuNDQyNTgwMTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDU3ODYzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gYG92c19tZXRlcl9jbWRfc2V0YCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYG92c19tZXRlcl9jbWRfc2V0YC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbiBoZXJlLiBGaXJzdCwgSSB3YW50IHRvIHJ1bGUgb3V0IGFueSBvdGhlciBuZXRsaW5rIGNvbW1hbmRzIHRoYXQgbWlnaHQgYmUgcmVsYXRlZCwganVzdCB0byBiZSB0aG9yb3VnaC4gT2theSwgbm9wZSwgYG92c19tZXRlcl9jbWRfc2V0YCAqaXMqIHRoZSBuZXRsaW5rIGhhbmRsZXIgZm9yIG1ldGVyIHNldHRpbmdzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYG92c19tZXRlcl9jbWRfc2V0YCBzdGF0aWM/IFllcywgaXQgaXMuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiB3ZSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRlc3RhYmlsaXR5IHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gQnV0LCAqYmVjYXVzZSogYG92c19tZXRlcl9jbWRfc2V0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgaW4gYGRwX21ldGVyX2dlbmxfb3BzYCwgaXRzIGFkZHJlc3MgaXMgdGFrZW4uIFRoYXQgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGFuZCBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBPa2F5LCB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQsIGl0J3Mgbm90IGludGVybmFsIGhlbHBlciBzdGF0aWMgaW5saW5lZCBjb2RlLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBhbHRlcm5hdGl2ZXMuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjUwLjk0ODM2ODYyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMDEwMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX21ldGVyX2dlbmxfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU5Nz1ib29sIG92c19tZXRlcl9leGVjdXRlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02ODYtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6Njg3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZHBfbWV0ZXJfZ2VubF9vcHNbXSA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02ODgtXFx0eyAuY21kID0gT1ZTX01FVEVSX0NNRF9GRUFUVVJFUyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTcxOD1zdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzI1LVxcdC5wYXJhbGxlbF9vcHMgPSB0cnVlLFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcyNjpcXHQuc21hbGxfb3BzID0gZHBfbWV0ZXJfZ2VubF9vcHMsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NzI3OlxcdC5uX3NtYWxsX29wcyA9IEFSUkFZX1NJWkUoZHBfbWV0ZXJfZ2VubF9vcHMpLFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcyOC1cXHQucmVzdl9zdGFydF9vcCA9IE9WU19NRVRFUl9DTURfR0VUICsgMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NTEuNTUwMzg0OTMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MjA0NjE1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIE5ldGxpbmsgRmFtaWx5IFJlZ2lzdHJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgbmV0bGluayBmYW1pbHkgaW4gcXVlc3Rpb24gaXMgYGRwX21ldGVyX2dlbmxfZmFtaWx5YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHdoYXQgd2UncmUgd29ya2luZyB3aXRoLlwiIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5czogKkhvdyogaXMgdGhpcyB0aGluZyBnZXR0aW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWw/IElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaG9va2luZyBpdCB1cD8gRmluZGluZyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50IGlzIHRoZSBmaXJzdCBzdGVwIHdoZW4gZGVidWdnaW5nIG5ldGxpbmsgaW1wbGVtZW50YXRpb25zLCB3aGV0aGVyIGl0J3MgdW5kZXJzdGFuZGluZyB0aGUgc2V0dXAgcHJvY2VzcyBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJcyBpdCBleHBvcnRlZCwgb3IgYW0gSSBsb29raW5nIGF0IHNvbWV0aGluZyBpbnRlcm5hbCB0byBhIG1vZHVsZT8gVGhpcyBpcyB0aGUgY29yZSBwaWVjZSBvZiB0aGUgcHV6emxlIEkgbmVlZCB0byBmaW5kIHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjU0LjQ3MDg0OTcwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk3MTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfZ2VubF9mYW1pbHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNjU3PXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgKiBjb25zdCBkcF9nZW5sX2ZhbWlsaWVzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjYxLVxcdFxcdTAwMjZkcF9wYWNrZXRfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjY2MjpcXHRcXHUwMDI2ZHBfbWV0ZXJfZ2VubF9mYW1pbHksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjY2My0jaWZcXHRJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MjE1PW92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjI2LVxcdFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXNuZF9zZXEsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjI3OlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkcF9tZXRlcl9nZW5sX2ZhbWlseSwgMCwgY21kKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMjgtXFx0aWYgKCEqb3ZzX3JlcGx5X2hlYWRlcikge1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NzE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgb3ZzX21ldGVyX211bHRpY2FzdF9ncm91cCA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcxNy1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo3MTg6c3RydWN0IGdlbmxfZmFtaWx5IGRwX21ldGVyX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy03MTktXFx0LmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmg9NTA9c3RydWN0IGRwX21ldGVyX3RhYmxlIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oLTU1LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5oOjU2OmV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgZHBfbWV0ZXJfZ2VubF9mYW1pbHk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmgtNTctaW50IG92c19tZXRlcnNfaW5pdChzdHJ1Y3QgZGF0YXBhdGggKmRwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTY6NTQuNTcwNTY1NTUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODcwMTUwNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTWV0ZXIgQ29tbWFuZCoqXG5cbk9rYXksIHNvIEkndmUgZGVjaWRlZCB0byBjb25jZW50cmF0ZSBteSBhbmFseXNpcyBvbiBgb3ZzX21ldGVyX2NtZF9zZXRgLiBFdmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYXMgYSBjYWxsYmFjayBmdW5jdGlvbiwgSSBrbm93IGl0J3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQsIGFuZCBpdCdsbCBoYXZlIGEgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGlzIG1ha2VzIGl0IGlkZWFsIGZvciB0cmFjaW5nLiBXYWl0IGEgbWludXRlLCBubywgaXQncyAqZGVmaW5pdGVseSogbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkcF9tZXRlcl9nZW5sX29wc2AuIFRoYXQncyBzb2xpZCBldmlkZW5jZS5cblxuTm93IHRoYXQgSSd2ZSBwaW5uZWQgZG93biB0aGUga2V5IGZ1bmN0aW9uLCBsZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuIEkga25vdyBgT1BFTlZTV0lUQ0hgIGRlcGVuZHMgb24gYElORVRgLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEJlc3QgdG8gcmV2aXNpdCBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gR290dGEgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNjo1OC4xNTc1ODQwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE2OjU4LjE1NzY3OTUzM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYyMzMzMjcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ldGVyIEF0dGFjaG1lbnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgYXR0YWNoX21ldGVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBgT1BFTlZTV0lUQ0hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVoYXZpb3IgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGJleW9uZCB0aGUgb2J2aW91cz8gTm8sIGBPUEVOVlNXSVRDSGAgc2VlbXMgdG8gY292ZXIgdGhlIHJlbGV2YW50IGNvbnRleHQuXG5cbkxldCdzIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgaGFuZGxpbmcgbWV0ZXIgYXR0YWNobWVudCB3aXRoaW4gYSB0YWJsZS4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgdGhlIHJlYWxsb2NhdGlvbiBhbmQgaW5zZXJ0aW9uIGludGVyYWN0LiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIHNlcXVlbmNlOiBnZXQgdGhlIG1ldGVyIGluc3RhbmNlLCBjaGVjayBmb3IgYW4gZXhpc3RpbmcgbWV0ZXIsIGFuZCBpZiBub25lLCAqdGhlbiogaW5zZXJ0LiBCdXQgdGhlbiB3ZSBoYXZlIHRoZSByZWFsbG9jYXRpb24gbG9naWM6IGlmIHRoZSB0YWJsZSBpcyBhcHByb2FjaGluZyBjYXBhY2l0eSwgd2UgcmVhbGxvY2F0ZSwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCB0cmlja3kuXG5cbkkgc2VlIHRoZXkgYXJlIHJlYWxsb2NhdGluZywgYW5kIHRoZW4gaW5zZXJ0aW5nLiBCdXQsIG15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IHRoaXMgcHJldmlvdXMgb3JkZXIgY291bGQgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uIHdpdGggUkNVLiBJZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgZmFpbHMsIHRoZXJlJ3MgYSByb2xsYmFjayAoY2FsbGluZyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlYCBvbiB0aGUgKm9sZCogaW5zdGFuY2UpLiBUaGF0IHNlZW1zIGZpbmUgc2luY2UgaXQgcmVzdG9yZXMgdGhlIHByaW9yIHN0YXRlIG9mIHRoZSB0YWJsZS5cblxuTm93LCBpZiBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgKnN1Y2NlZWRzKiwgaXQgd291bGQgYWxsb2NhdGUgYSBuZXcgaW5zdGFuY2UsIGNvcHkgYWxsIHRoZSBtZXRlcnMsIGFuZCB0aGVuIHRoZSBvbGQgaW5zdGFuY2Ugd291bGQgYmUgZnJlZWQgdmlhIFJDVS4gVGhpcyBzdGlsbCBzZWVtcyBPSyBpbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uIEkgYmVsaWV2ZSB0aGlzIGNoYW5nZSBqdXN0IHNpbXBsaWZpZXMgdGhlIGxvZ2ljIGJ5IG1ha2luZyB0aGUgbG9naWMgY2xlYXJlci5cbklmIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZmFpbHMqLCB0aGVuIHRoZXkgcm9sbCBiYWNrLiBTdGlsbCBvay5cblxuQnV0Li4ud2FpdC4gVGhlIHByb2JsZW0gd2l0aCB0aGUgcHJldmlvdXMgcGF0Y2ggaXMgbm93IHRoZSBsb2dpYyBoYXBwZW5zIGxpa2UgdGhpczogZ2V0IHRoZSBtZXRlciBpbnN0YW5jZSwgKnBvc3NpYmx5KiByZWFsbG9jYXRlIHRoZSB1bmRlcmx5aW5nIGluc3RhbmNlLCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2gsIGFuZCBjaGVjayBmb3IgYW4gZXhpc3RpbmcgbWV0ZXIsIGFuZCAqdGhlbiogaW5zZXJ0LiBUaGlzIGxvb2tzIHRvIGFkZHJlc3MgdGhlIHByaW9yIGlzc3VlLlxuXG5TbyB0aGUgb3JpZ2luYWwgbG9naWMgd291bGQgZmlyc3QgaW5zZXJ0IGludG8gdGhlIG9sZCBpbnN0YW5jZSwgdGhlbiByZWFsbG9jYXRlLCBhbmQgdGhlIG5ldyBpbnN0YW5jZSB3b3VsZCBnZXQgY29waWVkLiBJdCBhbHNvIG1lYW5zIHRoYXQgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgICpmYWlscyosIHRoYXQgbWVhbnMgdGhlIG9sZCBpbnN0YW5jZSBpcyBsZWZ0IHVudG91Y2hlZCwgYW5kIHRoZXJlZm9yZSByb2xsaW5nIGJhY2sgaXMgZmluZS5cblxuVGhpcyBjdXJyZW50IHBhdGNoIGlzIHNhZmUuIE5vIHdvcnJpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MDkuNzgxMDE1NTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI3NTUxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz05ND1zdGF0aWMgaW50XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6OTU6ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtOTYte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTQ4LVxcdGlmICh0YmwtXFx1MDAzZWNvdW50IFxcdTAwM2U9IHRpLVxcdTAwM2VuX21ldGVycykge1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE0OTpcXHRcXHRlcnIgPSBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgdGktXFx1MDAzZW5fbWV0ZXJzICogMik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTUwLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xNzQ9c3RhdGljIGludCBkZXRhY2hfbWV0ZXIoc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MjAxOlxcdFxcdGlmIChkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jKHRibCwgaGFsZl9zaXplKSlcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0yMDItXFx0XFx0XFx0Z290byBzaHJpbmtfZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxMC4zMzM3Nzc1NzVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MDQ0NjM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYDpcblxuKipNeSBJbW1lZGlhdGUgQW5hbHlzaXMgb2YgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBtZW50YWxseSBmcmFtaW5nIHRoaXMgYXMgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gYSBgZHBfbWV0ZXJfaW5zdGFuY2VgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcsIEknbSBleHBlY3RpbmcgdGhpcyBpcyBhIHJvdXRpbmUgZGVzaWduZWQgdG8gcmVzaXplIG9yIHJlbG9jYXRlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBhIG1ldGVyIGluc3RhbmNlLiBQcm9iYWJseSBpdCdzIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoZSBcInJlYWxsb2NcIiBwYXJ0IHN1Z2dlc3RzIHRoYXQgaXQgaXMgbW9yZSBkeW5hbWljIHRoYW4gYSBzdGF0aWMgYWxsb2NhdGlvbi4gVGhlIG5lZWQgZm9yIHJlYWxsb2NhdGlvbiB1c3VhbGx5IG1lYW5zIHRoZSBpbnN0YW5jZSBuZWVkcyBtb3JlIHNwYWNlIHRvIHN0b3JlIGRhdGEsIG1ldGFkYXRhLCBvciBpbnRlcm5hbCBzdGF0ZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIHN0cnVjdHVyZSBpcyBoYW5kbGVkIGluIG9yZGVyIHRvIHNlZSBpZiBpdCBpcyBkeW5hbWljLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgSSdsbCBiZSBsb29raW5nIGF0IGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBtZW1vcnkgZnJhZ21lbnRhdGlvbiwgZXJyb3IgY29uZGl0aW9ucyAobGlrZSBhbGxvY2F0aW9uIGZhaWx1cmVzKSwgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IGRlYWxzIHdpdGggdGhlIHRyYW5zZmVyIG9mIGV4aXN0aW5nIGRhdGEgdG8gdGhlIG5ldyBtZW1vcnkgbG9jYXRpb24uIEkgYWxzbyB3YW50IHRvIHNlZSB3aGV0aGVyIGl0IGNvcGllcyBkYXRhIG9yIG1vdmVzIGl0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCB0cmlnZ2VycyB0aGlzIHJlLWFsbG9jYXRpb24/IFdoYXQncyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneT8gSXMgaXQgZG91YmxpbmcgdGhlIHNpemUgb3IgdXNpbmcgc29tZSBvdGhlciBpbmNyZW1lbnQ/IEknbSBjdXJpb3VzIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBgZHBfbWV0ZXJfaW5zdGFuY2VgIHNvIHRoYXQgaXQgd291bGQgbmVlZCByZWFsbG9jYXRpbmcuIEkgY2FuIGFudGljaXBhdGUgdGhhdCB0aGlzIGNvdWxkIGJlIGEgcG9pbnQgb2YgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBpZiBub3QgY2FyZWZ1bGx5IGltcGxlbWVudGVkLiBMZXQncyBzZWUgaG93IGl0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxNC42OTQyMjc4MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcbiAxMTQ6XFx0fVxcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4gMTE4OlxcdHtcXG4gMTE5OlxcdFxcdHUzMiBoYXNoO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG4gMTIyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XFxuIDEyMzpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjE0LjY5NDM2ODQ0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgzNDEyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlJlLWV2YWx1YXRpbmcgTWV0ZXIgUmVhbGxvY2F0aW9uIExvZ2ljKipcblxuUmlnaHQsIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyBpdGVyYXRpbmcgZnJvbSBgMGAgdXAgdG8gYG5fbWV0ZXJzYCwgd2hlcmUgYG5fbWV0ZXJzYCBpcyBlZmZlY3RpdmVseSB0aGUgc21hbGxlciBvZiB0aGUgY3VycmVudCBzaXplIChsZXQncyBjYWxsIHRoYXQgYHNpemVgKSBhbmQgYHRpLVx1MDAzZW5fbWV0ZXJzYC4gSG9sZCBvbiwgYHRpLVx1MDAzZW5fbWV0ZXJzYCAqaXMqIHRoZSBzaXplIG9mIHRoZSAqb2xkKiBtZXRlciBpbnN0YW5jZSwgaXNuJ3QgaXQ/IFNvLCB3ZSBhcmUgZXNzZW50aWFsbHkgcmVhbGxvY2F0aW5nIGJhc2VkIG9uIHRoZSBvbGQgc2l6ZSwgbm90IHRoZSBwb3RlbnRpYWwgbmV3IHNpemUuXG5cbk5vdywgbXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgc29tZXRoaW5nIGlzIHVwIHdpdGggYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAuLi4gaXQgaW5zZXJ0cyBpbnRvIHRoZSAqb2xkKiBpbnN0YW5jZSBhdCBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAuIE9rYXksIHNvIGl04oCZcyBjYWxjdWxhdGluZyBhIGhhc2ggYmFzZWQgb24gdGhlIG9sZCB0YWJsZS4gQnV0IGlzbid0IHRoZSB3aG9sZSBwb2ludCB0byByZWFsbG9jYXRlIHRvIGEgKm5ldyogaW5zdGFuY2U/IEFuZCB0aGF0IGhhc2g/IExldCBtZSBxdWlja2x5IGNoZWNrIGBtZXRlcl9oYXNoYC4gSSBoYXZlIGEgc3VzcGljaW9uLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MTguODc3Nzg1NzY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3ODUzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWV0ZXJfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0zMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYmFuZF9wb2xpY3lbT1ZTX0JBTkRfQVRUUl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTM5LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQwOnN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDEte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9NTQ9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqbG9va3VwX21ldGVyKGNvbnN0IHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTctXFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU4OlxcdHUzMiBoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXJfaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTU5LVxcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMTY9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfaW5zZXJ0KHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTIxOlxcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMi1cXHRyY3VfYXNzaWduX3BvaW50ZXIodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSwgbWV0ZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTI1PXN0YXRpYyB2b2lkIGRwX21ldGVyX2luc3RhbmNlX3JlbW92ZShzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTI5LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjEzMDpcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMzEtXFx0UkNVX0lOSVRfUE9JTlRFUih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBOVUxMKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1NS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNTY6XFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoxOS4wMzI2Mjg1NzVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNzU5ODIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYG1ldGVyX2hhc2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgY2hlY2tpbmcgb3V0IHRoaXMgYG1ldGVyX2hhc2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICppcyouIElzIGl0IGEgdW5pcXVlIGlkZW50aWZpZXI/IEEga2V5PyBBIGRhdGEgc3RydWN0dXJlIGl0c2VsZj8gS25vd2luZyB0aGF0IGlzIGZvdW5kYXRpb25hbCB0byBhbnkgZGVlcGVyIGFuYWx5c2lzLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXQgaXMgbGlrZWx5IGEgaGFzaCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBzb21lIGNvbWJpbmF0aW9uIG9mIG1ldGVyIGRhdGEgYW5kIHNvbWUgZm9ybSBvZiBtZXRlciBpZGVudGlmaWVyLiBUaGlzIHdvdWxkIGFsbG93IGZvciBxdWljayBsb29rdXAgYW5kIGNvbXBhcmlzb24gb2YgcmVsYXRlZCBtZXRlciBpbmZvcm1hdGlvbiB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGl0IGlzIGNhbGN1bGF0ZWQgYW5kIHVzZWQuIEFyZSB0aGVyZSBhbnkgY29sbGlzaW9uIGNvbmNlcm5zIGdpdmVuIHRoZSBwb3RlbnRpYWwgaW5wdXRzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBpcyB3ZWFrIG9yIHBvb3JseSBpbXBsZW1lbnRlZD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNoaW5nIGFsZ29yaXRobSBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXNoIGFyZSBhbHNvIGltcG9ydGFudDsgc3BlZWQgb2YgZ2VuZXJhdGlvbiBhbmQgbG9va3VwIGFyZSBrZXkgY29uc2lkZXJhdGlvbnMuIExldCdzIHNlZSBpZiB0aGUgdmFyaWFibGUgbmFtZSBwcm92aWRlcyBhbnkgY2x1ZSBhcyB0byBpdHMgdXNlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZS4gV2l0aG91dCBtb3JlIGNvbnRleHQsIEkgaGF2ZSB0byBhc3N1bWUgaXRzIHJvbGUgaXMgdG8gbWFrZSBhIGxvb2sgdXAgb3IgbWFrZSBhIGNvbXBhcmlzb24gZmFzdCBhbmQgc2ltcGxlLCBidXQgd2l0aG91dCBtb3JlIGNvbnRleHQgaXQgaXMganVzdCBhIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjc5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyMi41NDAyMzAwNzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHN0YXRpYyB1MzIgbWV0ZXJfaGFzaChzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpLCB1MzIgaWQpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRyZXR1cm4gaWQgJSB0aS1cXHUwMDNlbl9tZXRlcnM7XFxuICA0MzpcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdHN0YXRpYyB2b2lkIG92c19tZXRlcl9mcmVlKHN0cnVjdCBkcF9tZXRlciAqbWV0ZXIpXFxuICA0NjpcXHR7XFxuICA0NzpcXHRcXHRpZiAoIW1ldGVyKVxcbiAgNDg6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjIyLjU0MDM5ODYyNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI2OTQ5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxsb2NhdGlvbiBMb2dpYyAtIEEgUG90ZW50aWFsIEJ1Zz8qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcmVhbGxvY2F0aW9uIHByb2Nlc3MgZm9yIG1ldGVyIGluc3RhbmNlcywgYW5kIGl0J3Mgc3RhcnRpbmcgdG8gYnVnIG1lLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCBob3cgdGhlIGhhc2gga2V5LCBgbWV0ZXJfaGFzaGAsIHJlbGF0ZXMgdG8gdGhlIG51bWJlciBvZiBtZXRlcnMsIGB0aS1cdTAwM2VuX21ldGVyc2AuIFRoZSBjdXJyZW50IGxvZ2ljIHNlZW1zIGxpa2UgaXQgbWlnaHQgYmUgZnJhZ2lsZS5cblxuSWYgYGRwX21ldGVyX2luc3RhbmNlX2luc2VydGAgaXMgaW5zZXJ0aW5nIGludG8gdGhlIFwib2xkXCIgbWV0ZXIgaW5zdGFuY2UsIHRoZSBoYXNoIGtleSBjYWxjdWxhdGlvbiB1c2VzIHRoZSBvbGQgbW9kdWx1czogYGlkICUgb2xkX25fbWV0ZXJzYC4gTWFrZXMgc2Vuc2UsIHNvIGZhci4gQnV0LCB0aGVuLCBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AgY29tZXMgaW50byBwbGF5IHRvIGV4cGFuZCB0aGUgc2l6ZSBhbmQgdGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGEgYml0IGNvbmZ1c2luZy5cblxuSXQgKmNvcGllcyogdGhlIGVsZW1lbnRzIHRvIHRoZSBuZXcgbWV0ZXIgaW5zdGFuY2UuIEl0IGlzIGNvcHlpbmcgdGhlIGVsZW1lbnRzIHdpdGggYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cdTAwM2VkcF9tZXRlcnNbaV1gLiBTbywgdGhlIGNvcHkgbWFpbnRhaW5zIHRoZSBzYW1lIGluZGV4LCAnaScsIGluIHRoZSBuZXcgbGFyZ2VyIGFsbG9jYXRpb24uIEhvd2V2ZXIsIGBuZXdfdGktXHUwMDNlbl9tZXRlcnNgIGlzIGRpZmZlcmVudCwgaXQgaXMgYWN0dWFsbHkgZG91YmxlZCB0byBgb2xkX25fbWV0ZXJzICogMmAuIFRoYXQgbWVhbnMgdGhlICpjb3JyZWN0KiBuZXcgaGFzaCBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbmV3IG1ldGVyIGluc3RhbmNlIHNob3VsZCBiZSBgaWQgJSBuZXdfbl9tZXRlcnNgLiBcblxuQnV0LCBpZiB0aGUgY29weSBqdXN0IHBsYWNlcyB0aGUgbWV0ZXIgZWxlbWVudHMgYXQgdGhlICpzYW1lIGluZGV4KiBgaWAsIGluIHRoZSBleHBhbmRlZCBhcnJheSwgdGhlbiBgaWQgJSBuZXdfbl9tZXRlcnNgIG1pZ2h0ICpub3QqIGVxdWFsIGBpYCEgVGhlIGhhc2gga2V5IHdpbGwgbm90IGJlIHRoZSBzYW1lISBUaGlzIGlzIGEgcG90ZW50aWFsIGNvbGxpc2lvbiBvciBtaXMtaGFzaGluZyBzaXR1YXRpb24uIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGNhcmVmdWxseS4gVGhlcmUgbWF5IGJlIGEgc3VidGxlIGZsYXcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyNy42NjczNTI3ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzoyNy42Njc1MTI0NDZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3MzcyNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFsbG9jYXRpb24gRGlsZW1tYSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uIGFuZCBpdCdzIG1ha2luZyBhIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIG1ldGVyIGluc3RhbmNlcyBmcm9tIHRoZSBvbGQgdGFibGUgKGB0aS1cdTAwM2VkcF9tZXRlcnNgKSB0byB0aGUgbmV3IG9uZSAoYG5ld190aS1cdTAwM2VkcF9tZXRlcnNgKS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaGFzaCBrZXkgZm9yIGVhY2ggY29waWVkIGluc3RhbmNlIGluIHRoZSAqbmV3KiB0YWJsZSBpcyAqc3RpbGwqIGp1c3QgdGhlIG9yaWdpbmFsIGluZGV4IGBpYC5cblxuQnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGUgYG1ldGVyX2hhc2gobmV3X3RpLCBpZClgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGhhc2hpbmcgdXNpbmcgYGlkICUgbmV3X25fbWV0ZXJzYC4gRG9lcyB0aGlzIG1lYW4gdGhhdCBgaWRgIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdWNoIHRoYXQgYGlkICUgb2xkX25fbWV0ZXJzID09IGlkICUgbmV3X25fbWV0ZXJzYD8gTm8sIGFic29sdXRlbHkgbm90ISBJdCdzIG5vdC4gVGFrZSBmb3IgZXhhbXBsZSwgaWYgYGlkID0gb2xkX25fbWV0ZXJzICsgMWAuIEluIHRoZSBvcmlnaW5hbCB0YWJsZSwgdGhlIGhhc2ggd291bGQgYmUgYDFgLCBidXQgaW4gdGhlIG5ldyB0YWJsZSwgdGhlIGhhc2ggd291bGQgYmUgYG9sZF9uX21ldGVycyArIDFgLCBhc3N1bWluZyBgbmV3X25fbWV0ZXJzYCBpcyBhIGRpZmZlcmVudCBzaXplIVxuXG5BaCwgSSBzZWUgdGhlIHByb2JsZW0uIElmIHdlIGp1c3QgY29weSB0aGUgaW5zdGFuY2VzIG92ZXIsIHRoZW4gd2hlbiBgbG9va3VwX21ldGVyYCBpcyBjYWxsZWQsIGl0J3MgZ29pbmcgdG8gY2FsY3VsYXRlIHRoZSBoYXNoIGtleSB1c2luZyB0aGUgKm5ldyogbW9kdWx1cyAoYG5ld19uX21ldGVyc2ApLiBBbmQgYmVjYXVzZSB0aGUgb3JpZ2luYWwgaW5zdGFuY2VzIHdpbGwgYmUgaGFzaGVkIHVzaW5nIHRoZSBuZXcgbW9kdWx1cyBhbmQgbm90IHRoZSBvbGQgb25lLCB3ZSdsbCBlbmQgdXAgbG9va2luZyBhdCBhbiBlbnRpcmVseSBkaWZmZXJlbnQgKGFuZCBsaWtlbHkgdW51c2VkKSBzbG90IGluIHRoZSB0YWJsZSwgYW5kIHdlJ2xsIHB1bGwgYmFjayBhIE5VTEwgcG9pbnRlciFcblxuT2theSwgdGltZSB0byB0cmFjZSB3aGVyZSB0aGF0IGBpZGAgaXMgY29taW5nIGZyb20uIE5lZWQgdG8gc2VlIGhvdyB0aG9zZSBtZXRlciBJRHMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuLi4gdGhpcyByZWFsbG9jIGNvdWxkIGJlIGEgZGlzYXN0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MzIuNTQxMjQwNzIxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc1MDU3MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBfbWV0ZXJfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTI3OD1zdGF0aWMgaW50IG92c19tZXRlcl9jbWRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzozMzE6c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTMzMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz00MTE9c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNDI2LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQyNzpcXHRtZXRlciA9IGRwX21ldGVyX2NyZWF0ZShhKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MjgtXFx0aWYgKElTX0VSUihtZXRlcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjMyLjY1ODc1NTA1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1Njc5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZHBfbWV0ZXJfY3JlYXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYGRwX21ldGVyX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodHMgaW1tZWRpYXRlbHkgZ28gdG8gdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgdGhpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGNhbGwgZm9yIHNvbWUga2luZCBvZiBzcGVjaWFsaXplZCBtZXRlcmluZyBkZXZpY2U/IE9yIHBlcmhhcHMgYSBtb3JlIGFic3RyYWN0IHNvZnR3YXJlIGNvbnN0cnVjdCBkZXNpZ25lZCB0byB0cmFjayBzb21lIHN5c3RlbSByZXNvdXJjZSB1c2FnZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIGxlYW5zIHRvd2FyZHMgdGhlIGZvcm1lciDigJMgdGhhdCDigJxkcOKAnSBwcmVmaXggb2Z0ZW4gc3VnZ2VzdHMgRGlnaXRhbCBQcm9jZXNzaW5nIG9yIERldmljZSBQcm9maWxlLCBidXQgSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8gYmUgc3VyZS5cblxuTXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbnMuIElzIGl0IGFsbG9jYXRpbmcgbWVtb3J5IGZvciBhIGRhdGEgc3RydWN0dXJlPyBXaGF0IGFyZSB0aGUgZmllbGRzPyBBcmUgd2UgZGVhbGluZyB3aXRoIHBvaW50ZXJzLCBpbnRlZ2VycywgZmxvYXRzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IGxpa2UgYXRvbWljIGNvdW50ZXJzPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgbXV0ZXhlcyBvciBzZW1hcGhvcmVzIGludm9sdmVkIHRvIHByb3RlY3QgYWNjZXNzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IEltbWVkaWF0ZWx5IEkgc3RhcnQgY29uc2lkZXJpbmcgcG90ZW50aWFsIGVkZ2UgY2FzZXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLCBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMsIHBvc3NpYmxlIHJlc291cmNlIGxpbWl0cy4gRXJyb3IgaGFuZGxpbmcgaXMgcGFyYW1vdW50LlxuXG5JJ20gbm93IHRoaW5raW5nIGFib3V0IHRoZSBBUEkuIFdoYXQgcGFyYW1ldGVycyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCByZXR1cm4/IEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgbWV0ZXIgb2JqZWN0LCBJIHByZXN1bWU/IE9yIHBlcmhhcHMgYW4gZXJyb3IgY29kZT8gV2hhdCBraW5kIG9mIGZsYWdzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgcGFzc2VkPyBUaGUgbW9yZSBJIGtub3cgYWJvdXQgdGhlIHBhcmFtZXRlcnMsIHRoZSBxdWlja2VyIEkgY2FuIGVudmlzaW9uIGl0cyB1c2UgY2FzZXMuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBhcmUgaW1wbGljaXRseSBzZXQgaWYgSSBkbyBub3Qgc2V0IHRoZXNlIG9wdGlvbmFsIGZsYWdzP1xuXG5GaW5hbGx5LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBJIHdvbmRlciBhYm91dCB0aGUgbGlmZWN5Y2xlLiBJcyB0aGVyZSBhIGNvcnJlc3BvbmRpbmcgYGRwX21ldGVyX2Rlc3Ryb3lgIGZ1bmN0aW9uPyBIb3cgaXMgdGhlIG1ldGVyIHJlbGVhc2VkIGFuZCBjbGVhbmVkIHVwIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgcG90ZW50aWFsIGRlYnVnZ2luZyBzY2VuYXJpb3Mg4oCTIHRyYWNraW5nIGRvd24gcmVzb3VyY2UgbGVha3MgaXMgYSBwYWluLiBJ4oCZbSBhbHNvIG1lbnRhbGx5IHNrZXRjaGluZyBvdXQgcG9zc2libGUgaW50ZWdyYXRpb24gdGVzdHMgdG8gZW5zdXJlIHRoYXQgYWxsb2NhdGlvbiwgcHJvcGVyIHVzYWdlLCBhbmQgZGVhbGxvY2F0aW9uIGFyZSB3b3JraW5nIGNvcnJlY3RseSBpbiBteSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTMwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6MzcuNzc0NDM3Nzc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzE6XFx0c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbiAzMzI6XFx0e1xcbiAzMzM6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhO1xcbiAzMzQ6XFx0XFx0aW50IHJlbTtcXG4gMzM1OlxcdFxcdHUxNiBuX2JhbmRzID0gMDtcXG4gMzM2OlxcdFxcdHN0cnVjdCBkcF9tZXRlciAqbWV0ZXI7XFxuIDMzNzpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfYmFuZCAqYmFuZDtcXG4gMzM4OlxcdFxcdGludCBlcnI7XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdC8qIFZhbGlkYXRlIGF0dHJpYnV0ZXMsIGNvdW50IHRoZSBiYW5kcy4gKi9cXG4gMzQxOlxcdFxcdGlmICghYVtPVlNfTUVURVJfQVRUUl9CQU5EU10pXFxuIDM0MjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChubGEsIGFbT1ZTX01FVEVSX0FUVFJfQkFORFNdLCByZW0pXFxuIDM0NTpcXHRcXHRcXHRpZiAoKytuX2JhbmRzIFxcdTAwM2UgRFBfTUFYX0JBTkRTKVxcbiAzNDY6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdGhlIG1ldGVyIGJlZm9yZSBsb2NraW5nIGFueXRoaW5nLiAqL1xcbiAzNDk6XFx0XFx0bWV0ZXIgPSBremFsbG9jX2ZsZXgoKm1ldGVyLCBiYW5kcywgbl9iYW5kcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gMzUwOlxcdFxcdGlmICghbWV0ZXIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjM3Ljc3NDU4NTkzOFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE1NzM5ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgTWV0ZXIgSUQgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSwgYW5kIEkndmUgaGl0IGEgcG9pbnQgd2hlcmUgSSdtIHNlZWluZyBzb21ldGhpbmcgbGlrZSBgbWV0ZXItXHUwMDNlaWRgLiBJIG5lZWQgdG8gc3RvcCBhbmQgdGhpbmsgdGhyb3VnaCB0aGlzLiBXaGVyZSBleGFjdGx5IGlzIHRoaXMgYG1ldGVyLVx1MDAzZWlkYCBmaWVsZCBnZXR0aW5nIHBvcHVsYXRlZD8gSSBjYW4gc2VlIGl0IGJlaW5nIHVzZWQsIGJ1dCBJIGNhbid0IGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBpbml0aWFsaXphdGlvbi4gSXMgaXQgYmVpbmcgc2V0IGR1cmluZyB0aGUgYG1ldGVyYCBzdHJ1Y3QncyBhbGxvY2F0aW9uPyBJcyB0aGVyZSBzb21lIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQ/IE9yIGlzIGl0IGNvbWluZyBmcm9tIGEgZnVuY3Rpb24gY2FsbCBJJ3ZlIG1pc3NlZCBpbiBteSBpbml0aWFsIHNjYW4/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZTsgYSBtaXNzZWQgaW5pdGlhbGl6YXRpb24gY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGJ1Z3MgZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIHVuZGVmaW5lZCBiZWhhdmlvciBvciBldmVuIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBpZiB0aGlzIElEIGlzIGxhdGVyIHVzZWQgaW4gYSBjcml0aWNhbCBjb250ZXh0LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgYW5kIHRoZSBjb250ZXh0IHRvIHJlc29sdmUgbXkgY29uY2VybnMuIEEgcXVpY2sgc2VhcmNoIHNob3VsZCByZXNvbHZlIG15IHF1ZXN0aW9ucywgb3IgSSBtYXkgYmUgcmVxdWlyZWQgdG8gd29yayBiYWNrd2FyZHMgdG8gaWRlbnRpZnkgdGhlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQwLjk5MDMyOTgyNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDExLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDExOlxcdHN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gNDEyOlxcdHtcXG4gNDEzOlxcdFxcdHN0cnVjdCBubGF0dHIgKiphID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDQxNDpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyLCAqb2xkX21ldGVyO1xcbiA0MTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJlcGx5O1xcbiA0MTY6XFx0XFx0c3RydWN0IG92c19oZWFkZXIgKm92c19yZXBseV9oZWFkZXI7XFxuIDQxNzpcXHRcXHRzdHJ1Y3Qgb3ZzX2hlYWRlciAqb3ZzX2hlYWRlciA9IGdlbmxfaW5mb191c2VyaGRyKGluZm8pO1xcbiA0MTg6XFx0XFx0c3RydWN0IGRwX21ldGVyX3RhYmxlICptZXRlcl90Ymw7XFxuIDQxOTpcXHRcXHRzdHJ1Y3QgZGF0YXBhdGggKmRwO1xcbiA0MjA6XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcdHUzMiBtZXRlcl9pZDtcXG4gNDIyOlxcdFxcdGJvb2wgZmFpbGVkO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIWFbT1ZTX01FVEVSX0FUVFJfSURdKVxcbiA0MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdG1ldGVyID0gZHBfbWV0ZXJfY3JlYXRlKGEpO1xcbiA0Mjg6XFx0XFx0aWYgKElTX0VSUihtZXRlcikpXFxuIDQyOTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtZXRlcik7XFxuIDQzMDpcXHRcXG4gNDMxOlxcdFxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX1NFVCxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbiA0MzM6XFx0XFx0aWYgKElTX0VSUihyZXBseSkpIHtcXG4gNDM0OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocmVwbHkpO1xcbiA0MzU6XFx0XFx0XFx0Z290byBleGl0X2ZyZWVfbWV0ZXI7XFxuIDQzNjpcXHRcXHR9XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdG92c19sb2NrKCk7XFxuIDQzOTpcXHRcXHRkcCA9IGdldF9kcChzb2NrX25ldChza2ItXFx1MDAzZXNrKSwgb3ZzX2hlYWRlci1cXHUwMDNlZHBfaWZpbmRleCk7XFxuIDQ0MDpcXHRcXHRpZiAoIWRwKSB7XFxuIDQ0MTpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbiA0NDI6XFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gNDQzOlxcdFxcdH1cXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0bWV0ZXJfdGJsID0gXFx1MDAyNmRwLVxcdTAwM2VtZXRlcl90Ymw7XFxuIDQ0NjpcXHRcXHRtZXRlcl9pZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtcXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0b2xkX21ldGVyID0gbG9va3VwX21ldGVyKG1ldGVyX3RibCwgbWV0ZXJfaWQpO1xcbiA0NDk6XFx0XFx0ZXJyID0gZGV0YWNoX21ldGVyKG1ldGVyX3RibCwgb2xkX21ldGVyKTtcXG4gNDUwOlxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQwLjk5MDQ3NTc5NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY1MDk1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTWV0ZXIgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgdXNlcidzIHByb3ZpZGVkIGEgYG1ldGVyX2lkYC4gR29vZC4gVGhpcyBpbmRpY2F0ZXMgd2UncmUgd29ya2luZyB3aXRoIGEgc3BlY2lmaWMgbWV0ZXIgb2JqZWN0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgSUQgZ2V0cyBhc3NpZ25lZCB0byB0aGUgYG1ldGVyYCBvYmplY3QuIFNlZW1zIGxpa2UgdGhlIG5leHQgbGluZSBvZiBjb2RlLCBgbWV0ZXItXHUwMDNlaWQgPSBtZXRlcl9pZGAsIHdpbGwgaGFuZGxlIHRoaXMgZGlyZWN0bHkuIExldCdzIG1ha2Ugc3VyZSB0aGF0IHdvcmtzIGFzIGV4cGVjdGVkLiBXZSBjYW4gdGhlbiBwcm9jZWVkIHRvIGxldmVyYWdlIHRoaXMgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjAyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo0My44NTU1NzQwODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUxOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdGVyciA9IGF0dGFjaF9tZXRlcihtZXRlcl90YmwsIG1ldGVyKTtcXG4gNDU0OlxcdFxcdGlmIChlcnIpXFxuIDQ1NTpcXHRcXHRcXHRnb3RvIGV4aXRfZnJlZV9vbGRfbWV0ZXI7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdG92c191bmxvY2soKTtcXG4gNDU4OlxcdFxcbiA0NTk6XFx0XFx0LyogQnVpbGQgcmVzcG9uc2Ugd2l0aCB0aGUgbWV0ZXJfaWQgYW5kIHN0YXRzIGZyb21cXG4gNDYwOlxcdFxcdCAqIHRoZSBvbGQgbWV0ZXIsIGlmIGFueS5cXG4gNDYxOlxcdFxcdCAqL1xcbiA0NjI6XFx0XFx0ZmFpbGVkID0gbmxhX3B1dF91MzIocmVwbHksIE9WU19NRVRFUl9BVFRSX0lELCBtZXRlcl9pZCk7XFxuIDQ2MzpcXHRcXHRXQVJOX09OKGZhaWxlZCk7XFxuIDQ2NDpcXHRcXHRpZiAob2xkX21ldGVyKSB7XFxuIDQ2NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm9sZF9tZXRlci1cXHUwMDNlbG9jayk7XFxuIDQ2NjpcXHRcXHRcXHRpZiAob2xkX21ldGVyLVxcdTAwM2VrZWVwX3N0YXRzKSB7XFxuIDQ2NzpcXHRcXHRcXHRcXHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCxcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG9sZF9tZXRlcik7XFxuIDQ2OTpcXHRcXHRcXHRcXHRXQVJOX09OKGVycik7XFxuIDQ3MDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE3OjQzLjg1NTY1NDA2OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODgwOTY1MDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipEZWJ1Z2dpbmcgdGhlIE1ldGVyIElEIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEknbSBoaXQgd2l0aCBhIHF1ZXN0aW9uOiBXaGVyZSAqZXhhY3RseSogaXMgYG1ldGVyLVx1MDAzZWlkYCBiZWluZyBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGJlY2F1c2Ugd2l0aG91dCBrbm93aW5nIHdoZXJlIHRoZSBJRCBpcyBwb3B1bGF0ZWQsIGFueSBzdWJzZXF1ZW50IGlzc3VlcyB3aXRoIHRoYXQgSUQgYXJlIGdvaW5nIHRvIGJlIGEgd2lsZCBnb29zZSBjaGFzZS4gSXMgaXQgZHVyaW5nIHRoZSBtZXRlcidzIGluaXRpYWxpemF0aW9uPyBJcyBpdCBiZWluZyBzZXQgYnkgc29tZSBleHRlcm5hbCBmdW5jdGlvbiBjYWxsPyBJcyB0aGVyZSBhIGRlZmF1bHQgdmFsdWUgYmVpbmcgYXNzaWduZWQgc29tZXdoZXJlIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYXNzaWdubWVudCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgYSBidWcuIFRpbWUgdG8gZGlnIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTc6NDYuNzM2NjI0NDQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzMzAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWV0ZXItXFx1MDAzZWlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTU0PXN0YXRpYyBzdHJ1Y3QgZHBfbWV0ZXIgKmxvb2t1cF9tZXRlcihjb25zdCBzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYxLVxcdG1ldGVyID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1toYXNoXSk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjI6XFx0aWYgKG1ldGVyIFxcdTAwMjZcXHUwMDI2IGxpa2VseShtZXRlci1cXHUwMDNlaWQgPT0gbWV0ZXJfaWQpKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTYzLVxcdFxcdHJldHVybiBtZXRlcjtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTExNj1zdGF0aWMgdm9pZCBkcF9tZXRlcl9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEyMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxMjE6XFx0aGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTIyLVxcdHJjdV9hc3NpZ25fcG9pbnRlcih0aS1cXHUwMDNlZHBfbWV0ZXJzW2hhc2hdLCBtZXRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0xMjU9c3RhdGljIHZvaWQgZHBfbWV0ZXJfaW5zdGFuY2VfcmVtb3ZlKHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xMjktXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6MTMwOlxcdGhhc2ggPSBtZXRlcl9oYXNoKHRpLCBtZXRlci1cXHUwMDNlaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTEzMS1cXHRSQ1VfSU5JVF9QT0lOVEVSKHRpLVxcdTAwM2VkcF9tZXRlcnNbaGFzaF0sIE5VTEwpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTM0PXN0YXRpYyBpbnQgYXR0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMTU1LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjE1NjpcXHRoYXNoID0gbWV0ZXJfaGFzaCh0aSwgbWV0ZXItXFx1MDAzZWlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy0xNTctXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0zMzE9c3RhdGljIHN0cnVjdCBkcF9tZXRlciAqZHBfbWV0ZXJfY3JlYXRlKHN0cnVjdCBubGF0dHIgKiphKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzUyLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjM1MzpcXHRtZXRlci1cXHUwMDNlaWQgPSBubGFfZ2V0X3UzMihhW09WU19NRVRFUl9BVFRSX0lEXSk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMzU0LVxcdG1ldGVyLVxcdTAwM2V1c2VkID0gZGl2X3U2NChrdGltZV9nZXRfbnMoKSwgMTAwMCAqIDEwMDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo0Ny4yNTc5NjAxNDJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4MTg5NTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZXRlciBJRCBWdWxuZXJhYmlsaXR5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZHBfbWV0ZXJfY3JlYXRlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGF0IHRoZSBsaW5lIGBtZXRlci1cdTAwM2VpZCA9IG5sYV9nZXRfdTMyKGFbT1ZTX01FVEVSX0FUVFJfSURdKTtgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBgbWV0ZXItXHUwMDNlaWRgIGlzIGdldHRpbmcgaXRzIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIHVzZXIsIHdoaWNoIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcuIExldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi5cblxuSWYgdGhlIHVzZXIgc2V0cyBgbWV0ZXItXHUwMDNlaWRgLCB0aGVuIHRoZSBgbWV0ZXJfaGFzaGAgdmFsdWUgaXMganVzdCB0aGF0IElEIG1vZHVsbyBgbl9tZXRlcnNgLCB3aGljaCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG1ldGVycywgcmlnaHQ/IE5vdywgaWYgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGp1c3QgYmxpbmRseSBjb3BpZXMgdGhlIG1ldGVycyBmcm9tIHRoZSBvbGQgdGFibGUgdG8gdGhlIG5ldyBvbmUsIGxldCdzIHNheSBpdCBjb3BpZXMgYHRpLVx1MDAzZWRwX21ldGVyc1tpXWAgdG8gYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gLCB0aGUgaGFzaCBpbiB0aGUgbmV3IGluc3RhbmNlICppcyogYGlgLiBCdXQsIGBtZXRlcl9oYXNoKG5ld190aSwgaWQpYCB3b3VsZCBub3cgdXNlIGBpZCAlIG5ld19uX21ldGVyc2AuXG5cbkhhbmcgb24sIGxldCdzIGNvbm5lY3QgdGhlIGRvdHMuIFRoZSBvbGQgaGFzaCAoYGlgKSBpcyB0aGUgc2FtZSBhcyBgaWQgJSBvbGRfbl9tZXRlcnNgLiBEb2VzIHRoYXQgbWVhbiB0aGF0IGBpZCAlIG5ld19uX21ldGVyc2AgKmFsc28qIGVxdWFscyBgaWA/IE5vLCBub3QgbmVjZXNzYXJpbHkhIElmIGBpZGAgaXMsIHNheSwgYG9sZF9uX21ldGVycyArIDFgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgaXMganVzdCBgMWAuIEJ1dCwgYGlkICUgbmV3X25fbWV0ZXJzYCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICsgMWAuXG5cblNvLCAqaWYqIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGNvcGllcyB0byB0aGUgc2FtZSBpbmRleCwgYGxvb2t1cF9tZXRlcmAgd291bGQgbG9vayBhdCBgaWQgJSBuZXdfbl9tZXRlcnNgLCB3aGljaCB3b3VsZCBiZSBgb2xkX25fbWV0ZXJzICsgMWAgaW4gb3VyIGV4YW1wbGUsIGFuZCBpdCB3b3VsZCBmaW5kLi4uIE5VTEwhIEJlY2F1c2UgaXQncyBsb29raW5nIGZvciBgMWAgd2hpY2ggaXMgbm93IGF0IGBvbGRfbl9tZXRlcnMgKyAxYCEgVGhhdCdzIGEgc2VyaW91cyBpbmNvbnNpc3RlbmN5LiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgcmV2aWV3IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCB0byBjb25maXJtIG15IHN1c3BpY2lvbi4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo1NC42Mzk4NjI4NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9tZXRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk0OlxcdHN0YXRpYyBpbnRcXG4gIDk1OlxcdGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IGRwX21ldGVyX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC1cXHUwMDNldGkpO1xcbiAgOTg6XFx0XFx0aW50IG5fbWV0ZXJzID0gbWluKHNpemUsIHRpLVxcdTAwM2VuX21ldGVycyk7XFxuICA5OTpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKm5ld190aTtcXG4gMTAwOlxcdFxcdGludCBpO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRuZXdfdGkgPSBkcF9tZXRlcl9pbnN0YW5jZV9hbGxvYyhzaXplKTtcXG4gMTAzOlxcdFxcdGlmICghbmV3X3RpKVxcbiAxMDQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX21ldGVyczsgaSsrKVxcbiAxMDc6XFx0XFx0XFx0aWYgKHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVxcdTAwM2VkcF9tZXRlcnNbaV0pKVxcbiAxMDg6XFx0XFx0XFx0XFx0bmV3X3RpLVxcdTAwM2VkcF9tZXRlcnNbaV0gPSB0aS1cXHUwMDNlZHBfbWV0ZXJzW2ldO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2V0aSwgbmV3X3RpKTtcXG4gMTExOlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ0aS1cXHUwMDNlcmN1LCBkcF9tZXRlcl9pbnN0YW5jZV9mcmVlX3JjdSk7XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxNzo1NC42NDAwMTQwNzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4NjU2MDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ldGVyIEluc3RhbmNlIFJlYWxsb2NhdGlvbiBMb2dpYyoqXG5cbk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBqdXN0IGRvZXMgYSBzdHJhaWdodCBjb3B5IGZyb20gdGhlIG9sZCBtZXRlciBhcnJheSAoYHRpLVx1MDAzZWRwX21ldGVyc2ApIHRvIHRoZSBuZXcgb25lIChgbmV3X3RpLVx1MDAzZWRwX21ldGVyc2ApLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGl0J3Mgb25seSBjYWxsZWQgd2hlbiBgdGJsLVx1MDAzZWNvdW50YCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYHRpLVx1MDAzZW5fbWV0ZXJzYC4gQW5kIHRoZSBjcnVjaWFsIGJpdCBpcyB0aGUgYG1ldGVyX2hhc2hgIGNhbGN1bGF0aW9uOiBgaWQgJSB0aS1cdTAwM2VuX21ldGVyc2AuXG5cbldhaXQgYSBtaW51dGUsIE9WUyB1c2Vyc3BhY2UgYWxsb2NhdGVzIG1ldGVyIElEcyBmcm9tIGFuIElEIHBvb2wsIHJpZ2h0PyBUaGUgY29kZSBjb21tZW50IGV2ZW4gc2F5cyB0aGUgc2xvdHMgc2hvdWxkIGdlbmVyYWxseSBiZSBlbXB0eSBiZWNhdXNlIG9mIHRoZSBJRCBwb29sIG1hbmFnZW1lbnQuIElmIHRoZSBJRHMgY29tZSBmcm9tIGEgcG9vbCwgdGhleSBhcmUgbW9zdCBsaWtlbHkgc2VxdWVudGlhbC4gSWYgdGhlIElEIGlzIHNlcXVlbnRpYWwsIGFuZCB0aGUgSUQgaXMgbGVzcyB0aGFuIGBuX21ldGVyc2AsIHRoZW4gYGlkICUgbl9tZXRlcnNgIGlzIGp1c3QgYGlkYC4gU28sIGlmIGBpZCBcdTAwM2Mgbl9tZXRlcnNgLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVycyA9PSBpZCAlIG5ld19uX21ldGVycyA9PSBpZGAsIGFuZCBjb3B5aW5nIHRvIHRoZSBzYW1lIGluZGV4IHNlZW1zIHRvIHdvcmsuXG5cbkJ1dCB3aGF0IGlmIGBpZGAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBuX21ldGVyc2A/IEluIHRoYXQgY2FzZSwgYGlkICUgb2xkX25fbWV0ZXJzYCBpc24ndCBqdXN0IGBpZGAuIEhvd2V2ZXIsIGlmIGBpZCBcdTAwM2U9IG5fbWV0ZXJzYCwgdGhlbiBgdGJsLVx1MDAzZWNvdW50YCB3b3VsZCBiZSBhdCBsZWFzdCBgbl9tZXRlcnNgLCByaWdodD8gTm90IG5lY2Vzc2FyaWx5ISBVc2Vyc3BhY2UgKmNvdWxkKiBzZW5kIGEgbGFyZ2UgYGlkYC4gSWYgdGhhdCBoYXBwZW5zLCB0aGVuIGBpZCAlIG9sZF9uX21ldGVyc2AgbWlnaHQgY29sbGlkZSB3aXRoIGFuIGV4aXN0aW5nIG1ldGVyLiBCdXQsIHdhaXQsIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24sIGBhdHRhY2hfbWV0ZXJgIHJldHVybnMgYC1FQlVTWWAuXG5cbmBgYGNcblx0aWYgKHVubGlrZWx5KHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRpLVx1MDAzZWRwX21ldGVyc1toYXNoXSkpKSB7XG5cdFx0ZXJyID0gLUVCVVNZO1xuXHRcdGdvdG8gYXR0YWNoX2Vycjtcblx0fVxuYGBgXG5cblNvLCB5b3UgY2FuJ3QgaGF2ZSB0d28gbWV0ZXJzIHdpdGggdGhlIHNhbWUgaGFzaCB2YWx1ZSwgc2luY2UgYGF0dGFjaF9tZXRlcmAgd29uJ3QgYWxsb3cgaXQuIEFuZCBzaW5jZSBgdGJsLVx1MDAzZWNvdW50IFx1MDAzYyB0aS1cdTAwM2VuX21ldGVyc2AgKG90aGVyd2lzZSwgYSByZWFsbG9jYXRpb24gd291bGQgb2NjdXIpLCB0aGVyZSdzICphbHdheXMqIGFuIGVtcHR5IHNsb3QgYXZhaWxhYmxlLlxuXG5CdXQgaGVyZSdzIHRoZSBraWNrZXI6IGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBjb3BpZXMgdG8gdGhlICpzYW1lKiBpbmRleCwgYXNzdW1pbmcgYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gIGlzIHRoZSByaWdodCBzbG90IGZvciB0aGUgbWV0ZXIuIEhvd2V2ZXIsIHRoZSAqY29ycmVjdCogc2xvdCBpcyBkZXRlcm1pbmVkIGJ5IGBtZXRlci1cdTAwM2VpZCAlIG5ld19uX21ldGVyc2AuIElmIGBtZXRlci1cdTAwM2VpZCBcdTAwM2U9IG9sZF9uX21ldGVyc2AsIHRoZW4gYG1ldGVyLVx1MDAzZWlkICUgbmV3X25fbWV0ZXJzYCBpcyAqTk9UKiBlcXVhbCB0byBgaWAuIENvbnNlcXVlbnRseSwgYGxvb2t1cF9tZXRlcmAgd2lsbCBmYWlsIHRvIGZpbmQgaXQhXG5cblRoaXMuLi4gdGhpcyBmZWVscyBsaWtlIGEgcG90ZW50aWFsIGJ1ZyBpbiBPVlMhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYW55IG90aGVyIHBhdGNoZXMgaGF2ZSB0b3VjaGVkIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCByZWNlbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToxODowMy4zMjY1Nzk4NzdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjU2MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmM9OTQ9c3RhdGljIGludFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjk1OmRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2Moc3RydWN0IGRwX21ldGVyX3RhYmxlICp0YmwsIHUzMiBzaXplKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTk2LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTEzND1zdGF0aWMgaW50IGF0dGFjaF9tZXRlcihzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE0OC1cXHRpZiAodGJsLVxcdTAwM2Vjb3VudCBcXHUwMDNlPSB0aS1cXHUwMDNlbl9tZXRlcnMpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoxNDk6XFx0XFx0ZXJyID0gZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIHRpLVxcdTAwM2VuX21ldGVycyAqIDIpO1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTE1MC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MTc0PXN0YXRpYyBpbnQgZGV0YWNoX21ldGVyKHN0cnVjdCBkcF9tZXRlcl90YWJsZSAqdGJsLCBzdHJ1Y3QgZHBfbWV0ZXIgKm1ldGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAwLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjIwMTpcXHRcXHRpZiAoZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyh0YmwsIGhhbGZfc2l6ZSkpXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjAyLVxcdFxcdFxcdGdvdG8gc2hyaW5rX2VycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6MDMuNDIyMjQzMjM1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NzgxNDcwMzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1ldGVyIFRhYmxlIFJlc2l6aW5nKipcblxuT2theSwgc28gdGhlIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCBmdW5jdGlvbiBpc24ndCAqZGlyZWN0bHkqIG1vZGlmaWVkLCB3aGljaCBpcyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkLiBUaGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiB0aGUgYGF0dGFjaF9tZXRlcmAgZnVuY3Rpb24uIExldCBtZSBicmVhayB0aGlzIGRvd24gbG9naWNhbGx5LlxuXG5CZWZvcmUgdGhlIHBhdGNoLCBoZXJl4oCZcyB3aGF0IGhhcHBlbmVkOiBhIG5ldyBtZXRlciwgYG1ldGVyYCwgd2FzIGluc2VydGVkIGludG8gdGhlIGN1cnJlbnQgbWV0ZXIgdGFibGUgaW5zdGFuY2UsIGB0aWAuICBDcnVjaWFsbHksIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uLCBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAsIHdhcyBwZXJmb3JtZWQgdXNpbmcgdGhlIGN1cnJlbnQgYHRpYCwgKmJlZm9yZSogYW55IHJlc2l6aW5nIGhhcHBlbmVkLiBJZiB0aGUgdGFibGUgd2FzIGdvaW5nIHRvIGJlIHJlYWxsb2NhdGVkIGR1ZSB0byBjYXBhY2l0eSwgdGhpcyBpbnNlcnRpb24gaGFwcGVuZWQgaW50byB0aGUgKm9sZCogdGFibGUuIFRoZW4sIGBkcF9tZXRlcl9pbnN0YW5jZV9yZWFsbG9jYCAqZGlkKiBnZXQgY2FsbGVkIGlmIG5lY2Vzc2FyeSwgd2hpY2ggYWxsb2NhdGVzIGEgYG5ld190aWAsIGNvcGllcyB0aGUgY29udGVudHMgb2YgYHRpYCB0byBgbmV3X3RpYCwgYW5kIGZyZWVzIHRoZSBvbGQgYHRpYC4gVGhlIGluc2VydCB3YXMgY2FsbGVkICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4gVGhlIGNvcGllZCBtZXRlcnMgaW4gYG5ld190aWAgd291bGQgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlcy5cblxuTXkgbWVudGFsIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIG5vdyBiZWNhdXNlIEkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgKm1ham9yKiBpbmRleGluZyBwcm9ibGVtIGlmIHRoZSB0YWJsZSBzaXplIGlzIGNoYW5nZWQuIGBtZXRlcl9oYXNoKHRpLCBtZXRlci1cdTAwM2VpZClgIGlzIGBtZXRlci1cdTAwM2VpZCAlIHRpLVx1MDAzZW5fbWV0ZXJzYC4gSWYgYSByZWFsbG9jYXRpb24gaGFwcGVucywgdGhlIGluZGV4IGNhbGN1bGF0aW9uIGNoYW5nZXMgYmVjYXVzZSBgbmV3X3RpLVx1MDAzZW5fbWV0ZXJzYCBpcyBkaWZmZXJlbnQuIEEgbWV0ZXIncyBpbnRlbmRlZCBsb2NhdGlvbiB3aXRoaW4gdGhlICpuZXcqIHRhYmxlIGNvdWxkIGJlIGNvbXBsZXRlbHkgd3JvbmchIEFueSBzZWFyY2ggZm9yIHRoZSBtZXRlciBhZnRlciBhIHJlYWxsb2Mgd291bGQgbGlrZWx5IGZhaWwuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBhIG5ldyBtZXRlciBtaWdodCBnZXQgbG9zdCBpbiB0aGUgc2h1ZmZsZSwgYnV0IHRoaXMgaXMgYSBmYXIgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtOiBleGlzdGluZyBtZXRlcnMgY291bGQgYmUgaW5jb3JyZWN0bHkgaW5kZXhlZCAqYWZ0ZXIqIHRoZSByZWFsbG9jYXRpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIHRvIHNlZSBob3cgaXQgZml4ZXMgdGhpcy4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyEgVGhlIHBhdGNoIGZpcnN0IGNoZWNrcyBpZiBhIHJlYWxsb2NhdGlvbiBpcyBuZWVkZWQuIElmIHNvLCBpdCBjYWxscyBgZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvY2AuICpUaGVuKiwgYWZ0ZXIgdGhlIHRhYmxlIGlzIHJlc2l6ZWQsIHRoZSBjb2RlIGdldHMgdGhlIG5ldyBgdGlgIHRhYmxlIHVzaW5nIGByY3VfZGVyZWZlcmVuY2Vfb3ZzbCh0YmwtXHUwMDNldGkpYCwgYW5kIHRoZSBoYXNoIGluZGV4IGNhbGN1bGF0aW9uIG5vdyBoYXBwZW5zIHVzaW5nIHRoZSAqbmV3KiBgdGlgOiBgaGFzaCA9IG1ldGVyX2hhc2godGksIG1ldGVyLVx1MDAzZWlkKWAuIFRoZSBtZXRlciBpcyB0aGVuIGluc2VydGVkIGludG8gdGhlIGBuZXdfdGlgIGF0IHRoZSBjb3JyZWN0IGxvY2F0aW9uLlxuXG5ZZXMhIFRoYXQncyBpdC4gSXTigJlzIGEgdmVyeSBzaW1wbGUgYW5kIGVsZWdhbnQgZml4IGJ5IHJlb3JkZXJpbmcgdGhlIGxvZ2ljLiBJIG1pc3NlZCBpdCBhdCBmaXJzdCwgYnV0IG5vdyBpdCdzIGNsZWFyOiAgdGhlIGluc2VydGlvbiBpcyBwZXJmb3JtZWQgYWdhaW5zdCB0aGUgKnJlc2l6ZWQqIHRhYmxlIG5vdywgYW5kIHRoZSBoYXNoIGNhbGN1bGF0aW9uIHVzZXMgdGhlIG5ldywgY29ycmVjdCB0YWJsZSBzaXplLlxuXG5NeSBjb25jZXJuIG5vdyBnb2VzIHRvIGFsbCBvZiB0aGUgZXhpc3RpbmcgbWV0ZXJzIHRoYXQgd2VyZSAqYWxyZWFkeSogaW4gdGhlIHRhYmxlIGJlZm9yZSB0aGUgcmVhbGxvYy4gV2VyZSB0aG9zZSBtZXRlcnMgcmVpbmRleGVkIHByb3Blcmx5PyBMZXQgbWUgY2hlY2sgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGFnYWluIHRvIGVuc3VyZSBhbnkgbWV0ZXJzIGNvcGllZCBmcm9tIGB0aWAgdG8gYG5ld190aWAgYXJlIHByb3Blcmx5IHJlaW5kZXhlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjIwLjIwMzcxODI1NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL21ldGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTQ6XFx0c3RhdGljIGludFxcbiAgOTU6XFx0ZHBfbWV0ZXJfaW5zdGFuY2VfcmVhbGxvYyhzdHJ1Y3QgZHBfbWV0ZXJfdGFibGUgKnRibCwgdTMyIHNpemUpXFxuICA5NjpcXHR7XFxuICA5NzpcXHRcXHRzdHJ1Y3QgZHBfbWV0ZXJfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLVxcdTAwM2V0aSk7XFxuICA5ODpcXHRcXHRpbnQgbl9tZXRlcnMgPSBtaW4oc2l6ZSwgdGktXFx1MDAzZW5fbWV0ZXJzKTtcXG4gIDk5OlxcdFxcdHN0cnVjdCBkcF9tZXRlcl9pbnN0YW5jZSAqbmV3X3RpO1xcbiAxMDA6XFx0XFx0aW50IGk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdFxcdG5ld190aSA9IGRwX21ldGVyX2luc3RhbmNlX2FsbG9jKHNpemUpO1xcbiAxMDM6XFx0XFx0aWYgKCFuZXdfdGkpXFxuIDEwNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbWV0ZXJzOyBpKyspXFxuIDEwNzpcXHRcXHRcXHRpZiAocmN1X2RlcmVmZXJlbmNlX292c2wodGktXFx1MDAzZWRwX21ldGVyc1tpXSkpXFxuIDEwODpcXHRcXHRcXHRcXHRuZXdfdGktXFx1MDAzZWRwX21ldGVyc1tpXSA9IHRpLVxcdTAwM2VkcF9tZXRlcnNbaV07XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZXRpLCBuZXdfdGkpO1xcbiAxMTE6XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnRpLVxcdTAwM2VyY3UsIGRwX21ldGVyX2luc3RhbmNlX2ZyZWVfcmN1KTtcXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjIwLjIwMzg5NDYyNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjExMjA1NDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBhIFN1YnRsZSBNZXRlciBBbGxvY2F0aW9uIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIHRoaXMganVzdCBjb3BpZXMgc3R1ZmYgYXJvdW5kLlwiIFRoZSBjb2RlIHNpbXBseSBjb3BpZXMgYHRpLVx1MDAzZWRwX21ldGVyc1tpXWAgdG8gYG5ld190aS1cdTAwM2VkcF9tZXRlcnNbaV1gLiBFYXN5LCByaWdodD8gSWYgdGhlcmUgYXJlIG90aGVyIG1ldGVycyBpbiB0aGUgYHRpYCBzdHJ1Y3R1cmUsIHRoZXkncmUgY29waWVkIHRvIHRoZSBzYW1lIGluZGljZXMuIEJ1dCB0aGVuIGl0IGhpdCBtZTogd2hhdCBhYm91dCB0aGUgbWV0ZXIgKklEKj8gSWYgYSBtZXRlcidzIGBpZGAgaXNuJ3Qgc3VjaCB0aGF0IGBpZCAlIG5ld19uX21ldGVycyA9PSBpYCwgdGhlbiB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhleSdsbCBlbmQgdXAgYXQgdGhlIHdyb25nIGluZGV4IGluIHRoZSByZWFsbG9jYXRlZCB0YWJsZS5cblxuSSBzdGFydGVkIHRoaW5raW5nIGFib3V0IGhvdyBPVlMgdXNlcnNwYWNlIGFsbG9jYXRlcyBJRHMuIElmIGl0J3Mgc2VxdWVudGlhbCwgdGhlIGZpcnN0IG1ldGVyIGdldHMgYGlkID0gMGAsIHNlY29uZCBnZXRzIGBpZCA9IDFgLCBhbmQgc28gb24uIExldCdzIHNheSB3ZSd2ZSByZWFjaGVkIGEgdGFibGUgc2l6ZSB3aGVyZSBgdGJsLVx1MDAzZWNvdW50YCBpcyBlcXVhbCB0byBgdGktXHUwMDNlbl9tZXRlcnNgLCBzYXkgYG5fbWV0ZXJzID0gMTAyNGAuIFRoZSBtZXRlciBJRHMgd2lsbCBiZSBmcm9tIGAwYCB0byBgMTAyM2AuIFNvIGZvciBhbGwgdGhlc2UgbWV0ZXJzLCBgaWQgXHUwMDNjIDEwMjRgLiBUaGlzIG1lYW5zIHRoYXQgYGlkICUgMTAyNCA9PSBpZGAuIE5vdywgaWYgd2UgcmVhbGxvY2F0ZSB0byBgMjA0OGAsIGBpZCAlIDIwNDhgIHdpbGwgKnN0aWxsKiBlcXVhbCBgaWRgLiBJdCBtZWFucyB0aGF0IGZvciAqZXhpc3RpbmcqIG1ldGVycywgY29weWluZyB0byB0aGUgc2FtZSBpbmRleCBpcyBhY3R1YWxseSBjb3JyZWN0IVxuXG5CdXQuLi4gd2hhdCBhYm91dCAqbmV3KiBtZXRlcnM/IExldCdzIHNheSBhIG5ldyBtZXRlciBjb21lcyBhbG9uZyB3aXRoIElEIGAxMDI0YC4gSWYgd2UgaW5zZXJ0IGl0ICpiZWZvcmUqIHRoZSByZWFsbG9jYXRpb24sIHdlIGNhbGN1bGF0ZSBgaGFzaCA9IDEwMjQgJSAxMDI0ID0gMGAuIFNvLCBpdCBnb2VzIGludG8gaW5kZXggYDBgLiBUaGVuIHRoZSByZWFsbG9jYXRpb24gaGFwcGVucywgYW5kIGluZGV4IGAwYCBpcyBjb3BpZWQgdG8gaW5kZXggYDBgIGluIHRoZSBuZXcgdGFibGUuIEJ1dCBpbiB0aGUgbmV3IHRhYmxlLCBpdHMgKmNvcnJlY3QqIGhhc2ggc2hvdWxkIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCdzIG5vdyBhdCB0aGUgd3JvbmcgaW5kZXgsIG92ZXJ3cml0aW5nIHRoZSBtZXRlciB3aXRoIElEIGAwYCEgQm9vbSwgYSBzdWJ0bGUgYW5kIGJlYXV0aWZ1bCBidWchXG5cblRoZSBmaXggaGVyZSBpcyB0byBtb3ZlIHRoZSBpbnNlcnRpb24gKmFmdGVyKiB0aGUgcmVhbGxvY2F0aW9uLiBUaGF0IHdheSwgdGhlIG5ldyBtZXRlciB3aXRoIElEIGAxMDI0YCBnZXRzIGhhc2hlZCB3aXRoIGBuZXdfbl9tZXRlcnMgPSAyMDQ4YCwgc28gYGhhc2ggPSAxMDI0ICUgMjA0OCA9IDEwMjRgLiBJdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgaW5kZXggKGAxMDI0YCksIGFuZCBpdCB3b24ndCBvdmVyd3JpdGUgaW5kZXggYDBgLlxuXG5UaGVuIEkgc3RhcnRlZCB3b25kZXJpbmcuLi4gd2hhdCBpZiB1c2Vyc3BhY2UgKmRvZXNuJ3QqIGFsbG9jYXRlIElEcyBzZXF1ZW50aWFsbHk/IExldCdzIHNheSB1c2Vyc3BhY2Ugc2VuZHMgYGlkID0gMTAyNGAgd2hlbiBgbl9tZXRlcnMgPSAxMDI0YC4gSXQnbGwgYmUgaW5zZXJ0ZWQgYXQgaW5kZXggYDBgLiBJZiB0aGVyZSdzIGFscmVhZHkgYSBtZXRlciBhdCBpbmRleCBgMGAsIGl0IHJldHVybnMgYC1FQlVTWWAuIElmIGl0J3MgZW1wdHksIGl0IGdvZXMgaW4uIEJ1dCBpZiB0aGlzIG5ldyBtZXRlciB3aXRoIGBpZD0xMDI0YCBpcyB0aGUgKmZpcnN0KiBtZXRlciAoc28gYHRibC1cdTAwM2Vjb3VudCA9IDBgKSwgdGhlcmUncyBubyByZWFsbG9jYXRpb24uIFNvIGl0IHN0YXlzIGluIGluZGV4IGAwYC4gV2hlbiByZWFsbG9jYXRpb24gKmRvZXMqIGhhcHBlbiwgaXQgc3RpbGwgZ2V0cyBjb3BpZWQgdG8gaW5kZXggYDBgLCBldmVuIHRob3VnaCBpdHMgaGFzaCBpbiB0aGUgbmV3IHRhYmxlICpzaG91bGQqIGJlIGAxMDI0ICUgMjA0OCA9IDEwMjRgLiBTbywgc3RpbGwgd3JvbmchIERvZXMgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGhhbmRsZSB0aGlzPyBOb3BlLiBJdCBqdXN0IGNvcGllcyBgaWAgdG8gYGlgLiBTbywgZXZlbiB3aXRoIG5vbi1zZXF1ZW50aWFsIElEcywgYGRwX21ldGVyX2luc3RhbmNlX3JlYWxsb2NgIGlzIHN0aWxsIGJyb2tlbiBmb3IgZXhpc3RpbmcgbWV0ZXJzLlxuXG5CdXQgd2FpdC4uLiB0aGUgY29tbWVudCBpbiB0aGUgY29kZSBzYXlzIE9WUyB1c2VzIGBpZC1wb29sYCBmb3IgZmV0Y2hpbmcgYXZhaWxhYmxlIElEcy4gSXQgYWxsb2NhdGVzIHRoZW0gc2VxdWVudGlhbGx5LCBzdGFydGluZyBhdCAwLiBTbywgYGlkIFx1MDAzYyBuX21ldGVyc2Agc2hvdWxkICphbHdheXMqIGJlIHRydWUgZm9yIGV4aXN0aW5nIG1ldGVycy4gSWYgYGlkLXBvb2xgIGFsbG9jYXRlcyBzZXF1ZW50aWFsbHksIHRoZW4gdGhlIElEIGlzIGFsd2F5cyBgXHUwMDNjIG1heF9tZXRlcnNfYWxsb3dlZGAuIFRoZSB2YWx1ZSBvZiBgbl9tZXRlcnNgIGdyb3dzIGFzIGBjb3VudGAgKG51bWJlciBvZiBtZXRlcnMpIGdyb3dzLiBTaW5jZSBJRHMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIHRoZSBtYXhpbXVtIElEIGlzIHJvdWdobHkgZXF1YWwgdG8gYGNvdW50YC4gQW5kIGBuX21ldGVycyBcdTAwM2UgY291bnRgLiBTbyB0aGUgbWF4aW11bSBJRCBpcyBhbHdheXMgYFx1MDAzYyBuX21ldGVyc2AuIFRoZXJlZm9yZSwgYGlkICUgbl9tZXRlcnMgPT0gaWRgIGlzIGFsd2F5cyB0cnVlIVxuXG5UaGlzIG1lYW5zIHRoZSBgbWV0ZXJfaGFzaGAgaXMgZWZmZWN0aXZlbHkganVzdCB0aGUgYGlkYC4gVGhlIG1vZHVsbyBvcGVyYXRpb24gaXMgdGhlcmUgYXMgYSBzYWZldHkgbWVhc3VyZSwgaW4gY2FzZSB1c2Vyc3BhY2UgZXZlciBzZW5kcyBhIGxhcmdlIElELiBJbiB0aGF0IGNhc2UsIGl0IG1pZ2h0IGNvbGxpZGUgYW5kIHJldHVybiBgLUVCVVNZYCwgb3IgaXQgY291bGQgYmUgaW5zZXJ0ZWQgYW5kIHRoZW4gbG9zdCB1cG9uIHJlYWxsb2NhdGlvbi4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgaW1tZWRpYXRlIGlzc3VlIHdoZXJlIGEgc2VxdWVudGlhbGx5IGFsbG9jYXRlZCBJRCB0aGF0IHRyaWdnZXJzIHJlYWxsb2NhdGlvbiB3b3VsZCBiZSBpbnNlcnRlZCBhdCBgaWQgJVxuXG4iLCJJbnB1dFRva2VucyI6MjI0MDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6MzYuMzE1OTUzNjlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjM1NzEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfbWV0ZXJfY21kX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYz0yMTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyMTU6b3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCB1OCBjbWQsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjE2LVxcdFxcdFxcdCAgc3RydWN0IG92c19oZWFkZXIgKipvdnNfcmVwbHlfaGVhZGVyKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM2LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjIzNzpzdGF0aWMgaW50IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnJlcGx5LCB1MzIgbWV0ZXJfaWQsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjM4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRwX21ldGVyICptZXRlcilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI3Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyNzg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjc5LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTI4Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzoyODc6XFx0cmVwbHkgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXJ0KGluZm8sIE9WU19NRVRFUl9DTURfRkVBVFVSRVMsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtMjg4LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM9MzMxPXN0YXRpYyBzdHJ1Y3QgZHBfbWV0ZXIgKmRwX21ldGVyX2NyZWF0ZShzdHJ1Y3QgbmxhdHRyICoqYSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMC1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0MTE6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQxMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MzAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NDMxOlxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX1NFVCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00MzItXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjYtXFx0XFx0aWYgKG9sZF9tZXRlci1cXHUwMDNla2VlcF9zdGF0cykge1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjQ2NzpcXHRcXHRcXHRlcnIgPSBvdnNfbWV0ZXJfY21kX3JlcGx5X3N0YXRzKHJlcGx5LCBtZXRlcl9pZCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy00NjgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0b2xkX21ldGVyKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4Ny1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo0ODg6c3RhdGljIGludCBvdnNfbWV0ZXJfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTQ4OS17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MDMtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTA0OlxcdHJlcGx5ID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGFydChpbmZvLCBPVlNfTUVURVJfQ01EX0dFVCxcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MDUtXFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2b3ZzX3JlcGx5X2hlYWRlcik7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01MjQtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtZXRlci1cXHUwMDNlbG9jayk7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTI1OlxcdGVyciA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhdHMocmVwbHksIG1ldGVyX2lkLCBtZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTI2LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtZXRlci1cXHUwMDNlbG9jayk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NDAtXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NTQxOnN0YXRpYyBpbnQgb3ZzX21ldGVyX2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy01NDIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU0LVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjU1NTpcXHRyZXBseSA9IG92c19tZXRlcl9jbWRfcmVwbHlfc3RhcnQoaW5mbywgT1ZTX01FVEVSX0NNRF9ERUwsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm92c19yZXBseV9oZWFkZXIpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTcxLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2b2xkX21ldGVyLVxcdTAwM2Vsb2NrKTtcXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYzo1NzI6XFx0XFx0ZXJyID0gb3ZzX21ldGVyX2NtZF9yZXBseV9zdGF0cyhyZXBseSwgbWV0ZXJfaWQsIG9sZF9tZXRlcik7XFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNTczLVxcdFxcdFdBUk5fT04oZXJyKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jPTY4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGRwX21ldGVyX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvbWV0ZXIuYy02OTAtXFx0XFx0LmZsYWdzID0gMCxcXHRcXHQgIC8qIE9LIGZvciB1bnByaXZpbGVnZWQgdXNlcnMuICovXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmM6NjkxOlxcdFxcdC5kb2l0ID0gb3ZzX21ldGVyX2NtZF9mZWF0dXJlc1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5Mi1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNjk3LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjY5ODpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfc2V0LFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTY5OS1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzAyLVxcdFxcdC5mbGFncyA9IDAsXFx0XFx0ICAvKiBPSyBmb3IgdW5wcml2aWxlZ2VkIHVzZXJzLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcwMzpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZ2V0LFxcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jLTcwNC1cXHR9LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgICAqL1xcbm5ldC9vcGVudnN3aXRjaC9tZXRlci5jOjcxMDpcXHRcXHQuZG9pdCA9IG92c19tZXRlcl9jbWRfZGVsXFxubmV0L29wZW52c3dpdGNoL21ldGVyLmMtNzExLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjE4OjM2Ljg1ODMxNjgyOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzU5NDYyMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1ldGVyIEFQSSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG1ldGVyIEFQSSBpbiBPcGVuIHZTd2l0Y2ggaXMgdGhvcm91Z2hseSBmdXp6ZWQuIE15IGluaXRpYWwgcGxhbiBpcyB0byBhZGQgYG92c19tZXRlcl9jbWRfc2V0YCwgYG92c19tZXRlcl9jbWRfZ2V0YCwgYG92c19tZXRlcl9jbWRfZGVsYCwgYW5kIGBvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGNydWNpYWwgY29tbWFuZHMuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyB0aGUgcmlnaHQgb25lIHRvIHRhcmdldC4gWWVwLCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIE9wZW4gdlN3aXRjaCBpdHNlbGYuIEknbGwgaGVkZ2UgbXkgYmV0cyBhbmQgYWRkIGBORVRgIGFuZCBgSU5FVGAgdG9vLCBqdXN0IGFzIGEgc2FmZXR5IG5ldCwgdGhvdWdoIGBPUEVOVlNXSVRDSGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIE9oLCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBhdm9pZCB0aG9zZSBcIkNPTkZJR19cIiBwcmVmaXhlcyEgUmlnaHQsIGp1c3QgYE9QRU5WU1dJVENIYCBpdCBpcy5cblxuTGV0J3MgcXVpY2tseSByZWNhcCB0aGUgcmF0aW9uYWxlIGhlcmUuIFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbmFzdHkgYnVnIGluIGBhdHRhY2hfbWV0ZXJgLiBCYXNpY2FsbHksIG5ldyBtZXRlcnMgd2VyZSBwb3RlbnRpYWxseSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBvbGQgbWV0ZXIgYXJyYXkgKmJlZm9yZSogaXQgd2FzIHJlYWxsb2NhdGVkLiBUaGVuLCB3aGVuIHRoZSBhcnJheSBnb3QgcmVhbGxvY2F0ZWQsIHRoZSBtZXRlciB3YXMgY29waWVkIHRvIHRoZSB3cm9uZyBpbmRleCwgdGhhbmtzIHRvIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2luZywgbGVhZGluZyB0byBsb3N0IG9yIG92ZXJ3cml0dGVuIG1ldGVycy4gVGhlIGZpeCBlbGVnYW50bHkgcmVvcmRlcnMgdGhpbmdzOiByZWFsbG9jYXRlIHRoZSBhcnJheSAqZmlyc3QqLCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbiB0aGUgKm5ldyogYXJyYXkuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBmaXggaW4gY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgT3BlbiB2U3dpdGNoIG5ldGxpbmsgQVBJIOKAkyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuXG5cbkFscmlnaHQsIHdpdGggdGhhdCBpbiBtaW5kLCBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI0MiwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MTg6NDQuMjE3NzgyNDU1WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNjYyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm92c19tZXRlcl9jbWRfc2V0XCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2dldFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9kZWxcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZmVhdHVyZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgYXR0YWNoX21ldGVyYCB3aGVyZSBhIG5ldyBtZXRlciBjb3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvbGQgbWV0ZXIgaW5zdGFuY2UgYXJyYXkgYmVmb3JlIHJlYWxsb2NhdGlvbiwgYW5kIHRoZW4gY29waWVkIHRvIHRoZSBuZXcgYXJyYXkgYXQgdGhlIHdyb25nIGluZGV4IChiZWNhdXNlIHRoZSBoYXNoIG1vZHVsbyBjaGFuZ2VzIGFmdGVyIHJlYWxsb2NhdGlvbikuIFRoaXMgd291bGQgY2F1c2UgdGhlIG1ldGVyIHRvIGJlIGxvc3Qgb3Igb3ZlcndyaXRlIGFub3RoZXIgbWV0ZXIuIFRoZSBmaXggcmVvcmRlcnMgdGhlIG9wZXJhdGlvbnMgdG8gcmVhbGxvY2F0ZSB0aGUgYXJyYXkgZmlyc3QsIGFuZCB0aGVuIGNhbGN1bGF0ZSB0aGUgaGFzaCBhbmQgaW5zZXJ0IHRoZSBtZXRlciBpbnRvIHRoZSBuZXcgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKE9wZW4gdlN3aXRjaCBuZXRsaW5rIEFQSSkgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdnNfbWV0ZXJfY21kX3NldFwiLFxuICAgIFwib3ZzX21ldGVyX2NtZF9nZXRcIixcbiAgICBcIm92c19tZXRlcl9jbWRfZGVsXCIsXG4gICAgXCJvdnNfbWV0ZXJfY21kX2ZlYXR1cmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGF0dGFjaF9tZXRlcmAgd2hlcmUgYSBuZXcgbWV0ZXIgY291bGQgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIG1ldGVyIGluc3RhbmNlIGFycmF5IGJlZm9yZSByZWFsbG9jYXRpb24sIGFuZCB0aGVuIGNvcGllZCB0byB0aGUgbmV3IGFycmF5IGF0IHRoZSB3cm9uZyBpbmRleCAoYmVjYXVzZSB0aGUgaGFzaCBtb2R1bG8gY2hhbmdlcyBhZnRlciByZWFsbG9jYXRpb24pLiBUaGlzIHdvdWxkIGNhdXNlIHRoZSBtZXRlciB0byBiZSBsb3N0IG9yIG92ZXJ3cml0ZSBhbm90aGVyIG1ldGVyLiBUaGUgZml4IHJlb3JkZXJzIHRoZSBvcGVyYXRpb25zIHRvIHJlYWxsb2NhdGUgdGhlIGFycmF5IGZpcnN0LCBhbmQgdGhlbiBjYWxjdWxhdGUgdGhlIGhhc2ggYW5kIGluc2VydCB0aGUgbWV0ZXIgaW50byB0aGUgbmV3IGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChPcGVuIHZTd2l0Y2ggbmV0bGluayBBUEkpIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowbkz7j[1] Phase: Succeeded StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 2026-07-28 01:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 2026-07-28 01:18:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2] Phase: Running StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 2026-07-28 01:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 01:18:55 +0000 UTC FinishedAt: 2026-07-28 01:19:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbkz7j/series-workflowbkz7j-convert-artifact-838063962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 01:19:05 +0000 UTC FinishedAt: 2026-07-28 02:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 01:19:05 +0000 UTC FinishedAt: 2026-07-28 02:14:05 +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:*0f3e885a-db9e-4703-b012-9ec48da4cc55,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-workflowbkz7j/series-workflowbkz7j-convert-artifact-838063962/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": "da76c093-0eb0-4abc-a3d6-28710f70177f", "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-workflowbkz7j/series-workflowbkz7j-build-action-3475115016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 01:19:05 +0000 UTC FinishedAt: 2026-07-28 02:13:55 +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:*0f3e885a-db9e-4703-b012-9ec48da4cc55,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-workflowbkz7j/series-workflowbkz7j-convert-artifact-838063962/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": "da76c093-0eb0-4abc-a3d6-28710f70177f", "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-workflowbkz7j/series-workflowbkz7j-build-action-3475115016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 02:14:05 +0000 UTC FinishedAt: 2026-07-28 02:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 02:14:05 +0000 UTC FinishedAt: 2026-07-28 02:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 02:14:05 +0000 UTC FinishedAt: 2026-07-28 02:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 02:14:05 +0000 UTC FinishedAt: 2026-07-28 02:14:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbkz7j/series-workflowbkz7j-convert-artifact-1873417653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 02:14:15 +0000 UTC FinishedAt: 2026-07-28 02:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 02:14:15 +0000 UTC FinishedAt: 2026-07-28 02:16:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da76c093-0eb0-4abc-a3d6-28710f70177f,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-workflowbkz7j/series-workflowbkz7j-build-action-3475115016/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-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 02:16:21 +0000 UTC FinishedAt: 2026-07-28 02:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 02:16:21 +0000 UTC FinishedAt: 2026-07-28 02:16:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 02:16:21 +0000 UTC FinishedAt: 2026-07-28 02:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 02:16:21 +0000 UTC FinishedAt: 2026-07-28 02:57:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0f3e885a-db9e-4703-b012-9ec48da4cc55,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-workflowbkz7j/series-workflowbkz7j-convert-artifact-1873417653/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": "989c46ff-6c7a-45e1-867e-2cbc63c350b2", "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-workflowbkz7j/series-workflowbkz7j-build-action-70665921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 02:16:21 +0000 UTC FinishedAt: 2026-07-28 02:57:35 +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:*0f3e885a-db9e-4703-b012-9ec48da4cc55,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-workflowbkz7j/series-workflowbkz7j-convert-artifact-1873417653/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": "989c46ff-6c7a-45e1-867e-2cbc63c350b2", "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-workflowbkz7j/series-workflowbkz7j-build-action-70665921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 02:57:47 +0000 UTC FinishedAt: 2026-07-28 02:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 02:57:47 +0000 UTC FinishedAt: 2026-07-28 02:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 02:57:47 +0000 UTC FinishedAt: 2026-07-28 02:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 02:57:47 +0000 UTC FinishedAt: 2026-07-28 02:59:25 +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:*989c46ff-6c7a-45e1-867e-2cbc63c350b2,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-workflowbkz7j/series-workflowbkz7j-build-action-70665921/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-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"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:*da76c093-0eb0-4abc-a3d6-28710f70177f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*989c46ff-6c7a-45e1-867e-2cbc63c350b2,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-workflowbkz7j/series-workflowbkz7j-build-action-3475115016/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-workflowbkz7j/series-workflowbkz7j-build-action-70665921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 2026-07-28 03:00:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 2026-07-28 03:00:02 +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":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"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-workflowbkz7j/series-workflowbkz7j-convert-artifact-3207508378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 2026-07-28 02:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 2026-07-28 02:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 02:59:38 +0000 UTC FinishedAt: 2026-07-28 02:59:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-07-28 03:00:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbkz7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ovs_meter_cmd_set","ovs_meter_cmd_get","ovs_meter_cmd_del","ovs_meter_cmd_features"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bd0e9289e2642f6a5c54faad304ce0f41e926d22","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"65839df7-7272-4674-b0ce-ab0edc4f280e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-07-28 03:00:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*da76c093-0eb0-4abc-a3d6-28710f70177f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*989c46ff-6c7a-45e1-867e-2cbc63c350b2,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-workflowbkz7j/series-workflowbkz7j-build-action-3475115016/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-workflowbkz7j/series-workflowbkz7j-build-action-70665921/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-workflowbkz7j/series-workflowbkz7j-convert-artifact-3207508378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil