Name: series-workflow64vjt Phase: Succeeded StartedAt: 2026-08-13 13:17:13 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[0] Phase: Succeeded StartedAt: 2026-08-13 13:17:13 +0000 UTC FinishedAt: 2026-08-13 13:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 13:17:13 +0000 UTC FinishedAt: 2026-08-13 13:36:35 +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": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VSOCKETS_LOOPBACK", "VHOST_VSOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VSOCKETS_LOOPBACK", "VHOST_VSOCK" ], "series_id": "599254e0-1004-47fa-91b3-0b9668d1ece6" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_recv_pkt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIFRoZSBhZGRyZXNzZXMgYmVpbmcgY29tcGFyZWQgKGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQmIzM5O3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzIGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmlydGlvIHZzb2NrIHRyYW5zcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzozNTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgJiM0MzsxODIyLDE1IEBAIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbiBcbiBcdGxvY2tfc29jayhzayk7XG4gXG4tXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQgb3IgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQgYmVmb3JlXG4tXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuJiM0MztcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuJiM0MztcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4mIzQzO1x0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXG4mIzQzO1x0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4gXHQgKi9cbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbi1cdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjYgdnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCkpIHtcbiYjNDM7XHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAodnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCB8fFxuJiM0MztcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIHNvY2tldCYjMzk7cyByZW1vdGUgYWRkcmVzcyBpZiB0aGUgc29ja2V0IGlzIG5vdCBhIGxpc3RlbmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZpcnRpbyB2c29jayB0cmFuc3BvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKaW5kZXggOGJlY2FkODEyNzljOC4uZjczZTA0MDZhNzkwYSAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwpAQCAtMTgyMiwxMSAmIzQzOzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LAogCiAJbG9ja19zb2NrKHNrKTsKIAotCS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmUKLQkgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KQomIzQzOwkvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGUKJiM0MzsJICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2UKJiM0MzsJICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlCiYjNDM7CSAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLgogCSAqLwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHwKLQkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsgdnNrLSZndDt0cmFuc3BvcnQgIT0gJmFtcDt0LSZndDt0cmFuc3BvcnQpKSB7CiYjNDM7CSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkgICAgICh2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCB8fAomIzQzOwkgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKSkpKSB7CiAJCSh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXNvY2tfcHV0KHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFZpcnRpbyBWU29jayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSwgcmVhbGx5LiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGEgY3JpdGljYWwgc2VjdXJpdHkgZW5oYW5jZW1lbnQuIFRoZSBjb2RlIG5vdyBlbnN1cmVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBhbiBpbmNvbWluZyBwYWNrZXQgbWF0Y2hlcyB0aGUgcmVtb3RlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBhIHBhY2tldCBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQuIFRoZSBhZGRlZCBjb2RlIGlzIGludGVuZGVkIHRvIGhhbmRsZSB0aGUgZWRnZSBjYXNlcyBvZiBjbG9zZWQgc29ja2V0cywgc29ja2V0cyBhc3NpZ25lZCB0byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBvciBwYWNrZXRzIGZyb20gdGhlIHdyb25nIHBlZXIuIFRoZSBjaGVjayBpbmNsdWRlcyBzb2NrZXRzIGluIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUsIHdoaWNoIHdvdWxkIGJlIGxpc3RlbmVyIHNvY2tldHMgdGhhdCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyBkYXRhIGNvcnJ1cHRpb24gb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2aXJ0aW8gdnNvY2suIEdpdmVuIEkga25vdyB0aGUgZmlsZSBiZWluZyBtb2RpZmllZCBpcyBgdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gbG9vayBmb3IgdGhhdCBmaWxlbmFtZSB3aXRoaW4gYG5ldC92bXdfdnNvY2svTWFrZWZpbGVgIHRvIGZpbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9NYWtlZmlsZT01PW9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFMpICYjNDM7PSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT04pICYjNDM7PSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS03LW9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICYjNDM7PSBodl9zb2NrLm9cbi0tXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlPTE4PXZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xOS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFZTT0NLIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYFZJUlRJT19WU09DS0VUU19DT01NT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBiZWluZyBwdWxsZWQgaW4gYnkgZWl0aGVyIGBWSVJUSU9fVlNPQ0tFVFNgIG9yIGBWSE9TVF9WU09DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUbyBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Ztd192c29jay9LY29uZmlnYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBLY29uZmlnYCBoYXMgdG8gdGVsbCB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzItXHRkZWZhdWx0IHlcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzQtXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnPTUzPWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTUtXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIFZTT0NLIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIElmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGRlZmluaXRpb25zIGZvciBib3RoIGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgIGFyZSBwdWxsaW5nIGluIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIE5vdywgd2hhdCYjMzk7cyBiZWhpbmQgdGhlIHZob3N0IHNpZGUgb2YgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgVkhPU1RfVlNPQ0tgIGlzIGhhbmRsZWQsIGFuZCB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgZ2V0IHRoYXQgb3BlbiBhbmQgc3RhcnQgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbiBmbGFncyB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgVlNPQ0sgb3B0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo2MDpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGxhbiBpcyB0byBlbmFibGUgYFZJUlRJT19WU09DS0VUU2AsIGBWU09DS0VUU19MT09QQkFDS2AsIGFuZCBgVkhPU1RfVlNPQ0tgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB3aGF0IHdlIG5lZWQgZm9yIFZTT0NLIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucywgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyB0aGUgcHJpbWFyeSB1c2UgY2FzZS4KCk5vdywgdGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlIHRoZXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGV4dGVybmFsbHkgb3IgYWN0aXZlbHkgdXRpbGl6ZWQgYnkgYW55dGhpbmcgYmVzaWRlcyBpdHMgaW1tZWRpYXRlIHB1cnBvc2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gZW5zdXJlIGFueSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgcGFydGljdWxhcmx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgbmF0dXJlIG9mIGRhdGEgdHJhbnNwb3J0LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIGVudGlyZSB0cmFuc3BvcnQgbWVjaGFuaXNtLCBzbyBhIHNtYWxsIGNoYW5nZSB0aGVyZSBoYXMgYSB2ZXJ5IGhpZ2ggY2hhbmNlIG9mIG1ha2luZyBhIGxhcmdlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTYzMj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4Ny1cdFx0XHQgKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjY4ODpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFx1MDAyNnZpcnRpb190cmFuc3BvcnQsIHNrYiwgTlVMTCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02ODktXHRcdH1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc2MT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUodTE2IHR5cGUpXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NjktICovXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3MDp2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3MS1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgzLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODQ6XHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4NS1cdFx0XHRcdFx0ZHN0LnN2bV9jaWQsIGRzdC5zdm1fcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4MS19XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTg4MjpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgzLVxuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYz0xMjM9c3RhdGljIHZvaWQgdnNvY2tfbG9vcGJhY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0MS1cdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYzoxNDI6XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2bG9vcGJhY2tfdHJhbnNwb3J0LCBza2IsXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmMtMTQzLVx0XHRcdFx0XHQgIHNvY2tfbmV0KHNrYi1cdTAwM2VzaykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKioKCk9rYXksIHNvIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4uLiBJIGtub3cgaXQmIzM5O3MgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUsIGl0JiMzOTtzIGRlZmluaXRlbHkgdXNlZCBieSBib3RoIGB2aXJ0aW9fdHJhbnNwb3J0LmNgIGFuZCBgdnNvY2tfbG9vcGJhY2suY2AuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBib3RoIGNvcmUgY29tcG9uZW50cy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGl0IHBvcCB1cCBpbiBgdmhvc3RfdnNvY2suY2AgdG9vLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBtYWtlIHN1cmUgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucywgZXZlbiB0aGUgb25lcyB0aGF0IGZlZWwgb2J2aW91cy4gTmVlZCB0byBrZWVwIHRoYXQgd2hvbGUgcGljdHVyZSBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz01MjM9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTU4My1cdFx0ICAgIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKCkpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTg0Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2dmhvc3RfdHJhbnNwb3J0LCBza2IsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg1LVx0XHRcdFx0XHRcdCAgdnNvY2stXHUwMDNlbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCB5ZXMsIEkmIzM5O20gY2VydGFpbiB0aGlzIGNvbXBvbmVudCBpcyBpbiB1c2UuIFRoZSBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHByb21pc2luZyBwb2ludCB0byBkaXZlIGludG8uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgcGFja2V0IHJlY2VwdGlvbiBsb2dpYyBwcm9iYWJseSByZXNpZGVzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmUgbW9yZSB0aW1lLiBJJiMzOTtsbCBjaGVjayBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uZmlybSB0aGUgYnJvYWRlciBgVlNPQ0tFVFNgIHNldHRpbmcgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGVuYWJsZWQgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU1CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBWU09DS0VUU2AgYXQgaXRzIGNvcmUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IHRvdWNoZXMuIEFscmlnaHQsIGBWSVJUSU9fVlNPQ0tFVFNgIGhpbmdlcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVklSVElPYCwgbWFrZXMgc2Vuc2UuIFRoZW4gYFZTT0NLRVRTX0xPT1BCQUNLYCBuZWVkcyBgVlNPQ0tFVFNgIHRvbywgYW5kIGZpbmFsbHksIGBWSE9TVF9WU09DS2AgcmVxdWlyZXMgYm90aCBgVkhPU1RgIGFuZCBgVlNPQ0tFVFNgLiBUaGF0IGdpdmVzIHVzIGEgY2xlYW4gbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0byBlbmFibGU6IGBWU09DS0VUU2AsIGBWSVJUSU9fVlNPQ0tFVFNgLCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBhbmQgYFZIT1NUX1ZTT0NLYC4KCk5vdywgdGhlIHN5bWJvbCB0aGF0IHJlYWxseSBjYXRjaGVzIG15IGV5ZSBoZXJlIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gV2UgbmVlZCB0byB2ZXJpZnkgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGlubGluZSwgYnV0IGl0JiMzOTtzIGV4cG9ydGVkLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBlZXIgYWRkcmVzcyB2YWxpZGF0aW9uIGlzc3VlOyBhIHBhY2tldCBmcm9tIHRoZSB3cm9uZyBwZWVyIGNvdWxkIGJlIGFjY2VwdGVkIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdnNvY2sgbmV0d29yayBzdGFjay4gVGhpcyBoYXMgYSBoaWdoIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIG91ciBmaW5kaW5nczoKCldvcnRoRnV6emluZzogVHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7VlNPQ0tFVFMmIzM0OywgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LCAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDtdClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNyaXRpY2FsIHZhbGlkYXRpb24gd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCB0byB2ZXJpZnkgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBhZ2FpbnN0IHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MsIG9ubHkgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHZpcnRpbyB2c29jayB0cmFuc3BvcnQgYW5kIGlzIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQmIzM5O3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzIGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmlydGlvIHZzb2NrIHRyYW5zcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIFRoZSBhZGRyZXNzZXMgYmVpbmcgY29tcGFyZWQgKGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzozNTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwppbmRleCA4YmVjYWQ4MTI3OWM4Li5mNzNlMDQwNmE3OTBhIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCkBAIC0xODIyLDExICYjNDM7MTgyMiwxNSBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAKIAlsb2NrX3NvY2soc2spOwogCi0JLyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZQotCSAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpCiYjNDM7CS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZQomIzQzOwkgKiBwYWNrZXQgaXMgZnJvbSBhIGRpZmZlcmVudCBwZWVyIHRoYW4gdGhlIG9uZSBjb25uZWN0ZWQgdG8gc2suICBUaGVzZQomIzQzOwkgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmUKJiM0MzsJICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuCiAJICovCiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fAotCSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOyB2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCkpIHsKJiM0MzsJICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0IHx8CiYjNDM7CSAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWU29jayBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIHRoYXQgbW9kaWZpZXMgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYCF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpYC4gVGhpcyBjaGVjayBpcyBwbGFjZWQgd2l0aGluIGFuIGV4aXN0aW5nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLgoKVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIChgc3JjYCkgb2YgYW4gaW5jb21pbmcgcGFja2V0IHdpdGggdGhlIHJlbW90ZSBhZGRyZXNzIChgdnNrLSZndDtyZW1vdGVfYWRkcmApIG9mIHRoZSBjb25uZWN0ZWQgc29ja2V0LiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGlzIGlzIGEgbG9naWMgZml4LCBwcm9iYWJseSBwcmV2ZW50aW5nIGEgY29ubmVjdGVkIHNvY2tldCBmcm9tIGluYWR2ZXJ0ZW50bHkgcHJvY2Vzc2luZyBwYWNrZXRzIGludGVuZGVkIGZvciBhIGRpZmZlcmVudCBwZWVyLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIGp1bXAgb3V0OyB0aGUgcGF0Y2ggKnNob3VsZCogYmUgc2FmZS4KCkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3JjYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBrbm93IGl0JiMzOTtzIGEgYHN0cnVjdCBzb2NrYWRkcl92bWAsIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCAqc29tZXdoZXJlKiB3aXRoaW4gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLiBJJiMzOTtsbCBxdWlja2x5IGp1bXAgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkLiBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE3NjE9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF92YWxpZF90eXBlKHUxNiB0eXBlKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY5LSAqL1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3NzA6dm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NzEtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4My1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzg0Olx0dHJhY2VfdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzcmMuc3ZtX2NpZCwgc3JjLnN2bV9wb3J0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODUtXHRcdFx0XHRcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4ODEtfVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE4ODI6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3NzAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIHBhY2tldHMgYXJlIHJlY2VpdmVkIGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHZpcnRpbyBmcmFtZXdvcmsuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGlkaW9zeW5jcmFzaWVzIGluIHBhY2tldCBoYW5kbGluZy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MsIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBJIGNhbiB0dW5lIG9yIG9wdGltaXplIGRvd24gdGhlIHJvYWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBzZWN0aW9uIGFzIHdlbGwuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSYjMzk7cyByaW5nIGJ1ZmZlciBidXQgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc3MDpcdHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbjE3NzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuMTc3MjpcdHtcbjE3NzM6XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4xNzc0Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjLCBkc3Q7XG4xNzc1Olx0XHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuMTc3NjpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTc3NzpcdFx0Ym9vbCBzcGFjZV9hdmFpbGFibGU7XG4xNzc4Olx0XG4xNzc5Olx0XHR2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBsZTY0X3RvX2NwdShoZHItXHUwMDNlc3JjX2NpZCksXG4xNzgwOlx0XHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZXNyY19wb3J0KSk7XG4xNzgxOlx0XHR2c29ja19hZGRyX2luaXQoXHUwMDI2ZHN0LCBsZTY0X3RvX2NwdShoZHItXHUwMDNlZHN0X2NpZCksXG4xNzgyOlx0XHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZWRzdF9wb3J0KSk7XG4xNzgzOlx0XG4xNzg0Olx0XHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXG4xNzg1Olx0XHRcdFx0XHRcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXG4xNzg2Olx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VsZW4pLFxuMTc4NzpcdFx0XHRcdFx0XHRsZTE2X3RvX2NwdShoZHItXHUwMDNldHlwZSksXG4xNzg4Olx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGhkci1cdTAwM2VvcCksXG4xNzg5Olx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VmbGFncyksXG4xNzkwOlx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VidWZfYWxsb2MpLFxuMTc5MTpcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShoZHItXHUwMDNlZndkX2NudCkpO1xuMTc5MjpcdFxuMTc5MzpcdFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUobGUxNl90b19jcHUoaGRyLVx1MDAzZXR5cGUpKSkge1xuMTc5NDpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTc5NTpcdFx0XHRnb3RvIGZyZWVfcGt0O1xuMTc5NjpcdFx0fVxuMTc5NzpcdFxuMTc5ODpcdFx0LyogVGhlIHNvY2tldCBtdXN0IGJlIGluIGNvbm5lY3RlZCBvciBib3VuZCB0YWJsZVxuMTc5OTpcdFx0ICogb3RoZXJ3aXNlIHNlbmQgcmVzZXQgYmFja1xuMTgwMDpcdFx0ICovXG4xODAxOlx0XHRzayA9IHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoXHUwMDI2c3JjLCBcdTAwMjZkc3QsIG5ldCk7XG4xODAyOlx0XHRpZiAoIXNrKSB7XG4xODAzOlx0XHRcdHNrID0gdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KFx1MDAyNmRzdCwgbmV0KTtcbjE4MDQ6XHRcdFx0aWYgKCFzaykge1xuMTgwNTpcdFx0XHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4xODA2Olx0XHRcdFx0Z290byBmcmVlX3BrdDtcbjE4MDc6XHRcdFx0fVxuMTgwODpcdFx0fVxuMTgwOTpcdFxuMTgxMDpcdFx0aWYgKHZpcnRpb190cmFuc3BvcnRfZ2V0X3R5cGUoc2spICE9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2V0eXBlKSkge1xuMTgxMTpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTgxMjpcdFx0XHRzb2NrX3B1dChzayk7XG4xODEzOlx0XHRcdGdvdG8gZnJlZV9wa3Q7XG4xODE0Olx0XHR9XG4xODE1Olx0XG4xODE2Olx0XHRpZiAoIXNrYl9zZXRfb3duZXJfc2tfc2FmZShza2IsIHNrKSkge1xuMTgxNzpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7cmVjZWl2aW5nIHZzb2NrIHNvY2tldCBoYXMgc2tfcmVmY250ID09IDBcXG5cJiMzNDspO1xuMTgxODpcdFx0XHRnb3RvIGZyZWVfcGt0O1xuMTgxOTpcdFx0fVxuMTgyMDpcdFxuMTgyMTpcdFx0dnNrID0gdnNvY2tfc2soc2spO1xuMTgyMjpcdFxuMTgyMzpcdFx0bG9ja19zb2NrKHNrKTtcbjE4MjQ6XHRcbjE4MjU6XHRcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuMTgyNjpcdFx0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcbjE4Mjc6XHRcdCAqIHByb3BlcnRpZXMgY291bGQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSBsb2NrX3NvY2suICBMaXN0ZW5lciBzb2NrZXRzIGFyZVxuMTgyODpcdFx0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4xODI5Olx0XHQgKi9cbjE4MzA6XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbjE4MzE6XHRcdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbjE4MzI6XHRcdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbjE4MzM6XHRcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4xODM0Olx0XHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4xODM1Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xODM2Olx0XHRcdHNvY2tfcHV0KHNrKTtcbjE4Mzc6XHRcdFx0Z290byBmcmVlX3BrdDtcbjE4Mzg6XHRcdH1cbjE4Mzk6XHRcbjE4NDA6XHRcdHNwYWNlX2F2YWlsYWJsZSA9IHZpcnRpb190cmFuc3BvcnRfc3BhY2VfdXBkYXRlKHNrLCBza2IpO1xuMTg0MTpcdFxuMTg0MjpcdFx0LyogVXBkYXRlIENJRCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkIGFmdGVyIGEgdHJhbnNwb3J0IHJlc2V0IGV2ZW50ICovXG4xODQzOlx0XHRpZiAodnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCAhPSBWTUFERFJfQ0lEX0FOWSlcbjE4NDQ6XHRcdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuMTg0NTpcdFxuMTg0NjpcdFx0aWYgKHNwYWNlX2F2YWlsYWJsZSlcbjE4NDc6XHRcdFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2Uoc2spO1xuMTg0ODpcdFxuMTg0OTpcdFx0c3dpdGNoIChzay1cdTAwM2Vza19zdGF0ZSkge1xuMTg1MDpcdFx0Y2FzZSBUQ1BfTElTVEVOOlxuMTg1MTpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHNrLCBza2IsIHQpO1xuMTg1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4NTM6XHRcdFx0YnJlYWs7XG4xODU0Olx0XHRjYXNlIFRDUF9TWU5fU0VOVDpcbjE4NTU6XHRcdFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Nvbm5lY3Rpbmcoc2ssIHNrYik7XG4xODU2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTg1NzpcdFx0XHRicmVhaztcbjE4NTg6XHRcdGNhc2UgVENQX0VTVEFCTElTSEVEOlxuMTg1OTpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfY29ubmVjdGVkKHNrLCBza2IpO1xuMTg2MDpcdFx0XHRicmVhaztcbjE4NjE6XHRcdGNhc2UgVENQX0NMT1NJTkc6XG4xODYyOlx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9kaXNjb25uZWN0aW5nKHNrLCBza2IpO1xuMTg2MzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4NjQ6XHRcdFx0YnJlYWs7XG4xODY1Olx0XHRkZWZhdWx0OlxuMTg2NjpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTg2NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4Njg6XHRcdFx0YnJlYWs7XG4xODY5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgVlNPQ0sgQWRkcmVzcyBDaGVjayoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2s6IGAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaXQuIFJpZ2h0LCB0aGUga2V5IHZhcmlhYmxlIGhlcmUgaXMgYHNyY2AuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGB2c29ja19hZGRyX2luaXQoJmFtcDtzcmMsIGxlNjRfdG9fY3B1KGhkci0mZ3Q7c3JjX2NpZCksIGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3JjX3BvcnQpKWAuIFNvLCB0aGUgYHNyY2AgdmFyaWFibGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBoZWFkZXIuIE5hdHVyYWxseSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYHZzb2NrX2FkZHJfaW5pdGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGBzcmNgIHJlcHJlc2VudHMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHNyY2Agc3RydWN0IGJlZm9yZSBJIGNhbiBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgbmV3IGNvbXBhcmlzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2FkZHJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTItXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTM6dm9pZCB2c29ja19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLCB1MzIgY2lkLCB1MzIgcG9ydCk7XG5pbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTQtaW50IHZzb2NrX2FkZHJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjUyPXN0YXRpYyBpbnQgdnNvY2tfYXV0b19iaW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1OC1cdFx0cmV0dXJuIDA7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNmxvY2FsX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MC1cdHJldHVybiBfX3Zzb2NrX2JpbmQoc2ssIFx1MDAyNmxvY2FsX2FkZHIpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04MDc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODE1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjgxNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZuZXdfYWRkciwgYWRkci1cdTAwM2Vzdm1fY2lkLCBhZGRyLVx1MDAzZXN2bV9wb3J0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04MTctXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg0OS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo4NTA6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIsIG5ld19hZGRyLnN2bV9jaWQsIG5ld19hZGRyLnN2bV9wb3J0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NTEtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkwOD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTMyLVx0dnNrID0gdnNvY2tfc2soc2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzMzpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTM0Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTM1LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xMDIwPXN0YXRpYyB2b2lkIHZzb2NrX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzMS1cdCAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzI6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzM6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDM0LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNDc2PXN0YXRpYyBpbnQgdnNvY2tfZGdyYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNDg5LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjE0OTA6XHRcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE0OTEtXHRcdFx0XHRWTUFERFJfUE9SVF9BTlkpO1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTE3MD1zdGF0aWMgdm9pZCBodnNfYWRkcl9pbml0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkciwgY29uc3QgZ3VpZF90ICpzdnJfaWQpXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTczLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTc0Olx0dnNvY2tfYWRkcl9pbml0KGFkZHIsIFZNQUREUl9DSURfQU5ZLCBwb3J0KTtcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTE3NS19XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9Mjk1PXN0YXRpYyB2b2lkIGh2c19vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMzM4LVx0XHQvKiBSZW1vdGUgcGVlciBpcyBhbHdheXMgdGhlIGhvc3QgKi9cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjMzOTpcdFx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZuZXctXHUwMDNlcmVtb3RlX2FkZHIsXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0zNDAtXHRcdFx0XHRWTUFERFJfQ0lEX0hPU1QsIFZNQUREUl9QT1JUX0FOWSk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE2OTQ9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzEtXHR2Y2hpbGQgPSB2c29ja19zayhjaGlsZCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTczMjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2Y2hpbGQtXHUwMDNlbG9jYWxfYWRkciwgbGU2NF90b19jcHUoaGRyLVx1MDAzZWRzdF9jaWQpLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzMtXHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZWRzdF9wb3J0KSk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTczNDpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2Y2hpbGQtXHUwMDNlcmVtb3RlX2FkZHIsIGxlNjRfdG9fY3B1KGhkci1cdTAwM2VzcmNfY2lkKSxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzM1LVx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzcmNfcG9ydCkpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3OC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzc5Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVx1MDAzZXNyY19jaWQpLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZXNyY19wb3J0KSk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4MTpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vkc3RfY2lkKSxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2Vkc3RfcG9ydCkpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0xNzY9dm1jaV90cmFuc3BvcnRfcGFja2V0X2dldF9hZGRyZXNzZXMoc3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0LFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNzkte1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MDpcdHZzb2NrX2FkZHJfaW5pdChsb2NhbCwgcGt0LVx1MDAzZWRnLmRzdC5jb250ZXh0LCBwa3QtXHUwMDNlZHN0X3BvcnQpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MTpcdHZzb2NrX2FkZHJfaW5pdChyZW1vdGUsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xODItfVxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMTQ9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzMxLVx0fSBlbHNlIHtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzI6XHRcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzMtXHRcdFx0XHRwa3QtXHUwMDNlc3JjX3BvcnQpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz00Nzg9c3RhdGljIHN0cnVjdCBzb2NrICp2bWNpX3RyYW5zcG9ydF9nZXRfcGVuZGluZyhcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDg2LVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjQ4NzpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZzcmMsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00ODgtXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTY3NT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNzA0LVx0ICovXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA1Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXHUwMDNlc3JjX3BvcnQpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjcwNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dCwgcGt0LVx1MDAzZWRzdF9wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy03MDctXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTk0OD1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTAyMy1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxMDI0Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZwZW5kaW5nLVx1MDAzZWxvY2FsX2FkZHIsIHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dCxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xMDI1LVx0XHRcdHBrdC1cdTAwM2Vkc3RfcG9ydCk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTAyNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2cGVuZGluZy1cdTAwM2VyZW1vdGVfYWRkciwgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjctXHRcdFx0cGt0LVx1MDAzZXNyY19wb3J0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MTY3MT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTY5NS1cdFx0cmV0dXJuIHZtY2lfdHJhbnNwb3J0X2Vycm9yX3RvX3Zzb2NrX2Vycm9yKGVycik7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTY5NjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkciwgYWRkci1cdTAwM2Vzdm1fY2lkLFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE2OTctXHRcdFx0dm1jaV90cmFucyh2c2spLVx1MDAzZWRnX2hhbmRsZS5yZXNvdXJjZSk7XG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTE3NDI9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9kZ3JhbV9kZXF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODQtXHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3ZtICosIHZtX2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTc4NTpcdFx0dnNvY2tfYWRkcl9pbml0KHZtX2FkZHIsIGRnLVx1MDAzZXNyYy5jb250ZXh0LCBkZy1cdTAwM2VzcmMucmVzb3VyY2UpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODYtXHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IHNpemVvZigqdm1fYWRkcik7XG4tLVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtMTMtXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoxNDp2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtMTUte1xuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIwLX1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjIxOkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy0yMi1cbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYz00Nj12b2lkIHZzb2NrX2FkZHJfdW5iaW5kKHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTQ3LXtcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjQ4Olx0dnNvY2tfYWRkcl9pbml0KGFkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB2c29ja19hZGRyX2luaXQqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB2c29ja19hZGRyX2luaXRgIHdpdGhpbiBgbmV0L3Ztd192c29jay92c29ja19hZGRyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgYXQgbGVhc3QsIHRoZSBpbml0aWFsaXphdGlvbikgZm9yIHZzb2NrIGFkZHJlc3NlcyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWRkcmVzc2VzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgcG9wdWxhdGVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLCBsaWtlbHkgYSBgc29ja2FkZHJfdm1gLCBhbmQgc2V0cyB1cCB0aGUgaW5pdGlhbCB2YWx1ZXMgYmFzZWQgb24gcHJvdmlkZWQgaW5wdXRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgZ3Vlc3QgSUQsIGhvc3QgSUQsIHBvcnQsIGFuZCBhbnkgZmxhZ3MgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB0aGUgcG90ZW50aWFsIGNvcm5lciBjYXNlcyBhbmQgYW55IGluaXRpYWwgc2FuaXR5IGNoZWNrcyBwZXJmb3JtZWQgaGVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSByYW5nZSBvZiBhbGxvd2VkIHBvcnQgbnVtYmVycyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGFwcHJvYWNoIHRoZSBhbGlnbm1lbnQgYW5kIHN0cnVjdHVyZSBwYWNraW5nLCB0b28sIGFuZCBpZiBhbnkgcHJlLWRlZmluZWQgY29uc3RhbnRzIGFyZSBiZWluZyB1c2VkLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyBmb3IgdGhlIHZhcmlvdXMgYWRkcmVzcyBmYW1pbHkgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFZNd2FyZSB2U29ja2V0cyBEcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIFZNd2FyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC92c29ja19hZGRyLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxuICAxNTpcdHtcbiAgMTY6XHRcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcbiAgMTc6XHRcdGFkZHItXHUwMDNlc3ZtX2ZhbWlseSA9IEFGX1ZTT0NLO1xuICAxODpcdFx0YWRkci1cdTAwM2Vzdm1fY2lkID0gY2lkO1xuICAxOTpcdFx0YWRkci1cdTAwM2Vzdm1fcG9ydCA9IHBvcnQ7XG4gIDIwOlx0fVxuICAyMTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XG4gIDIyOlx0XG4gIDIzOlx0aW50IHZzb2NrX2FkZHJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKVxuICAyNDpcdHtcbiAgMjU6XHRcdF9fdTggc3ZtX3ZhbGlkX2ZsYWdzID0gVk1BRERSX0ZMQUdfVE9fSE9TVDtcbiAgMjY6XHRcbiAgMjc6XHRcdGlmICghYWRkcilcbiAgMjg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDI5Olx0XG4gIDMwOlx0XHRpZiAoYWRkci1cdTAwM2Vzdm1fZmFtaWx5ICE9IEFGX1ZTT0NLKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdnNvY2sgQWRkcmVzcyBDb21wYXJpc29uKioKCk9rYXksIHNvIGB2c29ja19hZGRyX2luaXRgIGRvZXMgYSBjbGVhbiBgbWVtc2V0YCBvZiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUsIHNvIHRoZSBzb3VyY2UgYWRkcmVzcywgYHNyY2AsIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoJmFtcDtzcmMsICZhbXA7dnNrLSZndDtyZW1vdGVfYWRkcilgLiBUaGUgYHZzay0mZ3Q7cmVtb3RlX2FkZHJgIGlzIGFsc28gYSBgc3RydWN0IHNvY2thZGRyX3ZtYCwgd2hpY2ggZ2V0cyBpbml0aWFsaXplZCBlaXRoZXIgZHVyaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gb3IgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB1bmRlcnN0YW5kaW5nIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGRldGVybWluZSBpZiB0aGUgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY29tcGFyaXNvbiBpcyByb2J1c3QgYW5kIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGZpZWxkcyB3aXRoaW4gdGhvc2UgYHNvY2thZGRyX3ZtYCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2FkZHJfZXF1YWxzX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oPTE2PXZvaWQgdnNvY2tfYWRkcl91bmJpbmQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcbmluY2x1ZGUvbmV0L3Zzb2NrX2FkZHIuaDoxNzpib29sIHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oLTE4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzAwPXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA4Olx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihhZGRyLCBcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkcikgXHUwMDI2XHUwMDI2XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5LVx0XHQgICAgdnNvY2tfbmV0X2NoZWNrX21vZGUoc29ja19uZXQoc2spLCBuZXQpKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjM9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMzEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzMyOlx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikgXHUwMDI2XHUwMDI2XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzMzLVx0XHQgICAgZHN0LVx1MDAzZXN2bV9wb3J0ID09IHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9wb3J0IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTgzMi1cdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODMzOlx0ICAgICAgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpKSkpIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODM0LVx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz00Nzg9c3RhdGljIHN0cnVjdCBzb2NrICp2bWNpX3RyYW5zcG9ydF9nZXRfcGVuZGluZyhcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDkyLVx0XHRcdCAgICBwZW5kaW5nX2xpbmtzKSB7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NDkzOlx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZwZW5kaW5nLVx1MDAzZXJlbW90ZV9hZGRyKSBcdTAwMjZcdTAwMjZcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00OTQtXHRcdCAgICBwa3QtXHUwMDNlZHN0X3BvcnQgPT0gdnBlbmRpbmctXHUwMDNlbG9jYWxfYWRkci5zdm1fcG9ydCkge1xuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jPTUwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfdW5iaW5kKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUxLVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmM6NTI6Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKVxuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTU3LX1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjU4OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIGZ1bmN0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCB3aXRoaW4gdGhlIGB2c29ja19hZGRyLmNgIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgY29tcGFyaXNvbiBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0IGlzIGxpa2VseSB1c2VkIHRvIGRldGVybWluZSBpZiB0d28gVlNPQ0sgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBhbnkgbmV0d29ya2luZyBjb2RlOyBob3cgZG8geW91IGtub3cgaWYgeW91JiMzOTtyZSB0YXJnZXRpbmcgdGhlIHNhbWUgZW5kcG9pbnQ/IFdlIG5lZWQgYSByb2J1c3QgYW5kIGVmZmljaWVudCB3YXkgdG8gdmVyaWZ5IHRoaXMgZXF1YWxpdHkuCgpOb3csIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb21wYXJlZC4gQXJlIHdlIGxvb2tpbmcgYXQgc2ltcGxlIGludGVnZXIgY29tcGFyaXNvbnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBzb2NrZXQgZmFtaWxpZXMgb3IgcG9ydCBudW1iZXJzPyBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGludm9sdmluZyBgdnNvY2tfYWRkcmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbWJlci13aXNlIGNvbXBhcmlzb25zLiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24gb2YgdGhlIGNvbnRleHQgSUQgYW5kIHBvcnQsIGFzIHRoYXTigJlzIHVzdWFsbHkgZW5vdWdoIHRvIGRlZmluZSBhIFZTT0NLIGVuZHBvaW50LiBBbnkgYWRkaXRpb25hbCBmaWVsZHMgbWlnaHQgaW5kaWNhdGUgaXQmIzM5O3Mgbm90IHNpbXBseSBhIHJhdyBjb21wYXJpc29uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBjb21wYXJpc29uIGlzIG9yZGVyIHNlbnNpdGl2ZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlZGdlIGNhc2VzLiBXaGF0IGhhcHBlbnMgaWYgZWl0aGVyIG9yIGJvdGggYWRkcmVzc2VzIGFyZSBOVUxMPyBEb2VzIGl0IHJldHVybiBhbiBleHBlY3RlZCB2YWx1ZSBpbiB0aGVzZSBjYXNlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzIGlmIGl0IHVzZXMgaW50ZWdlcnM/IE9yIHJhY2UgY29uZGl0aW9ucz8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgZWZmaWNpZW50bHkgdGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gRG9lcyBpdCB1c2Ugc2hvcnQtY2lyY3VpdGluZyB0byBtaW5pbWl6ZSBjb21wYXJpc29ucyBpZiB0aGUgY29udGV4dCBJRHMgYXJlIGRpZmZlcmVudD8gUGVyZm9ybWFuY2UgbWF0dGVycyBpbiBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgcG9zc2libGUgZmFpbHVyZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX3VuYmluZCk7XG4gIDUxOlx0XG4gIDUyOlx0Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbiAgNTM6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpvdGhlcilcbiAgNTQ6XHR7XG4gIDU1Olx0XHRyZXR1cm4gYWRkci1cdTAwM2Vzdm1fY2lkID09IG90aGVyLVx1MDAzZXN2bV9jaWQgXHUwMDI2XHUwMDI2XG4gIDU2Olx0XHRcdGFkZHItXHUwMDNlc3ZtX3BvcnQgPT0gb3RoZXItXHUwMDNlc3ZtX3BvcnQ7XG4gIDU3Olx0fVxuICA1ODpcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xuICA1OTpcdFxuICA2MDpcdGludCB2c29ja19hZGRyX2Nhc3QoY29uc3Qgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gIDYxOlx0XHRcdCAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKipvdXRfYWRkcilcbiAgNjI6XHR7XG4gIDYzOlx0XHRpZiAobGVuIFx1MDAzYyBzaXplb2YoKipvdXRfYWRkcikpXG4gIDY0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA2NTpcdFxuICA2NjpcdFx0Km91dF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl92bSAqKWFkZHI7XG4gIDY3Olx0XHRyZXR1cm4gdnNvY2tfYWRkcl92YWxpZGF0ZSgqb3V0X2FkZHIpO1xuICA2ODpcdH1cbiAgNjk6XHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2Nhc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyOAoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXM6IExvZ2ljIEJ1ZyBGaXgsIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSAqbm90KiBhIEtNU0FOIGNhbmRpZGF0ZS4gVGhlIGNvZGUgaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYCF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpYC4gIGBzcmNgLCBhcyBJIGNhbiBzZWUgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgd2l0aCBgdnNvY2tfYWRkcl9pbml0YC4gVGhhdCBmdW5jdGlvbiBkb2VzIHRoZSBzdGFuZGFyZCBgbWVtc2V0YCBhbmQgc2V0cyBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHM6IGBzdm1fZmFtaWx5YCwgYHN2bV9jaWRgLCBhbmQgYHN2bV9wb3J0YC4gIFRoZSBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgZnVuY3Rpb24gaXRzZWxmIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uIG9mIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgbWVtYmVycy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBsb2dpYyBlcnJvcjogYSBwYWNrZXQgb3JpZ2luYXRpbmcgZnJvbSBhIHBlZXIgKm90aGVyKiB0aGFuIHRoZSBjb25uZWN0ZWQgcGVlciBjb3VsZCBwb3RlbnRpYWxseSBiZSBtaXNoYW5kbGVkIGJ5IHRoZSBzb2NrZXQgaWYgaXQgc29tZWhvdyBnb3Qgcm91dGVkIHRoZXJlLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgbG9naWMgYnVnOyBhIHBhY2tldCBpbnRlbmRlZCBmb3Igb25lIHNvY2tldCBhY2NpZGVudGFsbHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IGFub3RoZXIuIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3Qgc29ja2V0IGhhbmRsZXMgdGhlIGluY29taW5nIHBhY2tldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBkYXRhIGludGVncml0eS4KCkxldCYjMzk7cyBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgdG8gY29uZmlybSB0aGlzOgoKYGBgYwotCS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmUKLQkgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KQomIzQzOwkvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGUKJiM0MzsJICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2UKJiM0MzsJICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlCiYjNDM7CSAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLgogCSAqLwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHwKLQkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsgdnNrLSZndDt0cmFuc3BvcnQgIT0gJmFtcDt0LSZndDt0cmFuc3BvcnQpKSB7CiYjNDM7CSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkgICAgICh2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCB8fAomIzQzOwkgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKSkpKSB7CiAJCSh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXNvY2tfcHV0KHNrKTsKYGBgCgpZZXAsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiAgYHNyY2AgYW5kIGB2c2stJmd0O3JlbW90ZV9hZGRyYCBhcmUgKmNvbXBsZXRlbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGF0IGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBjYWxsLiAgVGhlcmUmIzM5O3Mgbm8gY2hhbmNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYW5kIHRoZXJlZm9yZSwgbm8gcG9zc2liaWxpdHkgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdGhlIHVzZXIuICBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGxvZ2ljIGVycm9yLiBLTVNBTiBpcyBvdmVya2lsbCBoZXJlLiAgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBmdXp6aW5nIHNob3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGRldGVjdGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGZ1cnRoZXIgbG9naWMgYnVncy4gS01TQU4mIzM5O3Mgc3RyZW5ndGggbGllcyBpbiBkZXRlY3RpbmcgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBwcmVzZW50LCBpdCYjMzk7cyBub3QgbmVlZGVkLiAgVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBkZWZpbml0ZWx5IGJlIHNldCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBjb25uZWN0ZWQgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cdTAwM2VyZW1vdGVfYWRkcmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHNvY2thZGRyX3ZtYCBvYmplY3RzIChlLmcuLCBgc3JjYCBpcyBpbml0aWFsaXplZCB2aWEgYHZzb2NrX2FkZHJfaW5pdGAgd2hpY2ggdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBzdHJ1Y3R1cmUpLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgc2ltcGx5IGNvbXBhcmVzIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgZmllbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBjb25uZWN0ZWQgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cdTAwM2VyZW1vdGVfYWRkcmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHNvY2thZGRyX3ZtYCBvYmplY3RzIChlLmcuLCBgc3JjYCBpcyBpbml0aWFsaXplZCB2aWEgYHZzb2NrX2FkZHJfaW5pdGAgd2hpY2ggdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBzdHJ1Y3R1cmUpLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgc2ltcGx5IGNvbXBhcmVzIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgZmllbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowMy42NTU4NjEzODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDMxMDY5MjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgY29ubmVjdGVkIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cXHUwMDNlcmVtb3RlX2FkZHJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBzb2NrYWRkcl92bWAgb2JqZWN0cyAoZS5nLiwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGB2c29ja19hZGRyX2luaXRgIHdoaWNoIHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgc3RydWN0dXJlKS4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIHNpbXBseSBjb21wYXJlcyB0aGUgYHN2bV9jaWRgIGFuZCBgc3ZtX3BvcnRgIGZpZWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIGEgc3RhbmRhcmQgbG9naWMgYnVnIGZpeCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowMy42NTU4NzExOTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODAwOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuaW5kZXggOGJlY2FkODEyNzljOC4uZjczZTA0MDZhNzkwYSAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG5AQCAtMTgyMiwxMSArMTgyMiwxNSBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxuIFxcbiBcXHRsb2NrX3NvY2soc2spO1xcbiBcXG4tXFx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZVxcbi1cXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxcbitcXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcXG4rXFx0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcXG4rXFx0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXFxuK1xcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxcbi1cXHQgICAgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFxcdTAwMjZcXHUwMDI2IHZzay1cXHUwMDNldHJhbnNwb3J0ICE9IFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQpKSB7XFxuK1xcdCAgICAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAodnNrLVxcdTAwM2V0cmFuc3BvcnQgIT0gXFx1MDAyNnQtXFx1MDAzZXRyYW5zcG9ydCB8fFxcbitcXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnNrLVxcdTAwM2VyZW1vdGVfYWRkcikpKSkge1xcbiBcXHRcXHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRzb2NrX3B1dChzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA0LjA4NDkzNjUyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0OTYxNDUwODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbisrKyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgKzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmVcbi1cdCAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpXG4rXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcbitcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4rXHQgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmVcbitcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0IHx8XG4rXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowNC4wODQ5NDMwNjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE2ODY0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgVmlydGlvIFZTb2NrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFsbHkuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjaGVjayBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGEgY3JpdGljYWwgc2VjdXJpdHkgZW5oYW5jZW1lbnQuIFRoZSBjb2RlIG5vdyBlbnN1cmVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBhbiBpbmNvbWluZyBwYWNrZXQgbWF0Y2hlcyB0aGUgcmVtb3RlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBhIHBhY2tldCBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQuIFRoZSBhZGRlZCBjb2RlIGlzIGludGVuZGVkIHRvIGhhbmRsZSB0aGUgZWRnZSBjYXNlcyBvZiBjbG9zZWQgc29ja2V0cywgc29ja2V0cyBhc3NpZ25lZCB0byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBvciBwYWNrZXRzIGZyb20gdGhlIHdyb25nIHBlZXIuIFRoZSBjaGVjayBpbmNsdWRlcyBzb2NrZXRzIGluIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUsIHdoaWNoIHdvdWxkIGJlIGxpc3RlbmVyIHNvY2tldHMgdGhhdCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyBkYXRhIGNvcnJ1cHRpb24gb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZpcnRpbyB2c29jay4gR2l2ZW4gSSBrbm93IHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgSSdsbCB1c2UgYGdyZXBwZXJgIChvciBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wpIHRvIGxvb2sgZm9yIHRoYXQgZmlsZW5hbWUgd2l0aGluIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYCB0byBmaW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA5LjkwMTgxMTI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svTWFrZWZpbGU9NT1vYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtNy1vYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSArPSBodl9zb2NrLm9cXG4tLVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9MTg9dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSArPSB2aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgKz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA5Ljk0NjgwMDU1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI3OTc0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGxpa2VseSBiZWluZyBwdWxsZWQgaW4gYnkgZWl0aGVyIGBWSVJUSU9fVlNPQ0tFVFNgIG9yIGBWSE9TVF9WU09DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUbyBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Ztd192c29jay9LY29uZmlnYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTQuMjE5NjAxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ1MjcyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVklSVElPX1ZTT0NLRVRTX0NPTU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NTM9Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTQuNDY0MTQzNzU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyOTgwMzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBWU09DSyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgVklSVElPX1ZTT0NLRVRTYCBhbmQgYFZTT0NLRVRTX0xPT1BCQUNLYCBhcmUgcHVsbGluZyBpbiBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAuIEkgd2FudCB0byBjb25maXJtIHRoYXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyLiBOb3csIHdoYXQncyBiZWhpbmQgdGhlIHZob3N0IHNpZGUgb2YgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgVkhPU1RfVlNPQ0tgIGlzIGhhbmRsZWQsIGFuZCB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSdsbCBnZXQgdGhhdCBvcGVuIGFuZCBzdGFydCB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9uIGZsYWdzIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBWU09DSyBvcHRpb25zIGludGVyYWN0IHdpdGggdGhlIHZob3N0IGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTguNDkzOTQ5ODgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRJT19WU09DS0VUU19DT01NT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NjA6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjE4LjUzNzg1MzE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODM0MjE0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCB3ZSBuZWVkIGZvciBWU09DSyBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucywgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSBwcmltYXJ5IHVzZSBjYXNlLlxuXG5Ob3csIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZSB0aGVyZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQgZnVuY3Rpb24gaXMgZXhwb3NlZCBleHRlcm5hbGx5IG9yIGFjdGl2ZWx5IHV0aWxpemVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgaXRzIGltbWVkaWF0ZSBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gZW5zdXJlIGFueSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgYW5kIGRvbid0IGludHJvZHVjZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBuYXR1cmUgb2YgZGF0YSB0cmFuc3BvcnQuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgY2VudHJhbCB0byB0aGUgZW50aXJlIHRyYW5zcG9ydCBtZWNoYW5pc20sIHNvIGEgc21hbGwgY2hhbmdlIHRoZXJlIGhhcyBhIHZlcnkgaGlnaCBjaGFuY2Ugb2YgbWFraW5nIGEgbGFyZ2UgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjIuNjIxMjc4MDgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI5OTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTYzMj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg3LVxcdFxcdFxcdCAqL1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjY4ODpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFxcdTAwMjZ2aXJ0aW9fdHJhbnNwb3J0LCBza2IsIE5VTEwpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4OS1cXHRcXHR9XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc2MT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUodTE2IHR5cGUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2OS0gKi9cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3MDp2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgzLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzg0OlxcdHRyYWNlX3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3JjLnN2bV9jaWQsIHNyYy5zdm1fcG9ydCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4NS1cXHRcXHRcXHRcXHRcXHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4ODEtfVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODgyOkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgzLVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jPTEyMz1zdGF0aWMgdm9pZCB2c29ja19sb29wYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDEtXFx0XFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmM6MTQyOlxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNmxvb3BiYWNrX3RyYW5zcG9ydCwgc2tiLFxcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDMtXFx0XFx0XFx0XFx0XFx0ICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjIyLjY2NDU4MzM0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE4ODA3OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgVmlydGlvIFBhY2tldCBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuLi4gSSBrbm93IGl0J3MgZXhwb3J0ZWQuIExldCdzIHNlZSwgaXQncyBkZWZpbml0ZWx5IHVzZWQgYnkgYm90aCBgdmlydGlvX3RyYW5zcG9ydC5jYCBhbmQgYHZzb2NrX2xvb3BiYWNrLmNgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBib3RoIGNvcmUgY29tcG9uZW50cy4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBwb3AgdXAgaW4gYHZob3N0X3Zzb2NrLmNgIHRvbywgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4gTGV0J3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBtYWtlIHN1cmUgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucywgZXZlbiB0aGUgb25lcyB0aGF0IGZlZWwgb2J2aW91cy4gTmVlZCB0byBrZWVwIHRoYXQgd2hvbGUgcGljdHVyZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjYuNDgzMzk0Mzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA2NjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTIzPXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU4My1cXHRcXHQgICAgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQoKSlcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTg0OlxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNnZob3N0X3RyYW5zcG9ydCwgc2tiLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICB2c29jay1cXHUwMDNlbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjYuNTI3NDY0NTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTE2MTYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgeWVzLCBJJ20gY2VydGFpbiB0aGlzIGNvbXBvbmVudCBpcyBpbiB1c2UuIFRoZSBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHByb21pc2luZyBwb2ludCB0byBkaXZlIGludG8uIFRoYXQncyB3aGVyZSB0aGUgY29yZSBwYWNrZXQgcmVjZXB0aW9uIGxvZ2ljIHByb2JhYmx5IHJlc2lkZXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb25lIG1vcmUgdGltZS4gSSdsbCBjaGVjayBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uZmlybSB0aGUgYnJvYWRlciBgVlNPQ0tFVFNgIHNldHRpbmcgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGVuYWJsZWQgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozMC4xNzkwODMzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzY0NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjMwLjIyNDQ1MjgwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzM1MjU3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYFZTT0NLRVRTYCBhdCBpdHMgY29yZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpdCB0b3VjaGVzLiBBbHJpZ2h0LCBgVklSVElPX1ZTT0NLRVRTYCBoaW5nZXMgb24gYFZTT0NLRVRTYCBhbmQgYFZJUlRJT2AsIG1ha2VzIHNlbnNlLiBUaGVuIGBWU09DS0VUU19MT09QQkFDS2AgbmVlZHMgYFZTT0NLRVRTYCB0b28sIGFuZCBmaW5hbGx5LCBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGJvdGggYFZIT1NUYCBhbmQgYFZTT0NLRVRTYC4gVGhhdCBnaXZlcyB1cyBhIGNsZWFuIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlOiBgVlNPQ0tFVFNgLCBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuXG5cbk5vdywgdGhlIHN5bWJvbCB0aGF0IHJlYWxseSBjYXRjaGVzIG15IGV5ZSBoZXJlIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gV2UgbmVlZCB0byB2ZXJpZnkgaWYgaXQncyBzdGF0aWMgb3IgaW5saW5lLCBidXQgaXQncyBleHBvcnRlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBlZXIgYWRkcmVzcyB2YWxpZGF0aW9uIGlzc3VlOyBhIHBhY2tldCBmcm9tIHRoZSB3cm9uZyBwZWVyIGNvdWxkIGJlIGFjY2VwdGVkIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdnNvY2sgbmV0d29yayBzdGFjay4gVGhpcyBoYXMgYSBoaWdoIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkxldCdzIHN1bW1hcml6ZSBvdXIgZmluZGluZ3M6XG5cbldvcnRoRnV6emluZzogVHJ1ZVxuRm9jdXNTeW1ib2xzOiBbXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCJdXG5FbmFibGVDb25maWdzOiBbXCJWU09DS0VUU1wiLCBcIlZJUlRJT19WU09DS0VUU1wiLCBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsIFwiVkhPU1RfVlNPQ0tcIl1cblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNyaXRpY2FsIHZhbGlkYXRpb24gd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCB0byB2ZXJpZnkgdGhlIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIGFnYWluc3QgdGhlIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLCBvbmx5IGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0IGFuZCBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjM4Ljk1OTcxMjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NjkyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozOS4wNDYzOTIyNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTIwMTUwOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MzkuMDQ2OTI4MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0OTE5NjEwNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgY29ubmVjdGVkIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cXHUwMDNlcmVtb3RlX2FkZHJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBzb2NrYWRkcl92bWAgb2JqZWN0cyAoZS5nLiwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGB2c29ja19hZGRyX2luaXRgIHdoaWNoIHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgc3RydWN0dXJlKS4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIHNpbXBseSBjb21wYXJlcyB0aGUgYHN2bV9jaWRgIGFuZCBgc3ZtX3BvcnRgIGZpZWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIGEgc3RhbmRhcmQgbG9naWMgYnVnIGZpeCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbisrKyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgKzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmVcbi1cdCAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpXG4rXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcbitcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4rXHQgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmVcbitcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0IHx8XG4rXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozOS4wNDY5MjkxNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2ODc2NzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWU29jayBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCB0aGF0IG1vZGlmaWVzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2s6IGAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcilgLiBUaGlzIGNoZWNrIGlzIHBsYWNlZCB3aXRoaW4gYW4gZXhpc3RpbmcgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuXG5cblRoZSBjb2RlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIChgc3JjYCkgb2YgYW4gaW5jb21pbmcgcGFja2V0IHdpdGggdGhlIHJlbW90ZSBhZGRyZXNzIChgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgb2YgdGhlIGNvbm5lY3RlZCBzb2NrZXQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgYSBsb2dpYyBmaXgsIHByb2JhYmx5IHByZXZlbnRpbmcgYSBjb25uZWN0ZWQgc29ja2V0IGZyb20gaW5hZHZlcnRlbnRseSBwcm9jZXNzaW5nIHBhY2tldHMgaW50ZW5kZWQgZm9yIGEgZGlmZmVyZW50IHBlZXIuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MganVtcCBvdXQ7IHRoZSBwYXRjaCAqc2hvdWxkKiBiZSBzYWZlLlxuXG5CdXQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNyY2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkga25vdyBpdCdzIGEgYHN0cnVjdCBzb2NrYWRkcl92bWAsIGFuZCBpdCdzIGluaXRpYWxpemVkICpzb21ld2hlcmUqIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIEknbGwgcXVpY2tseSBqdW1wIGludG8gdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGF0IGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkLiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjQ3LjMxNTcwNDY0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE3NjE9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF92YWxpZF90eXBlKHUxNiB0eXBlKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NjktICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3NzA6dm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzcxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4My1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4NDpcXHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODUtXFx0XFx0XFx0XFx0XFx0ZHN0LnN2bV9jaWQsIGRzdC5zdm1fcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgxLX1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTg4MjpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6NDcuMzU5NTg1OTIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTUwMzAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzcwLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSByZWNlaXZlZCBhdCB0aGUgdHJhbnNwb3J0IGxheWVyLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSB2aXJ0aW8gZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBpZGlvc3luY3Jhc2llcyBpbiBwYWNrZXQgaGFuZGxpbmcuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MsIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIEkgY2FuIHR1bmUgb3Igb3B0aW1pemUgZG93biB0aGUgcm9hZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgc2VjdGlvbiBhcyB3ZWxsLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSdzIHJpbmcgYnVmZmVyIGJ1dCB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhhY3QgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjUxLjMxNDYxOTMwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzcwOlxcdHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4xNzcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuMTc3MjpcXHR7XFxuMTc3MzpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbjE3NzQ6XFx0XFx0c3RydWN0IHNvY2thZGRyX3ZtIHNyYywgZHN0O1xcbjE3NzU6XFx0XFx0c3RydWN0IHZzb2NrX3NvY2sgKnZzaztcXG4xNzc2OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xNzc3OlxcdFxcdGJvb2wgc3BhY2VfYXZhaWxhYmxlO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG4xNzgwOlxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlc3JjX3BvcnQpKTtcXG4xNzgxOlxcdFxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBsZTY0X3RvX2NwdShoZHItXFx1MDAzZWRzdF9jaWQpLFxcbjE3ODI6XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXFxuMTc4NTpcXHRcXHRcXHRcXHRcXHRcXHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxcbjE3ODY6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2VsZW4pLFxcbjE3ODc6XFx0XFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSxcXG4xNzg4OlxcdFxcdFxcdFxcdFxcdFxcdGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlb3ApLFxcbjE3ODk6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2VmbGFncyksXFxuMTc5MDpcXHRcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZWJ1Zl9hbGxvYyksXFxuMTc5MTpcXHRcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZWZ3ZF9jbnQpKTtcXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUobGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSkpIHtcXG4xNzk0OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTc5NTpcXHRcXHRcXHRnb3RvIGZyZWVfcGt0O1xcbjE3OTY6XFx0XFx0fVxcbjE3OTc6XFx0XFxuMTc5ODpcXHRcXHQvKiBUaGUgc29ja2V0IG11c3QgYmUgaW4gY29ubmVjdGVkIG9yIGJvdW5kIHRhYmxlXFxuMTc5OTpcXHRcXHQgKiBvdGhlcndpc2Ugc2VuZCByZXNldCBiYWNrXFxuMTgwMDpcXHRcXHQgKi9cXG4xODAxOlxcdFxcdHNrID0gdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChcXHUwMDI2c3JjLCBcXHUwMDI2ZHN0LCBuZXQpO1xcbjE4MDI6XFx0XFx0aWYgKCFzaykge1xcbjE4MDM6XFx0XFx0XFx0c2sgPSB2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoXFx1MDAyNmRzdCwgbmV0KTtcXG4xODA0OlxcdFxcdFxcdGlmICghc2spIHtcXG4xODA1OlxcdFxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTgwNjpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcGt0O1xcbjE4MDc6XFx0XFx0XFx0fVxcbjE4MDg6XFx0XFx0fVxcbjE4MDk6XFx0XFxuMTgxMDpcXHRcXHRpZiAodmlydGlvX3RyYW5zcG9ydF9nZXRfdHlwZShzaykgIT0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSkge1xcbjE4MTE6XFx0XFx0XFx0KHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTtcXG4xODEyOlxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xODEzOlxcdFxcdFxcdGdvdG8gZnJlZV9wa3Q7XFxuMTgxNDpcXHRcXHR9XFxuMTgxNTpcXHRcXG4xODE2OlxcdFxcdGlmICghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKSB7XFxuMTgxNzpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcInJlY2VpdmluZyB2c29jayBzb2NrZXQgaGFzIHNrX3JlZmNudCA9PSAwXFxcXG5cXFwiKTtcXG4xODE4OlxcdFxcdFxcdGdvdG8gZnJlZV9wa3Q7XFxuMTgxOTpcXHRcXHR9XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdHZzayA9IHZzb2NrX3NrKHNrKTtcXG4xODIyOlxcdFxcbjE4MjM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkLCBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCwgb3IgaWYgdGhlXFxuMTgyNjpcXHRcXHQgKiBwYWNrZXQgaXMgZnJvbSBhIGRpZmZlcmVudCBwZWVyIHRoYW4gdGhlIG9uZSBjb25uZWN0ZWQgdG8gc2suICBUaGVzZVxcbjE4Mjc6XFx0XFx0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXFxuMTgyODpcXHRcXHQgKiBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCBhbmQgYWNjZXB0IHBhY2tldHMgZnJvbSBhbnkgcGVlci5cXG4xODI5OlxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxcbjE4MzE6XFx0XFx0ICAgIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbjE4MzI6XFx0XFx0ICAgICAodnNrLVxcdTAwM2V0cmFuc3BvcnQgIT0gXFx1MDAyNnQtXFx1MDAzZXRyYW5zcG9ydCB8fFxcbjE4MzM6XFx0XFx0ICAgICAgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXFx1MDAyNnNyYywgXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIpKSkpIHtcXG4xODM0OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTgzNTpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE4MzY6XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbjE4Mzc6XFx0XFx0XFx0Z290byBmcmVlX3BrdDtcXG4xODM4OlxcdFxcdH1cXG4xODM5OlxcdFxcbjE4NDA6XFx0XFx0c3BhY2VfYXZhaWxhYmxlID0gdmlydGlvX3RyYW5zcG9ydF9zcGFjZV91cGRhdGUoc2ssIHNrYik7XFxuMTg0MTpcXHRcXG4xODQyOlxcdFxcdC8qIFVwZGF0ZSBDSUQgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZCBhZnRlciBhIHRyYW5zcG9ydCByZXNldCBldmVudCAqL1xcbjE4NDM6XFx0XFx0aWYgKHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkICE9IFZNQUREUl9DSURfQU5ZKVxcbjE4NDQ6XFx0XFx0XFx0dnNrLVxcdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcXG4xODQ1OlxcdFxcbjE4NDY6XFx0XFx0aWYgKHNwYWNlX2F2YWlsYWJsZSlcXG4xODQ3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZShzayk7XFxuMTg0ODpcXHRcXG4xODQ5OlxcdFxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX3N0YXRlKSB7XFxuMTg1MDpcXHRcXHRjYXNlIFRDUF9MSVNURU46XFxuMTg1MTpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHNrLCBza2IsIHQpO1xcbjE4NTI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTg1MzpcXHRcXHRcXHRicmVhaztcXG4xODU0OlxcdFxcdGNhc2UgVENQX1NZTl9TRU5UOlxcbjE4NTU6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Nvbm5lY3Rpbmcoc2ssIHNrYik7XFxuMTg1NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODU3OlxcdFxcdFxcdGJyZWFrO1xcbjE4NTg6XFx0XFx0Y2FzZSBUQ1BfRVNUQUJMSVNIRUQ6XFxuMTg1OTpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfY29ubmVjdGVkKHNrLCBza2IpO1xcbjE4NjA6XFx0XFx0XFx0YnJlYWs7XFxuMTg2MTpcXHRcXHRjYXNlIFRDUF9DTE9TSU5HOlxcbjE4NjI6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Rpc2Nvbm5lY3Rpbmcoc2ssIHNrYik7XFxuMTg2MzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODY0OlxcdFxcdFxcdGJyZWFrO1xcbjE4NjU6XFx0XFx0ZGVmYXVsdDpcXG4xODY2OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTg2NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODY4OlxcdFxcdFxcdGJyZWFrO1xcbjE4Njk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTo1MS4zMTQ3NzQyMjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNjAyNDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBWU09DSyBBZGRyZXNzIENoZWNrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gVGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBSaWdodCwgdGhlIGtleSB2YXJpYWJsZSBoZXJlIGlzIGBzcmNgLiBMb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpdCdzIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGB2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBsZTY0X3RvX2NwdShoZHItXHUwMDNlc3JjX2NpZCksIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzcmNfcG9ydCkpYC4gU28sIHRoZSBgc3JjYCB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gdGhlIGhlYWRlci4gTmF0dXJhbGx5LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgdnNvY2tfYWRkcl9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgYHNyY2AgcmVwcmVzZW50cy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3JjYCBzdHJ1Y3QgYmVmb3JlIEkgY2FuIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBuZXcgY29tcGFyaXNvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjU1LjY1MDgwMjQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NzEzMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19hZGRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Zzb2NrX2FkZHIuaC0xMi1cXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTM6dm9pZCB2c29ja19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLCB1MzIgY2lkLCB1MzIgcG9ydCk7XFxuaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oLTE0LWludCB2c29ja19hZGRyX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcik7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjUyPXN0YXRpYyBpbnQgdnNvY2tfYXV0b19iaW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU4LVxcdFxcdHJldHVybiAwO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTk6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZsb2NhbF9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYwLVxcdHJldHVybiBfX3Zzb2NrX2JpbmQoc2ssIFxcdTAwMjZsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04MDc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04MTUtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjgxNjpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNm5ld19hZGRyLCBhZGRyLVxcdTAwM2Vzdm1fY2lkLCBhZGRyLVxcdTAwM2Vzdm1fcG9ydCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTgxNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NDktXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjg1MDpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgbmV3X2FkZHIuc3ZtX2NpZCwgbmV3X2FkZHIuc3ZtX3BvcnQpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NTEtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzMi1cXHR2c2sgPSB2c29ja19zayhzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzMzpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzNDpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05MzUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTAyMD1zdGF0aWMgdm9pZCB2c29ja19za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzMS1cXHQgKi9cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTAzMjpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzM6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzNC1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNDc2PXN0YXRpYyBpbnQgdnNvY2tfZGdyYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE0ODktXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTQ5MDpcXHRcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNDkxLVxcdFxcdFxcdFxcdFZNQUREUl9QT1JUX0FOWSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0xNzA9c3RhdGljIHZvaWQgaHZzX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIGNvbnN0IGd1aWRfdCAqc3ZyX2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTczLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjE3NDpcXHR2c29ja19hZGRyX2luaXQoYWRkciwgVk1BRERSX0NJRF9BTlksIHBvcnQpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTE3NS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0yOTU9c3RhdGljIHZvaWQgaHZzX29wZW5fY29ubmVjdGlvbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbilcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTMzOC1cXHRcXHQvKiBSZW1vdGUgcGVlciBpcyBhbHdheXMgdGhlIGhvc3QgKi9cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzozMzk6XFx0XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2bmV3LVxcdTAwM2VyZW1vdGVfYWRkcixcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0zNDAtXFx0XFx0XFx0XFx0Vk1BRERSX0NJRF9IT1NULCBWTUFERFJfUE9SVF9BTlkpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE2OTQ9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTczMS1cXHR2Y2hpbGQgPSB2c29ja19zayhjaGlsZCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3MzI6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2Y2hpbGQtXFx1MDAzZWxvY2FsX2FkZHIsIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzMtXFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzM0OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dmNoaWxkLVxcdTAwM2VyZW1vdGVfYWRkciwgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTczNS1cXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZXNyY19wb3J0KSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc3MD12b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3OC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3OTpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4MC1cXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZXNyY19wb3J0KSk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODE6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZkc3QsIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODItXFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTE3Nj12bWNpX3RyYW5zcG9ydF9wYWNrZXRfZ2V0X2FkZHJlc3NlcyhzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3QsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTc5LXtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTgwOlxcdHZzb2NrX2FkZHJfaW5pdChsb2NhbCwgcGt0LVxcdTAwM2VkZy5kc3QuY29udGV4dCwgcGt0LVxcdTAwM2Vkc3RfcG9ydCk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MTpcXHR2c29ja19hZGRyX2luaXQocmVtb3RlLCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXFx1MDAzZXNyY19wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTgyLX1cXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMTQ9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzEtXFx0fSBlbHNlIHtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MzMyOlxcdFxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LFxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzMtXFx0XFx0XFx0XFx0cGt0LVxcdTAwM2VzcmNfcG9ydCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NDc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdm1jaV90cmFuc3BvcnRfZ2V0X3BlbmRpbmcoXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDg2LVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzo0ODc6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZzcmMsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cXHUwMDNlc3JjX3BvcnQpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00ODgtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9Njc1PXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTcwNC1cXHQgKi9cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA1OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2c3JjLCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXFx1MDAzZXNyY19wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA2OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBwa3QtXFx1MDAzZWRnLmRzdC5jb250ZXh0LCBwa3QtXFx1MDAzZWRzdF9wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNzA3LVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTk0OD1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xMDIzLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxMDI0OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dnBlbmRpbmctXFx1MDAzZWxvY2FsX2FkZHIsIHBrdC1cXHUwMDNlZGcuZHN0LmNvbnRleHQsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjUtXFx0XFx0XFx0cGt0LVxcdTAwM2Vkc3RfcG9ydCk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjEwMjY6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2cGVuZGluZy1cXHUwMDNlcmVtb3RlX2FkZHIsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjctXFx0XFx0XFx0cGt0LVxcdTAwM2VzcmNfcG9ydCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MTY3MT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNjk1LVxcdFxcdHJldHVybiB2bWNpX3RyYW5zcG9ydF9lcnJvcl90b192c29ja19lcnJvcihlcnIpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxNjk2OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyLCBhZGRyLVxcdTAwM2Vzdm1fY2lkLFxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNjk3LVxcdFxcdFxcdHZtY2lfdHJhbnModnNrKS1cXHUwMDNlZGdfaGFuZGxlLnJlc291cmNlKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0xNzQyPXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfZGdyYW1fZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODQtXFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfdm0gKiwgdm1fYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE3ODU6XFx0XFx0dnNvY2tfYWRkcl9pbml0KHZtX2FkZHIsIGRnLVxcdTAwM2VzcmMuY29udGV4dCwgZGctXFx1MDAzZXNyYy5yZXNvdXJjZSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODYtXFx0XFx0bXNnLVxcdTAwM2Vtc2dfbmFtZWxlbiA9IHNpemVvZigqdm1fYWRkcik7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy0xMy1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoxNDp2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTE1LXtcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIwLX1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoyMTpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2luaXQpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIyLVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmM9NDY9dm9pZCB2c29ja19hZGRyX3VuYmluZChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNDcte1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjQ4OlxcdHZzb2NrX2FkZHJfaW5pdChhZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy00OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjU3LjMxNzkzOTcwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNzg5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZzb2NrX2FkZHJfaW5pdCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdnNvY2tfYWRkcl9pbml0YCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24pIGZvciB2c29jayBhZGRyZXNzZXMgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFkZHJlc3NlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHBvcHVsYXRlZC4gSSdtIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLCBsaWtlbHkgYSBgc29ja2FkZHJfdm1gLCBhbmQgc2V0cyB1cCB0aGUgaW5pdGlhbCB2YWx1ZXMgYmFzZWQgb24gcHJvdmlkZWQgaW5wdXRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBndWVzdCBJRCwgaG9zdCBJRCwgcG9ydCwgYW5kIGFueSBmbGFncyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHRoZSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFuZCBhbnkgaW5pdGlhbCBzYW5pdHkgY2hlY2tzIHBlcmZvcm1lZCBoZXJlLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIHJhbmdlIG9mIGFsbG93ZWQgcG9ydCBudW1iZXJzIG9yIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSBob3cgdGhleSBhcHByb2FjaCB0aGUgYWxpZ25tZW50IGFuZCBzdHJ1Y3R1cmUgcGFja2luZywgdG9vLCBhbmQgaWYgYW55IHByZS1kZWZpbmVkIGNvbnN0YW50cyBhcmUgYmVpbmcgdXNlZC4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyBmb3IgdGhlIHZhcmlvdXMgYWRkcmVzcyBmYW1pbHkgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjAxLjk5MTc2MDg4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgVk13YXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2V0LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdnNvY2tfYWRkci5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHR2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xcbiAgMTc6XFx0XFx0YWRkci1cXHUwMDNlc3ZtX2ZhbWlseSA9IEFGX1ZTT0NLO1xcbiAgMTg6XFx0XFx0YWRkci1cXHUwMDNlc3ZtX2NpZCA9IGNpZDtcXG4gIDE5OlxcdFxcdGFkZHItXFx1MDAzZXN2bV9wb3J0ID0gcG9ydDtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XFxuICAyMjpcXHRcXG4gIDIzOlxcdGludCB2c29ja19hZGRyX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcXG4gIDI0OlxcdHtcXG4gIDI1OlxcdFxcdF9fdTggc3ZtX3ZhbGlkX2ZsYWdzID0gVk1BRERSX0ZMQUdfVE9fSE9TVDtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKCFhZGRyKVxcbiAgMjg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vzdm1fZmFtaWx5ICE9IEFGX1ZTT0NLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowMS45OTE4MjU0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDU4NTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZzb2NrIEFkZHJlc3MgQ29tcGFyaXNvbioqXG5cbk9rYXksIHNvIGB2c29ja19hZGRyX2luaXRgIGRvZXMgYSBjbGVhbiBgbWVtc2V0YCBvZiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUsIHNvIHRoZSBzb3VyY2UgYWRkcmVzcywgYHNyY2AsIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gVGhlIGB2c2stXHUwMDNlcmVtb3RlX2FkZHJgIGlzIGFsc28gYSBgc3RydWN0IHNvY2thZGRyX3ZtYCwgd2hpY2ggZ2V0cyBpbml0aWFsaXplZCBlaXRoZXIgZHVyaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gb3IgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB1bmRlcnN0YW5kaW5nIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGRldGVybWluZSBpZiB0aGUgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY29tcGFyaXNvbiBpcyByb2J1c3QgYW5kIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGZpZWxkcyB3aXRoaW4gdGhvc2UgYHNvY2thZGRyX3ZtYCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowNS44OTY0MTQ1OTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzI0NjAwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfYWRkcl9lcXVhbHNfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oPTE2PXZvaWQgdnNvY2tfYWRkcl91bmJpbmQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTc6Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqb3RoZXIpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwMD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwODpcXHRcXHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihhZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDktXFx0XFx0ICAgIHZzb2NrX25ldF9jaGVja19tb2RlKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjM9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMzMS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzMyOlxcdFxcdGlmICh2c29ja19hZGRyX2VxdWFsc19hZGRyKHNyYywgXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMzMy1cXHRcXHQgICAgZHN0LVxcdTAwM2Vzdm1fcG9ydCA9PSB2c2stXFx1MDAzZWxvY2FsX2FkZHIuc3ZtX3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODMyLVxcdCAgICAgKHZzay1cXHUwMDNldHJhbnNwb3J0ICE9IFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQgfHxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTgzMzpcXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnNrLVxcdTAwM2VyZW1vdGVfYWRkcikpKSkge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODM0LVxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NDc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdm1jaV90cmFuc3BvcnRfZ2V0X3BlbmRpbmcoXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDkyLVxcdFxcdFxcdCAgICBwZW5kaW5nX2xpbmtzKSB7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjQ5MzpcXHRcXHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnBlbmRpbmctXFx1MDAzZXJlbW90ZV9hZGRyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00OTQtXFx0XFx0ICAgIHBrdC1cXHUwMDNlZHN0X3BvcnQgPT0gdnBlbmRpbmctXFx1MDAzZWxvY2FsX2FkZHIuc3ZtX3BvcnQpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jPTUwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfdW5iaW5kKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy01MS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzo1Mjpib29sIHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNTctfVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjU4OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowNy42Mjg4Nzk0NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1MzYxMjEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBmdW5jdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgd2l0aGluIHRoZSBgdnNvY2tfYWRkci5jYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBjb21wYXJpc29uIGZ1bmN0aW9uLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSXQgaXMgbGlrZWx5IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3byBWU09DSyBhZGRyZXNzZXMgYXJlIGVxdWl2YWxlbnQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGFueSBuZXR3b3JraW5nIGNvZGU7IGhvdyBkbyB5b3Uga25vdyBpZiB5b3UncmUgdGFyZ2V0aW5nIHRoZSBzYW1lIGVuZHBvaW50PyBXZSBuZWVkIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIHZlcmlmeSB0aGlzIGVxdWFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb21wYXJlZC4gQXJlIHdlIGxvb2tpbmcgYXQgc2ltcGxlIGludGVnZXIgY29tcGFyaXNvbnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBzb2NrZXQgZmFtaWxpZXMgb3IgcG9ydCBudW1iZXJzPyBJJ2xsIGJldCBpdCdzIHNvbWV0aGluZyBpbnZvbHZpbmcgYHZzb2NrX2FkZHJgLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbWJlci13aXNlIGNvbXBhcmlzb25zLiBIb3BlZnVsbHksIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgY29tcGFyaXNvbiBvZiB0aGUgY29udGV4dCBJRCBhbmQgcG9ydCwgYXMgdGhhdOKAmXMgdXN1YWxseSBlbm91Z2ggdG8gZGVmaW5lIGEgVlNPQ0sgZW5kcG9pbnQuIEFueSBhZGRpdGlvbmFsIGZpZWxkcyBtaWdodCBpbmRpY2F0ZSBpdCdzIG5vdCBzaW1wbHkgYSByYXcgY29tcGFyaXNvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgY29tcGFyaXNvbiBpcyBvcmRlciBzZW5zaXRpdmUuXG5cbk5leHQsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiBlaXRoZXIgb3IgYm90aCBhZGRyZXNzZXMgYXJlIE5VTEw/IERvZXMgaXQgcmV0dXJuIGFuIGV4cGVjdGVkIHZhbHVlIGluIHRoZXNlIGNhc2VzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMgaWYgaXQgdXNlcyBpbnRlZ2Vycz8gT3IgcmFjZSBjb25kaXRpb25zPyBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLiBEb2VzIGl0IHVzZSBzaG9ydC1jaXJjdWl0aW5nIHRvIG1pbmltaXplIGNvbXBhcmlzb25zIGlmIHRoZSBjb250ZXh0IElEcyBhcmUgZGlmZmVyZW50PyBQZXJmb3JtYW5jZSBtYXR0ZXJzIGluIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjEzLjY4MjQ5NDM3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX3VuYmluZCk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdGJvb2wgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXFxuICA1MzpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpvdGhlcilcXG4gIDU0OlxcdHtcXG4gIDU1OlxcdFxcdHJldHVybiBhZGRyLVxcdTAwM2Vzdm1fY2lkID09IG90aGVyLVxcdTAwM2Vzdm1fY2lkIFxcdTAwMjZcXHUwMDI2XFxuICA1NjpcXHRcXHRcXHRhZGRyLVxcdTAwM2Vzdm1fcG9ydCA9PSBvdGhlci1cXHUwMDNlc3ZtX3BvcnQ7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2VxdWFsc19hZGRyKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0aW50IHZzb2NrX2FkZHJfY2FzdChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gIDYxOlxcdFxcdFxcdCAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKipvdXRfYWRkcilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKipvdXRfYWRkcikpXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Km91dF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl92bSAqKWFkZHI7XFxuICA2NzpcXHRcXHRyZXR1cm4gdnNvY2tfYWRkcl92YWxpZGF0ZSgqb3V0X2FkZHIpO1xcbiAgNjg6XFx0fVxcbiAgNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYWRkcl9jYXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzY6MTMuNjgyNTY3ODA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjgzOTQ1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzOiBMb2dpYyBCdWcgRml4LCBObyBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5ICpub3QqIGEgS01TQU4gY2FuZGlkYXRlLiBUaGUgY29kZSBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gIGBzcmNgLCBhcyBJIGNhbiBzZWUgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgd2l0aCBgdnNvY2tfYWRkcl9pbml0YC4gVGhhdCBmdW5jdGlvbiBkb2VzIHRoZSBzdGFuZGFyZCBgbWVtc2V0YCBhbmQgc2V0cyBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHM6IGBzdm1fZmFtaWx5YCwgYHN2bV9jaWRgLCBhbmQgYHN2bV9wb3J0YC4gIFRoZSBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgZnVuY3Rpb24gaXRzZWxmIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uIG9mIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgbWVtYmVycy4gVGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3I6IGEgcGFja2V0IG9yaWdpbmF0aW5nIGZyb20gYSBwZWVyICpvdGhlciogdGhhbiB0aGUgY29ubmVjdGVkIHBlZXIgY291bGQgcG90ZW50aWFsbHkgYmUgbWlzaGFuZGxlZCBieSB0aGUgc29ja2V0IGlmIGl0IHNvbWVob3cgZ290IHJvdXRlZCB0aGVyZS4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIGxvZ2ljIGJ1ZzsgYSBwYWNrZXQgaW50ZW5kZWQgZm9yIG9uZSBzb2NrZXQgYWNjaWRlbnRhbGx5IGJlaW5nIHByb2Nlc3NlZCBieSBhbm90aGVyLiBUaGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3Qgc29ja2V0IGhhbmRsZXMgdGhlIGluY29taW5nIHBhY2tldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBkYXRhIGludGVncml0eS5cblxuTGV0J3MgcXVpY2tseSByZS1leGFtaW5lIHRoZSBjb2RlIHRvIGNvbmZpcm0gdGhpczpcblxuYGBgY1xuLVx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZVxuLVx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcbitcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuK1x0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcbitcdCAqIHByb3BlcnRpZXMgY291bGQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSBsb2NrX3NvY2suICBMaXN0ZW5lciBzb2NrZXRzIGFyZVxuK1x0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4gXHQgKi9cbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbi1cdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjYgdnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCkpIHtcbitcdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbitcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbmBgYFxuXG5ZZXAsIHRoYXQncyBleGFjdGx5IHdoYXQgaXQncyBkb2luZy4gIGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCBhcmUgKmNvbXBsZXRlbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGF0IGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBjYWxsLiAgVGhlcmUncyBubyBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgdGhlcmVmb3JlLCBubyBwb3NzaWJpbGl0eSBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUgdXNlci4gIFdlJ3JlIGxvb2tpbmcgYXQgYSBsb2dpYyBlcnJvci4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciBkZXRlY3RpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBmdXJ0aGVyIGxvZ2ljIGJ1Z3MuIEtNU0FOJ3Mgc3RyZW5ndGggbGllcyBpbiBkZXRlY3RpbmcgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHNpbmNlIGl0J3Mgbm90IHByZXNlbnQsIGl0J3Mgbm90IG5lZWRlZC4gIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI4LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjIzLjk2NjUxNjg2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQncyByZW1vdGUgYWRkcmVzcy4gVGhlIGFkZHJlc3NlcyBiZWluZyBjb21wYXJlZCAoYHNyY2AgYW5kIGB2c2stXFx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQncyByZW1vdGUgYWRkcmVzcy4gVGhlIGFkZHJlc3NlcyBiZWluZyBjb21wYXJlZCAoYHNyY2AgYW5kIGB2c2stXFx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 13:17:13 +0000 UTC FinishedAt: 2026-08-13 13:36:25 +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": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VSOCKETS_LOOPBACK", "VHOST_VSOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2bb155e92167cd5ad6aae312e83291da2454f8b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VSOCKETS_LOOPBACK", "VHOST_VSOCK" ], "series_id": "599254e0-1004-47fa-91b3-0b9668d1ece6" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_recv_pkt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIFRoZSBhZGRyZXNzZXMgYmVpbmcgY29tcGFyZWQgKGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQmIzM5O3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzIGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmlydGlvIHZzb2NrIHRyYW5zcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzozNTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgJiM0MzsxODIyLDE1IEBAIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbiBcbiBcdGxvY2tfc29jayhzayk7XG4gXG4tXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQgb3IgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQgYmVmb3JlXG4tXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuJiM0MztcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuJiM0MztcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4mIzQzO1x0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXG4mIzQzO1x0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4gXHQgKi9cbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbi1cdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjYgdnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCkpIHtcbiYjNDM7XHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAodnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCB8fFxuJiM0MztcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIHNvY2tldCYjMzk7cyByZW1vdGUgYWRkcmVzcyBpZiB0aGUgc29ja2V0IGlzIG5vdCBhIGxpc3RlbmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZpcnRpbyB2c29jayB0cmFuc3BvcnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKaW5kZXggOGJlY2FkODEyNzljOC4uZjczZTA0MDZhNzkwYSAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwpAQCAtMTgyMiwxMSAmIzQzOzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LAogCiAJbG9ja19zb2NrKHNrKTsKIAotCS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmUKLQkgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KQomIzQzOwkvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGUKJiM0MzsJICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2UKJiM0MzsJICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlCiYjNDM7CSAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLgogCSAqLwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHwKLQkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsgdnNrLSZndDt0cmFuc3BvcnQgIT0gJmFtcDt0LSZndDt0cmFuc3BvcnQpKSB7CiYjNDM7CSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkgICAgICh2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCB8fAomIzQzOwkgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKSkpKSB7CiAJCSh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXNvY2tfcHV0KHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFZpcnRpbyBWU29jayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSwgcmVhbGx5LiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtzIGEgY3JpdGljYWwgc2VjdXJpdHkgZW5oYW5jZW1lbnQuIFRoZSBjb2RlIG5vdyBlbnN1cmVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBhbiBpbmNvbWluZyBwYWNrZXQgbWF0Y2hlcyB0aGUgcmVtb3RlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBhIHBhY2tldCBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQuIFRoZSBhZGRlZCBjb2RlIGlzIGludGVuZGVkIHRvIGhhbmRsZSB0aGUgZWRnZSBjYXNlcyBvZiBjbG9zZWQgc29ja2V0cywgc29ja2V0cyBhc3NpZ25lZCB0byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBvciBwYWNrZXRzIGZyb20gdGhlIHdyb25nIHBlZXIuIFRoZSBjaGVjayBpbmNsdWRlcyBzb2NrZXRzIGluIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUsIHdoaWNoIHdvdWxkIGJlIGxpc3RlbmVyIHNvY2tldHMgdGhhdCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyBkYXRhIGNvcnJ1cHRpb24gb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB2aXJ0aW8gdnNvY2suIEdpdmVuIEkga25vdyB0aGUgZmlsZSBiZWluZyBtb2RpZmllZCBpcyBgdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AsIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gbG9vayBmb3IgdGhhdCBmaWxlbmFtZSB3aXRoaW4gYG5ldC92bXdfdnNvY2svTWFrZWZpbGVgIHRvIGZpbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9NYWtlZmlsZT01PW9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFMpICYjNDM7PSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT04pICYjNDM7PSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS03LW9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICYjNDM7PSBodl9zb2NrLm9cbi0tXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlPTE4PXZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnQub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0xOS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgJiM0Mzs9IHZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFZTT0NLIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYFZJUlRJT19WU09DS0VUU19DT01NT05gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBiZWluZyBwdWxsZWQgaW4gYnkgZWl0aGVyIGBWSVJUSU9fVlNPQ0tFVFNgIG9yIGBWSE9TVF9WU09DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUbyBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Ztd192c29jay9LY29uZmlnYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IGBLY29uZmlnYCBoYXMgdG8gdGVsbCB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzItXHRkZWZhdWx0IHlcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzQtXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnPTUzPWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTUtXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIFZTT0NLIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIElmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGRlZmluaXRpb25zIGZvciBib3RoIGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgIGFyZSBwdWxsaW5nIGluIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIE5vdywgd2hhdCYjMzk7cyBiZWhpbmQgdGhlIHZob3N0IHNpZGUgb2YgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgVkhPU1RfVlNPQ0tgIGlzIGhhbmRsZWQsIGFuZCB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgZ2V0IHRoYXQgb3BlbiBhbmQgc3RhcnQgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIG9wdGlvbiBmbGFncyB0aGVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgVlNPQ0sgb3B0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSB2aG9zdCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo2MDpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGxhbiBpcyB0byBlbmFibGUgYFZJUlRJT19WU09DS0VUU2AsIGBWU09DS0VUU19MT09QQkFDS2AsIGFuZCBgVkhPU1RfVlNPQ0tgLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB3aGF0IHdlIG5lZWQgZm9yIFZTT0NLIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucywgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyB0aGUgcHJpbWFyeSB1c2UgY2FzZS4KCk5vdywgdGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlIHRoZXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkIGV4dGVybmFsbHkgb3IgYWN0aXZlbHkgdXRpbGl6ZWQgYnkgYW55dGhpbmcgYmVzaWRlcyBpdHMgaW1tZWRpYXRlIHB1cnBvc2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gZW5zdXJlIGFueSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgYW5kIGRvbiYjMzk7dCBpbnRyb2R1Y2UgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgcGFydGljdWxhcmx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWxseSBzZW5zaXRpdmUgbmF0dXJlIG9mIGRhdGEgdHJhbnNwb3J0LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGNlbnRyYWwgdG8gdGhlIGVudGlyZSB0cmFuc3BvcnQgbWVjaGFuaXNtLCBzbyBhIHNtYWxsIGNoYW5nZSB0aGVyZSBoYXMgYSB2ZXJ5IGhpZ2ggY2hhbmNlIG9mIG1ha2luZyBhIGxhcmdlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTYzMj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4Ny1cdFx0XHQgKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjY4ODpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFx1MDAyNnZpcnRpb190cmFuc3BvcnQsIHNrYiwgTlVMTCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02ODktXHRcdH1cbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc2MT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUodTE2IHR5cGUpXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NjktICovXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3MDp2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3MS1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgzLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODQ6XHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4NS1cdFx0XHRcdFx0ZHN0LnN2bV9jaWQsIGRzdC5zdm1fcG9ydCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4MS19XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTg4MjpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgzLVxuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYz0xMjM9c3RhdGljIHZvaWQgdnNvY2tfbG9vcGJhY2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0MS1cdFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYzoxNDI6XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2bG9vcGJhY2tfdHJhbnNwb3J0LCBza2IsXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmMtMTQzLVx0XHRcdFx0XHQgIHNvY2tfbmV0KHNrYi1cdTAwM2VzaykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODIwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKioKCk9rYXksIHNvIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4uLiBJIGtub3cgaXQmIzM5O3MgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUsIGl0JiMzOTtzIGRlZmluaXRlbHkgdXNlZCBieSBib3RoIGB2aXJ0aW9fdHJhbnNwb3J0LmNgIGFuZCBgdnNvY2tfbG9vcGJhY2suY2AuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBib3RoIGNvcmUgY29tcG9uZW50cy4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGl0IHBvcCB1cCBpbiBgdmhvc3RfdnNvY2suY2AgdG9vLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBtYWtlIHN1cmUgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucywgZXZlbiB0aGUgb25lcyB0aGF0IGZlZWwgb2J2aW91cy4gTmVlZCB0byBrZWVwIHRoYXQgd2hvbGUgcGljdHVyZSBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYz01MjM9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTU4My1cdFx0ICAgIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKCkpXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTg0Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2dmhvc3RfdHJhbnNwb3J0LCBza2IsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNTg1LVx0XHRcdFx0XHRcdCAgdnNvY2stXHUwMDNlbmV0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCB5ZXMsIEkmIzM5O20gY2VydGFpbiB0aGlzIGNvbXBvbmVudCBpcyBpbiB1c2UuIFRoZSBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHByb21pc2luZyBwb2ludCB0byBkaXZlIGludG8uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgcGFja2V0IHJlY2VwdGlvbiBsb2dpYyBwcm9iYWJseSByZXNpZGVzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmUgbW9yZSB0aW1lLiBJJiMzOTtsbCBjaGVjayBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uZmlybSB0aGUgYnJvYWRlciBgVlNPQ0tFVFNgIHNldHRpbmcgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGVuYWJsZWQgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU1CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBWU09DS0VUU2AgYXQgaXRzIGNvcmUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGl0IHRvdWNoZXMuIEFscmlnaHQsIGBWSVJUSU9fVlNPQ0tFVFNgIGhpbmdlcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVklSVElPYCwgbWFrZXMgc2Vuc2UuIFRoZW4gYFZTT0NLRVRTX0xPT1BCQUNLYCBuZWVkcyBgVlNPQ0tFVFNgIHRvbywgYW5kIGZpbmFsbHksIGBWSE9TVF9WU09DS2AgcmVxdWlyZXMgYm90aCBgVkhPU1RgIGFuZCBgVlNPQ0tFVFNgLiBUaGF0IGdpdmVzIHVzIGEgY2xlYW4gbGlzdCBvZiBjb25maWd1cmF0aW9ucyB0byBlbmFibGU6IGBWU09DS0VUU2AsIGBWSVJUSU9fVlNPQ0tFVFNgLCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBhbmQgYFZIT1NUX1ZTT0NLYC4KCk5vdywgdGhlIHN5bWJvbCB0aGF0IHJlYWxseSBjYXRjaGVzIG15IGV5ZSBoZXJlIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gV2UgbmVlZCB0byB2ZXJpZnkgaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGlubGluZSwgYnV0IGl0JiMzOTtzIGV4cG9ydGVkLiBUaGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBlZXIgYWRkcmVzcyB2YWxpZGF0aW9uIGlzc3VlOyBhIHBhY2tldCBmcm9tIHRoZSB3cm9uZyBwZWVyIGNvdWxkIGJlIGFjY2VwdGVkIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdnNvY2sgbmV0d29yayBzdGFjay4gVGhpcyBoYXMgYSBoaWdoIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIG91ciBmaW5kaW5nczoKCldvcnRoRnV6emluZzogVHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7VlNPQ0tFVFMmIzM0OywgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LCAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDtdClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNyaXRpY2FsIHZhbGlkYXRpb24gd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCB0byB2ZXJpZnkgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBhZ2FpbnN0IHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MsIG9ubHkgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgdGhlIHZpcnRpbyB2c29jayB0cmFuc3BvcnQgYW5kIGlzIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGluIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QgdG8gZW5zdXJlIHRoYXQgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBpbiB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWNrZXQmIzM5O3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzIGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmlydGlvIHZzb2NrIHRyYW5zcG9ydC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0JiMzOTtzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIFRoZSBhZGRyZXNzZXMgYmVpbmcgY29tcGFyZWQgKGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMzozNTowMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwppbmRleCA4YmVjYWQ4MTI3OWM4Li5mNzNlMDQwNmE3OTBhIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCkBAIC0xODIyLDExICYjNDM7MTgyMiwxNSBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAKIAlsb2NrX3NvY2soc2spOwogCi0JLyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZQotCSAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpCiYjNDM7CS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZQomIzQzOwkgKiBwYWNrZXQgaXMgZnJvbSBhIGRpZmZlcmVudCBwZWVyIHRoYW4gdGhlIG9uZSBjb25uZWN0ZWQgdG8gc2suICBUaGVzZQomIzQzOwkgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmUKJiM0MzsJICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuCiAJICovCiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fAotCSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOyB2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCkpIHsKJiM0MzsJICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAgKHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0IHx8CiYjNDM7CSAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWU29jayBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIHRoYXQgbW9kaWZpZXMgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzLCBzcGVjaWZpY2FsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYCF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpYC4gVGhpcyBjaGVjayBpcyBwbGFjZWQgd2l0aGluIGFuIGV4aXN0aW5nIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLgoKVGhlIGNvZGUgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpdCYjMzk7cyBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIChgc3JjYCkgb2YgYW4gaW5jb21pbmcgcGFja2V0IHdpdGggdGhlIHJlbW90ZSBhZGRyZXNzIChgdnNrLSZndDtyZW1vdGVfYWRkcmApIG9mIHRoZSBjb25uZWN0ZWQgc29ja2V0LiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGlzIGlzIGEgbG9naWMgZml4LCBwcm9iYWJseSBwcmV2ZW50aW5nIGEgY29ubmVjdGVkIHNvY2tldCBmcm9tIGluYWR2ZXJ0ZW50bHkgcHJvY2Vzc2luZyBwYWNrZXRzIGludGVuZGVkIGZvciBhIGRpZmZlcmVudCBwZWVyLiBObyBpbW1lZGlhdGUgcmVkIGZsYWdzIGp1bXAgb3V0OyB0aGUgcGF0Y2ggKnNob3VsZCogYmUgc2FmZS4KCkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc3JjYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBrbm93IGl0JiMzOTtzIGEgYHN0cnVjdCBzb2NrYWRkcl92bWAsIGFuZCBpdCYjMzk7cyBpbml0aWFsaXplZCAqc29tZXdoZXJlKiB3aXRoaW4gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLiBJJiMzOTtsbCBxdWlja2x5IGp1bXAgaW50byB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkLiBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE3NjE9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF92YWxpZF90eXBlKHUxNiB0eXBlKVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY5LSAqL1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3NzA6dm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NzEtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4My1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzg0Olx0dHJhY2VfdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzcmMuc3ZtX2NpZCwgc3JjLnN2bV9wb3J0LFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODUtXHRcdFx0XHRcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4ODEtfVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE4ODI6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE3NzAuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIHBhY2tldHMgYXJlIHJlY2VpdmVkIGF0IHRoZSB0cmFuc3BvcnQgbGF5ZXIsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHZpcnRpbyBmcmFtZXdvcmsuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IGlkaW9zeW5jcmFzaWVzIGluIHBhY2tldCBoYW5kbGluZy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MsIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBJIGNhbiB0dW5lIG9yIG9wdGltaXplIGRvd24gdGhlIHJvYWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhhdCBzZWN0aW9uIGFzIHdlbGwuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSYjMzk7cyByaW5nIGJ1ZmZlciBidXQgd2FudCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4YWN0IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTc3MDpcdHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbjE3NzE6XHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuMTc3MjpcdHtcbjE3NzM6XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4xNzc0Olx0XHRzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjLCBkc3Q7XG4xNzc1Olx0XHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuMTc3NjpcdFx0c3RydWN0IHNvY2sgKnNrO1xuMTc3NzpcdFx0Ym9vbCBzcGFjZV9hdmFpbGFibGU7XG4xNzc4Olx0XG4xNzc5Olx0XHR2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBsZTY0X3RvX2NwdShoZHItXHUwMDNlc3JjX2NpZCksXG4xNzgwOlx0XHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZXNyY19wb3J0KSk7XG4xNzgxOlx0XHR2c29ja19hZGRyX2luaXQoXHUwMDI2ZHN0LCBsZTY0X3RvX2NwdShoZHItXHUwMDNlZHN0X2NpZCksXG4xNzgyOlx0XHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZWRzdF9wb3J0KSk7XG4xNzgzOlx0XG4xNzg0Olx0XHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXG4xNzg1Olx0XHRcdFx0XHRcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXG4xNzg2Olx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VsZW4pLFxuMTc4NzpcdFx0XHRcdFx0XHRsZTE2X3RvX2NwdShoZHItXHUwMDNldHlwZSksXG4xNzg4Olx0XHRcdFx0XHRcdGxlMTZfdG9fY3B1KGhkci1cdTAwM2VvcCksXG4xNzg5Olx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VmbGFncyksXG4xNzkwOlx0XHRcdFx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VidWZfYWxsb2MpLFxuMTc5MTpcdFx0XHRcdFx0XHRsZTMyX3RvX2NwdShoZHItXHUwMDNlZndkX2NudCkpO1xuMTc5MjpcdFxuMTc5MzpcdFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUobGUxNl90b19jcHUoaGRyLVx1MDAzZXR5cGUpKSkge1xuMTc5NDpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTc5NTpcdFx0XHRnb3RvIGZyZWVfcGt0O1xuMTc5NjpcdFx0fVxuMTc5NzpcdFxuMTc5ODpcdFx0LyogVGhlIHNvY2tldCBtdXN0IGJlIGluIGNvbm5lY3RlZCBvciBib3VuZCB0YWJsZVxuMTc5OTpcdFx0ICogb3RoZXJ3aXNlIHNlbmQgcmVzZXQgYmFja1xuMTgwMDpcdFx0ICovXG4xODAxOlx0XHRzayA9IHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoXHUwMDI2c3JjLCBcdTAwMjZkc3QsIG5ldCk7XG4xODAyOlx0XHRpZiAoIXNrKSB7XG4xODAzOlx0XHRcdHNrID0gdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KFx1MDAyNmRzdCwgbmV0KTtcbjE4MDQ6XHRcdFx0aWYgKCFzaykge1xuMTgwNTpcdFx0XHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4xODA2Olx0XHRcdFx0Z290byBmcmVlX3BrdDtcbjE4MDc6XHRcdFx0fVxuMTgwODpcdFx0fVxuMTgwOTpcdFxuMTgxMDpcdFx0aWYgKHZpcnRpb190cmFuc3BvcnRfZ2V0X3R5cGUoc2spICE9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2V0eXBlKSkge1xuMTgxMTpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTgxMjpcdFx0XHRzb2NrX3B1dChzayk7XG4xODEzOlx0XHRcdGdvdG8gZnJlZV9wa3Q7XG4xODE0Olx0XHR9XG4xODE1Olx0XG4xODE2Olx0XHRpZiAoIXNrYl9zZXRfb3duZXJfc2tfc2FmZShza2IsIHNrKSkge1xuMTgxNzpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7cmVjZWl2aW5nIHZzb2NrIHNvY2tldCBoYXMgc2tfcmVmY250ID09IDBcXG5cJiMzNDspO1xuMTgxODpcdFx0XHRnb3RvIGZyZWVfcGt0O1xuMTgxOTpcdFx0fVxuMTgyMDpcdFxuMTgyMTpcdFx0dnNrID0gdnNvY2tfc2soc2spO1xuMTgyMjpcdFxuMTgyMzpcdFx0bG9ja19zb2NrKHNrKTtcbjE4MjQ6XHRcbjE4MjU6XHRcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuMTgyNjpcdFx0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcbjE4Mjc6XHRcdCAqIHByb3BlcnRpZXMgY291bGQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSBsb2NrX3NvY2suICBMaXN0ZW5lciBzb2NrZXRzIGFyZVxuMTgyODpcdFx0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4xODI5Olx0XHQgKi9cbjE4MzA6XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbjE4MzE6XHRcdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbjE4MzI6XHRcdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbjE4MzM6XHRcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4xODM0Olx0XHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4xODM1Olx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4xODM2Olx0XHRcdHNvY2tfcHV0KHNrKTtcbjE4Mzc6XHRcdFx0Z290byBmcmVlX3BrdDtcbjE4Mzg6XHRcdH1cbjE4Mzk6XHRcbjE4NDA6XHRcdHNwYWNlX2F2YWlsYWJsZSA9IHZpcnRpb190cmFuc3BvcnRfc3BhY2VfdXBkYXRlKHNrLCBza2IpO1xuMTg0MTpcdFxuMTg0MjpcdFx0LyogVXBkYXRlIENJRCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkIGFmdGVyIGEgdHJhbnNwb3J0IHJlc2V0IGV2ZW50ICovXG4xODQzOlx0XHRpZiAodnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCAhPSBWTUFERFJfQ0lEX0FOWSlcbjE4NDQ6XHRcdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuMTg0NTpcdFxuMTg0NjpcdFx0aWYgKHNwYWNlX2F2YWlsYWJsZSlcbjE4NDc6XHRcdFx0c2stXHUwMDNlc2tfd3JpdGVfc3BhY2Uoc2spO1xuMTg0ODpcdFxuMTg0OTpcdFx0c3dpdGNoIChzay1cdTAwM2Vza19zdGF0ZSkge1xuMTg1MDpcdFx0Y2FzZSBUQ1BfTElTVEVOOlxuMTg1MTpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHNrLCBza2IsIHQpO1xuMTg1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4NTM6XHRcdFx0YnJlYWs7XG4xODU0Olx0XHRjYXNlIFRDUF9TWU5fU0VOVDpcbjE4NTU6XHRcdFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Nvbm5lY3Rpbmcoc2ssIHNrYik7XG4xODU2Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTg1NzpcdFx0XHRicmVhaztcbjE4NTg6XHRcdGNhc2UgVENQX0VTVEFCTElTSEVEOlxuMTg1OTpcdFx0XHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfY29ubmVjdGVkKHNrLCBza2IpO1xuMTg2MDpcdFx0XHRicmVhaztcbjE4NjE6XHRcdGNhc2UgVENQX0NMT1NJTkc6XG4xODYyOlx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9kaXNjb25uZWN0aW5nKHNrLCBza2IpO1xuMTg2MzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4NjQ6XHRcdFx0YnJlYWs7XG4xODY1Olx0XHRkZWZhdWx0OlxuMTg2NjpcdFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuMTg2NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE4Njg6XHRcdFx0YnJlYWs7XG4xODY5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5ODYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgVlNPQ0sgQWRkcmVzcyBDaGVjayoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2s6IGAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaXQuIFJpZ2h0LCB0aGUga2V5IHZhcmlhYmxlIGhlcmUgaXMgYHNyY2AuIExvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGB2c29ja19hZGRyX2luaXQoJmFtcDtzcmMsIGxlNjRfdG9fY3B1KGhkci0mZ3Q7c3JjX2NpZCksIGxlMzJfdG9fY3B1KGhkci0mZ3Q7c3JjX3BvcnQpKWAuIFNvLCB0aGUgYHNyY2AgdmFyaWFibGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBoZWFkZXIuIE5hdHVyYWxseSwgSSBzaG91bGQgaW52ZXN0aWdhdGUgYHZzb2NrX2FkZHJfaW5pdGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGBzcmNgIHJlcHJlc2VudHMuIEkgbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYHNyY2Agc3RydWN0IGJlZm9yZSBJIGNhbiBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgbmV3IGNvbXBhcmlzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2FkZHJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTItXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTM6dm9pZCB2c29ja19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLCB1MzIgY2lkLCB1MzIgcG9ydCk7XG5pbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTQtaW50IHZzb2NrX2FkZHJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjUyPXN0YXRpYyBpbnQgdnNvY2tfYXV0b19iaW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1OC1cdFx0cmV0dXJuIDA7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNmxvY2FsX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MC1cdHJldHVybiBfX3Zzb2NrX2JpbmQoc2ssIFx1MDAyNmxvY2FsX2FkZHIpO1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04MDc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtODE1LVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjgxNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZuZXdfYWRkciwgYWRkci1cdTAwM2Vzdm1fY2lkLCBhZGRyLVx1MDAzZXN2bV9wb3J0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04MTctXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTg0OS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo4NTA6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIsIG5ld19hZGRyLnN2bV9jaWQsIG5ld19hZGRyLnN2bV9wb3J0KTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NTEtXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTkwOD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTMyLVx0dnNrID0gdnNvY2tfc2soc2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzMzpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTM0Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTM1LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xMDIwPXN0YXRpYyB2b2lkIHZzb2NrX3NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzMS1cdCAqL1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzI6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZWxvY2FsX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzM6XHR2c29ja19hZGRyX2luaXQoXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDM0LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNDc2PXN0YXRpYyBpbnQgdnNvY2tfZGdyYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNDg5LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjE0OTA6XHRcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE0OTEtXHRcdFx0XHRWTUFERFJfUE9SVF9BTlkpO1xuLS1cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jPTE3MD1zdGF0aWMgdm9pZCBodnNfYWRkcl9pbml0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkciwgY29uc3QgZ3VpZF90ICpzdnJfaWQpXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTczLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM6MTc0Olx0dnNvY2tfYWRkcl9pbml0KGFkZHIsIFZNQUREUl9DSURfQU5ZLCBwb3J0KTtcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTE3NS19XG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmM9Mjk1PXN0YXRpYyB2b2lkIGh2c19vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pXG4tLVxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMzM4LVx0XHQvKiBSZW1vdGUgcGVlciBpcyBhbHdheXMgdGhlIGhvc3QgKi9cbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjMzOTpcdFx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZuZXctXHUwMDNlcmVtb3RlX2FkZHIsXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0zNDAtXHRcdFx0XHRWTUFERFJfQ0lEX0hPU1QsIFZNQUREUl9QT1JUX0FOWSk7XG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE2OTQ9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzEtXHR2Y2hpbGQgPSB2c29ja19zayhjaGlsZCk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTczMjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2Y2hpbGQtXHUwMDNlbG9jYWxfYWRkciwgbGU2NF90b19jcHUoaGRyLVx1MDAzZWRzdF9jaWQpLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzMtXHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZWRzdF9wb3J0KSk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTczNDpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2Y2hpbGQtXHUwMDNlcmVtb3RlX2FkZHIsIGxlNjRfdG9fY3B1KGhkci1cdTAwM2VzcmNfY2lkKSxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzM1LVx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzcmNfcG9ydCkpO1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3OC1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzc5Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVx1MDAzZXNyY19jaWQpLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXHRcdFx0bGUzMl90b19jcHUoaGRyLVx1MDAzZXNyY19wb3J0KSk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4MTpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vkc3RfY2lkKSxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVx0XHRcdGxlMzJfdG9fY3B1KGhkci1cdTAwM2Vkc3RfcG9ydCkpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0xNzY9dm1jaV90cmFuc3BvcnRfcGFja2V0X2dldF9hZGRyZXNzZXMoc3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0LFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNzkte1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MDpcdHZzb2NrX2FkZHJfaW5pdChsb2NhbCwgcGt0LVx1MDAzZWRnLmRzdC5jb250ZXh0LCBwa3QtXHUwMDNlZHN0X3BvcnQpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MTpcdHZzb2NrX2FkZHJfaW5pdChyZW1vdGUsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xODItfVxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMTQ9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzMxLVx0fSBlbHNlIHtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzI6XHRcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzMtXHRcdFx0XHRwa3QtXHUwMDNlc3JjX3BvcnQpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz00Nzg9c3RhdGljIHN0cnVjdCBzb2NrICp2bWNpX3RyYW5zcG9ydF9nZXRfcGVuZGluZyhcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDg2LVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjQ4NzpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZzcmMsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00ODgtXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTY3NT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNzA0LVx0ICovXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA1Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXHUwMDNlc3JjX3BvcnQpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjcwNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZkc3QsIHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dCwgcGt0LVx1MDAzZWRzdF9wb3J0KTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy03MDctXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTk0OD1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTAyMy1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxMDI0Olx0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnZwZW5kaW5nLVx1MDAzZWxvY2FsX2FkZHIsIHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dCxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xMDI1LVx0XHRcdHBrdC1cdTAwM2Vkc3RfcG9ydCk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTAyNjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2cGVuZGluZy1cdTAwM2VyZW1vdGVfYWRkciwgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjctXHRcdFx0cGt0LVx1MDAzZXNyY19wb3J0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MTY3MT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTY5NS1cdFx0cmV0dXJuIHZtY2lfdHJhbnNwb3J0X2Vycm9yX3RvX3Zzb2NrX2Vycm9yKGVycik7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTY5NjpcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkciwgYWRkci1cdTAwM2Vzdm1fY2lkLFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE2OTctXHRcdFx0dm1jaV90cmFucyh2c2spLVx1MDAzZWRnX2hhbmRsZS5yZXNvdXJjZSk7XG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTE3NDI9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9kZ3JhbV9kZXF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODQtXHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3ZtICosIHZtX2FkZHIsIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTc4NTpcdFx0dnNvY2tfYWRkcl9pbml0KHZtX2FkZHIsIGRnLVx1MDAzZXNyYy5jb250ZXh0LCBkZy1cdTAwM2VzcmMucmVzb3VyY2UpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODYtXHRcdG1zZy1cdTAwM2Vtc2dfbmFtZWxlbiA9IHNpemVvZigqdm1fYWRkcik7XG4tLVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtMTMtXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoxNDp2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtMTUte1xuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIwLX1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjIxOkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy0yMi1cbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYz00Nj12b2lkIHZzb2NrX2FkZHJfdW5iaW5kKHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTQ3LXtcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjQ4Olx0dnNvY2tfYWRkcl9pbml0KGFkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDUxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB2c29ja19hZGRyX2luaXQqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB2c29ja19hZGRyX2luaXRgIHdpdGhpbiBgbmV0L3Ztd192c29jay92c29ja19hZGRyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgYXQgbGVhc3QsIHRoZSBpbml0aWFsaXphdGlvbikgZm9yIHZzb2NrIGFkZHJlc3NlcyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWRkcmVzc2VzIGFyZSBjb25zdHJ1Y3RlZCBhbmQgcG9wdWxhdGVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLCBsaWtlbHkgYSBgc29ja2FkZHJfdm1gLCBhbmQgc2V0cyB1cCB0aGUgaW5pdGlhbCB2YWx1ZXMgYmFzZWQgb24gcHJvdmlkZWQgaW5wdXRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSB0aGUgZ3Vlc3QgSUQsIGhvc3QgSUQsIHBvcnQsIGFuZCBhbnkgZmxhZ3MgdGhhdCBtaWdodCBiZSBpbnZvbHZlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBpcyBpbiB0aGUgcG90ZW50aWFsIGNvcm5lciBjYXNlcyBhbmQgYW55IGluaXRpYWwgc2FuaXR5IGNoZWNrcyBwZXJmb3JtZWQgaGVyZSwgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSByYW5nZSBvZiBhbGxvd2VkIHBvcnQgbnVtYmVycyBvciBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGFwcHJvYWNoIHRoZSBhbGlnbm1lbnQgYW5kIHN0cnVjdHVyZSBwYWNraW5nLCB0b28sIGFuZCBpZiBhbnkgcHJlLWRlZmluZWQgY29uc3RhbnRzIGFyZSBiZWluZyB1c2VkLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyBmb3IgdGhlIHZhcmlvdXMgYWRkcmVzcyBmYW1pbHkgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFZNd2FyZSB2U29ja2V0cyBEcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEyIFZNd2FyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0ZGRlZi5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC92c29ja19hZGRyLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHR2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxuICAxNTpcdHtcbiAgMTY6XHRcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcbiAgMTc6XHRcdGFkZHItXHUwMDNlc3ZtX2ZhbWlseSA9IEFGX1ZTT0NLO1xuICAxODpcdFx0YWRkci1cdTAwM2Vzdm1fY2lkID0gY2lkO1xuICAxOTpcdFx0YWRkci1cdTAwM2Vzdm1fcG9ydCA9IHBvcnQ7XG4gIDIwOlx0fVxuICAyMTpcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XG4gIDIyOlx0XG4gIDIzOlx0aW50IHZzb2NrX2FkZHJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKVxuICAyNDpcdHtcbiAgMjU6XHRcdF9fdTggc3ZtX3ZhbGlkX2ZsYWdzID0gVk1BRERSX0ZMQUdfVE9fSE9TVDtcbiAgMjY6XHRcbiAgMjc6XHRcdGlmICghYWRkcilcbiAgMjg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDI5Olx0XG4gIDMwOlx0XHRpZiAoYWRkci1cdTAwM2Vzdm1fZmFtaWx5ICE9IEFGX1ZTT0NLKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTU5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdnNvY2sgQWRkcmVzcyBDb21wYXJpc29uKioKCk9rYXksIHNvIGB2c29ja19hZGRyX2luaXRgIGRvZXMgYSBjbGVhbiBgbWVtc2V0YCBvZiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUsIHNvIHRoZSBzb3VyY2UgYWRkcmVzcywgYHNyY2AsIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoJmFtcDtzcmMsICZhbXA7dnNrLSZndDtyZW1vdGVfYWRkcilgLiBUaGUgYHZzay0mZ3Q7cmVtb3RlX2FkZHJgIGlzIGFsc28gYSBgc3RydWN0IHNvY2thZGRyX3ZtYCwgd2hpY2ggZ2V0cyBpbml0aWFsaXplZCBlaXRoZXIgZHVyaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gb3IgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB1bmRlcnN0YW5kaW5nIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGRldGVybWluZSBpZiB0aGUgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY29tcGFyaXNvbiBpcyByb2J1c3QgYW5kIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGZpZWxkcyB3aXRoaW4gdGhvc2UgYHNvY2thZGRyX3ZtYCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2FkZHJfZXF1YWxzX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oPTE2PXZvaWQgdnNvY2tfYWRkcl91bmJpbmQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcbmluY2x1ZGUvbmV0L3Zzb2NrX2FkZHIuaDoxNzpib29sIHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oLTE4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzAwPXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzA4Olx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihhZGRyLCBcdTAwMjZ2c2stXHUwMDNlbG9jYWxfYWRkcikgXHUwMDI2XHUwMDI2XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzA5LVx0XHQgICAgdnNvY2tfbmV0X2NoZWNrX21vZGUoc29ja19uZXQoc2spLCBuZXQpKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjM9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMzEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzMyOlx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikgXHUwMDI2XHUwMDI2XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzMzLVx0XHQgICAgZHN0LVx1MDAzZXN2bV9wb3J0ID09IHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9wb3J0IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTgzMi1cdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODMzOlx0ICAgICAgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpKSkpIHtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODM0LVx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz00Nzg9c3RhdGljIHN0cnVjdCBzb2NrICp2bWNpX3RyYW5zcG9ydF9nZXRfcGVuZGluZyhcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDkyLVx0XHRcdCAgICBwZW5kaW5nX2xpbmtzKSB7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NDkzOlx0XHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZwZW5kaW5nLVx1MDAzZXJlbW90ZV9hZGRyKSBcdTAwMjZcdTAwMjZcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00OTQtXHRcdCAgICBwa3QtXHUwMDNlZHN0X3BvcnQgPT0gdnBlbmRpbmctXHUwMDNlbG9jYWxfYWRkci5zdm1fcG9ydCkge1xuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jPTUwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfdW5iaW5kKTtcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUxLVxubmV0L3Ztd192c29jay92c29ja19hZGRyLmM6NTI6Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUzLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKVxuLS1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTU3LX1cbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjU4OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIGZ1bmN0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCB3aXRoaW4gdGhlIGB2c29ja19hZGRyLmNgIGZpbGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGEgY29tcGFyaXNvbiBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIEl0IGlzIGxpa2VseSB1c2VkIHRvIGRldGVybWluZSBpZiB0d28gVlNPQ0sgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBhbnkgbmV0d29ya2luZyBjb2RlOyBob3cgZG8geW91IGtub3cgaWYgeW91JiMzOTtyZSB0YXJnZXRpbmcgdGhlIHNhbWUgZW5kcG9pbnQ/IFdlIG5lZWQgYSByb2J1c3QgYW5kIGVmZmljaWVudCB3YXkgdG8gdmVyaWZ5IHRoaXMgZXF1YWxpdHkuCgpOb3csIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb21wYXJlZC4gQXJlIHdlIGxvb2tpbmcgYXQgc2ltcGxlIGludGVnZXIgY29tcGFyaXNvbnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBzb2NrZXQgZmFtaWxpZXMgb3IgcG9ydCBudW1iZXJzPyBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXRoaW5nIGludm9sdmluZyBgdnNvY2tfYWRkcmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbWJlci13aXNlIGNvbXBhcmlzb25zLiBIb3BlZnVsbHksIHRoZXJlJiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbXBhcmlzb24gb2YgdGhlIGNvbnRleHQgSUQgYW5kIHBvcnQsIGFzIHRoYXTigJlzIHVzdWFsbHkgZW5vdWdoIHRvIGRlZmluZSBhIFZTT0NLIGVuZHBvaW50LiBBbnkgYWRkaXRpb25hbCBmaWVsZHMgbWlnaHQgaW5kaWNhdGUgaXQmIzM5O3Mgbm90IHNpbXBseSBhIHJhdyBjb21wYXJpc29uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZSBjb21wYXJpc29uIGlzIG9yZGVyIHNlbnNpdGl2ZS4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBlZGdlIGNhc2VzLiBXaGF0IGhhcHBlbnMgaWYgZWl0aGVyIG9yIGJvdGggYWRkcmVzc2VzIGFyZSBOVUxMPyBEb2VzIGl0IHJldHVybiBhbiBleHBlY3RlZCB2YWx1ZSBpbiB0aGVzZSBjYXNlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgaXNzdWVzIGlmIGl0IHVzZXMgaW50ZWdlcnM/IE9yIHJhY2UgY29uZGl0aW9ucz8gQWxzbywgSSBuZWVkIHRvIHNlZSBob3cgZWZmaWNpZW50bHkgdGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gRG9lcyBpdCB1c2Ugc2hvcnQtY2lyY3VpdGluZyB0byBtaW5pbWl6ZSBjb21wYXJpc29ucyBpZiB0aGUgY29udGV4dCBJRHMgYXJlIGRpZmZlcmVudD8gUGVyZm9ybWFuY2UgbWF0dGVycyBpbiBuZXR3b3JraW5nLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgcG9zc2libGUgZmFpbHVyZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX3VuYmluZCk7XG4gIDUxOlx0XG4gIDUyOlx0Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbiAgNTM6XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpvdGhlcilcbiAgNTQ6XHR7XG4gIDU1Olx0XHRyZXR1cm4gYWRkci1cdTAwM2Vzdm1fY2lkID09IG90aGVyLVx1MDAzZXN2bV9jaWQgXHUwMDI2XHUwMDI2XG4gIDU2Olx0XHRcdGFkZHItXHUwMDNlc3ZtX3BvcnQgPT0gb3RoZXItXHUwMDNlc3ZtX3BvcnQ7XG4gIDU3Olx0fVxuICA1ODpcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xuICA1OTpcdFxuICA2MDpcdGludCB2c29ja19hZGRyX2Nhc3QoY29uc3Qgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gIDYxOlx0XHRcdCAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKipvdXRfYWRkcilcbiAgNjI6XHR7XG4gIDYzOlx0XHRpZiAobGVuIFx1MDAzYyBzaXplb2YoKipvdXRfYWRkcikpXG4gIDY0Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA2NTpcdFxuICA2NjpcdFx0Km91dF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl92bSAqKWFkZHI7XG4gIDY3Olx0XHRyZXR1cm4gdnNvY2tfYWRkcl92YWxpZGF0ZSgqb3V0X2FkZHIpO1xuICA2ODpcdH1cbiAgNjk6XHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2Nhc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyOAoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0OTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXM6IExvZ2ljIEJ1ZyBGaXgsIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSAqbm90KiBhIEtNU0FOIGNhbmRpZGF0ZS4gVGhlIGNvZGUgaW50cm9kdWNlcyBhIG5ldyBjaGVjazogYCF2c29ja19hZGRyX2VxdWFsc19hZGRyKCZhbXA7c3JjLCAmYW1wO3Zzay0mZ3Q7cmVtb3RlX2FkZHIpYC4gIGBzcmNgLCBhcyBJIGNhbiBzZWUgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgd2l0aCBgdnNvY2tfYWRkcl9pbml0YC4gVGhhdCBmdW5jdGlvbiBkb2VzIHRoZSBzdGFuZGFyZCBgbWVtc2V0YCBhbmQgc2V0cyBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHM6IGBzdm1fZmFtaWx5YCwgYHN2bV9jaWRgLCBhbmQgYHN2bV9wb3J0YC4gIFRoZSBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgZnVuY3Rpb24gaXRzZWxmIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uIG9mIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgbWVtYmVycy4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBmaXhpbmcgYSBsb2dpYyBlcnJvcjogYSBwYWNrZXQgb3JpZ2luYXRpbmcgZnJvbSBhIHBlZXIgKm90aGVyKiB0aGFuIHRoZSBjb25uZWN0ZWQgcGVlciBjb3VsZCBwb3RlbnRpYWxseSBiZSBtaXNoYW5kbGVkIGJ5IHRoZSBzb2NrZXQgaWYgaXQgc29tZWhvdyBnb3Qgcm91dGVkIHRoZXJlLiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgbG9naWMgYnVnOyBhIHBhY2tldCBpbnRlbmRlZCBmb3Igb25lIHNvY2tldCBhY2NpZGVudGFsbHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IGFub3RoZXIuIFRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3Qgc29ja2V0IGhhbmRsZXMgdGhlIGluY29taW5nIHBhY2tldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBkYXRhIGludGVncml0eS4KCkxldCYjMzk7cyBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgdG8gY29uZmlybSB0aGlzOgoKYGBgYwotCS8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmUKLQkgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KQomIzQzOwkvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGUKJiM0MzsJICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2UKJiM0MzsJICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlCiYjNDM7CSAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLgogCSAqLwogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHwKLQkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsgdnNrLSZndDt0cmFuc3BvcnQgIT0gJmFtcDt0LSZndDt0cmFuc3BvcnQpKSB7CiYjNDM7CSAgICAoc2stJmd0O3NrX3N0YXRlICE9IFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkgICAgICh2c2stJmd0O3RyYW5zcG9ydCAhPSAmYW1wO3QtJmd0O3RyYW5zcG9ydCB8fAomIzQzOwkgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcigmYW1wO3NyYywgJmFtcDt2c2stJmd0O3JlbW90ZV9hZGRyKSkpKSB7CiAJCSh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXNvY2tfcHV0KHNrKTsKYGBgCgpZZXAsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiAgYHNyY2AgYW5kIGB2c2stJmd0O3JlbW90ZV9hZGRyYCBhcmUgKmNvbXBsZXRlbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGF0IGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBjYWxsLiAgVGhlcmUmIzM5O3Mgbm8gY2hhbmNlIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgYW5kIHRoZXJlZm9yZSwgbm8gcG9zc2liaWxpdHkgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdGhlIHVzZXIuICBXZSYjMzk7cmUgbG9va2luZyBhdCBhIGxvZ2ljIGVycm9yLiBLTVNBTiBpcyBvdmVya2lsbCBoZXJlLiAgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBmdXp6aW5nIHNob3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGRldGVjdGluZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGZ1cnRoZXIgbG9naWMgYnVncy4gS01TQU4mIzM5O3Mgc3RyZW5ndGggbGllcyBpbiBkZXRlY3RpbmcgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBwcmVzZW50LCBpdCYjMzk7cyBub3QgbmVlZGVkLiAgVGhlIGBOZWVkc0tNU0FOYCBmbGFnIHNob3VsZCBkZWZpbml0ZWx5IGJlIHNldCB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBjb25uZWN0ZWQgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cdTAwM2VyZW1vdGVfYWRkcmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHNvY2thZGRyX3ZtYCBvYmplY3RzIChlLmcuLCBgc3JjYCBpcyBpbml0aWFsaXplZCB2aWEgYHZzb2NrX2FkZHJfaW5pdGAgd2hpY2ggdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBzdHJ1Y3R1cmUpLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgc2ltcGx5IGNvbXBhcmVzIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgZmllbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCYjMzk7cyBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIHRoZSBjb25uZWN0ZWQgc29ja2V0JiMzOTtzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cdTAwM2VyZW1vdGVfYWRkcmApIGFyZSBmdWxseSBpbml0aWFsaXplZCBgc3RydWN0IHNvY2thZGRyX3ZtYCBvYmplY3RzIChlLmcuLCBgc3JjYCBpcyBpbml0aWFsaXplZCB2aWEgYHZzb2NrX2FkZHJfaW5pdGAgd2hpY2ggdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBzdHJ1Y3R1cmUpLiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgc2ltcGx5IGNvbXBhcmVzIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgZmllbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBzdGFuZGFyZCBsb2dpYyBidWcgZml4LCBhbmQgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowMy42NTU4NjEzODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDMxMDY5MjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgY29ubmVjdGVkIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cXHUwMDNlcmVtb3RlX2FkZHJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBzb2NrYWRkcl92bWAgb2JqZWN0cyAoZS5nLiwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGB2c29ja19hZGRyX2luaXRgIHdoaWNoIHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgc3RydWN0dXJlKS4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIHNpbXBseSBjb21wYXJlcyB0aGUgYHN2bV9jaWRgIGFuZCBgc3ZtX3BvcnRgIGZpZWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIGEgc3RhbmRhcmQgbG9naWMgYnVnIGZpeCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowMy42NTU4NzExOTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODAwOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ4NTY5N2I1NTU0NWEyZjU3MTY2OWI4MTNlYjQ4ZmU4ODA3Zjc4YWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuaW5kZXggOGJlY2FkODEyNzljOC4uZjczZTA0MDZhNzkwYSAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG5AQCAtMTgyMiwxMSArMTgyMiwxNSBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxuIFxcbiBcXHRsb2NrX3NvY2soc2spO1xcbiBcXG4tXFx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZVxcbi1cXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxcbitcXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcXG4rXFx0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcXG4rXFx0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXFxuK1xcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxcbi1cXHQgICAgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFxcdTAwMjZcXHUwMDI2IHZzay1cXHUwMDNldHJhbnNwb3J0ICE9IFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQpKSB7XFxuK1xcdCAgICAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAodnNrLVxcdTAwM2V0cmFuc3BvcnQgIT0gXFx1MDAyNnQtXFx1MDAzZXRyYW5zcG9ydCB8fFxcbitcXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnNrLVxcdTAwM2VyZW1vdGVfYWRkcikpKSkge1xcbiBcXHRcXHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRzb2NrX3B1dChzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA0LjA4NDkzNjUyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM0OTYxNDUwODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbisrKyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgKzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmVcbi1cdCAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpXG4rXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcbitcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4rXHQgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmVcbitcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0IHx8XG4rXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTowNC4wODQ5NDMwNjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE2ODY0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgVmlydGlvIFZTb2NrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlLCByZWFsbHkuIEl0IHNlZW1zIHRoZXkndmUgYWRkZWQgYSBjaGVjayBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGEgY3JpdGljYWwgc2VjdXJpdHkgZW5oYW5jZW1lbnQuIFRoZSBjb2RlIG5vdyBlbnN1cmVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBhbiBpbmNvbWluZyBwYWNrZXQgbWF0Y2hlcyB0aGUgcmVtb3RlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2NrZXQuIFRoaXMgY2hlY2sgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aGVyZSBhIHBhY2tldCBjb3VsZCBiZSBpbmNvcnJlY3RseSByb3V0ZWQuIFRoZSBhZGRlZCBjb2RlIGlzIGludGVuZGVkIHRvIGhhbmRsZSB0aGUgZWRnZSBjYXNlcyBvZiBjbG9zZWQgc29ja2V0cywgc29ja2V0cyBhc3NpZ25lZCB0byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBvciBwYWNrZXRzIGZyb20gdGhlIHdyb25nIHBlZXIuIFRoZSBjaGVjayBpbmNsdWRlcyBzb2NrZXRzIGluIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUsIHdoaWNoIHdvdWxkIGJlIGxpc3RlbmVyIHNvY2tldHMgdGhhdCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyBkYXRhIGNvcnJ1cHRpb24gb3IgZXZlbiBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHZpcnRpbyB2c29jay4gR2l2ZW4gSSBrbm93IHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgSSdsbCB1c2UgYGdyZXBwZXJgIChvciBteSBwcmVmZXJyZWQgc2VhcmNoIHRvb2wpIHRvIGxvb2sgZm9yIHRoYXQgZmlsZW5hbWUgd2l0aGluIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYCB0byBmaW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA5LjkwMTgxMTI0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svTWFrZWZpbGU9NT1vYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OKSArPSB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtNy1vYmotJChDT05GSUdfSFlQRVJWX1ZTT0NLRVRTKSArPSBodl9zb2NrLm9cXG4tLVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9MTg9dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSArPSB2aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxcbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6MjA6dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLXkgKz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjA5Ljk0NjgwMDU1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI3OTc0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGxpa2VseSBiZWluZyBwdWxsZWQgaW4gYnkgZWl0aGVyIGBWSVJUSU9fVlNPQ0tFVFNgIG9yIGBWSE9TVF9WU09DS2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IGNoYWluLiBUbyBjb25maXJtIG15IHN1c3BpY2lvbiBhbmQgdHJhY2UgdGhlIHJlbGF0aW9uc2hpcCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3Ztd192c29jay9LY29uZmlnYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTGV0J3Mgc2VlIHdoYXQgYEtjb25maWdgIGhhcyB0byB0ZWxsIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTQuMjE5NjAxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ1MjcyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVklSVElPX1ZTT0NLRVRTX0NPTU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnPTI5PWNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMzpcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zNC1cXHRoZWxwXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NTM9Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTQuNDY0MTQzNzU1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyOTgwMzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBWU09DSyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgVklSVElPX1ZTT0NLRVRTYCBhbmQgYFZTT0NLRVRTX0xPT1BCQUNLYCBhcmUgcHVsbGluZyBpbiBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAuIEkgd2FudCB0byBjb25maXJtIHRoYXQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyLiBOb3csIHdoYXQncyBiZWhpbmQgdGhlIHZob3N0IHNpZGUgb2YgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgVkhPU1RfVlNPQ0tgIGlzIGhhbmRsZWQsIGFuZCB0aGUgbmF0dXJhbCBwbGFjZSBmb3IgdGhhdCBpcyB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSdsbCBnZXQgdGhhdCBvcGVuIGFuZCBzdGFydCB0cmFjaW5nIGRlcGVuZGVuY2llcyBhbmQgb3B0aW9uIGZsYWdzIHRoZXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBWU09DSyBvcHRpb25zIGludGVyYWN0IHdpdGggdGhlIHZob3N0IGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MTguNDkzOTQ5ODgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODk4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRJT19WU09DS0VUU19DT01NT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NjA6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjE4LjUzNzg1MzE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODM0MjE0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlNPQ0sgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCB3ZSBuZWVkIGZvciBWU09DSyBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucywgd2hpY2ggSSdtIGFzc3VtaW5nIGlzIHRoZSBwcmltYXJ5IHVzZSBjYXNlLlxuXG5Ob3csIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZSB0aGVyZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQgZnVuY3Rpb24gaXMgZXhwb3NlZCBleHRlcm5hbGx5IG9yIGFjdGl2ZWx5IHV0aWxpemVkIGJ5IGFueXRoaW5nIGJlc2lkZXMgaXRzIGltbWVkaWF0ZSBwdXJwb3NlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB0YWJsZSBhbmQgdXNhZ2UgcGF0dGVybnMgdG8gZW5zdXJlIGFueSBtb2RpZmljYXRpb25zIGFyZSBjb250YWluZWQgYW5kIGRvbid0IGludHJvZHVjZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBuYXR1cmUgb2YgZGF0YSB0cmFuc3BvcnQuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgY2VudHJhbCB0byB0aGUgZW50aXJlIHRyYW5zcG9ydCBtZWNoYW5pc20sIHNvIGEgc21hbGwgY2hhbmdlIHRoZXJlIGhhcyBhIHZlcnkgaGlnaCBjaGFuY2Ugb2YgbWFraW5nIGEgbGFyZ2UgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjIuNjIxMjc4MDgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI5OTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jPTYzMj1zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg3LVxcdFxcdFxcdCAqL1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jOjY4ODpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KFxcdTAwMjZ2aXJ0aW9fdHJhbnNwb3J0LCBza2IsIE5VTEwpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4OS1cXHRcXHR9XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc2MT1zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUodTE2IHR5cGUpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2OS0gKi9cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3MDp2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgzLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzg0OlxcdHRyYWNlX3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3JjLnN2bV9jaWQsIHNyYy5zdm1fcG9ydCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4NS1cXHRcXHRcXHRcXHRcXHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4ODEtfVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODgyOkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgzLVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jPTEyMz1zdGF0aWMgdm9pZCB2c29ja19sb29wYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDEtXFx0XFx0dmlydGlvX3RyYW5zcG9ydF9kZWxpdmVyX3RhcF9wa3Qoc2tiKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmM6MTQyOlxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNmxvb3BiYWNrX3RyYW5zcG9ydCwgc2tiLFxcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDMtXFx0XFx0XFx0XFx0XFx0ICBzb2NrX25ldChza2ItXFx1MDAzZXNrKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjIyLjY2NDU4MzM0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE4ODA3OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgVmlydGlvIFBhY2tldCBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuLi4gSSBrbm93IGl0J3MgZXhwb3J0ZWQuIExldCdzIHNlZSwgaXQncyBkZWZpbml0ZWx5IHVzZWQgYnkgYm90aCBgdmlydGlvX3RyYW5zcG9ydC5jYCBhbmQgYHZzb2NrX2xvb3BiYWNrLmNgLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBib3RoIGNvcmUgY29tcG9uZW50cy4gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBwb3AgdXAgaW4gYHZob3N0X3Zzb2NrLmNgIHRvbywgYnV0IGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4gTGV0J3MgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIGFuZCBtYWtlIHN1cmUgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QuIEFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aG9zZSBhc3N1bXB0aW9ucywgZXZlbiB0aGUgb25lcyB0aGF0IGZlZWwgb2J2aW91cy4gTmVlZCB0byBrZWVwIHRoYXQgd2hvbGUgcGljdHVyZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjYuNDgzMzk0Mzc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA2NjkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTIzPXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTU4My1cXHRcXHQgICAgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQoKSlcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NTg0OlxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNnZob3N0X3RyYW5zcG9ydCwgc2tiLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy01ODUtXFx0XFx0XFx0XFx0XFx0XFx0ICB2c29jay1cXHUwMDNlbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MjYuNTI3NDY0NTgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTE2MTYxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgeWVzLCBJJ20gY2VydGFpbiB0aGlzIGNvbXBvbmVudCBpcyBpbiB1c2UuIFRoZSBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHByb21pc2luZyBwb2ludCB0byBkaXZlIGludG8uIFRoYXQncyB3aGVyZSB0aGUgY29yZSBwYWNrZXQgcmVjZXB0aW9uIGxvZ2ljIHByb2JhYmx5IHJlc2lkZXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb25lIG1vcmUgdGltZS4gSSdsbCBjaGVjayBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29uZmlybSB0aGUgYnJvYWRlciBgVlNPQ0tFVFNgIHNldHRpbmcgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGVuYWJsZWQgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozMC4xNzkwODMzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzY0NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjMwLjIyNDQ1MjgwM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzM1MjU3Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYFZTT0NLRVRTYCBhdCBpdHMgY29yZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpdCB0b3VjaGVzLiBBbHJpZ2h0LCBgVklSVElPX1ZTT0NLRVRTYCBoaW5nZXMgb24gYFZTT0NLRVRTYCBhbmQgYFZJUlRJT2AsIG1ha2VzIHNlbnNlLiBUaGVuIGBWU09DS0VUU19MT09QQkFDS2AgbmVlZHMgYFZTT0NLRVRTYCB0b28sIGFuZCBmaW5hbGx5LCBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGJvdGggYFZIT1NUYCBhbmQgYFZTT0NLRVRTYC4gVGhhdCBnaXZlcyB1cyBhIGNsZWFuIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlOiBgVlNPQ0tFVFNgLCBgVklSVElPX1ZTT0NLRVRTYCwgYFZTT0NLRVRTX0xPT1BCQUNLYCwgYW5kIGBWSE9TVF9WU09DS2AuXG5cbk5vdywgdGhlIHN5bWJvbCB0aGF0IHJlYWxseSBjYXRjaGVzIG15IGV5ZSBoZXJlIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gV2UgbmVlZCB0byB2ZXJpZnkgaWYgaXQncyBzdGF0aWMgb3IgaW5saW5lLCBidXQgaXQncyBleHBvcnRlZC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBlZXIgYWRkcmVzcyB2YWxpZGF0aW9uIGlzc3VlOyBhIHBhY2tldCBmcm9tIHRoZSB3cm9uZyBwZWVyIGNvdWxkIGJlIGFjY2VwdGVkIG9uIGEgY29ubmVjdGVkIHNvY2tldCwgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdnNvY2sgbmV0d29yayBzdGFjay4gVGhpcyBoYXMgYSBoaWdoIGZ1enppbmcgcG90ZW50aWFsIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkxldCdzIHN1bW1hcml6ZSBvdXIgZmluZGluZ3M6XG5cbldvcnRoRnV6emluZzogVHJ1ZVxuRm9jdXNTeW1ib2xzOiBbXCJ2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0XCJdXG5FbmFibGVDb25maWdzOiBbXCJWU09DS0VUU1wiLCBcIlZJUlRJT19WU09DS0VUU1wiLCBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsIFwiVkhPU1RfVlNPQ0tcIl1cblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNyaXRpY2FsIHZhbGlkYXRpb24gd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCB0byB2ZXJpZnkgdGhlIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIGFnYWluc3QgdGhlIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLCBvbmx5IGlmIHRoZSBzb2NrZXQgaXMgbm90IGEgbGlzdGVuZXIuIFRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0IGFuZCBpcyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTUsIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjM4Ljk1OTcxMjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2NjkyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgaW4gdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCB0byBlbnN1cmUgdGhhdCB0aGUgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MgaWYgdGhlIHNvY2tldCBpcyBub3QgYSBsaXN0ZW5lci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2aXJ0aW8gdnNvY2sgdHJhbnNwb3J0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozOS4wNDYzOTIyNzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTIwMTUwOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6MzkuMDQ2OTI4MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ0OTE5NjEwNjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbG9naWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgYW4gaW5jb21pbmcgcGFja2V0J3Mgc291cmNlIGFkZHJlc3MgbWF0Y2hlcyB0aGUgY29ubmVjdGVkIHNvY2tldCdzIHJlbW90ZSBhZGRyZXNzLiBUaGUgYWRkcmVzc2VzIGJlaW5nIGNvbXBhcmVkIChgc3JjYCBhbmQgYHZzay1cXHUwMDNlcmVtb3RlX2FkZHJgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYHN0cnVjdCBzb2NrYWRkcl92bWAgb2JqZWN0cyAoZS5nLiwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdmlhIGB2c29ja19hZGRyX2luaXRgIHdoaWNoIHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgc3RydWN0dXJlKS4gVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHZzb2NrX2FkZHJfZXF1YWxzX2FkZHJgIHNpbXBseSBjb21wYXJlcyB0aGUgYHN2bV9jaWRgIGFuZCBgc3ZtX3BvcnRgIGZpZWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGlzIGlzIGEgc3RhbmRhcmQgbG9naWMgYnVnIGZpeCwgYW5kIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODU2OTdiNTU1NDVhMmY1NzE2NjliODEzZWI0OGZlODgwN2Y3OGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTM6MzU6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDhiZWNhZDgxMjc5YzguLmY3M2UwNDA2YTc5MGEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbisrKyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjIsMTEgKzE4MjIsMTUgQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiBcbi1cdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCBiZWZvcmVcbi1cdCAqIGxvY2tfc29jayAobm90ZTogbGlzdGVuZXIgc29ja2V0cyBhcmUgbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQpXG4rXHQvKiBDaGVjayBpZiBzayBoYXMgYmVlbiBjbG9zZWQsIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0LCBvciBpZiB0aGVcbitcdCAqIHBhY2tldCBpcyBmcm9tIGEgZGlmZmVyZW50IHBlZXIgdGhhbiB0aGUgb25lIGNvbm5lY3RlZCB0byBzay4gIFRoZXNlXG4rXHQgKiBwcm9wZXJ0aWVzIGNvdWxkIGhhdmUgY2hhbmdlZCBiZWZvcmUgbG9ja19zb2NrLiAgTGlzdGVuZXIgc29ja2V0cyBhcmVcbitcdCAqIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0IGFuZCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBwZWVyLlxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0IHx8XG4rXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcikpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTozOS4wNDY5MjkxNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2ODc2NzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBWU29jayBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCB0aGF0IG1vZGlmaWVzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCByaXNrcywgc3BlY2lmaWNhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2hlY2s6IGAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcdTAwMjZzcmMsIFx1MDAyNnZzay1cdTAwM2VyZW1vdGVfYWRkcilgLiBUaGlzIGNoZWNrIGlzIHBsYWNlZCB3aXRoaW4gYW4gZXhpc3RpbmcgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuXG5cblRoZSBjb2RlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBjb21wYXJpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIChgc3JjYCkgb2YgYW4gaW5jb21pbmcgcGFja2V0IHdpdGggdGhlIHJlbW90ZSBhZGRyZXNzIChgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCkgb2YgdGhlIGNvbm5lY3RlZCBzb2NrZXQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoaXMgaXMgYSBsb2dpYyBmaXgsIHByb2JhYmx5IHByZXZlbnRpbmcgYSBjb25uZWN0ZWQgc29ja2V0IGZyb20gaW5hZHZlcnRlbnRseSBwcm9jZXNzaW5nIHBhY2tldHMgaW50ZW5kZWQgZm9yIGEgZGlmZmVyZW50IHBlZXIuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MganVtcCBvdXQ7IHRoZSBwYXRjaCAqc2hvdWxkKiBiZSBzYWZlLlxuXG5CdXQsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNyY2AgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEkga25vdyBpdCdzIGEgYHN0cnVjdCBzb2NrYWRkcl92bWAsIGFuZCBpdCdzIGluaXRpYWxpemVkICpzb21ld2hlcmUqIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAuIEknbGwgcXVpY2tseSBqdW1wIGludG8gdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGVuc3VyZSB0aGF0IGl0J3MgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkLiBUaGF0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjQ3LjMxNTcwNDY0NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE3NjE9c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF92YWxpZF90eXBlKHUxNiB0eXBlKVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3NjktICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3NzA6dm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzcxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4My1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4NDpcXHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODUtXFx0XFx0XFx0XFx0XFx0ZHN0LnN2bV9jaWQsIGRzdC5zdm1fcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODgxLX1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTg4MjpFWFBPUlRfU1lNQk9MX0dQTCh2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg4My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzU6NDcuMzU5NTg1OTIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTUwMzAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnRpbyBQYWNrZXQgUmVjZXB0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzcwLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSByZWNlaXZlZCBhdCB0aGUgdHJhbnNwb3J0IGxheWVyLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSB2aXJ0aW8gZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGFueSBpZGlvc3luY3Jhc2llcyBpbiBwYWNrZXQgaGFuZGxpbmcuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MsIHRvIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIEkgY2FuIHR1bmUgb3Igb3B0aW1pemUgZG93biB0aGUgcm9hZC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgc2VjdGlvbiBhcyB3ZWxsLiBJJ20gZXhwZWN0aW5nIHNvbWUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSdzIHJpbmcgYnVmZmVyIGJ1dCB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhhY3QgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjUxLjMxNDYxOTMwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3NzAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzcwOlxcdHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4xNzcxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuMTc3MjpcXHR7XFxuMTc3MzpcXHRcXHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xcbjE3NzQ6XFx0XFx0c3RydWN0IHNvY2thZGRyX3ZtIHNyYywgZHN0O1xcbjE3NzU6XFx0XFx0c3RydWN0IHZzb2NrX3NvY2sgKnZzaztcXG4xNzc2OlxcdFxcdHN0cnVjdCBzb2NrICpzaztcXG4xNzc3OlxcdFxcdGJvb2wgc3BhY2VfYXZhaWxhYmxlO1xcbjE3Nzg6XFx0XFxuMTc3OTpcXHRcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG4xNzgwOlxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlc3JjX3BvcnQpKTtcXG4xNzgxOlxcdFxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBsZTY0X3RvX2NwdShoZHItXFx1MDAzZWRzdF9jaWQpLFxcbjE3ODI6XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbjE3ODM6XFx0XFxuMTc4NDpcXHRcXHR0cmFjZV92aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHNyYy5zdm1fY2lkLCBzcmMuc3ZtX3BvcnQsXFxuMTc4NTpcXHRcXHRcXHRcXHRcXHRcXHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxcbjE3ODY6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2VsZW4pLFxcbjE3ODc6XFx0XFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSxcXG4xNzg4OlxcdFxcdFxcdFxcdFxcdFxcdGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlb3ApLFxcbjE3ODk6XFx0XFx0XFx0XFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2VmbGFncyksXFxuMTc5MDpcXHRcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZWJ1Zl9hbGxvYyksXFxuMTc5MTpcXHRcXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZWZ3ZF9jbnQpKTtcXG4xNzkyOlxcdFxcbjE3OTM6XFx0XFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X3ZhbGlkX3R5cGUobGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSkpIHtcXG4xNzk0OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTc5NTpcXHRcXHRcXHRnb3RvIGZyZWVfcGt0O1xcbjE3OTY6XFx0XFx0fVxcbjE3OTc6XFx0XFxuMTc5ODpcXHRcXHQvKiBUaGUgc29ja2V0IG11c3QgYmUgaW4gY29ubmVjdGVkIG9yIGJvdW5kIHRhYmxlXFxuMTc5OTpcXHRcXHQgKiBvdGhlcndpc2Ugc2VuZCByZXNldCBiYWNrXFxuMTgwMDpcXHRcXHQgKi9cXG4xODAxOlxcdFxcdHNrID0gdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChcXHUwMDI2c3JjLCBcXHUwMDI2ZHN0LCBuZXQpO1xcbjE4MDI6XFx0XFx0aWYgKCFzaykge1xcbjE4MDM6XFx0XFx0XFx0c2sgPSB2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoXFx1MDAyNmRzdCwgbmV0KTtcXG4xODA0OlxcdFxcdFxcdGlmICghc2spIHtcXG4xODA1OlxcdFxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTgwNjpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfcGt0O1xcbjE4MDc6XFx0XFx0XFx0fVxcbjE4MDg6XFx0XFx0fVxcbjE4MDk6XFx0XFxuMTgxMDpcXHRcXHRpZiAodmlydGlvX3RyYW5zcG9ydF9nZXRfdHlwZShzaykgIT0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2V0eXBlKSkge1xcbjE4MTE6XFx0XFx0XFx0KHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTtcXG4xODEyOlxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4xODEzOlxcdFxcdFxcdGdvdG8gZnJlZV9wa3Q7XFxuMTgxNDpcXHRcXHR9XFxuMTgxNTpcXHRcXG4xODE2OlxcdFxcdGlmICghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKSB7XFxuMTgxNzpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcInJlY2VpdmluZyB2c29jayBzb2NrZXQgaGFzIHNrX3JlZmNudCA9PSAwXFxcXG5cXFwiKTtcXG4xODE4OlxcdFxcdFxcdGdvdG8gZnJlZV9wa3Q7XFxuMTgxOTpcXHRcXHR9XFxuMTgyMDpcXHRcXG4xODIxOlxcdFxcdHZzayA9IHZzb2NrX3NrKHNrKTtcXG4xODIyOlxcdFxcbjE4MjM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4xODI0OlxcdFxcbjE4MjU6XFx0XFx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkLCBhc3NpZ25lZCB0byBhbm90aGVyIHRyYW5zcG9ydCwgb3IgaWYgdGhlXFxuMTgyNjpcXHRcXHQgKiBwYWNrZXQgaXMgZnJvbSBhIGRpZmZlcmVudCBwZWVyIHRoYW4gdGhlIG9uZSBjb25uZWN0ZWQgdG8gc2suICBUaGVzZVxcbjE4Mjc6XFx0XFx0ICogcHJvcGVydGllcyBjb3VsZCBoYXZlIGNoYW5nZWQgYmVmb3JlIGxvY2tfc29jay4gIExpc3RlbmVyIHNvY2tldHMgYXJlXFxuMTgyODpcXHRcXHQgKiBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCBhbmQgYWNjZXB0IHBhY2tldHMgZnJvbSBhbnkgcGVlci5cXG4xODI5OlxcdFxcdCAqL1xcbjE4MzA6XFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxcbjE4MzE6XFx0XFx0ICAgIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbjE4MzI6XFx0XFx0ICAgICAodnNrLVxcdTAwM2V0cmFuc3BvcnQgIT0gXFx1MDAyNnQtXFx1MDAzZXRyYW5zcG9ydCB8fFxcbjE4MzM6XFx0XFx0ICAgICAgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXFx1MDAyNnNyYywgXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIpKSkpIHtcXG4xODM0OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTgzNTpcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbjE4MzY6XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbjE4Mzc6XFx0XFx0XFx0Z290byBmcmVlX3BrdDtcXG4xODM4OlxcdFxcdH1cXG4xODM5OlxcdFxcbjE4NDA6XFx0XFx0c3BhY2VfYXZhaWxhYmxlID0gdmlydGlvX3RyYW5zcG9ydF9zcGFjZV91cGRhdGUoc2ssIHNrYik7XFxuMTg0MTpcXHRcXG4xODQyOlxcdFxcdC8qIFVwZGF0ZSBDSUQgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZCBhZnRlciBhIHRyYW5zcG9ydCByZXNldCBldmVudCAqL1xcbjE4NDM6XFx0XFx0aWYgKHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkICE9IFZNQUREUl9DSURfQU5ZKVxcbjE4NDQ6XFx0XFx0XFx0dnNrLVxcdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcXG4xODQ1OlxcdFxcbjE4NDY6XFx0XFx0aWYgKHNwYWNlX2F2YWlsYWJsZSlcXG4xODQ3OlxcdFxcdFxcdHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZShzayk7XFxuMTg0ODpcXHRcXG4xODQ5OlxcdFxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX3N0YXRlKSB7XFxuMTg1MDpcXHRcXHRjYXNlIFRDUF9MSVNURU46XFxuMTg1MTpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHNrLCBza2IsIHQpO1xcbjE4NTI6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTg1MzpcXHRcXHRcXHRicmVhaztcXG4xODU0OlxcdFxcdGNhc2UgVENQX1NZTl9TRU5UOlxcbjE4NTU6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Nvbm5lY3Rpbmcoc2ssIHNrYik7XFxuMTg1NjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODU3OlxcdFxcdFxcdGJyZWFrO1xcbjE4NTg6XFx0XFx0Y2FzZSBUQ1BfRVNUQUJMSVNIRUQ6XFxuMTg1OTpcXHRcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfY29ubmVjdGVkKHNrLCBza2IpO1xcbjE4NjA6XFx0XFx0XFx0YnJlYWs7XFxuMTg2MTpcXHRcXHRjYXNlIFRDUF9DTE9TSU5HOlxcbjE4NjI6XFx0XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X2Rpc2Nvbm5lY3Rpbmcoc2ssIHNrYik7XFxuMTg2MzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODY0OlxcdFxcdFxcdGJyZWFrO1xcbjE4NjU6XFx0XFx0ZGVmYXVsdDpcXG4xODY2OlxcdFxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuMTg2NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODY4OlxcdFxcdFxcdGJyZWFrO1xcbjE4Njk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNTo1MS4zMTQ3NzQyMjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNjAyNDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBWU09DSyBBZGRyZXNzIENoZWNrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gVGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBSaWdodCwgdGhlIGtleSB2YXJpYWJsZSBoZXJlIGlzIGBzcmNgLiBMb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpdCdzIGJlaW5nIGluaXRpYWxpemVkIHVzaW5nIGB2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBsZTY0X3RvX2NwdShoZHItXHUwMDNlc3JjX2NpZCksIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VzcmNfcG9ydCkpYC4gU28sIHRoZSBgc3JjYCB2YXJpYWJsZSBpcyBkZXJpdmVkIGZyb20gdGhlIGhlYWRlci4gTmF0dXJhbGx5LCBJIHNob3VsZCBpbnZlc3RpZ2F0ZSBgdnNvY2tfYWRkcl9pbml0YCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgYHNyY2AgcmVwcmVzZW50cy4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgc3JjYCBzdHJ1Y3QgYmVmb3JlIEkgY2FuIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBuZXcgY29tcGFyaXNvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk4NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjU1LjY1MDgwMjQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NzEzMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19hZGRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3Zzb2NrX2FkZHIuaC0xMi1cXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTM6dm9pZCB2c29ja19hZGRyX2luaXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLCB1MzIgY2lkLCB1MzIgcG9ydCk7XFxuaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oLTE0LWludCB2c29ja19hZGRyX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcik7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjUyPXN0YXRpYyBpbnQgdnNvY2tfYXV0b19iaW5kKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU4LVxcdFxcdHJldHVybiAwO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTk6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZsb2NhbF9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYwLVxcdHJldHVybiBfX3Zzb2NrX2JpbmQoc2ssIFxcdTAwMjZsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04MDc9c3RhdGljIGludCBfX3Zzb2NrX2JpbmRfY29ubmVjdGlibGUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04MTUtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjgxNjpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNm5ld19hZGRyLCBhZGRyLVxcdTAwM2Vzdm1fY2lkLCBhZGRyLVxcdTAwM2Vzdm1fcG9ydCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTgxNy1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NDktXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjg1MDpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgbmV3X2FkZHIuc3ZtX2NpZCwgbmV3X2FkZHIuc3ZtX3BvcnQpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy04NTEtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkzMi1cXHR2c2sgPSB2c29ja19zayhzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzMzpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjkzNDpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLCBWTUFERFJfUE9SVF9BTlkpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05MzUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTAyMD1zdGF0aWMgdm9pZCB2c29ja19za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzMS1cXHQgKi9cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTAzMjpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlbG9jYWxfYWRkciwgVk1BRERSX0NJRF9BTlksIFZNQUREUl9QT1JUX0FOWSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjEwMzM6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTAzNC1cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNDc2PXN0YXRpYyBpbnQgdnNvY2tfZGdyYW1fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE0ODktXFx0XFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTQ5MDpcXHRcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIsIFZNQUREUl9DSURfQU5ZLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNDkxLVxcdFxcdFxcdFxcdFZNQUREUl9QT1JUX0FOWSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0xNzA9c3RhdGljIHZvaWQgaHZzX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIGNvbnN0IGd1aWRfdCAqc3ZyX2lkKVxcbi0tXFxubmV0L3Ztd192c29jay9oeXBlcnZfdHJhbnNwb3J0LmMtMTczLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jOjE3NDpcXHR2c29ja19hZGRyX2luaXQoYWRkciwgVk1BRERSX0NJRF9BTlksIHBvcnQpO1xcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTE3NS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYz0yOTU9c3RhdGljIHZvaWQgaHZzX29wZW5fY29ubmVjdGlvbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbilcXG4tLVxcbm5ldC92bXdfdnNvY2svaHlwZXJ2X3RyYW5zcG9ydC5jLTMzOC1cXHRcXHQvKiBSZW1vdGUgcGVlciBpcyBhbHdheXMgdGhlIGhvc3QgKi9cXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYzozMzk6XFx0XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2bmV3LVxcdTAwM2VyZW1vdGVfYWRkcixcXG5uZXQvdm13X3Zzb2NrL2h5cGVydl90cmFuc3BvcnQuYy0zNDAtXFx0XFx0XFx0XFx0Vk1BRERSX0NJRF9IT1NULCBWTUFERFJfUE9SVF9BTlkpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE2OTQ9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTczMS1cXHR2Y2hpbGQgPSB2c29ja19zayhjaGlsZCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3MzI6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2Y2hpbGQtXFx1MDAzZWxvY2FsX2FkZHIsIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3MzMtXFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzM0OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dmNoaWxkLVxcdTAwM2VyZW1vdGVfYWRkciwgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTczNS1cXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZXNyY19wb3J0KSk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTc3MD12b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc3OC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc3OTpcXHR2c29ja19hZGRyX2luaXQoXFx1MDAyNnNyYywgbGU2NF90b19jcHUoaGRyLVxcdTAwM2VzcmNfY2lkKSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc4MC1cXHRcXHRcXHRsZTMyX3RvX2NwdShoZHItXFx1MDAzZXNyY19wb3J0KSk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODE6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZkc3QsIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlZHN0X2NpZCksXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODItXFx0XFx0XFx0bGUzMl90b19jcHUoaGRyLVxcdTAwM2Vkc3RfcG9ydCkpO1xcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTE3Nj12bWNpX3RyYW5zcG9ydF9wYWNrZXRfZ2V0X2FkZHJlc3NlcyhzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3QsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTc5LXtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MTgwOlxcdHZzb2NrX2FkZHJfaW5pdChsb2NhbCwgcGt0LVxcdTAwM2VkZy5kc3QuY29udGV4dCwgcGt0LVxcdTAwM2Vkc3RfcG9ydCk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE4MTpcXHR2c29ja19hZGRyX2luaXQocmVtb3RlLCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXFx1MDAzZXNyY19wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMTgyLX1cXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMTQ9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzEtXFx0fSBlbHNlIHtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MzMyOlxcdFxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LFxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zMzMtXFx0XFx0XFx0XFx0cGt0LVxcdTAwM2VzcmNfcG9ydCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NDc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdm1jaV90cmFuc3BvcnRfZ2V0X3BlbmRpbmcoXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDg2LVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzo0ODc6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZzcmMsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cXHUwMDNlc3JjX3BvcnQpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00ODgtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9Njc1PXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTcwNC1cXHQgKi9cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA1OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2c3JjLCBwa3QtXFx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXFx1MDAzZXNyY19wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6NzA2OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2ZHN0LCBwa3QtXFx1MDAzZWRnLmRzdC5jb250ZXh0LCBwa3QtXFx1MDAzZWRzdF9wb3J0KTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNzA3LVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTk0OD1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xMDIzLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxMDI0OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dnBlbmRpbmctXFx1MDAzZWxvY2FsX2FkZHIsIHBrdC1cXHUwMDNlZGcuZHN0LmNvbnRleHQsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjUtXFx0XFx0XFx0cGt0LVxcdTAwM2Vkc3RfcG9ydCk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjEwMjY6XFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZ2cGVuZGluZy1cXHUwMDNlcmVtb3RlX2FkZHIsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTEwMjctXFx0XFx0XFx0cGt0LVxcdTAwM2VzcmNfcG9ydCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MTY3MT1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNjk1LVxcdFxcdHJldHVybiB2bWNpX3RyYW5zcG9ydF9lcnJvcl90b192c29ja19lcnJvcihlcnIpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzoxNjk2OlxcdHZzb2NrX2FkZHJfaW5pdChcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyLCBhZGRyLVxcdTAwM2Vzdm1fY2lkLFxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0xNjk3LVxcdFxcdFxcdHZtY2lfdHJhbnModnNrKS1cXHUwMDNlZGdfaGFuZGxlLnJlc291cmNlKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0xNzQyPXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfZGdyYW1fZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODQtXFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfdm0gKiwgdm1fYWRkciwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjE3ODU6XFx0XFx0dnNvY2tfYWRkcl9pbml0KHZtX2FkZHIsIGRnLVxcdTAwM2VzcmMuY29udGV4dCwgZGctXFx1MDAzZXNyYy5yZXNvdXJjZSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTE3ODYtXFx0XFx0bXNnLVxcdTAwM2Vtc2dfbmFtZWxlbiA9IHNpemVvZigqdm1fYWRkcik7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy0xMy1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoxNDp2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTE1LXtcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIwLX1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzoyMTpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2luaXQpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTIyLVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmM9NDY9dm9pZCB2c29ja19hZGRyX3VuYmluZChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNDcte1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjQ4OlxcdHZzb2NrX2FkZHJfaW5pdChhZGRyLCBWTUFERFJfQ0lEX0FOWSwgVk1BRERSX1BPUlRfQU5ZKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy00OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM1OjU3LjMxNzkzOTcwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNzg5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHZzb2NrX2FkZHJfaW5pdCoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdnNvY2tfYWRkcl9pbml0YCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIGF0IGxlYXN0LCB0aGUgaW5pdGlhbGl6YXRpb24pIGZvciB2c29jayBhZGRyZXNzZXMgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFkZHJlc3NlcyBhcmUgY29uc3RydWN0ZWQgYW5kIHBvcHVsYXRlZC4gSSdtIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlLCBsaWtlbHkgYSBgc29ja2FkZHJfdm1gLCBhbmQgc2V0cyB1cCB0aGUgaW5pdGlhbCB2YWx1ZXMgYmFzZWQgb24gcHJvdmlkZWQgaW5wdXRzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIHRoZSBndWVzdCBJRCwgaG9zdCBJRCwgcG9ydCwgYW5kIGFueSBmbGFncyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBNeSBwcmltYXJ5IGludGVyZXN0IGlzIGluIHRoZSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFuZCBhbnkgaW5pdGlhbCBzYW5pdHkgY2hlY2tzIHBlcmZvcm1lZCBoZXJlLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIHJhbmdlIG9mIGFsbG93ZWQgcG9ydCBudW1iZXJzIG9yIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIExldCdzIHNlZSBob3cgdGhleSBhcHByb2FjaCB0aGUgYWxpZ25tZW50IGFuZCBzdHJ1Y3R1cmUgcGFja2luZywgdG9vLCBhbmQgaWYgYW55IHByZS1kZWZpbmVkIGNvbnN0YW50cyBhcmUgYmVpbmcgdXNlZC4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyBmb3IgdGhlIHZhcmlvdXMgYWRkcmVzcyBmYW1pbHkgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ1MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjAxLjk5MTc2MDg4NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWTXdhcmUgdlNvY2tldHMgRHJpdmVyXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgVk13YXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuICAgNjpcXHQgKi9cXG4gICA3OlxcdFxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2V0LmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RkZGVmLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvdnNvY2tfYWRkci5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHR2b2lkIHZzb2NrX2FkZHJfaW5pdChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsIHUzMiBjaWQsIHUzMiBwb3J0KVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xcbiAgMTc6XFx0XFx0YWRkci1cXHUwMDNlc3ZtX2ZhbWlseSA9IEFGX1ZTT0NLO1xcbiAgMTg6XFx0XFx0YWRkci1cXHUwMDNlc3ZtX2NpZCA9IGNpZDtcXG4gIDE5OlxcdFxcdGFkZHItXFx1MDAzZXN2bV9wb3J0ID0gcG9ydDtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfaW5pdCk7XFxuICAyMjpcXHRcXG4gIDIzOlxcdGludCB2c29ja19hZGRyX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcilcXG4gIDI0OlxcdHtcXG4gIDI1OlxcdFxcdF9fdTggc3ZtX3ZhbGlkX2ZsYWdzID0gVk1BRERSX0ZMQUdfVE9fSE9TVDtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKCFhZGRyKVxcbiAgMjg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdGlmIChhZGRyLVxcdTAwM2Vzdm1fZmFtaWx5ICE9IEFGX1ZTT0NLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowMS45OTE4MjU0NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNDU4NTYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZzb2NrIEFkZHJlc3MgQ29tcGFyaXNvbioqXG5cbk9rYXksIHNvIGB2c29ja19hZGRyX2luaXRgIGRvZXMgYSBjbGVhbiBgbWVtc2V0YCBvZiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUsIHNvIHRoZSBzb3VyY2UgYWRkcmVzcywgYHNyY2AsIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gVGhlIGB2c2stXHUwMDNlcmVtb3RlX2FkZHJgIGlzIGFsc28gYSBgc3RydWN0IHNvY2thZGRyX3ZtYCwgd2hpY2ggZ2V0cyBpbml0aWFsaXplZCBlaXRoZXIgZHVyaW5nIHRoZSBzb2NrZXQgY3JlYXRpb24gb3IgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhpcyBjb250ZXh0LCB0aGUgY3J1Y2lhbCBwaWVjZSBpcyB1bmRlcnN0YW5kaW5nIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIGRldGVybWluZSBpZiB0aGUgYWRkcmVzc2VzIGFyZSBlcXVpdmFsZW50LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY29tcGFyaXNvbiBpcyByb2J1c3QgYW5kIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGZpZWxkcyB3aXRoaW4gdGhvc2UgYHNvY2thZGRyX3ZtYCBzdHJ1Y3R1cmVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowNS44OTY0MTQ1OTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzI0NjAwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfYWRkcl9lcXVhbHNfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdnNvY2tfYWRkci5oPTE2PXZvaWQgdnNvY2tfYWRkcl91bmJpbmQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKTtcXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmg6MTc6Ym9vbCB2c29ja19hZGRyX2VxdWFsc19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcXG5pbmNsdWRlL25ldC92c29ja19hZGRyLmgtMTgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqb3RoZXIpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTMwMD1zdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMwODpcXHRcXHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihhZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMDktXFx0XFx0ICAgIHZzb2NrX25ldF9jaGVja19tb2RlKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjM9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMzMS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzMyOlxcdFxcdGlmICh2c29ja19hZGRyX2VxdWFsc19hZGRyKHNyYywgXFx1MDAyNnZzay1cXHUwMDNlcmVtb3RlX2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTMzMy1cXHRcXHQgICAgZHN0LVxcdTAwM2Vzdm1fcG9ydCA9PSB2c2stXFx1MDAzZWxvY2FsX2FkZHIuc3ZtX3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzcwPXZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODMyLVxcdCAgICAgKHZzay1cXHUwMDNldHJhbnNwb3J0ICE9IFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQgfHxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTgzMzpcXHQgICAgICAhdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnNrLVxcdTAwM2VyZW1vdGVfYWRkcikpKSkge1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODM0LVxcdFxcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NDc4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdm1jaV90cmFuc3BvcnRfZ2V0X3BlbmRpbmcoXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtNDkyLVxcdFxcdFxcdCAgICBwZW5kaW5nX2xpbmtzKSB7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjQ5MzpcXHRcXHRpZiAodnNvY2tfYWRkcl9lcXVhbHNfYWRkcihcXHUwMDI2c3JjLCBcXHUwMDI2dnBlbmRpbmctXFx1MDAzZXJlbW90ZV9hZGRyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy00OTQtXFx0XFx0ICAgIHBrdC1cXHUwMDNlZHN0X3BvcnQgPT0gdnBlbmRpbmctXFx1MDAzZWxvY2FsX2FkZHIuc3ZtX3BvcnQpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jPTUwPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfdW5iaW5kKTtcXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYy01MS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuYzo1Mjpib29sIHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLFxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTUzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKm90aGVyKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19hZGRyLmMtNTctfVxcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jOjU4OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2FkZHJfZXF1YWxzX2FkZHIpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfYWRkci5jLTU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMzozNjowNy42Mjg4Nzk0NThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1MzYxMjEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBmdW5jdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgd2l0aGluIHRoZSBgdnNvY2tfYWRkci5jYCBmaWxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgZnVuY3Rpb24ncyBwdXJwb3NlLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgYSBjb21wYXJpc29uIGZ1bmN0aW9uLCBhcyB0aGUgbmFtZSBzdWdnZXN0cy4gSXQgaXMgbGlrZWx5IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3byBWU09DSyBhZGRyZXNzZXMgYXJlIGVxdWl2YWxlbnQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGFueSBuZXR3b3JraW5nIGNvZGU7IGhvdyBkbyB5b3Uga25vdyBpZiB5b3UncmUgdGFyZ2V0aW5nIHRoZSBzYW1lIGVuZHBvaW50PyBXZSBuZWVkIGEgcm9idXN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIHZlcmlmeSB0aGlzIGVxdWFsaXR5LlxuXG5Ob3csIEkgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb21wYXJlZC4gQXJlIHdlIGxvb2tpbmcgYXQgc2ltcGxlIGludGVnZXIgY29tcGFyaXNvbnMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBzb2NrZXQgZmFtaWxpZXMgb3IgcG9ydCBudW1iZXJzPyBJJ2xsIGJldCBpdCdzIHNvbWV0aGluZyBpbnZvbHZpbmcgYHZzb2NrX2FkZHJgLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RydWN0IHRvIHVuZGVyc3RhbmQgdGhlIG1lbWJlci13aXNlIGNvbXBhcmlzb25zLiBIb3BlZnVsbHksIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgY29tcGFyaXNvbiBvZiB0aGUgY29udGV4dCBJRCBhbmQgcG9ydCwgYXMgdGhhdOKAmXMgdXN1YWxseSBlbm91Z2ggdG8gZGVmaW5lIGEgVlNPQ0sgZW5kcG9pbnQuIEFueSBhZGRpdGlvbmFsIGZpZWxkcyBtaWdodCBpbmRpY2F0ZSBpdCdzIG5vdCBzaW1wbHkgYSByYXcgY29tcGFyaXNvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgY29tcGFyaXNvbiBpcyBvcmRlciBzZW5zaXRpdmUuXG5cbk5leHQsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIGVkZ2UgY2FzZXMuIFdoYXQgaGFwcGVucyBpZiBlaXRoZXIgb3IgYm90aCBhZGRyZXNzZXMgYXJlIE5VTEw/IERvZXMgaXQgcmV0dXJuIGFuIGV4cGVjdGVkIHZhbHVlIGluIHRoZXNlIGNhc2VzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBvdmVyZmxvdyBpc3N1ZXMgaWYgaXQgdXNlcyBpbnRlZ2Vycz8gT3IgcmFjZSBjb25kaXRpb25zPyBBbHNvLCBJIG5lZWQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkLiBEb2VzIGl0IHVzZSBzaG9ydC1jaXJjdWl0aW5nIHRvIG1pbmltaXplIGNvbXBhcmlzb25zIGlmIHRoZSBjb250ZXh0IElEcyBhcmUgZGlmZmVyZW50PyBQZXJmb3JtYW5jZSBtYXR0ZXJzIGluIG5ldHdvcmtpbmcsIGVzcGVjaWFsbHkgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSBwb3NzaWJsZSBmYWlsdXJlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjEzLjY4MjQ5NDM3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL3Zzb2NrX2FkZHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX3VuYmluZCk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdGJvb2wgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXFxuICA1MzpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpvdGhlcilcXG4gIDU0OlxcdHtcXG4gIDU1OlxcdFxcdHJldHVybiBhZGRyLVxcdTAwM2Vzdm1fY2lkID09IG90aGVyLVxcdTAwM2Vzdm1fY2lkIFxcdTAwMjZcXHUwMDI2XFxuICA1NjpcXHRcXHRcXHRhZGRyLVxcdTAwM2Vzdm1fcG9ydCA9PSBvdGhlci1cXHUwMDNlc3ZtX3BvcnQ7XFxuICA1NzpcXHR9XFxuICA1ODpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19hZGRyX2VxdWFsc19hZGRyKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0aW50IHZzb2NrX2FkZHJfY2FzdChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gIDYxOlxcdFxcdFxcdCAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKipvdXRfYWRkcilcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKipvdXRfYWRkcikpXFxuICA2NDpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0Km91dF9hZGRyID0gKHN0cnVjdCBzb2NrYWRkcl92bSAqKWFkZHI7XFxuICA2NzpcXHRcXHRyZXR1cm4gdnNvY2tfYWRkcl92YWxpZGF0ZSgqb3V0X2FkZHIpO1xcbiAgNjg6XFx0fVxcbiAgNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYWRkcl9jYXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTM6MzY6MTMuNjgyNTY3ODA5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjgzOTQ1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzOiBMb2dpYyBCdWcgRml4LCBObyBVbmluaXRpYWxpemVkIE1lbW9yeSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5ICpub3QqIGEgS01TQU4gY2FuZGlkYXRlLiBUaGUgY29kZSBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrOiBgIXZzb2NrX2FkZHJfZXF1YWxzX2FkZHIoXHUwMDI2c3JjLCBcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIpYC4gIGBzcmNgLCBhcyBJIGNhbiBzZWUgZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgd2l0aCBgdnNvY2tfYWRkcl9pbml0YC4gVGhhdCBmdW5jdGlvbiBkb2VzIHRoZSBzdGFuZGFyZCBgbWVtc2V0YCBhbmQgc2V0cyBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHM6IGBzdm1fZmFtaWx5YCwgYHN2bV9jaWRgLCBhbmQgYHN2bV9wb3J0YC4gIFRoZSBgdnNvY2tfYWRkcl9lcXVhbHNfYWRkcmAgZnVuY3Rpb24gaXRzZWxmIGp1c3QgZG9lcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uIG9mIHRoZSBgc3ZtX2NpZGAgYW5kIGBzdm1fcG9ydGAgbWVtYmVycy4gVGhlcmUncyBubyB3YXkgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3I6IGEgcGFja2V0IG9yaWdpbmF0aW5nIGZyb20gYSBwZWVyICpvdGhlciogdGhhbiB0aGUgY29ubmVjdGVkIHBlZXIgY291bGQgcG90ZW50aWFsbHkgYmUgbWlzaGFuZGxlZCBieSB0aGUgc29ja2V0IGlmIGl0IHNvbWVob3cgZ290IHJvdXRlZCB0aGVyZS4gVGhpcyBpcyBhIGNsYXNzaWMgZXhhbXBsZSBvZiBhIGxvZ2ljIGJ1ZzsgYSBwYWNrZXQgaW50ZW5kZWQgZm9yIG9uZSBzb2NrZXQgYWNjaWRlbnRhbGx5IGJlaW5nIHByb2Nlc3NlZCBieSBhbm90aGVyLiBUaGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgZW5zdXJpbmcgdGhlIGNvcnJlY3Qgc29ja2V0IGhhbmRsZXMgdGhlIGluY29taW5nIHBhY2tldCwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHNlY3VyaXR5IGFuZCBkYXRhIGludGVncml0eS5cblxuTGV0J3MgcXVpY2tseSByZS1leGFtaW5lIHRoZSBjb2RlIHRvIGNvbmZpcm0gdGhpczpcblxuYGBgY1xuLVx0LyogQ2hlY2sgaWYgc2sgaGFzIGJlZW4gY2xvc2VkIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgdHJhbnNwb3J0IGJlZm9yZVxuLVx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcbitcdC8qIENoZWNrIGlmIHNrIGhhcyBiZWVuIGNsb3NlZCwgYXNzaWduZWQgdG8gYW5vdGhlciB0cmFuc3BvcnQsIG9yIGlmIHRoZVxuK1x0ICogcGFja2V0IGlzIGZyb20gYSBkaWZmZXJlbnQgcGVlciB0aGFuIHRoZSBvbmUgY29ubmVjdGVkIHRvIHNrLiAgVGhlc2VcbitcdCAqIHByb3BlcnRpZXMgY291bGQgaGF2ZSBjaGFuZ2VkIGJlZm9yZSBsb2NrX3NvY2suICBMaXN0ZW5lciBzb2NrZXRzIGFyZVxuK1x0ICogbm90IGFzc2lnbmVkIHRvIGFueSB0cmFuc3BvcnQgYW5kIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHBlZXIuXG4gXHQgKi9cbiBcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcbi1cdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjYgdnNrLVx1MDAzZXRyYW5zcG9ydCAhPSBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCkpIHtcbitcdCAgICAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdCAgICAgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQgfHxcbitcdCAgICAgICF2c29ja19hZGRyX2VxdWFsc19hZGRyKFx1MDAyNnNyYywgXHUwMDI2dnNrLVx1MDAzZXJlbW90ZV9hZGRyKSkpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbmBgYFxuXG5ZZXAsIHRoYXQncyBleGFjdGx5IHdoYXQgaXQncyBkb2luZy4gIGBzcmNgIGFuZCBgdnNrLVx1MDAzZXJlbW90ZV9hZGRyYCBhcmUgKmNvbXBsZXRlbHkqIGluaXRpYWxpemVkIGJlZm9yZSB0aGF0IGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBjYWxsLiAgVGhlcmUncyBubyBjaGFuY2Ugb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgdGhlcmVmb3JlLCBubyBwb3NzaWJpbGl0eSBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUgdXNlci4gIFdlJ3JlIGxvb2tpbmcgYXQgYSBsb2dpYyBlcnJvci4gS01TQU4gaXMgb3ZlcmtpbGwgaGVyZS4gIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZnV6emluZyBzaG91bGQgYmUgbW9yZSB0aGFuIGFkZXF1YXRlIGZvciBkZXRlY3RpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBmdXJ0aGVyIGxvZ2ljIGJ1Z3MuIEtNU0FOJ3Mgc3RyZW5ndGggbGllcyBpbiBkZXRlY3RpbmcgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHNpbmNlIGl0J3Mgbm90IHByZXNlbnQsIGl0J3Mgbm90IG5lZWRlZC4gIFRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTI4LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEzOjM2OjIzLjk2NjUxNjg2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQncyByZW1vdGUgYWRkcmVzcy4gVGhlIGFkZHJlc3NlcyBiZWluZyBjb21wYXJlZCAoYHNyY2AgYW5kIGB2c2stXFx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxvZ2ljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGFuIGluY29taW5nIHBhY2tldCdzIHNvdXJjZSBhZGRyZXNzIG1hdGNoZXMgdGhlIGNvbm5lY3RlZCBzb2NrZXQncyByZW1vdGUgYWRkcmVzcy4gVGhlIGFkZHJlc3NlcyBiZWluZyBjb21wYXJlZCAoYHNyY2AgYW5kIGB2c2stXFx1MDAzZXJlbW90ZV9hZGRyYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGBzdHJ1Y3Qgc29ja2FkZHJfdm1gIG9iamVjdHMgKGUuZy4sIGBzcmNgIGlzIGluaXRpYWxpemVkIHZpYSBgdnNvY2tfYWRkcl9pbml0YCB3aGljaCB1c2VzIGBtZW1zZXRgIHRvIHplcm8gdGhlIHN0cnVjdHVyZSkuIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGB2c29ja19hZGRyX2VxdWFsc19hZGRyYCBzaW1wbHkgY29tcGFyZXMgdGhlIGBzdm1fY2lkYCBhbmQgYHN2bV9wb3J0YCBmaWVsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIHN0YW5kYXJkIGxvZ2ljIGJ1ZyBmaXgsIGFuZCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[1] Phase: Succeeded StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 13:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 13:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2] Phase: Succeeded StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","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-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 13:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 13:36:35 +0000 UTC FinishedAt: 2026-08-13 13:36:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-workflow64vjt/series-workflow64vjt-convert-artifact-2347783659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 13:36:45 +0000 UTC FinishedAt: 2026-08-13 13:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 13:36:45 +0000 UTC FinishedAt: 2026-08-13 13:53:07 +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:*3207448b-4ff6-4f90-a47e-7e6ba675fee5,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-workflow64vjt/series-workflow64vjt-convert-artifact-2347783659/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": "a9ee7fd8-e587-46a5-8505-ca09cbe50f65", "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-workflow64vjt/series-workflow64vjt-build-action-1393740265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:36:45 +0000 UTC FinishedAt: 2026-08-13 13:52:57 +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:*3207448b-4ff6-4f90-a47e-7e6ba675fee5,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-workflow64vjt/series-workflow64vjt-convert-artifact-2347783659/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": "a9ee7fd8-e587-46a5-8505-ca09cbe50f65", "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-workflow64vjt/series-workflow64vjt-build-action-1393740265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 13:53:07 +0000 UTC FinishedAt: 2026-08-13 13:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 13:53:07 +0000 UTC FinishedAt: 2026-08-13 13:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 13:53:07 +0000 UTC FinishedAt: 2026-08-13 13:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 13:53:07 +0000 UTC FinishedAt: 2026-08-13 13:53:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","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-workflow64vjt/series-workflow64vjt-convert-artifact-2320403650/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 13:53:17 +0000 UTC FinishedAt: 2026-08-13 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 13:53:17 +0000 UTC FinishedAt: 2026-08-13 13:54:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9ee7fd8-e587-46a5-8505-ca09cbe50f65,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-workflow64vjt/series-workflow64vjt-build-action-1393740265/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-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 13:55:06 +0000 UTC FinishedAt: 2026-08-13 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 13:55:06 +0000 UTC FinishedAt: 2026-08-13 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 13:55:06 +0000 UTC FinishedAt: 2026-08-13 14:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 13:55:06 +0000 UTC FinishedAt: 2026-08-13 14:15:01 +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:*3207448b-4ff6-4f90-a47e-7e6ba675fee5,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-workflow64vjt/series-workflow64vjt-convert-artifact-2320403650/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": "1baaa34b-88eb-4c99-ad59-a04b27f9907f", "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-workflow64vjt/series-workflow64vjt-build-action-3175956246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 13:55:06 +0000 UTC FinishedAt: 2026-08-13 14:14:51 +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:*3207448b-4ff6-4f90-a47e-7e6ba675fee5,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-workflow64vjt/series-workflow64vjt-convert-artifact-2320403650/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": "1baaa34b-88eb-4c99-ad59-a04b27f9907f", "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-workflow64vjt/series-workflow64vjt-build-action-3175956246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 14:15:01 +0000 UTC FinishedAt: 2026-08-13 14:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 14:15:01 +0000 UTC FinishedAt: 2026-08-13 14:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 14:15:01 +0000 UTC FinishedAt: 2026-08-13 14:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 14:15:01 +0000 UTC FinishedAt: 2026-08-13 14:16:43 +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:*1baaa34b-88eb-4c99-ad59-a04b27f9907f,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-workflow64vjt/series-workflow64vjt-build-action-3175956246/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-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"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:*a9ee7fd8-e587-46a5-8505-ca09cbe50f65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1baaa34b-88eb-4c99-ad59-a04b27f9907f,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-workflow64vjt/series-workflow64vjt-build-action-1393740265/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-workflow64vjt/series-workflow64vjt-build-action-3175956246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 14:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 14:17:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"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-workflow64vjt/series-workflow64vjt-convert-artifact-787389431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 14:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 14:16:53 +0000 UTC FinishedAt: 2026-08-13 14:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 14:16:54 +0000 UTC FinishedAt: 2026-08-13 14:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 14:17:26 +0000 UTC FinishedAt: 2026-08-13 17:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64vjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2bb155e92167cd5ad6aae312e83291da2454f8b0","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VSOCKETS_LOOPBACK","VHOST_VSOCK"],"series_id":"599254e0-1004-47fa-91b3-0b9668d1ece6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 14:17:26 +0000 UTC FinishedAt: 2026-08-13 17:22:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9ee7fd8-e587-46a5-8505-ca09cbe50f65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1baaa34b-88eb-4c99-ad59-a04b27f9907f,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-workflow64vjt/series-workflow64vjt-build-action-1393740265/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-workflow64vjt/series-workflow64vjt-build-action-3175956246/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-workflow64vjt/series-workflow64vjt-convert-artifact-787389431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}