Name: series-workflowwv9p5 Phase: Succeeded StartedAt: 2026-08-02 15:55:56 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[0] Phase: Succeeded StartedAt: 2026-08-02 15:55:56 +0000 UTC FinishedAt: 2026-08-02 16:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 15:55:56 +0000 UTC FinishedAt: 2026-08-02 16:41:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "18290c01-e9f2-41bc-a11b-731d93bed596" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "resilient_queued_spin_lock_slowpath", "bpf_res_spin_lock", "bpf_res_spin_lock_irqsave" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9ycXNwaW5sb2NrLmMgYi9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xuaW5kZXggZTRlMzM4Y2RiNDM3Yy4uMjEyOWRlZmM0YTlhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xuQEAgLTU3Miw5ICYjNDM7NTcyLDEwIEBAIGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcbiBcbiBcdC8qIERpc2FibGUgcXVldWUgZGVzdHJ1Y3Rpb24gd2hlbiB3ZSBkZXRlY3QgZGVhZGxvY2tzLiAqL1xuIFx0aWYgKHJldCA9PSAtRURFQURMSykge1xuLVx0XHRpZiAoIW5leHQpXG4mIzQzO1x0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiBcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuLVx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuJiM0MztcdFx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCmluZGV4IGU0ZTMzOGNkYjQzN2MuLjIxMjlkZWZjNGE5YTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCkBAIC01NzIsOSAmIzQzOzU3MiwxMCBAQCBpbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpCiAKIAkvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi8KIAlpZiAocmV0ID09IC1FREVBRExLKSB7Ci0JCWlmICghbmV4dCkKJiM0MzsJCWlmICghdHJ5X2NtcHhjaGdfdGFpbChsb2NrLCB0YWlsLCAwKSkgewogCQkJbmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZCgmYW1wO25vZGUtJmd0O25leHQsIChWQUwpKTsKLQkJYXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkKCZhbXA7bmV4dC0mZ3Q7bG9ja2VkKTsKJiM0MzsJCQlhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoJmFtcDtuZXh0LSZndDtsb2NrZWQpOwomIzQzOwkJfQogCQlnb3RvIGVycl9yZWxlYXNlX25vZGU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL2JwZi9ycXNwaW5sb2NrLmNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgaXQmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIGFyZWEsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBpcyBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rLiBUaGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHRhcmdldGluZyB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbiwgd2hpY2ggc3VnZ2VzdHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzcGlubG9jayBpbXBsZW1lbnRhdGlvbiBpcyBuZWNlc3NhcnkuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBzbmlwcGV0IGl0c2VsZi4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgKGAtRURFQURMS2ApLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIGhvdyB0aGUgbG9jayBiZWhhdmVzIHdoZW4gYSBkZWFkbG9jayBpcyBkZXRlY3RlZC4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNoZWNrZWQgYGlmICghbmV4dClgLiBOb3csIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIHRoYXQgd2l0aCBhIGB0cnlfY21weGNoZ190YWlsYCBjYWxsIGFuZCB0aGVuIHRoZSBgYXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkYCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QgbWVjaGFuaXNtIGZvciBoYW5kbGluZyBjb250ZW5kZWQgc3BpbmxvY2sgdW5sb2NraW5nIGluIHRoZSBwcmVzZW5jZSBvZiBkZWFkbG9ja3MuIFRoZSBgdHJ5X2NtcHhjaGdfdGFpbGAgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gYXRvbWljYWxseSB1cGRhdGUgdGhlIHRhaWwgb2YgdGhlIGxvY2sgcXVldWUsIHdoaWNoIHdvdWxkIG1ha2Ugc2Vuc2UuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBzcGlubG9jayBpdHNlbGYsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiBCUEYuIFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZT8gV2hhdCBvdGhlciBmdW5jdGlvbnMgaW4gYHJxc3BpbmxvY2suY2AgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBzaWRlIGVmZmVjdHMgaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jPTI2MT1pbnQgX19sb2NrZnVuYyByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY5LVx0ICogZGVhZGxvY2sgZGV0ZWN0aW9uIGVudHJ5IHdoZW4gcXVldWVkIHNwaW5sb2NrcyBhcmUgZGlzYWJsZWQsIG9yIGZyb21cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIGFmdGVyIGdyYWJiaW5nIHRoZSBkZWFkbG9ja1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjcxLVx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTMwNT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcW5vZGUsIHJxbm9kZXNbX1FfTUFYX05PREVTXSk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzEzLS8qKlxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MzE0OiAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMzOC0gKi9cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zNDAte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2Njc6RVhQT1JUX1NZTUJPTF9HUEwocmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLY29uZmlnIERpdmUgZm9yIEJQRiBTcGlubG9jayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgYnVpbGQgb2YgYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgc3BlY2lmaWMgZmlsZSBnZXRzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCwgaXMgdG8gZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucywgaWYgYW55LCBkaXJlY3RseSBpbmZsdWVuY2UgaXRzIGluY2x1c2lvbiwgb3IgaWYgaXQmIzM5O3MgaW5kaXJlY3RseSBjb250cm9sbGVkIHRocm91Z2ggc29tZSBicm9hZGVyIEJQRiBvciBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnFzcGlubG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNz1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NzU9Q0ZMQUdTX1JFTU9WRV9yaW5nYnVmLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzY6Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIG9idmlvdXMgb25lLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIGh1bnQgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9yIHVzYWdlIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBmdXJ0aGVyIHJlZmluZSB0aGUgY29tcGlsYXRpb24gb3IgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiwgYmVzaWRlcyBqdXN0IHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gRmluZGluZyB0aGVzZSBjb25kaXRpb25zIHdpbGwgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgYWN0aXZhdGlvbiBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jLTI1LSNpbmNsdWRlIFx1MDAzY2FzbS9ieXRlb3JkZXIuaFx1MDAzZVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNy0jaW5jbHVkZSBcdTAwM2Nhc20vcXNwaW5sb2NrLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zNS0gKi9cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjM2OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzctI2luY2x1ZGUgXCYjMzQ7Li4vbG9ja2luZy9xc3BpbmxvY2suaFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChyZXNpbGllbnRfdGFzX3NwaW5fbG9jayk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTYtXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyOTc6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3BpbmxvY2sgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgZGVtYW5kaW5nIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AsIGFuZCBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMjk3LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjaGVjayBsaWtlIHRoaXMgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgYWN0dWFsIGRlcGVuZGVuY3kgY2hlY2sgb3IgaW1wbGVtZW50YXRpb24gdGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiB0aGUgQ09ORklHIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0cmV0dXJuIDA7XG4gMjkxOlx0b3V0OlxuIDI5MjpcdFx0cmVsZWFzZV9oZWxkX2xvY2tfZW50cnkoKTtcbiAyOTM6XHRcdHJldHVybiByZXQ7XG4gMjk0Olx0fVxuIDI5NTpcdEVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKTtcbiAyOTY6XHRcbiAyOTc6XHQjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NcbiAyOTg6XHRcbiAyOTk6XHQvKlxuIDMwMDpcdCAqIFBlci1DUFUgcXVldWUgbm9kZSBzdHJ1Y3R1cmVzOyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNCBuZXN0ZWRcbiAzMDE6XHQgKiBjb250ZXh0czogdGFzaywgc29mdGlycSwgaGFyZGlycSwgbm1pLlxuIDMwMjpcdCAqXG4gMzAzOlx0ICogRXhhY3RseSBmaXRzIG9uZSA2NC1ieXRlIGNhY2hlbGluZSBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuXG4gMzA0Olx0ICovXG4gMzA1Olx0c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHFub2RlLCBycW5vZGVzW19RX01BWF9OT0RFU10pO1xuIDMwNjpcdFxuIDMwNzpcdCNpZm5kZWYgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZVxuIDMwODpcdCNkZWZpbmUgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZSh2LCBjKSBzbXBfY29uZF9sb2FkX2FjcXVpcmUodiwgYylcbiAzMDk6XHQjZW5kaWZcbiAzMTA6XHRcbiAzMTE6XHQjZGVmaW5lIHJlc19hdG9taWNfY29uZF9yZWFkX2FjcXVpcmUodiwgYykgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZShcdTAwMjYodiktXHUwMDNlY291bnRlciwgKGMpKVxuIDMxMjpcdFxuIDMxMzpcdC8qKlxuIDMxNDpcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXG4gMzE1Olx0ICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxuIDMxNjpcdCAqIEB2YWw6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHF1ZXVlZCBzcGlubG9jayAzMi1iaXQgd29yZFxuIDMxNzpcdCAqXG4gMzE4Olx0ICogUmV0dXJuOlxuIDMxOTpcdCAqICogMFx0XHQtIExvY2sgd2FzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseS5cbiAzMjA6XHQgKiAqIC1FREVBRExLXHQtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgQUEvQUJCQSBkZWFkbG9jay5cbiAzMjE6XHQgKiAqIC1FVElNRURPVVQgLSBMb2NrIGFjcXVpc2l0aW9uIGZhaWxlZCBiZWNhdXNlIG9mIHRpbWVvdXQuXG4gMzIyOlx0ICpcbiAzMjM6XHQgKiAocXVldWUgdGFpbCwgcGVuZGluZyBiaXQsIGxvY2sgdmFsdWUpXG4gMzI0Olx0ICpcbiAzMjU6XHQgKiAgICAgICAgICAgICAgZmFzdCAgICAgOiAgICBzbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgdW5sb2NrXG4gMzI2Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gMzI3Olx0ICogdW5jb250ZW5kZWQgICgwLDAsMCkgLTotLVx1MDAzZSAoMCwwLDEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTotLVx1MDAzZSAoKiwqLDApXG4gMzI4Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0tLS0tLS0uLS0tLS0tLiAgICAgICAgICAgICAvICA6XG4gMzI5Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgdiAgICAgICAgICAgXFwgICAgICBcXCAgICAgICAgICAgIHwgIDpcbiAzMzA6XHQgKiBwZW5kaW5nICAgICAgICAgICAgICAgOiAgICAoMCwxLDEpICYjNDM7LS1cdTAwM2UgKDAsMSwwKSAgIFxcICAgICAgICAgICB8ICA6XG4gMzMxOlx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0mIzM5OyAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgOlxuIDMzMjpcdCAqICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIHYgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgOlxuIDMzMzpcdCAqIHVuY29udGVuZGVkICAgICAgICAgICA6ICAgIChuLHgseSkgJiM0MzstLVx1MDAzZSAobiwwLDApIC0tJiMzOTsgICAgICAgICAgIHwgIDpcbiAzMzQ6XHQgKiAgIHF1ZXVlICAgICAgICAgICAgICAgOiAgICAgICB8IF4tLSYjMzk7ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XG4gMzM1Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XG4gMzM2Olx0ICogY29udGVuZGVkICAgICAgICAgICAgIDogICAgKCoseCx5KSAmIzQzOy0tXHUwMDNlICgqLDAsMCkgLS0tXHUwMDNlICgqLDAsMSkgLSYjMzk7ICA6XG4gMzM3Olx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgICBeLS0mIzM5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuIDMzODpcdCAqL1xuIDMzOTpcdGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcbiAzNDA6XHR7XG4gMzQxOlx0XHRzdHJ1Y3QgbWNzX3NwaW5sb2NrICpwcmV2LCAqbmV4dCwgKm5vZGU7XG4gMzQyOlx0XHRzdHJ1Y3QgcnFzcGlubG9ja190aW1lb3V0IHRzO1xuIDM0MzpcdFx0aW50IGlkeCwgcmV0ID0gMDtcbiAzNDQ6XHRcdHUzMiBvbGQsIHRhaWw7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRCVUlMRF9CVUdfT04oQ09ORklHX05SX0NQVVMgXHUwMDNlPSAoMVUgXHUwMDNjXHUwMDNjIF9RX1RBSUxfQ1BVX0JJVFMpKTtcbiAzNDc6XHRcbiAzNDg6XHRcdGlmIChyZXNpbGllbnRfdmlydF9zcGluX2xvY2tfZW5hYmxlZCgpKVxuIDM0OTpcdFx0XHRyZXR1cm4gcmVzaWxpZW50X3ZpcnRfc3Bpbl9sb2NrKGxvY2spO1xuIDM1MDpcdFxuIDM1MTpcdFx0UkVTX0lOSVRfVElNRU9VVCh0cyk7XG4gMzUyOlx0XG4gMzUzOlx0XHQvKlxuIDM1NDpcdFx0ICogV2FpdCBmb3IgaW4tcHJvZ3Jlc3MgcGVuZGluZy1cdTAwM2Vsb2NrZWQgaGFuZC1vdmVycyB3aXRoIGEgYm91bmRlZFxuIDM1NTpcdFx0ICogbnVtYmVyIG9mIHNwaW5zIHNvIHRoYXQgd2UgZ3VhcmFudGVlIGZvcndhcmQgcHJvZ3Jlc3MuXG4gMzU2Olx0XHQgKlxuIDM1NzpcdFx0ICogMCwxLDAgLVx1MDAzZSAwLDAsMVxuIDM1ODpcdFx0ICovXG4gMzU5Olx0XHRpZiAodmFsID09IF9RX1BFTkRJTkdfVkFMKSB7XG4gMzYwOlx0XHRcdGludCBjbnQgPSBfUV9QRU5ESU5HX0xPT1BTO1xuIDM2MTpcdFx0XHR2YWwgPSBhdG9taWNfY29uZF9yZWFkX3JlbGF4ZWQoXHUwMDI2bG9jay1cdTAwM2V2YWwsXG4gMzYyOlx0XHRcdFx0XHRcdCAgICAgICAoVkFMICE9IF9RX1BFTkRJTkdfVkFMKSB8fCAhY250LS0pO1xuIDM2MzpcdFx0fVxuIDM2NDpcdFxuIDM2NTpcdFx0LypcbiAzNjY6XHRcdCAqIElmIHdlIG9ic2VydmUgYW55IGNvbnRlbnRpb247IHF1ZXVlLlxuIDM2NzpcdFx0ICovXG4gMzY4Olx0XHRpZiAodmFsIFx1MDAyNiB+X1FfTE9DS0VEX01BU0spXG4gMzY5Olx0XHRcdGdvdG8gcXVldWU7XG4gMzcwOlx0XG4gMzcxOlx0XHQvKlxuIDM3MjpcdFx0ICogdHJ5bG9jayB8fCBwZW5kaW5nXG4gMzczOlx0XHQgKlxuIDM3NDpcdFx0ICogMCwwLCogLVx1MDAzZSAwLDEsKiAtXHUwMDNlIDAsMCwxIHBlbmRpbmcsIHRyeWxvY2tcbiAzNzU6XHRcdCAqL1xuIDM3NjpcdFx0dmFsID0gcXVldWVkX2ZldGNoX3NldF9wZW5kaW5nX2FjcXVpcmUobG9jayk7XG4gMzc3Olx0XG4gMzc4Olx0XHQvKlxuIDM3OTpcdFx0ICogSWYgd2Ugb2JzZXJ2ZSBjb250ZW50aW9uLCB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgbG9ja2VyLlxuIDM4MDpcdFx0ICpcbiAzODE6XHRcdCAqIFVuZG8gYW5kIHF1ZXVlOyBvdXIgc2V0dGluZyBvZiBQRU5ESU5HIG1pZ2h0IGhhdmUgbWFkZSB0aGVcbiAzODI6XHRcdCAqIG4sMCwwIC1cdTAwM2UgMCwwLDAgdHJhbnNpdGlvbiBmYWlsIGFuZCBpdCB3aWxsIG5vdyBiZSB3YWl0aW5nXG4gMzgzOlx0XHQgKiBvbiBAbmV4dCB0byBiZWNvbWUgIU5VTEwuXG4gMzg0Olx0XHQgKi9cbiAzODU6XHRcdGlmICh1bmxpa2VseSh2YWwgXHUwMDI2IH5fUV9MT0NLRURfTUFTSykpIHtcbiAzODY6XHRcbiAzODc6XHRcdFx0LyogVW5kbyBQRU5ESU5HIGlmIHdlIHNldCBpdC4gKi9cbiAzODg6XHRcdFx0aWYgKCEodmFsIFx1MDAyNiBfUV9QRU5ESU5HX01BU0spKVxuIDM4OTpcdFx0XHRcdGNsZWFyX3BlbmRpbmcobG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uCgoqKkFuYWx5emluZyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgKioKClJpZ2h0LCBzbyB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgbmVzdGxlZCBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGJsb2NrLiAgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSwgb2YgY291cnNlLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyByZWxldmFuY2UuICBJcyBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gYXQgcGxheSBoZXJlLCBvciBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgb25lcz8gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhpczsga25vd2luZyBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgb2J2aW91cyBwbGFjZXMgdG8gbG9vayB3b3VsZCBiZSBlaXRoZXIgYGtlcm5lbC9icGYvS2NvbmZpZ2AgKHNpbmNlIHdlIGFyZSBkaXNjdXNzaW5nIHRoZSBrZXJuZWwpIG9yIG1heWJlIGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIGBRVUVVRURfU1BJTkxPQ0tTYCBpcyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVUVVRURfU1BJTkxPQ0tTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmxvY2tzPTIzOT1jb25maWcgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0MS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Mjpjb25maWcgUVVFVUVEX1NQSU5MT0NLU1xua2VybmVsL0tjb25maWcubG9ja3MtMjQzLVx0ZGVmX2Jvb2wgeSBpZiBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3BpbmxvY2sgQ29uZmlndXJhdGlvbiBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzcGlubG9ja3MgYXJlIGNvbmZpZ3VyZWQgaW4gdGhpcyBrZXJuZWwgYnVpbGQuIEl0IGxvb2tzIGxpa2UgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgKnByb3ZpZGVkKiBgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU2AgaXMgYWxzbyBzZXQuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgYmVoYXZpb3IgSSYjMzk7ZCBleHBlY3QuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgaXMgYmVpbmcgY29tcGlsZWQgKm9ubHkqIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCBzdWdnZXN0cyBhIGRpcmVjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZCBzb21lIHNwZWNpZmljIHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCBtZSBqdW1wIGludG8gdGhlIGNvZGUgYW5kIGZvY3VzIG9uIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzIuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgQlBGLXJlbGF0ZWQgc3BpbmxvY2sgaW50ZXJhY3Rpb24gaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0XHRcdHByZWZldGNodyhuZXh0KTtcbiA1NTE6XHRcdH1cbiA1NTI6XHRcbiA1NTM6XHRcdC8qXG4gNTU0Olx0XHQgKiB3ZSYjMzk7cmUgYXQgdGhlIGhlYWQgb2YgdGhlIHdhaXRxdWV1ZSwgd2FpdCBmb3IgdGhlIG93bmVyIFx1MDAyNiBwZW5kaW5nIHRvXG4gNTU1Olx0XHQgKiBnbyBhd2F5LlxuIDU1NjpcdFx0ICpcbiA1NTc6XHRcdCAqICoseCx5IC1cdTAwM2UgKiwwLDBcbiA1NTg6XHRcdCAqXG4gNTU5Olx0XHQgKiB0aGlzIHdhaXQgbG9vcCBtdXN0IHVzZSBhIGxvYWQtYWNxdWlyZSBzdWNoIHRoYXQgd2UgbWF0Y2ggdGhlXG4gNTYwOlx0XHQgKiBzdG9yZS1yZWxlYXNlIHRoYXQgY2xlYXJzIHRoZSBsb2NrZWQgYml0IGFuZCBjcmVhdGUgbG9ja1xuIDU2MTpcdFx0ICogc2VxdWVudGlhbGl0eTsgdGhpcyBpcyBiZWNhdXNlIHRoZSBzZXRfbG9ja2VkKCkgZnVuY3Rpb24gYmVsb3dcbiA1NjI6XHRcdCAqIGRvZXMgbm90IGltcGx5IGEgZnVsbCBiYXJyaWVyLlxuIDU2MzpcdFx0ICpcbiA1NjQ6XHRcdCAqIFdlIHVzZSBSRVNfREVGX1RJTUVPVVQgKiAyIGFzIHRoZSBkdXJhdGlvbiwgYXMgUkVTX0RFRl9USU1FT1VUIGlzXG4gNTY1Olx0XHQgKiBtZWFudCB0byBzcGFuIG1heGltdW0gYWxsb3dlZCB0aW1lIHBlciBjcml0aWNhbCBzZWN0aW9uLCBhbmQgd2UgbWF5XG4gNTY2Olx0XHQgKiBoYXZlIGJvdGggdGhlIG93bmVyIG9mIHRoZSBsb2NrIGFuZCB0aGUgcGVuZGluZyBiaXQgd2FpdGVyIGFoZWFkIG9mXG4gNTY3Olx0XHQgKiB1cy5cbiA1Njg6XHRcdCAqL1xuIDU2OTpcdFx0UkVTX1JFU0VUX1RJTUVPVVQodHMsIFJFU19ERUZfVElNRU9VVCAqIDIpO1xuIDU3MDpcdFx0dmFsID0gcmVzX2F0b21pY19jb25kX3JlYWRfYWNxdWlyZShcdTAwMjZsb2NrLVx1MDAzZXZhbCwgIShWQUwgXHUwMDI2IF9RX0xPQ0tFRF9QRU5ESU5HX01BU0spIHx8XG4gNTcxOlx0XHRcdFx0XHRcdCAgIFJFU19DSEVDS19USU1FT1VUKHRzLCByZXQsIF9RX0xPQ0tFRF9QRU5ESU5HX01BU0spKTtcbiA1NzI6XHRcbiA1NzM6XHRcdC8qIERpc2FibGUgcXVldWUgZGVzdHJ1Y3Rpb24gd2hlbiB3ZSBkZXRlY3QgZGVhZGxvY2tzLiAqL1xuIDU3NDpcdFx0aWYgKHJldCA9PSAtRURFQURMSykge1xuIDU3NTpcdFx0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiA1NzY6XHRcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuIDU3NzpcdFx0XHRcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcdTAwMjZuZXh0LVx1MDAzZWxvY2tlZCk7XG4gNTc4Olx0XHRcdH1cbiA1Nzk6XHRcdFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xuIDU4MDpcdFx0fVxuIDU4MTpcdFxuIDU4MjpcdHdhaXRxX3RpbWVvdXQ6XG4gNTgzOlx0XHRpZiAocmV0KSB7XG4gNTg0Olx0XHRcdC8qXG4gNTg1Olx0XHRcdCAqIElmIHRoZSB0YWlsIGlzIHN0aWxsIHBvaW50aW5nIHRvIHVzLCB0aGVuIHdlIGFyZSB0aGUgZmluYWwgd2FpdGVyLFxuIDU4NjpcdFx0XHQgKiBhbmQgYXJlIHJlc3BvbnNpYmxlIGZvciByZXNldHRpbmcgdGhlIHRhaWwgYmFjayB0byAwLiBPdGhlcndpc2UsIGlmXG4gNTg3Olx0XHRcdCAqIHRoZSBjbXB4Y2hnIG9wZXJhdGlvbiBmYWlscywgd2Ugc2lnbmFsIHRoZSBuZXh0IHdhaXRlciB0byB0YWtlIGV4aXRcbiA1ODg6XHRcdFx0ICogYW5kIHRyeSB0aGUgc2FtZS4gRm9yIGEgd2FpdGVyIHdpdGggdGFpbCBub2RlICYjMzk7biYjMzk7OlxuIDU4OTpcdFx0XHQgKlxuIDU5MDpcdFx0XHQgKiBuLCosKiAtXHUwMDNlIDAsKiwqXG4gNTkxOlx0XHRcdCAqXG4gNTkyOlx0XHRcdCAqIFdoZW4gcGVyZm9ybWluZyBjbXB4Y2hnIGZvciB0aGUgd2hvbGUgd29yZCAoTlJfQ1BVUyBcdTAwM2UgMTZrKSwgaXQgaXNcbiA1OTM6XHRcdFx0ICogcG9zc2libGUgbG9ja2VkL3BlbmRpbmcgYml0cyBrZWVwIGNoYW5naW5nIGFuZCB3ZSBzZWUgZmFpbHVyZXMgZXZlblxuIDU5NDpcdFx0XHQgKiB3aGVuIHdlIHJlbWFpbiB0aGUgaGVhZCBvZiB3YWl0IHF1ZXVlLiBIb3dldmVyLCBldmVudHVhbGx5LFxuIDU5NTpcdFx0XHQgKiBwZW5kaW5nIGJpdCBvd25lciB3aWxsIHVuc2V0IHRoZSBwZW5kaW5nIGJpdCwgYW5kIG5ldyB3YWl0ZXJzXG4gNTk2Olx0XHRcdCAqIHdpbGwgcXVldWUgYmVoaW5kIHVzLiBUaGlzIHdpbGwgbGVhdmUgdGhlIGxvY2sgb3duZXIgaW5cbiA1OTc6XHRcdFx0ICogY2hhcmdlLCBhbmQgaXQgd2lsbCBldmVudHVhbGx5IGVpdGhlciBzZXQgbG9ja2VkIGJpdCB0byAwLCBvclxuIDU5ODpcdFx0XHQgKiBsZWF2ZSBpdCBhcyAxLCBhbGxvd2luZyB1cyB0byBtYWtlIHByb2dyZXNzLlxuIDU5OTpcdFx0XHQgKlxuIDYwMDpcdFx0XHQgKiBXZSB0ZXJtaW5hdGUgdGhlIHdob2xlIHdhaXQgcXVldWUgZm9yIHR3byByZWFzb25zLiBGaXJzdGx5LFxuIDYwMTpcdFx0XHQgKiB3ZSBlc2NoZXcgcGVyLXdhaXRlciB0aW1lb3V0cyB3aXRoIG9uZSBhcHBsaWVkIGF0IHRoZSBoZWFkIG9mXG4gNjAyOlx0XHRcdCAqIHRoZSB3YWl0IHF1ZXVlLiAgVGhpcyBhbGxvd3MgZXZlcnlvbmUgdG8gYnJlYWsgb3V0IGZhc3RlclxuIDYwMzpcdFx0XHQgKiBvbmNlIHdlJiMzOTt2ZSBzZWVuIHRoZSBvd25lciAvIHBlbmRpbmcgd2FpdGVyIG5vdCByZXNwb25kaW5nIGZvclxuIDYwNDpcdFx0XHQgKiB0aGUgdGltZW91dCBkdXJhdGlvbiBmcm9tIHRoZSBoZWFkLiAgU2Vjb25kbHksIGl0IGF2b2lkc1xuIDYwNTpcdFx0XHQgKiBjb21wbGljYXRlZCBzeW5jaHJvbml6YXRpb24sIGJlY2F1c2Ugd2hlbiBub3QgbGVhdmluZyBpbiBGSUZPXG4gNjA2Olx0XHRcdCAqIG9yZGVyLCBwcmV2JiMzOTtzIG5leHQgcG9pbnRlciBuZWVkcyB0byBiZSBmaXhlZCB1cCBldGMuXG4gNjA3Olx0XHRcdCAqL1xuIDYwODpcdFx0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiA2MDk6XHRcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgVkFMKTtcbiA2MTA6XHRcdFx0XHRXUklURV9PTkNFKG5leHQtXHUwMDNlbG9ja2VkLCBSRVNfVElNRU9VVF9WQUwpO1xuIDYxMTpcdFx0XHR9XG4gNjEyOlx0XHRcdGxvY2tldmVudF9pbmMocnFzcGlubG9ja19sb2NrX3RpbWVvdXQpO1xuIDYxMzpcdFx0XHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XG4gNjE0Olx0XHR9XG4gNjE1Olx0XG4gNjE2Olx0XHQvKlxuIDYxNzpcdFx0ICogY2xhaW0gdGhlIGxvY2s6XG4gNjE4Olx0XHQgKlxuIDYxOTpcdFx0ICogbiwwLDAgLVx1MDAzZSAwLDAsMSA6IGxvY2ssIHVuY29udGVuZGVkXG4gNjIwOlx0XHQgKiAqLCosMCAtXHUwMDNlICosKiwxIDogbG9jaywgY29udGVuZGVkXG4gNjIxOlx0XHQgKlxuIDYyMjpcdFx0ICogSWYgdGhlIHF1ZXVlIGhlYWQgaXMgdGhlIG9ubHkgb25lIGluIHRoZSBxdWV1ZSAobG9jayB2YWx1ZSA9PSB0YWlsKVxuIDYyMzpcdFx0ICogYW5kIG5vYm9keSBpcyBwZW5kaW5nLCBjbGVhciB0aGUgdGFpbCBjb2RlIGFuZCBncmFiIHRoZSBsb2NrLlxuIDYyNDpcdFx0ICogT3RoZXJ3aXNlLCB3ZSBvbmx5IG5lZWQgdG8gZ3JhYiB0aGUgbG9jay5cbiA2MjU6XHRcdCAqL1xuIDYyNjpcdFxuIDYyNzpcdFx0LypcbiA2Mjg6XHRcdCAqIE5vdGU6IGF0IHRoaXMgcG9pbnQ6ICh2YWwgXHUwMDI2IF9RX1BFTkRJTkdfTUFTSykgPT0gMCwgYmVjYXVzZSBvZiB0aGVcbiA2Mjk6XHRcdCAqICAgICAgIGFib3ZlIHdhaXQgY29uZGl0aW9uLCB0aGVyZWZvcmUgYW55IGNvbmN1cnJlbnQgc2V0dGluZyBvZlxuIDYzMDpcdFx0ICogICAgICAgUEVORElORyB3aWxsIG1ha2UgdGhlIHVuY29udGVuZGVkIHRyYW5zaXRpb24gZmFpbC5cbiA2MzE6XHRcdCAqL1xuIDYzMjpcdFx0aWYgKCh2YWwgXHUwMDI2IF9RX1RBSUxfTUFTSykgPT0gdGFpbCkge1xuIDYzMzpcdFx0XHRpZiAoYXRvbWljX3RyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2bG9jay1cdTAwM2V2YWwsIFx1MDAyNnZhbCwgX1FfTE9DS0VEX1ZBTCkpXG4gNjM0Olx0XHRcdFx0Z290byByZWxlYXNlOyAvKiBObyBjb250ZW50aW9uICovXG4gNjM1Olx0XHR9XG4gNjM2Olx0XG4gNjM3Olx0XHQvKlxuIDYzODpcdFx0ICogRWl0aGVyIHNvbWVib2R5IGlzIHF1ZXVlZCBiZWhpbmQgdXMgb3IgX1FfUEVORElOR19WQUwgZ290IHNldFxuIDYzOTpcdFx0ICogd2hpY2ggd2lsbCB0aGVuIGRldGVjdCB0aGUgcmVtYWluaW5nIHRhaWwgYW5kIHF1ZXVlIGJlaGluZCB1c1xuIDY0MDpcdFx0ICogZW5zdXJpbmcgd2UmIzM5O2xsIHNlZSBhIEBuZXh0LlxuIDY0MTpcdFx0ICovXG4gNjQyOlx0XHRzZXRfbG9ja2VkKGxvY2spO1xuIDY0MzpcdFxuIDY0NDpcdFx0LypcbiA2NDU6XHRcdCAqIGNvbnRlbmRlZCBwYXRoOyB3YWl0IGZvciBuZXh0IGlmIG5vdCBvYnNlcnZlZCB5ZXQsIHJlbGVhc2UuXG4gNjQ2Olx0XHQgKi9cbiA2NDc6XHRcdGlmICghbmV4dClcbiA2NDg6XHRcdFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcdTAwMjZub2RlLVx1MDAzZW5leHQsIChWQUwpKTtcbiA2NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSZXNpbGllbnQgUXVldWVkIFNwaW4gTG9jayBTbG93IFBhdGgqKgoKT2theSwgc28gSSYjMzk7dmUgZm91bmQgYSBwcm9taXNpbmcgdGFyZ2V0OiB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbi4gSXQmIzM5O3MgcmlnaHQgdGhlcmUsIGV4cG9ydGVkLCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgY29yZSBCUEYgbG9ja2luZyBtZWNoYW5pc20uIEl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIGFuZCB3ZWxsIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4KCk15IGluaXRpYWwgdGhvdWdodHMgb24gdGhlIGNvbmZpZ3MgbmVlZGVkIHdlcmUgYSBsaXR0bGUgbXVkZGxlZC4gSSBuZWVkZWQgdG8gZW5zdXJlIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBJIGFsc28gdGhvdWdodCBgUVVFVUVEX1NQSU5MT0NLU2Agd2FzIGEgdXNlci1zZXR0YWJsZSBvcHRpb24uIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIHJlYWxpemUgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGFjdHVhbGx5IGEgYGRlZl9ib29sYCwgdGllZCB0byBgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU2AuIEluIG90aGVyIHdvcmRzLCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50LiBTbywgbGlzdGluZyBpdCBtaWdodCBub3QgYmUgcmVsZXZhbnQsIGFuZCBsaXN0aW5nIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbi4KCkhhbmcgb24uLi4gd2hhdCBhYm91dCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgKmFsc28qIG5vdCBhIGRpcmVjdCB1c2VyIGNvbmZpZywgaXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gU28gdGhlICpvbmx5KiB0aGluZyBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIGlzIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGJlZm9yZSBJIGxhdW5jaCBpbnRvIGZ1enppbmcsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJJiMzOTttIG1pc3NpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIENhbGxlcnMgb2YgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBjcml0aWNhbCBmb3IgYW5hbHl6aW5nIHBlcmZvcm1hbmNlLCBkZWJ1Z2dpbmcgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgbWF5YmUgZXZlbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc2xvd3BhdGggaXMgZW50ZXJlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcgaW4uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2gsIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biBpdHMgY2FsbGVycyBwcmV0dHkgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGlzIGNsZWFyIGFuZCBJIGNhbiBuYXJyb3cgZG93biB0aGUgc2VhcmNoLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGZyZXF1ZW50bHkgdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gVGhlIGdvYWwgaGVyZSBpcyBhIGZ1bGwgZGVwZW5kZW5jeSBncmFwaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9NDA9ZXh0ZXJuIGludCByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtNDEtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDo0MjpleHRlcm4gaW50IHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC00My0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD0xNjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTg4LVx0XHRyZXR1cm4gMDtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4OTpcdHJldHVybiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChsb2NrLCB2YWwpO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkwLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyNzA6XHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI3MS1cdCAqIGRldGVjdGlvbiBlbnRyeS4gTm8gbmVlZCB0byBvYnRhaW4gaXQgaGVyZS5cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0zMDU9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHFub2RlLCBycW5vZGVzW19RX01BWF9OT0RFU10pO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMxNDogKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCAtIGFjcXVpcmUgdGhlIHF1ZXVlZCBzcGlubG9ja1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzE1LSAqIEBsb2NrOiBQb2ludGVyIHRvIHF1ZXVlZCBzcGlubG9jayBzdHJ1Y3R1cmVcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMzgtICovXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMzk6aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgocnFzcGlubG9ja190ICpsb2NrLCB1MzIgdmFsKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjYtfVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzX3NwaW5fbG9ja2AgVXNhZ2UqKgoKUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYHJlc19zcGluX2xvY2tgIHdpdGhpbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmhgLiBUaGUgYHJxc3BpbmxvY2suaGAgaGVhZGVyIGZpbGUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZS1hd2FyZSBzcGlubG9ja3MsIHByb2JhYmx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJ1bnF1ZXVlIG1hbmFnZW1lbnQuIFRoYXQgdGVsbHMgbWUgYSBsb3QgYWxyZWFkeSwgYWN0dWFsbHkuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0Ki4gS25vd2luZyB3aGVyZSBgcmVzX3NwaW5fbG9ja2AgaXMgdXNlZCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBncmVwLCBgY3Njb3BlYC4uLiB3aGF0ZXZlciYjMzk7cyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBjb2RlYmFzZSAtIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGByZXNfc3Bpbl9sb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2UgbG9ja3MgYXJlIGJlaW5nIGFjcXVpcmVkIGFuZCB3aGF0IGRhdGEgdGhleSYjMzk7cmUgcHJvdGVjdGluZyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlc2UgcnVucXVldWUgbG9ja3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIHNob3VsZCB0ZWxsIG1lIGFsbCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbHMgdG8gYHJlc19zcGluX2xvY2tgLCBhbmQgd2hhdCBjb250ZXh0IGl0IGlzIGNhbGxlZCBpbi4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzX3NwaW5fbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODY1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD0xOT1zdHJ1Y3QgcnFzcGlubG9jayB7XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjgtICovXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyOTpzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sge1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMzAtXHR1MzIgdmFsO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oPTExMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcmVsZWFzZV9oZWxkX2xvY2tfZW50cnkodm9pZClcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xNjAtLyoqXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoxNjE6ICogcmVzX3NwaW5fbG9jayAtIGFjcXVpcmUgYSBxdWV1ZWQgc3BpbmxvY2tcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE2Mi0gKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTY4LSAqL1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTcwLXtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODAtXHQgKiBcdTAwM2NOTUlcdTAwM2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4MTpcdCAqIHJlc19zcGluX2xvY2soQSkgLS1cdTAwM2UgbWlzc2VkIEFBLCBsZWFkcyB0byB0aW1lb3V0XG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODItXHQgKiBcdTAwM2MvTk1JXHUwMDNlXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkzLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTk0OiNkZWZpbmUgcmVzX3NwaW5fbG9jayhsb2NrKSAoeyBncmFiX2hlbGRfbG9ja19lbnRyeShsb2NrKTsgcmVzaWxpZW50X3Rhc19zcGluX2xvY2sobG9jayk7IH0pXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xOTUtXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTk4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCByZXNfc3Bpbl91bmxvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxMy1cdCAqIFx1MDAzY05NSVx1MDAzZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjE0Olx0ICogcmVzX3NwaW5fbG9jayhBKSAtLVx1MDAzZSBtaXNzZWQgQUEsIGxlYWRzIHRvIHRpbWVvdXRcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxNS1cdCAqIFx1MDAzYy9OTUlcdTAwM2Vcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjQtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyMjU6I2RlZmluZSByYXdfcmVzX3NwaW5fbG9ja19pbml0KGxvY2spICh7ICoobG9jaykgPSAocnFzcGlubG9ja190KV9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7IH0pXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjYtI2Vsc2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIyNzojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2luaXQobG9jaykgKHsgKihsb2NrKSA9IChycXNwaW5sb2NrX3QpezB9OyB9KVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjI4LSNlbmRpZlxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjI5LVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjMwOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2sobG9jaykgICAgICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzEtXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzMtXHRcdHByZWVtcHRfZGlzYWJsZSgpOyAgICAgICAgICAgICAgICAgXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIzNDpcdFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spO1x0ICAgXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIzNS1cdFx0aWYgKF9fcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0MS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjI0MjojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDMtXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0Ni1cdFx0cHJlZW1wdF9kaXNhYmxlKCk7ICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyNDc6XHRcdF9fcmV0ID0gcmVzX3NwaW5fbG9jayhsb2NrKTsgICAgICBcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjQ4LVx0XHRpZiAoX19yZXQpIHsgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI2MT1zdHJ1Y3QgYnRmX3JlY29yZCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yNjQtXHRpbnQgc3Bpbl9sb2NrX29mZjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY1Olx0aW50IHJlc19zcGluX2xvY2tfb2ZmO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNjYtXHRpbnQgdGltZXJfb2ZmO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNTEtXHRjYXNlIEJQRl9SRVNfU1BJTl9MT0NLOlxuaW5jbHVkZS9saW51eC9icGYuaDozNTI6XHRcdHJldHVybiBcJiMzNDticGZfcmVzX3NwaW5fbG9ja1wmIzM0OztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUzLVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTMtXHRjYXNlIEJQRl9SRVNfU1BJTl9MT0NLOlxuaW5jbHVkZS9saW51eC9icGYuaDozOTQ6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzk1LVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDI3LVx0Y2FzZSBCUEZfUkVTX1NQSU5fTE9DSzpcbmluY2x1ZGUvbGludXgvYnBmLmg6NDI4Olx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtNDI5LVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTI2Mj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIwLVx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2V6YXBfbXV0ZXgpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMTpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jLTMyMi1cdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTQ3Mz1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg1LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ4NjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg3LVx0XHQvKiBNYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdG8gYWRkcmVzcyBpbXBvc3NpYmxlIGNhc2UgKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVxua2VybmVsL2JwZi9hcmVuYS5jOjcwMjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAzLVx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04Mzg9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg2Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo4Njc6XHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODY4LVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz05Mjg9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo5NDM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxua2VybmVsL2JwZi9hcmVuYS5jLTk0NC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTYyPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTc1LVxua2VybmVsL2JwZi9hcmVuYS5jOjk3NjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcbmtlcm5lbC9icGYvYXJlbmEuYy05NzctXHRcdHNjaGVkdWxlX3dvcmsod29yayk7XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTI0Mz1zdGF0aWMgaW50IGJwZl9zZWxlbV91bmxpbmtfbWFwKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjU0LVx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgbG9jYWxfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjU1Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNTYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNzA9aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNzktXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjgwOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yODEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zMDA9aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzE4Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NhbF9zdG9yYWdlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zNTA9c3RhdGljIHZvaWQgYnBmX3NlbGVtX3VubGlua19ub2ZhaWwoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjMtXHRcdGIgPSBiID8gOiBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjM2NDpcdFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjUtXHRcdGlmICghZXJyKSB7XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM4NC1cdFx0ICogZGVzdHJveShzZWxlbTEpIHdpbGwgYmUgYWJsZSB0byBmcmVlIHRoZSBzcGVjaWFsIGZpZWxkIGFzc29jaWF0ZWRcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozODU6XHRcdCAqIHdpdGggc2VsZW0xIGFzIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoKSByZXR1cm5zIC1FVElNRURPVVQuXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzg2LVx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzkyLVx0aWYgKGxvY2FsX3N0b3JhZ2UpIHtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozOTM6XHRcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWxfc3RvcmFnZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzk0LVx0XHRpZiAoIWVycikge1xuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz00NDE9dm9pZCBfX2JwZl9sb2NhbF9zdG9yYWdlX2luc2VydF9jYWNoZShzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKmxvY2FsX3N0b3JhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cdCAqL1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjQ1MzpcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWxfc3RvcmFnZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDU0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDc2PWludCBicGZfbG9jYWxfc3RvcmFnZV9hbGxvYyh2b2lkICpvd25lcixcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDk3LVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnN0b3JhZ2UtXHUwMDNlbGlzdCk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDk4Olx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZzdG9yYWdlLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ5OS1cdHN0b3JhZ2UtXHUwMDNlb3duZXIgPSBvd25lcjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNTA1LVx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NTA2Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy01MDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz01NDc9YnBmX2xvY2FsX3N0b3JhZ2VfdXBkYXRlKHZvaWQgKm93bmVyLCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTAtXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NjExOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NhbF9zdG9yYWdlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MzktXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NjQwOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGJfZmxhZ3MpO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTY0MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc5OS1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNtYXAtXHUwMDNlYnVja2V0c1tpXS5saXN0KTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo4MDA6XHRcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW2ldLmxvY2spO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTgwMS1cdH1cbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTI5Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfcHVzaF9mcmVlKHN0cnVjdCBicGZfbHJ1X2xpc3QgKmwsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMDMtXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjMwNDpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmwtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTMwNS1cdFx0V1JJVEVfT05DRShub2RlLVx1MDAzZXBlbmRpbmdfZnJlZSwgMSk7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz0zMTI9c3RhdGljIHZvaWQgYnBmX2xydV9saXN0X3BvcF9mcmVlX3RvX2xvY2FsKHN0cnVjdCBicGZfbHJ1ICpscnUsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMTktXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjMyMDpcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZsLVx1MDAzZWxvY2spKVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMjEtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTQwMz1zdGF0aWMgc3RydWN0IGJwZl9scnVfbm9kZSAqYnBmX3BlcmNwdV9scnVfcG9wX2ZyZWUoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxMy1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDE0Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bC1cdTAwM2Vsb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MzY9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9jb21tb25fbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy00NDctXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQ0ODpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmxvY19sLVx1MDAzZWxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDQ5LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ4Mi1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDgzOlx0XHRpZiAoIXJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3RlYWxfbG9jX2wtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ4NC1cdFx0XHRub2RlID0gX19sb2NhbF9saXN0X3BvcF9mcmVlKHN0ZWFsX2xvY19sKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5Ny1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDk4Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jX2wtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5OS1cdFx0Lypcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTUyNT1zdGF0aWMgdm9pZCBicGZfY29tbW9uX2xydV9wdXNoX2ZyZWUoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTUzOS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NTQwOlx0XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NfbC1cdTAwM2Vsb2NrLCBmbGFncykpIHtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTQxLVx0XHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VwZW5kaW5nX2ZyZWUsIDEpO1xuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NTY1PXN0YXRpYyB2b2lkIGJwZl9wZXJjcHVfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTcyLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo1NzM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsLVx1MDAzZWxvY2ssIGZsYWdzKSkge1xua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy01NzQtXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VwZW5kaW5nX2ZyZWUsIDEpO1xuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NjU2PXN0YXRpYyB2b2lkIGJwZl9scnVfbG9jYWxsaXN0X2luaXQoc3RydWN0IGJwZl9scnVfbG9jYWxsaXN0ICpsb2NfbCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY2Mi1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjYzOlx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZsb2NfbC1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjY0LX1cbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjc3LVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2Nzg6XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNmwtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY3OS19XG4tLVxua2VybmVsL2JwZi9idGYuYz0zNjU1PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTM2NjMtXHRcdHsgQlBGX1NQSU5fTE9DSywgXCYjMzQ7YnBmX3NwaW5fbG9ja1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYzozNjY0Olx0XHR7IEJQRl9SRVNfU1BJTl9MT0NLLCBcJiMzNDticGZfcmVzX3NwaW5fbG9ja1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYy0zNjY1LVx0XHR7IEJQRl9USU1FUiwgXCYjMzQ7YnBmX3RpbWVyXCYjMzQ7LCB0cnVlIH0sXG4tLVxua2VybmVsL2JwZi9idGYuYz00MTE4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDE0MC1cdHJlYy1cdTAwM2VzcGluX2xvY2tfb2ZmID0gLUVJTlZBTDtcbmtlcm5lbC9icGYvYnRmLmM6NDE0MTpcdHJlYy1cdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiA9IC1FSU5WQUw7XG5rZXJuZWwvYnBmL2J0Zi5jLTQxNDItXHRyZWMtXHUwMDNldGltZXJfb2ZmID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzItXHRcdFx0LyogQ2FjaGUgb2Zmc2V0IGZvciBmYXN0ZXIgbG9va3VwIGF0IHJ1bnRpbWUgKi9cbmtlcm5lbC9icGYvYnRmLmM6NDE3MzpcdFx0XHRyZWMtXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgPSByZWMtXHUwMDNlZmllbGRzW2ldLm9mZnNldDtcbmtlcm5lbC9icGYvYnRmLmMtNDE3NC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjEtXG5rZXJuZWwvYnBmL2J0Zi5jOjQyMjI6XHRpZiAocmVjLVx1MDAzZXNwaW5fbG9ja19vZmYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZWMtXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgXHUwMDNlPSAwKSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjMtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9idGYuYy00MjI5LVx0ICAgICBidGZfcmVjb3JkX2hhc19maWVsZChyZWMsIEJQRl9SQl9ST09UKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2J0Zi5jOjQyMzA6XHRcdCAocmVjLVx1MDAzZXNwaW5fbG9ja19vZmYgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJlYy1cdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiBcdTAwM2MgMCkpIHtcbmtlcm5lbC9icGYvYnRmLmMtNDIzMS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzk9c3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE0NC1cdFx0SU5JVF9ITElTVF9OVUxMU19IRUFEKFx1MDAyNmh0YWItXHUwMDNlYnVja2V0c1tpXS5oZWFkLCBpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE0NTpcdFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbaV0ucmF3X2xvY2spO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ2LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNTA9c3RhdGljIGlubGluZSBpbnQgaHRhYl9sb2NrX2J1Y2tldChzdHJ1Y3QgYnVja2V0ICpiLCB1bnNpZ25lZCBsb25nICpwZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTU1Olx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZXJhd19sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTYtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz0zMjI9c3RhdGljIGxvbmcgdHJpZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0zNDUtXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MzQ2Olx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cmllLVx1MDAzZWxvY2ssIGlycV9mbGFncyk7XG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ3LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NDU3PXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDcxLVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ3MjpcdHJldCA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHJpZS1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xua2VybmVsL2JwZi9scG1fdHJpZS5jLTQ3My1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTU3MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnRyaWVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU5Ny1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo1OTg6XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNnRyaWUtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTk5LVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM9Nj1pbnQgcGNwdV9mcmVlbGlzdF9pbml0KHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzKVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTYtXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jOjE3Olx0XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNmhlYWQtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTE4LVx0XHRoZWFkLVx1MDAzZWZpcnN0ID0gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTM1PXN0YXRpYyBpbmxpbmUgYm9vbCBfX19wY3B1X2ZyZWVsaXN0X3B1c2goc3RydWN0IHBjcHVfZnJlZWxpc3RfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTM3LXtcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM6Mzg6XHRpZiAocmF3X3Jlc19zcGluX2xvY2soXHUwMDI2aGVhZC1cdTAwM2Vsb2NrKSlcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMzktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTQ1PXZvaWQgX19wY3B1X2ZyZWVsaXN0X3B1c2goc3RydWN0IHBjcHVfZnJlZWxpc3QgKnMsXG4tLVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy01OC1cdFx0XHRoZWFkID0gcGVyX2NwdV9wdHIocy1cdTAwM2VmcmVlbGlzdCwgY3B1KTtcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM6NTk6XHRcdFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlbG9jaykpXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTYwLVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYz0xMDA9c3RhdGljIHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgKl9fX3BjcHVfZnJlZWxpc3RfcG9wKHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzKVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTA5LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzoxMTA6XHRcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZoZWFkLVx1MDAzZWxvY2spKVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy0xMTEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtODEtXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo4MjpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cXMtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy04My1cbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz05NT1zdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTEwMS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEwMjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnFzLVx1MDAzZWxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTEwMy1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz0xMjU9c3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzItXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxMzM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcy1cdTAwM2Vsb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzQtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9MTgyPXN0YXRpYyBsb25nIHF1ZXVlX3N0YWNrX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTk4LVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTk5Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cXMtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKSlcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTIwMC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL3JpbmdidWYuYz0xNzI9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUsIGJvb2wgb3ZlcndyaXRlX21vZGUpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTc5LVxua2VybmVsL2JwZi9yaW5nYnVmLmM6MTgwOlx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZyYi1cdTAwM2VzcGlubG9jayk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xODEtXHRhdG9taWNfc2V0KFx1MDAyNnJiLVx1MDAzZWJ1c3ksIDApO1xuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTQ2Mz1zdGF0aWMgdm9pZCAqX19icGZfcmluZ2J1Zl9yZXNlcnZlKHN0cnVjdCBicGZfcmluZ2J1ZiAqcmIsIHU2NCBzaXplKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTQ3Ny1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjQ3ODpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJiLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL3JpbmdidWYuYy00NzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTI2MT1pbnQgX19sb2NrZnVuYyByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY3LVx0Lypcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI2ODpcdCAqIFdlIGFyZSBlaXRoZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gcmVzX3NwaW5fbG9jayBhZnRlciBncmFiYmluZyB0aGVcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjczPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODItXHRicGZfc3RyZWFtX3N0YWdlKHNzLCBwcm9nLCBCUEZfU1RERVJSLCAoe1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlx0XHRicGZfc3RyZWFtX3ByaW50ayhzcywgXCYjMzQ7RVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxuXCYjMzQ7LCBzdHIsIGlycXNhdmUgPyBcJiMzNDtfaXJxc2F2ZVwmIzM0OyA6IFwmIzM0O1wmIzM0Oyk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODQtXHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtBdHRlbXB0ZWQgbG9jayAgID0gMHglcHhcXG5cJiMzNDssIGxvY2spO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5My1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY5NDpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2soc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTctXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJxc3BpbmxvY2tfdCkgIT0gc2l6ZW9mKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jaykpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzAwLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MDE6XHRyZXQgPSByZXNfc3Bpbl9sb2NrKChycXNwaW5sb2NrX3QgKilsb2NrKTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcwMi1cdGlmICh1bmxpa2VseShyZXQpKSB7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzA5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNy17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzIzLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzI0Olx0cmV0ID0gcmVzX3NwaW5fbG9jaygocnFzcGlubG9ja190ICopbG9jayk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MjUtXHRpZiAodW5saWtlbHkocmV0KSkge1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNC1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjczNTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNi17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NzQ3PUJURl9LRlVOQ1NfU1RBUlQocnFzcGlubG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9jaylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc1MDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSwgS0ZfUkVUX05VTEwpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njk3Nj1zdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzAxMy1cdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDE0Olx0c3Bpbl9sb2NrX29mZiA9IGlzX3Jlc19sb2NrID8gcmVjLVx1MDAzZXJlc19zcGluX2xvY2tfb2ZmIDogcmVjLVx1MDAzZXNwaW5fbG9ja19vZmY7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzAxNS1cdGlmIChzcGluX2xvY2tfb2ZmICE9IHZhbCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgyMz1CVEZfSUQoc3RydWN0LCBicGZfd3EpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4MjQ6QlRGX0lEKHN0cnVjdCwgYnBmX3Jlc19zcGluX2xvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4MjUtQlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4ODE9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4ODY6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODcte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTAwND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDU5LVx0S0ZfYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjA6XHRLRl9icGZfcmVzX3NwaW5fbG9jayxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA2MS1cdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjI6XHRLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYzLVx0S0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTItI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNTM6QlRGX0lEKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTU1OkJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU2LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjU4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzMwOlx0aWYgKGlzX2tmdW5jX2FyZ19yZXNfc3Bpbl9sb2NrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzMxLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQzMz1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MzktXHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbG9jYWxfaXJxX3NhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0NDA6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQxLVx0XHRpcnFfc2F2ZSA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0NDI6XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQzLVx0XHRcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjMyPXN0YXRpYyBib29sIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MzgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2Mzk6c3RhdGljIGJvb2wgaXNfYnBmX3Jlc19zcGluX2xvY2tfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NDE6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0Mi1cdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NDM6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjQ0LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NjA9c3RhdGljIGJvb2wga2Z1bmNfc3Bpbl9hbGxvd2VkKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYyLVx0cmV0dXJuIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmMoYnRmX2lkKSB8fCBpc19icGZfaXRlcl9udW1fYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY2MzpcdCAgICAgICBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhidGZfaWQpIHx8IGlzX2JwZl9hcmVuYV9rZnVuYyhidGZfaWQpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjQtXHQgICAgICAgaXNfYnBmX3N0cmVhbV9rZnVuYyhidGZfaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkyOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ5OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMDpcdFx0XHRpZiAoIWlzX2JwZl9yZXNfc3Bpbl9sb2NrX2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDEtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMjpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMzpcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUwNC1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfU1BJTl9MT0NLO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTA1Olx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDYtXHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NDQtXHRpZiAoIWluc24tXHUwMDNlb2ZmIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTQ1Olx0ICAgIChpbnNuLVx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NDY6XHQgICAgIGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk0Ny1cdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYnJhbmNoO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MS1cdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDI6XHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDM6XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0NC1cdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9MzcwPXN0YXRpYyBpbnQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9jayhpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zNzEte1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozNzI6XHRyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZycXNwaW5sb2NrKTtcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtMzczLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz0zNzY9c3RhdGljIHZvaWQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfdW5sb2NrKGludCB0aWQgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODAtXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM4MTpzdGF0aWMgc3RydWN0IGxvY2tfdG9ydHVyZV9vcHMgcmF3X3Jlc19zcGluX2xvY2tfb3BzID0ge1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODItXHQud3JpdGVsb2NrXHQ9IHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX2xvY2ssXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODgtXHQucmVhZHVubG9jayAgICAgPSBOVUxMLFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozODk6XHQubmFtZVx0XHQ9IFwmIzM0O3Jhd19yZXNfc3Bpbl9sb2NrXCYjMzQ7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5MC19O1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9MzkyPXN0YXRpYyBpbnQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9ja19pcnEoaW50IHRpZCBfX21heWJlX3VudXNlZClcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5NS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM6Mzk2Olx0cmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5Ny1cdGN4dC5jdXJfb3BzLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz00MDE9c3RhdGljIHZvaWQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfdW5sb2NrX2lycShpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtNDA1LVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzo0MDY6c3RhdGljIHN0cnVjdCBsb2NrX3RvcnR1cmVfb3BzIHJhd19yZXNfc3Bpbl9sb2NrX2lycV9vcHMgPSB7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNy1cdC53cml0ZWxvY2tcdD0gdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9ja19pcnEsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTcGluIExvY2sgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLCBib3RoIG9mIHdoaWNoIGFyZSwgb2YgY291cnNlLCBCUEYga2Z1bmNzLiBJdCYjMzk7cyBhbHNvIHV0aWxpemVkIGJ5IGByYXdfcmVzX3NwaW5fbG9ja2AsIGFuZCB0aGF0JiMzOTtzIHVzZWQgYWNyb3NzIHRoZSBCUEYgY29kZWJhc2Ug4oCTIGFyZW5hIG1hbmFnZW1lbnQsIGxvY2FsIHN0b3JhZ2UsIHRoZSBMUlUgbGlzdCwgYWxsIG9mIGl0LiBHaXZlbiB0aGF0IHdpZGVzcHJlYWQgdXNhZ2UsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHN5c2NhbGxzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgYGJwZl9yZXNfc3Bpbl9sb2NrYCwgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAgYXJlbiYjMzk7dCBleHBvcnRlZCBhcyBzdGFuZGFyZCBmdW5jdGlvbnMsIGJ1dCBhcmUgZGVmaW5lZCBwdXJlbHkgYXMga2Z1bmNzLiAqQ2hlY2tzIGludGVybmFsIGRvY3VtZW50YXRpb24qIFllcywgdGhleSBhcmUgaW5kZWVkIGtmdW5jcy4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4Mi1cdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2ODM6XHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtFUlJPUjogJXMgZm9yIGJwZl9yZXNfc3Bpbl9sb2NrJXNcXG5cJiMzNDssIHN0ciwgaXJxc2F2ZSA/IFwmIzM0O19pcnFzYXZlXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cdFx0YnBmX3N0cmVhbV9wcmludGsoc3MsIFwmIzM0O0F0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcblwmIzM0OywgbG9jayk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjkzLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTUte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY5ODpcdEJVSUxEX0JVR19PTihzaXplb2YocnFzcGlubG9ja190KSAhPSBzaXplb2Yoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKSk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzA5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNy17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM0LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzM1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3NfX2lycV9mbGFnKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM2LXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NDc9QlRGX0tGVU5DU19TVEFSVChycXNwaW5sb2NrX2tmdW5jX2lkcylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0ODpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ5LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzUwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc1MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFNwaW4gTG9ja3MgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgc3BpbiBsb2NrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBicGZfcmVzX3NwaW5fbG9ja2AgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyB0byBpbmNsdWRlIGluIGBGb2N1c1N5bWJvbHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCk5vdywgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcGxheSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGlzIHRoYXQgKmFsbCo/IEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgZGlnIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXMgY29kZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHBpZWNlcyBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDIKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBTcGlubG9jayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGBCUEZfU1lTQ0FMTGAsIG5vdGhpbmcgdG9vIG9ic2N1cmUuIExldCYjMzk7cyBzdGFydCBieSBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gUmlnaHQsIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AgaXMgc2VsZWN0ZWQgYnkgYEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NgLiBHb29kLCBnb29kLCB3ZSBjYW4ganVzdCBmb2N1cyBvbiBgQlBGX1NZU0NBTExgIHRoZW4uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgYSBkZWFkbG9jayBzY2VuYXJpby4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBmaXggYWRkcmVzc2VzIGEgYnVnIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgbm93LCBjaGFuZ2luZyB0aGUgbG9naWMgd2hlcmUgaXQmIzM5O3MgaGFuZGxpbmcgYEVERUFETEtgLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHF1ZXVlIGRlc3RydWN0aW9uIG9uIGRlYWRsb2NrLCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgLgoKVGhpcyBsb29rcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgY2FsbGVkLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24uIEFuZCB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIHNwaW5sb2NrIGdldHMgdXNlZCBieSBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAga2Z1bmNzLCBhbmQgYnkgQlBGIG1hcHMgaW50ZXJuYWxseS4gVGhpcyBpcyBhbiBhcmVhIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoJiMzNDssCiAgICAmIzM0O2JwZl9yZXNfc3Bpbl9sb2NrJiMzNDssCiAgICAmIzM0O2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCYjMzQ7LAogICAgJiMzNDticGZfcmVzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDticGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFkbG9jayBoYW5kbGluZyBsb2dpYyBpbiBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB1c2luZyBgYnBmX3Jlc19zcGluX2xvY2tgIGtmdW5jcywgYXMgd2VsbCBhcyBpbnRlcm5hbGx5IGJ5IHZhcmlvdXMgQlBGIG1hcHMuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTozNS40MjAzODUwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjE2NTI3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6MzUuNDIwMzkyMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjA1NjkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNmQyNjdkMDNmOGFmOTMyZjliMTQyM2FiMDE2ZWY1NTZhZTIzYmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxNjozOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXFxuaW5kZXggZTRlMzM4Y2RiNDM3Yy4uMjEyOWRlZmM0YTlhNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xcbisrKyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXFxuQEAgLTU3Miw5ICs1NzIsMTAgQEAgaW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgocnFzcGlubG9ja190ICpsb2NrLCB1MzIgdmFsKVxcbiBcXG4gXFx0LyogRGlzYWJsZSBxdWV1ZSBkZXN0cnVjdGlvbiB3aGVuIHdlIGRldGVjdCBkZWFkbG9ja3MuICovXFxuIFxcdGlmIChyZXQgPT0gLUVERUFETEspIHtcXG4tXFx0XFx0aWYgKCFuZXh0KVxcbitcXHRcXHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcXG4gXFx0XFx0XFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcXHUwMDI2bm9kZS1cXHUwMDNlbmV4dCwgKFZBTCkpO1xcbi1cXHRcXHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXFx1MDAyNm5leHQtXFx1MDAzZWxvY2tlZCk7XFxuK1xcdFxcdFxcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcXHUwMDI2bmV4dC1cXHUwMDNlbG9ja2VkKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjM1Ljk4MzYwNDI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0MDUzMjkxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG5pbmRleCBlNGUzMzhjZGI0MzdjLi4yMTI5ZGVmYzRhOWE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcbisrKyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG5AQCAtNTcyLDkgKzU3MiwxMCBAQCBpbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXG4gXG4gXHQvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi9cbiBcdGlmIChyZXQgPT0gLUVERUFETEspIHtcbi1cdFx0aWYgKCFuZXh0KVxuK1x0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiBcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuLVx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuK1x0XHRcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcdTAwMjZuZXh0LVx1MDAzZWxvY2tlZCk7XG4rXHRcdH1cbiBcdFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6MzUuOTgzNjA2Njg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc2MTYyODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgU3BpbmxvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBpdCdzIGEgdmVyeSBzcGVjaWZpYyBhcmVhLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYgaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2UgbG9vay4gVGhlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBiZSB0YXJnZXRpbmcgdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gaXMgbmVjZXNzYXJ5LlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjb2RlIHNuaXBwZXQgaXRzZWxmLiBUaGV5J3ZlIGludHJvZHVjZWQgYSBjb25kaXRpb25hbCB3aXRoaW4gdGhlIGRlYWRsb2NrIGhhbmRsaW5nIChgLUVERUFETEtgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBpbXByb3ZlIGhvdyB0aGUgbG9jayBiZWhhdmVzIHdoZW4gYSBkZWFkbG9jayBpcyBkZXRlY3RlZC4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNoZWNrZWQgYGlmICghbmV4dClgLiBOb3csIHRoZXkndmUgcmVwbGFjZWQgdGhhdCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgIGNhbGwgYW5kIHRoZW4gdGhlIGBhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWRgIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgdW5jb25kaXRpb25hbGx5LiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBtb3JlIHJvYnVzdCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIGNvbnRlbmRlZCBzcGlubG9jayB1bmxvY2tpbmcgaW4gdGhlIHByZXNlbmNlIG9mIGRlYWRsb2Nrcy4gVGhlIGB0cnlfY21weGNoZ190YWlsYCBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgdGFpbCBvZiB0aGUgbG9jayBxdWV1ZSwgd2hpY2ggd291bGQgbWFrZSBzZW5zZS5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgc3BpbmxvY2sgaXRzZWxmLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gQlBGLiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0byBiZSBhY3RpdmU/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIGBycXNwaW5sb2NrLmNgIG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBzaWRlIGVmZmVjdHMgaW4gdGhlIEJQRiBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQzLjc0NTI2OTA4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1NDc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcXHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNzEtXFx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MzA1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMTQ6ICogcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGggLSBhY3F1aXJlIHRoZSBxdWV1ZWQgc3BpbmxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzM4LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQzLjkwNDgyMjczN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTIzODA3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgQlBGIFNwaW5sb2NrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkIG9mIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IHNwZWNpZmljIGZpbGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGlzIHRvIGV4YW1pbmUgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucywgaWYgYW55LCBkaXJlY3RseSBpbmZsdWVuY2UgaXRzIGluY2x1c2lvbiwgb3IgaWYgaXQncyBpbmRpcmVjdGx5IGNvbnRyb2xsZWQgdGhyb3VnaCBzb21lIGJyb2FkZXIgQlBGIG9yIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyB1c2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQ5Ljg5NzIwNzAzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3NTE0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnFzcGlubG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NzU9Q0ZMQUdTX1JFTU9WRV9yaW5nYnVmLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjc2OkNGTEFHU19SRU1PVkVfcnFzcGlubG9jay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjUwLjEzODk2NjM4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQzNTI1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIGZ1bmN0aW9uIGlzIGludm9sdmVkLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBvYnZpb3VzIG9uZS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIGh1bnQgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9yIHVzYWdlIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGZ1cnRoZXIgcmVmaW5lIHRoZSBjb21waWxhdGlvbiBvciBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLCBiZXNpZGVzIGp1c3QgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLiBGaW5kaW5nIHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBhY3RpdmF0aW9uIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTo1NC41MjMzMjI0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzNzU5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvcnFzcGlubG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI1LSNpbmNsdWRlIFxcdTAwM2Nhc20vYnl0ZW9yZGVyLmhcXHUwMDNlXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjctI2luY2x1ZGUgXFx1MDAzY2FzbS9xc3BpbmxvY2suaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTM1LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjM2OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTM3LSNpbmNsdWRlIFxcXCIuLi9sb2NraW5nL3FzcGlubG9jay5oXFxcIlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9Mjk1PUVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTYtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Mjk3OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6NTQuNzI1Nzg5NDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NTY2NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNwaW5sb2NrIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgZGVtYW5kaW5nIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBga2VybmVsL2JwZi9ycXNwaW5sb2NrLmNgLCBhbmQgSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMjk3LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNoZWNrIGxpa2UgdGhpcyByZXNpZGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGFjdHVhbCBkZXBlbmRlbmN5IGNoZWNrIG9yIGltcGxlbWVudGF0aW9uIHRoYXQncyB0cmlnZ2VyZWQgd2hlbiB0aGUgQ09ORklHIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjU4LjExMTQ2MDEzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjkxOlxcdG91dDpcXG4gMjkyOlxcdFxcdHJlbGVhc2VfaGVsZF9sb2NrX2VudHJ5KCk7XFxuIDI5MzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTQ6XFx0fVxcbiAyOTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocmVzaWxpZW50X3Rhc19zcGluX2xvY2spO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHQjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NcXG4gMjk4OlxcdFxcbiAyOTk6XFx0LypcXG4gMzAwOlxcdCAqIFBlci1DUFUgcXVldWUgbm9kZSBzdHJ1Y3R1cmVzOyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNCBuZXN0ZWRcXG4gMzAxOlxcdCAqIGNvbnRleHRzOiB0YXNrLCBzb2Z0aXJxLCBoYXJkaXJxLCBubWkuXFxuIDMwMjpcXHQgKlxcbiAzMDM6XFx0ICogRXhhY3RseSBmaXRzIG9uZSA2NC1ieXRlIGNhY2hlbGluZSBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuXFxuIDMwNDpcXHQgKi9cXG4gMzA1OlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0I2lmbmRlZiByZXNfc21wX2NvbmRfbG9hZF9hY3F1aXJlXFxuIDMwODpcXHQjZGVmaW5lIHJlc19zbXBfY29uZF9sb2FkX2FjcXVpcmUodiwgYykgc21wX2NvbmRfbG9hZF9hY3F1aXJlKHYsIGMpXFxuIDMwOTpcXHQjZW5kaWZcXG4gMzEwOlxcdFxcbiAzMTE6XFx0I2RlZmluZSByZXNfYXRvbWljX2NvbmRfcmVhZF9hY3F1aXJlKHYsIGMpIHJlc19zbXBfY29uZF9sb2FkX2FjcXVpcmUoXFx1MDAyNih2KS1cXHUwMDNlY291bnRlciwgKGMpKVxcbiAzMTI6XFx0XFxuIDMxMzpcXHQvKipcXG4gMzE0OlxcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXFxuIDMxNTpcXHQgKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXFxuIDMxNjpcXHQgKiBAdmFsOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBxdWV1ZWQgc3BpbmxvY2sgMzItYml0IHdvcmRcXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBSZXR1cm46XFxuIDMxOTpcXHQgKiAqIDBcXHRcXHQtIExvY2sgd2FzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseS5cXG4gMzIwOlxcdCAqICogLUVERUFETEtcXHQtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgQUEvQUJCQSBkZWFkbG9jay5cXG4gMzIxOlxcdCAqICogLUVUSU1FRE9VVCAtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgdGltZW91dC5cXG4gMzIyOlxcdCAqXFxuIDMyMzpcXHQgKiAocXVldWUgdGFpbCwgcGVuZGluZyBiaXQsIGxvY2sgdmFsdWUpXFxuIDMyNDpcXHQgKlxcbiAzMjU6XFx0ICogICAgICAgICAgICAgIGZhc3QgICAgIDogICAgc2xvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIHVubG9ja1xcbiAzMjY6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XFxuIDMyNzpcXHQgKiB1bmNvbnRlbmRlZCAgKDAsMCwwKSAtOi0tXFx1MDAzZSAoMCwwLDEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTotLVxcdTAwM2UgKCosKiwwKVxcbiAzMjg6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0tLS0tLS0uLS0tLS0tLiAgICAgICAgICAgICAvICA6XFxuIDMyOTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICBcXFxcICAgICAgXFxcXCAgICAgICAgICAgIHwgIDpcXG4gMzMwOlxcdCAqIHBlbmRpbmcgICAgICAgICAgICAgICA6ICAgICgwLDEsMSkgKy0tXFx1MDAzZSAoMCwxLDApICAgXFxcXCAgICAgICAgICAgfCAgOlxcbiAzMzE6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0nICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICA6XFxuIDMzMjpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgIDpcXG4gMzMzOlxcdCAqIHVuY29udGVuZGVkICAgICAgICAgICA6ICAgIChuLHgseSkgKy0tXFx1MDAzZSAobiwwLDApIC0tJyAgICAgICAgICAgfCAgOlxcbiAzMzQ6XFx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XFxuIDMzNTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDpcXG4gMzM2OlxcdCAqIGNvbnRlbmRlZCAgICAgICAgICAgICA6ICAgICgqLHgseSkgKy0tXFx1MDAzZSAoKiwwLDApIC0tLVxcdTAwM2UgKCosMCwxKSAtJyAgOlxcbiAzMzc6XFx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgICBeLS0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XFxuIDMzODpcXHQgKi9cXG4gMzM5OlxcdGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdHN0cnVjdCBtY3Nfc3BpbmxvY2sgKnByZXYsICpuZXh0LCAqbm9kZTtcXG4gMzQyOlxcdFxcdHN0cnVjdCBycXNwaW5sb2NrX3RpbWVvdXQgdHM7XFxuIDM0MzpcXHRcXHRpbnQgaWR4LCByZXQgPSAwO1xcbiAzNDQ6XFx0XFx0dTMyIG9sZCwgdGFpbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0QlVJTERfQlVHX09OKENPTkZJR19OUl9DUFVTIFxcdTAwM2U9ICgxVSBcXHUwMDNjXFx1MDAzYyBfUV9UQUlMX0NQVV9CSVRTKSk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGlmIChyZXNpbGllbnRfdmlydF9zcGluX2xvY2tfZW5hYmxlZCgpKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuIHJlc2lsaWVudF92aXJ0X3NwaW5fbG9jayhsb2NrKTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0UkVTX0lOSVRfVElNRU9VVCh0cyk7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdC8qXFxuIDM1NDpcXHRcXHQgKiBXYWl0IGZvciBpbi1wcm9ncmVzcyBwZW5kaW5nLVxcdTAwM2Vsb2NrZWQgaGFuZC1vdmVycyB3aXRoIGEgYm91bmRlZFxcbiAzNTU6XFx0XFx0ICogbnVtYmVyIG9mIHNwaW5zIHNvIHRoYXQgd2UgZ3VhcmFudGVlIGZvcndhcmQgcHJvZ3Jlc3MuXFxuIDM1NjpcXHRcXHQgKlxcbiAzNTc6XFx0XFx0ICogMCwxLDAgLVxcdTAwM2UgMCwwLDFcXG4gMzU4OlxcdFxcdCAqL1xcbiAzNTk6XFx0XFx0aWYgKHZhbCA9PSBfUV9QRU5ESU5HX1ZBTCkge1xcbiAzNjA6XFx0XFx0XFx0aW50IGNudCA9IF9RX1BFTkRJTkdfTE9PUFM7XFxuIDM2MTpcXHRcXHRcXHR2YWwgPSBhdG9taWNfY29uZF9yZWFkX3JlbGF4ZWQoXFx1MDAyNmxvY2stXFx1MDAzZXZhbCxcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAoVkFMICE9IF9RX1BFTkRJTkdfVkFMKSB8fCAhY250LS0pO1xcbiAzNjM6XFx0XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHQvKlxcbiAzNjY6XFx0XFx0ICogSWYgd2Ugb2JzZXJ2ZSBhbnkgY29udGVudGlvbjsgcXVldWUuXFxuIDM2NzpcXHRcXHQgKi9cXG4gMzY4OlxcdFxcdGlmICh2YWwgXFx1MDAyNiB+X1FfTE9DS0VEX01BU0spXFxuIDM2OTpcXHRcXHRcXHRnb3RvIHF1ZXVlO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHQvKlxcbiAzNzI6XFx0XFx0ICogdHJ5bG9jayB8fCBwZW5kaW5nXFxuIDM3MzpcXHRcXHQgKlxcbiAzNzQ6XFx0XFx0ICogMCwwLCogLVxcdTAwM2UgMCwxLCogLVxcdTAwM2UgMCwwLDEgcGVuZGluZywgdHJ5bG9ja1xcbiAzNzU6XFx0XFx0ICovXFxuIDM3NjpcXHRcXHR2YWwgPSBxdWV1ZWRfZmV0Y2hfc2V0X3BlbmRpbmdfYWNxdWlyZShsb2NrKTtcXG4gMzc3OlxcdFxcbiAzNzg6XFx0XFx0LypcXG4gMzc5OlxcdFxcdCAqIElmIHdlIG9ic2VydmUgY29udGVudGlvbiwgdGhlcmUgaXMgYSBjb25jdXJyZW50IGxvY2tlci5cXG4gMzgwOlxcdFxcdCAqXFxuIDM4MTpcXHRcXHQgKiBVbmRvIGFuZCBxdWV1ZTsgb3VyIHNldHRpbmcgb2YgUEVORElORyBtaWdodCBoYXZlIG1hZGUgdGhlXFxuIDM4MjpcXHRcXHQgKiBuLDAsMCAtXFx1MDAzZSAwLDAsMCB0cmFuc2l0aW9uIGZhaWwgYW5kIGl0IHdpbGwgbm93IGJlIHdhaXRpbmdcXG4gMzgzOlxcdFxcdCAqIG9uIEBuZXh0IHRvIGJlY29tZSAhTlVMTC5cXG4gMzg0OlxcdFxcdCAqL1xcbiAzODU6XFx0XFx0aWYgKHVubGlrZWx5KHZhbCBcXHUwMDI2IH5fUV9MT0NLRURfTUFTSykpIHtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0XFx0LyogVW5kbyBQRU5ESU5HIGlmIHdlIHNldCBpdC4gKi9cXG4gMzg4OlxcdFxcdFxcdGlmICghKHZhbCBcXHUwMDI2IF9RX1BFTkRJTkdfTUFTSykpXFxuIDM4OTpcXHRcXHRcXHRcXHRjbGVhcl9wZW5kaW5nKGxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTo1OC4xMTE2ODk1NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0ODkwNDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipBbmFseXppbmcgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCoqXG5cblJpZ2h0LCBzbyB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgbmVzdGxlZCBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGJsb2NrLiAgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSwgb2YgY291cnNlLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyByZWxldmFuY2UuICBJcyBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gYXQgcGxheSBoZXJlLCBvciBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgb25lcz8gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhpczsga25vd2luZyBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rIHdvdWxkIGJlIGVpdGhlciBga2VybmVsL2JwZi9LY29uZmlnYCAoc2luY2Ugd2UgYXJlIGRpc2N1c3NpbmcgdGhlIGtlcm5lbCkgb3IgbWF5YmUgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MDIuOTYwNjAyMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTc4NzYxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVRVVFRF9TUElOTE9DS1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLmxvY2tzPTIzOT1jb25maWcgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xcbi0tXFxua2VybmVsL0tjb25maWcubG9ja3MtMjQxLVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Mjpjb25maWcgUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0My1cXHRkZWZfYm9vbCB5IGlmIEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MDkuNDE4NDg3MDQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQwNDg4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNwaW5sb2NrIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHNwaW5sb2NrcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gSXQgbG9va3MgbGlrZSBgUVVFVUVEX1NQSU5MT0NLU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCAqcHJvdmlkZWQqIGBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTYCBpcyBhbHNvIHNldC4gVGhhdCdzIHRoZSB0eXBpY2FsIGJlaGF2aW9yIEknZCBleHBlY3QuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIHRoYXQgYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYCBpcyBiZWluZyBjb21waWxlZCAqb25seSogd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IHN1Z2dlc3RzIGEgZGlyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgYW5kIHNvbWUgc3BlY2lmaWMgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZSBhbmQgZm9jdXMgb24gYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU3Mi4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgQlBGLXJlbGF0ZWQgc3BpbmxvY2sgaW50ZXJhY3Rpb24gaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQwOjEzLjI5MjUzODkxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHRcXHRcXHRwcmVmZXRjaHcobmV4dCk7XFxuIDU1MTpcXHRcXHR9XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdC8qXFxuIDU1NDpcXHRcXHQgKiB3ZSdyZSBhdCB0aGUgaGVhZCBvZiB0aGUgd2FpdHF1ZXVlLCB3YWl0IGZvciB0aGUgb3duZXIgXFx1MDAyNiBwZW5kaW5nIHRvXFxuIDU1NTpcXHRcXHQgKiBnbyBhd2F5LlxcbiA1NTY6XFx0XFx0ICpcXG4gNTU3OlxcdFxcdCAqICoseCx5IC1cXHUwMDNlICosMCwwXFxuIDU1ODpcXHRcXHQgKlxcbiA1NTk6XFx0XFx0ICogdGhpcyB3YWl0IGxvb3AgbXVzdCB1c2UgYSBsb2FkLWFjcXVpcmUgc3VjaCB0aGF0IHdlIG1hdGNoIHRoZVxcbiA1NjA6XFx0XFx0ICogc3RvcmUtcmVsZWFzZSB0aGF0IGNsZWFycyB0aGUgbG9ja2VkIGJpdCBhbmQgY3JlYXRlIGxvY2tcXG4gNTYxOlxcdFxcdCAqIHNlcXVlbnRpYWxpdHk7IHRoaXMgaXMgYmVjYXVzZSB0aGUgc2V0X2xvY2tlZCgpIGZ1bmN0aW9uIGJlbG93XFxuIDU2MjpcXHRcXHQgKiBkb2VzIG5vdCBpbXBseSBhIGZ1bGwgYmFycmllci5cXG4gNTYzOlxcdFxcdCAqXFxuIDU2NDpcXHRcXHQgKiBXZSB1c2UgUkVTX0RFRl9USU1FT1VUICogMiBhcyB0aGUgZHVyYXRpb24sIGFzIFJFU19ERUZfVElNRU9VVCBpc1xcbiA1NjU6XFx0XFx0ICogbWVhbnQgdG8gc3BhbiBtYXhpbXVtIGFsbG93ZWQgdGltZSBwZXIgY3JpdGljYWwgc2VjdGlvbiwgYW5kIHdlIG1heVxcbiA1NjY6XFx0XFx0ICogaGF2ZSBib3RoIHRoZSBvd25lciBvZiB0aGUgbG9jayBhbmQgdGhlIHBlbmRpbmcgYml0IHdhaXRlciBhaGVhZCBvZlxcbiA1Njc6XFx0XFx0ICogdXMuXFxuIDU2ODpcXHRcXHQgKi9cXG4gNTY5OlxcdFxcdFJFU19SRVNFVF9USU1FT1VUKHRzLCBSRVNfREVGX1RJTUVPVVQgKiAyKTtcXG4gNTcwOlxcdFxcdHZhbCA9IHJlc19hdG9taWNfY29uZF9yZWFkX2FjcXVpcmUoXFx1MDAyNmxvY2stXFx1MDAzZXZhbCwgIShWQUwgXFx1MDAyNiBfUV9MT0NLRURfUEVORElOR19NQVNLKSB8fFxcbiA1NzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgUkVTX0NIRUNLX1RJTUVPVVQodHMsIHJldCwgX1FfTE9DS0VEX1BFTkRJTkdfTUFTSykpO1xcbiA1NzI6XFx0XFxuIDU3MzpcXHRcXHQvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi9cXG4gNTc0OlxcdFxcdGlmIChyZXQgPT0gLUVERUFETEspIHtcXG4gNTc1OlxcdFxcdFxcdGlmICghdHJ5X2NtcHhjaGdfdGFpbChsb2NrLCB0YWlsLCAwKSkge1xcbiA1NzY6XFx0XFx0XFx0XFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcXHUwMDI2bm9kZS1cXHUwMDNlbmV4dCwgKFZBTCkpO1xcbiA1Nzc6XFx0XFx0XFx0XFx0YXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkKFxcdTAwMjZuZXh0LVxcdTAwM2Vsb2NrZWQpO1xcbiA1Nzg6XFx0XFx0XFx0fVxcbiA1Nzk6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xcbiA1ODA6XFx0XFx0fVxcbiA1ODE6XFx0XFxuIDU4MjpcXHR3YWl0cV90aW1lb3V0OlxcbiA1ODM6XFx0XFx0aWYgKHJldCkge1xcbiA1ODQ6XFx0XFx0XFx0LypcXG4gNTg1OlxcdFxcdFxcdCAqIElmIHRoZSB0YWlsIGlzIHN0aWxsIHBvaW50aW5nIHRvIHVzLCB0aGVuIHdlIGFyZSB0aGUgZmluYWwgd2FpdGVyLFxcbiA1ODY6XFx0XFx0XFx0ICogYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgcmVzZXR0aW5nIHRoZSB0YWlsIGJhY2sgdG8gMC4gT3RoZXJ3aXNlLCBpZlxcbiA1ODc6XFx0XFx0XFx0ICogdGhlIGNtcHhjaGcgb3BlcmF0aW9uIGZhaWxzLCB3ZSBzaWduYWwgdGhlIG5leHQgd2FpdGVyIHRvIHRha2UgZXhpdFxcbiA1ODg6XFx0XFx0XFx0ICogYW5kIHRyeSB0aGUgc2FtZS4gRm9yIGEgd2FpdGVyIHdpdGggdGFpbCBub2RlICduJzpcXG4gNTg5OlxcdFxcdFxcdCAqXFxuIDU5MDpcXHRcXHRcXHQgKiBuLCosKiAtXFx1MDAzZSAwLCosKlxcbiA1OTE6XFx0XFx0XFx0ICpcXG4gNTkyOlxcdFxcdFxcdCAqIFdoZW4gcGVyZm9ybWluZyBjbXB4Y2hnIGZvciB0aGUgd2hvbGUgd29yZCAoTlJfQ1BVUyBcXHUwMDNlIDE2ayksIGl0IGlzXFxuIDU5MzpcXHRcXHRcXHQgKiBwb3NzaWJsZSBsb2NrZWQvcGVuZGluZyBiaXRzIGtlZXAgY2hhbmdpbmcgYW5kIHdlIHNlZSBmYWlsdXJlcyBldmVuXFxuIDU5NDpcXHRcXHRcXHQgKiB3aGVuIHdlIHJlbWFpbiB0aGUgaGVhZCBvZiB3YWl0IHF1ZXVlLiBIb3dldmVyLCBldmVudHVhbGx5LFxcbiA1OTU6XFx0XFx0XFx0ICogcGVuZGluZyBiaXQgb3duZXIgd2lsbCB1bnNldCB0aGUgcGVuZGluZyBiaXQsIGFuZCBuZXcgd2FpdGVyc1xcbiA1OTY6XFx0XFx0XFx0ICogd2lsbCBxdWV1ZSBiZWhpbmQgdXMuIFRoaXMgd2lsbCBsZWF2ZSB0aGUgbG9jayBvd25lciBpblxcbiA1OTc6XFx0XFx0XFx0ICogY2hhcmdlLCBhbmQgaXQgd2lsbCBldmVudHVhbGx5IGVpdGhlciBzZXQgbG9ja2VkIGJpdCB0byAwLCBvclxcbiA1OTg6XFx0XFx0XFx0ICogbGVhdmUgaXQgYXMgMSwgYWxsb3dpbmcgdXMgdG8gbWFrZSBwcm9ncmVzcy5cXG4gNTk5OlxcdFxcdFxcdCAqXFxuIDYwMDpcXHRcXHRcXHQgKiBXZSB0ZXJtaW5hdGUgdGhlIHdob2xlIHdhaXQgcXVldWUgZm9yIHR3byByZWFzb25zLiBGaXJzdGx5LFxcbiA2MDE6XFx0XFx0XFx0ICogd2UgZXNjaGV3IHBlci13YWl0ZXIgdGltZW91dHMgd2l0aCBvbmUgYXBwbGllZCBhdCB0aGUgaGVhZCBvZlxcbiA2MDI6XFx0XFx0XFx0ICogdGhlIHdhaXQgcXVldWUuICBUaGlzIGFsbG93cyBldmVyeW9uZSB0byBicmVhayBvdXQgZmFzdGVyXFxuIDYwMzpcXHRcXHRcXHQgKiBvbmNlIHdlJ3ZlIHNlZW4gdGhlIG93bmVyIC8gcGVuZGluZyB3YWl0ZXIgbm90IHJlc3BvbmRpbmcgZm9yXFxuIDYwNDpcXHRcXHRcXHQgKiB0aGUgdGltZW91dCBkdXJhdGlvbiBmcm9tIHRoZSBoZWFkLiAgU2Vjb25kbHksIGl0IGF2b2lkc1xcbiA2MDU6XFx0XFx0XFx0ICogY29tcGxpY2F0ZWQgc3luY2hyb25pemF0aW9uLCBiZWNhdXNlIHdoZW4gbm90IGxlYXZpbmcgaW4gRklGT1xcbiA2MDY6XFx0XFx0XFx0ICogb3JkZXIsIHByZXYncyBuZXh0IHBvaW50ZXIgbmVlZHMgdG8gYmUgZml4ZWQgdXAgZXRjLlxcbiA2MDc6XFx0XFx0XFx0ICovXFxuIDYwODpcXHRcXHRcXHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcXG4gNjA5OlxcdFxcdFxcdFxcdG5leHQgPSBzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXFx1MDAyNm5vZGUtXFx1MDAzZW5leHQsIFZBTCk7XFxuIDYxMDpcXHRcXHRcXHRcXHRXUklURV9PTkNFKG5leHQtXFx1MDAzZWxvY2tlZCwgUkVTX1RJTUVPVVRfVkFMKTtcXG4gNjExOlxcdFxcdFxcdH1cXG4gNjEyOlxcdFxcdFxcdGxvY2tldmVudF9pbmMocnFzcGlubG9ja19sb2NrX3RpbWVvdXQpO1xcbiA2MTM6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xcbiA2MTQ6XFx0XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHQvKlxcbiA2MTc6XFx0XFx0ICogY2xhaW0gdGhlIGxvY2s6XFxuIDYxODpcXHRcXHQgKlxcbiA2MTk6XFx0XFx0ICogbiwwLDAgLVxcdTAwM2UgMCwwLDEgOiBsb2NrLCB1bmNvbnRlbmRlZFxcbiA2MjA6XFx0XFx0ICogKiwqLDAgLVxcdTAwM2UgKiwqLDEgOiBsb2NrLCBjb250ZW5kZWRcXG4gNjIxOlxcdFxcdCAqXFxuIDYyMjpcXHRcXHQgKiBJZiB0aGUgcXVldWUgaGVhZCBpcyB0aGUgb25seSBvbmUgaW4gdGhlIHF1ZXVlIChsb2NrIHZhbHVlID09IHRhaWwpXFxuIDYyMzpcXHRcXHQgKiBhbmQgbm9ib2R5IGlzIHBlbmRpbmcsIGNsZWFyIHRoZSB0YWlsIGNvZGUgYW5kIGdyYWIgdGhlIGxvY2suXFxuIDYyNDpcXHRcXHQgKiBPdGhlcndpc2UsIHdlIG9ubHkgbmVlZCB0byBncmFiIHRoZSBsb2NrLlxcbiA2MjU6XFx0XFx0ICovXFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdC8qXFxuIDYyODpcXHRcXHQgKiBOb3RlOiBhdCB0aGlzIHBvaW50OiAodmFsIFxcdTAwMjYgX1FfUEVORElOR19NQVNLKSA9PSAwLCBiZWNhdXNlIG9mIHRoZVxcbiA2Mjk6XFx0XFx0ICogICAgICAgYWJvdmUgd2FpdCBjb25kaXRpb24sIHRoZXJlZm9yZSBhbnkgY29uY3VycmVudCBzZXR0aW5nIG9mXFxuIDYzMDpcXHRcXHQgKiAgICAgICBQRU5ESU5HIHdpbGwgbWFrZSB0aGUgdW5jb250ZW5kZWQgdHJhbnNpdGlvbiBmYWlsLlxcbiA2MzE6XFx0XFx0ICovXFxuIDYzMjpcXHRcXHRpZiAoKHZhbCBcXHUwMDI2IF9RX1RBSUxfTUFTSykgPT0gdGFpbCkge1xcbiA2MzM6XFx0XFx0XFx0aWYgKGF0b21pY190cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZsb2NrLVxcdTAwM2V2YWwsIFxcdTAwMjZ2YWwsIF9RX0xPQ0tFRF9WQUwpKVxcbiA2MzQ6XFx0XFx0XFx0XFx0Z290byByZWxlYXNlOyAvKiBObyBjb250ZW50aW9uICovXFxuIDYzNTpcXHRcXHR9XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdC8qXFxuIDYzODpcXHRcXHQgKiBFaXRoZXIgc29tZWJvZHkgaXMgcXVldWVkIGJlaGluZCB1cyBvciBfUV9QRU5ESU5HX1ZBTCBnb3Qgc2V0XFxuIDYzOTpcXHRcXHQgKiB3aGljaCB3aWxsIHRoZW4gZGV0ZWN0IHRoZSByZW1haW5pbmcgdGFpbCBhbmQgcXVldWUgYmVoaW5kIHVzXFxuIDY0MDpcXHRcXHQgKiBlbnN1cmluZyB3ZSdsbCBzZWUgYSBAbmV4dC5cXG4gNjQxOlxcdFxcdCAqL1xcbiA2NDI6XFx0XFx0c2V0X2xvY2tlZChsb2NrKTtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0LypcXG4gNjQ1OlxcdFxcdCAqIGNvbnRlbmRlZCBwYXRoOyB3YWl0IGZvciBuZXh0IGlmIG5vdCBvYnNlcnZlZCB5ZXQsIHJlbGVhc2UuXFxuIDY0NjpcXHRcXHQgKi9cXG4gNjQ3OlxcdFxcdGlmICghbmV4dClcXG4gNjQ4OlxcdFxcdFxcdG5leHQgPSBzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXFx1MDAyNm5vZGUtXFx1MDAzZW5leHQsIChWQUwpKTtcXG4gNjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDoxMy4yOTI3OTAwNTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxOTMyNjc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSZXNpbGllbnQgUXVldWVkIFNwaW4gTG9jayBTbG93IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGZvdW5kIGEgcHJvbWlzaW5nIHRhcmdldDogdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24uIEl0J3MgcmlnaHQgdGhlcmUsIGV4cG9ydGVkLCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgY29yZSBCUEYgbG9ja2luZyBtZWNoYW5pc20uIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvZGUgYW5kIHdlbGwgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIG9uIHRoZSBjb25maWdzIG5lZWRlZCB3ZXJlIGEgbGl0dGxlIG11ZGRsZWQuIEkgbmVlZGVkIHRvIGVuc3VyZSBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIG9idmlvdXNseS4gSSBhbHNvIHRob3VnaHQgYFFVRVVFRF9TUElOTE9DS1NgIHdhcyBhIHVzZXItc2V0dGFibGUgb3B0aW9uLiBCdXQgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplIGBRVUVVRURfU1BJTkxPQ0tTYCBpcyBhY3R1YWxseSBhIGBkZWZfYm9vbGAsIHRpZWQgdG8gYEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NgLiBJbiBvdGhlciB3b3JkcywgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4gU28sIGxpc3RpbmcgaXQgbWlnaHQgbm90IGJlIHJlbGV2YW50LCBhbmQgbGlzdGluZyBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24uXG5cbkhhbmcgb24uLi4gd2hhdCBhYm91dCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgPyBBaCwgcmlnaHQsIHRoYXQncyAqYWxzbyogbm90IGEgZGlyZWN0IHVzZXIgY29uZmlnLCBpdCBpcyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBTbyB0aGUgKm9ubHkqIHRoaW5nIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgaXMgYEJQRl9TWVNDQUxMYC5cblxuTm93LCBiZWZvcmUgSSBsYXVuY2ggaW50byBmdXp6aW5nLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJJ20gbWlzc2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzAwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MTguOTEyMTIxNTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjExNjU0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDoyNS4xMjM3ODMwMThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQwNjUxOTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBDYWxsZXJzIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgY3JpdGljYWwgZm9yIGFuYWx5emluZyBwZXJmb3JtYW5jZSwgZGVidWdnaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIG1heWJlIGV2ZW4gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc2xvd3BhdGggaXMgZW50ZXJlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcgaW4uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgb3IgYSBzaW1pbGFyIHNlYXJjaCwgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIGl0cyBjYWxsZXJzIHByZXR0eSBxdWlja2x5LiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgaXMgY2xlYXIgYW5kIEkgY2FuIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZnJlcXVlbnRseSB0aGUgc2xvdyBwYXRoIGlzIHRyaWdnZXJlZCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBUaGUgZ29hbCBoZXJlIGlzIGEgZnVsbCBkZXBlbmRlbmN5IGdyYXBoIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MzIuNTMwMzA4OTkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ2MDc5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD00MD1leHRlcm4gaW50IHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jayk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtNDEtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6NDI6ZXh0ZXJuIGludCByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTQzLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTg4LVxcdFxcdHJldHVybiAwO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4OTpcXHRyZXR1cm4gcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgobG9jaywgdmFsKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xOTAtfVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcXHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNzEtXFx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MzA1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMTQ6ICogcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGggLSBhY3F1aXJlIHRoZSBxdWV1ZWQgc3BpbmxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzM4LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQwOjM5LjI3NjQwMDE2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3OTIyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzX3NwaW5fbG9ja2AgVXNhZ2UqKlxuXG5SaWdodCwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBgcmVzX3NwaW5fbG9ja2Agd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaGAuIFRoZSBgcnFzcGlubG9jay5oYCBoZWFkZXIgZmlsZSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcmVzb3VyY2UtYXdhcmUgc3BpbmxvY2tzLCBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBydW5xdWV1ZSBtYW5hZ2VtZW50LiBUaGF0IHRlbGxzIG1lIGEgbG90IGFscmVhZHksIGFjdHVhbGx5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCouIEtub3dpbmcgd2hlcmUgYHJlc19zcGluX2xvY2tgIGlzIHVzZWQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBncmVwLCBgY3Njb3BlYC4uLiB3aGF0ZXZlcidzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGNvZGViYXNlIC0gdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHJlc19zcGluX2xvY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBsb2NrcyBhcmUgYmVpbmcgYWNxdWlyZWQgYW5kIHdoYXQgZGF0YSB0aGV5J3JlIHByb3RlY3RpbmcgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXNlIHJ1bnF1ZXVlIGxvY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgdGVsbCBtZSBhbGwgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGByZXNfc3Bpbl9sb2NrYCwgYW5kIHdoYXQgY29udGV4dCBpdCBpcyBjYWxsZWQgaW4uIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NzYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo0Mi45MjQzMjY5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzU1MTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNfc3Bpbl9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTk9c3RydWN0IHJxc3BpbmxvY2sge1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjgtICovXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6Mjk6c3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIHtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0zMC1cXHR1MzIgdmFsO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTEwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCByZWxlYXNlX2hlbGRfbG9ja19lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTYwLS8qKlxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE2MTogKiByZXNfc3Bpbl9sb2NrIC0gYWNxdWlyZSBhIHF1ZXVlZCBzcGlubG9ja1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE2Mi0gKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xNjgtICovXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE3MC17XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODAtXFx0ICogXFx1MDAzY05NSVxcdTAwM2VcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoxODE6XFx0ICogcmVzX3NwaW5fbG9jayhBKSAtLVxcdTAwM2UgbWlzc2VkIEFBLCBsZWFkcyB0byB0aW1lb3V0XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTgyLVxcdCAqIFxcdTAwM2MvTk1JXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkzLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE5NDojZGVmaW5lIHJlc19zcGluX2xvY2sobG9jaykgKHsgZ3JhYl9oZWxkX2xvY2tfZW50cnkobG9jayk7IHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKGxvY2spOyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE5NS1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oPTE5OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcmVzX3NwaW5fdW5sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxMy1cXHQgKiBcXHUwMDNjTk1JXFx1MDAzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIxNDpcXHQgKiByZXNfc3Bpbl9sb2NrKEEpIC0tXFx1MDAzZSBtaXNzZWQgQUEsIGxlYWRzIHRvIHRpbWVvdXRcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMTUtXFx0ICogXFx1MDAzYy9OTUlcXHUwMDNlXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjQtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjI1OiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2tfaW5pdChsb2NrKSAoeyAqKGxvY2spID0gKHJxc3BpbmxvY2tfdClfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIyNi0jZWxzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIyNzojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2luaXQobG9jaykgKHsgKihsb2NrKSA9IChycXNwaW5sb2NrX3QpezB9OyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIyOC0jZW5kaWZcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjktXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjMwOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2sobG9jaykgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzEtXFx0KHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIzMy1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTsgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyMzQ6XFx0XFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spO1xcdCAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzUtXFx0XFx0aWYgKF9fcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDEtXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjQyOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgICAgXFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0My1cXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDYtXFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7ICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyNDc6XFx0XFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spOyAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDgtXFx0XFx0aWYgKF9fcmV0KSB7ICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MjYxPXN0cnVjdCBidGZfcmVjb3JkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjY0LVxcdGludCBzcGluX2xvY2tfb2ZmO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY1OlxcdGludCByZXNfc3Bpbl9sb2NrX29mZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI2Ni1cXHRpbnQgdGltZXJfb2ZmO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNDY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpidGZfZmllbGRfdHlwZV9uYW1lKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUxLVxcdGNhc2UgQlBGX1JFU19TUElOX0xPQ0s6XFxuaW5jbHVkZS9saW51eC9icGYuaDozNTI6XFx0XFx0cmV0dXJuIFxcXCJicGZfcmVzX3NwaW5fbG9ja1xcXCI7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zNTMtXFx0Y2FzZSBCUEZfVElNRVI6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4OD1zdGF0aWMgaW5saW5lIHUzMiBidGZfZmllbGRfdHlwZV9zaXplKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkzLVxcdGNhc2UgQlBGX1JFU19TUElOX0xPQ0s6XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTQ6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzk1LVxcdGNhc2UgQlBGX1RJTUVSOlxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC00MjctXFx0Y2FzZSBCUEZfUkVTX1NQSU5fTE9DSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQyODpcXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQyOS1cXHRjYXNlIEJQRl9USU1FUjpcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0yNjI9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIwLVxcdG11dGV4X2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2V6YXBfbXV0ZXgpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjE6XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIyLVxcdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDczPXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg2OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg3LVxcdFxcdC8qIE1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB0byBhZGRyZXNzIGltcG9zc2libGUgY2FzZSAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MDI6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MDMtXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04Mzg9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtODY2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njc6XFx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTg2OC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05Mjg9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTQyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5NDM6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NjI9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk3NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTc2OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYy05NzctXFx0XFx0c2NoZWR1bGVfd29yayh3b3JrKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNDM9c3RhdGljIGludCBicGZfc2VsZW1fdW5saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjU0LVxcdGIgPSBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNTU6XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Yi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNTYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNzA9aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI3OS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjgwOlxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjgxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MzAwPWludCBicGZfc2VsZW1fdW5saW5rKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTctXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjMxODpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsb2NhbF9zdG9yYWdlLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMxOS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTM1MD1zdGF0aWMgdm9pZCBicGZfc2VsZW1fdW5saW5rX25vZmFpbChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzYzLVxcdFxcdGIgPSBiID8gOiBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozNjQ6XFx0XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Yi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjUtXFx0XFx0aWYgKCFlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zODQtXFx0XFx0ICogZGVzdHJveShzZWxlbTEpIHdpbGwgYmUgYWJsZSB0byBmcmVlIHRoZSBzcGVjaWFsIGZpZWxkIGFzc29jaWF0ZWRcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6Mzg1OlxcdFxcdCAqIHdpdGggc2VsZW0xIGFzIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoKSByZXR1cm5zIC1FVElNRURPVVQuXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM4Ni1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zOTItXFx0aWYgKGxvY2FsX3N0b3JhZ2UpIHtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzkzOlxcdFxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY2FsX3N0b3JhZ2UtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzk0LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDQxPXZvaWQgX19icGZfbG9jYWxfc3RvcmFnZV9pbnNlcnRfY2FjaGUoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlICpsb2NhbF9zdG9yYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDUzOlxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY2FsX3N0b3JhZ2UtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDU0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDc2PWludCBicGZfbG9jYWxfc3RvcmFnZV9hbGxvYyh2b2lkICpvd25lcixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00OTctXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VsaXN0KTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDk4OlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00OTktXFx0c3RvcmFnZS1cXHUwMDNlb3duZXIgPSBvd25lcjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy01MDUtXFx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgc3RvcmFnZSk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjUwNjpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTUwNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTU0Nz1icGZfbG9jYWxfc3RvcmFnZV91cGRhdGUodm9pZCAqb3duZXIsIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNjEwLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo2MTE6XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jYWxfc3RvcmFnZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTItXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MzktXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjY0MDpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2Vsb2NrLCBiX2ZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNjQxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzczPWJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03OTktXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZzbWFwLVxcdTAwM2VidWNrZXRzW2ldLmxpc3QpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo4MDA6XFx0XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2c21hcC1cXHUwMDNlYnVja2V0c1tpXS5sb2NrKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtODAxLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9Mjk2PXN0YXRpYyB2b2lkIGJwZl9scnVfbGlzdF9wdXNoX2ZyZWUoc3RydWN0IGJwZl9scnVfbGlzdCAqbCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMzAzLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MzA0OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsLVxcdTAwM2Vsb2NrLCBmbGFncykpIHtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTMwNS1cXHRcXHRXUklURV9PTkNFKG5vZGUtXFx1MDAzZXBlbmRpbmdfZnJlZSwgMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTMxMj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfcG9wX2ZyZWVfdG9fbG9jYWwoc3RydWN0IGJwZl9scnUgKmxydSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMzE5LVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MzIwOlxcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jaykpXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMjEtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MDM9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9wZXJjcHVfbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxMy1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQxNDpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bC1cXHUwMDNlbG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDE1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MzY9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9jb21tb25fbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ0Ny1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQ0ODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ0OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDgyLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDgzOlxcdFxcdGlmICghcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3RlYWxfbG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDg0LVxcdFxcdFxcdG5vZGUgPSBfX2xvY2FsX2xpc3RfcG9wX2ZyZWUoc3RlYWxfbG9jX2wpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy00OTctXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo0OTg6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY19sLVxcdTAwM2Vsb2NrLCBmbGFncykpIHtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5OS1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz01MjU9c3RhdGljIHZvaWQgYnBmX2NvbW1vbl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTUzOS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjU0MDpcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTQxLVxcdFxcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlcGVuZGluZ19mcmVlLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NTY1PXN0YXRpYyB2b2lkIGJwZl9wZXJjcHVfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy01NzItXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo1NzM6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmwtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTc0LVxcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlcGVuZGluZ19mcmVlLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NjU2PXN0YXRpYyB2b2lkIGJwZl9scnVfbG9jYWxsaXN0X2luaXQoc3RydWN0IGJwZl9scnVfbG9jYWxsaXN0ICpsb2NfbCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjYyLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjYzOlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxvY19sLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY2NC19XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02NzctXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2Nzg6XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02NzktfVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0zNjU1PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzY2My1cXHRcXHR7IEJQRl9TUElOX0xPQ0ssIFxcXCJicGZfc3Bpbl9sb2NrXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6MzY2NDpcXHRcXHR7IEJQRl9SRVNfU1BJTl9MT0NLLCBcXFwiYnBmX3Jlc19zcGluX2xvY2tcXFwiLCB0cnVlIH0sXFxua2VybmVsL2JwZi9idGYuYy0zNjY1LVxcdFxcdHsgQlBGX1RJTUVSLCBcXFwiYnBmX3RpbWVyXFxcIiwgdHJ1ZSB9LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz00MTE4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy00MTQwLVxcdHJlYy1cXHUwMDNlc3Bpbl9sb2NrX29mZiA9IC1FSU5WQUw7XFxua2VybmVsL2JwZi9idGYuYzo0MTQxOlxcdHJlYy1cXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgPSAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYnRmLmMtNDE0Mi1cXHRyZWMtXFx1MDAzZXRpbWVyX29mZiA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzItXFx0XFx0XFx0LyogQ2FjaGUgb2Zmc2V0IGZvciBmYXN0ZXIgbG9va3VwIGF0IHJ1bnRpbWUgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjQxNzM6XFx0XFx0XFx0cmVjLVxcdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiA9IHJlYy1cXHUwMDNlZmllbGRzW2ldLm9mZnNldDtcXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjEtXFxua2VybmVsL2JwZi9idGYuYzo0MjIyOlxcdGlmIChyZWMtXFx1MDAzZXNwaW5fbG9ja19vZmYgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByZWMtXFx1MDAzZXJlc19zcGluX2xvY2tfb2ZmIFxcdTAwM2U9IDApIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjMtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDIyOS1cXHQgICAgIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1JCX1JPT1QpKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvYnRmLmM6NDIzMDpcXHRcXHQgKHJlYy1cXHUwMDNlc3Bpbl9sb2NrX29mZiBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmVjLVxcdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiBcXHUwMDNjIDApKSB7XFxua2VybmVsL2JwZi9idGYuYy00MjMxLVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzk9c3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ0LVxcdFxcdElOSVRfSExJU1RfTlVMTFNfSEVBRChcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tpXS5oZWFkLCBpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNDU6XFx0XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tpXS5yYXdfbG9jayk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ2LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTUwPXN0YXRpYyBpbmxpbmUgaW50IGh0YWJfbG9ja19idWNrZXQoc3RydWN0IGJ1Y2tldCAqYiwgdW5zaWduZWQgbG9uZyAqcGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE1NTpcXHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2VyYXdfbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE1Ni1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTMyMj1zdGF0aWMgbG9uZyB0cmllX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ1LVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzozNDY6XFx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHJpZS1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ3LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NDU3PXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NzEtXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ3MjpcXHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cmllLVxcdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NzMtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU5Ny1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTk4OlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRyaWUtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01OTktXFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTY9aW50IHBjcHVfZnJlZWxpc3RfaW5pdChzdHJ1Y3QgcGNwdV9mcmVlbGlzdCAqcylcXG4tLVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTYtXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzoxNzpcXHRcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZoZWFkLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTE4LVxcdFxcdGhlYWQtXFx1MDAzZWZpcnN0ID0gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM9MzU9c3RhdGljIGlubGluZSBib29sIF9fX3BjcHVfZnJlZWxpc3RfcHVzaChzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy0zNy17XFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzozODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYz00NT12b2lkIF9fcGNwdV9mcmVlbGlzdF9wdXNoKHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzLFxcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy01OC1cXHRcXHRcXHRoZWFkID0gcGVyX2NwdV9wdHIocy1cXHUwMDNlZnJlZWxpc3QsIGNwdSk7XFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzo1OTpcXHRcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtNjAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTEwMD1zdGF0aWMgc3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSAqX19fcGNwdV9mcmVlbGlzdF9wb3Aoc3RydWN0IHBjcHVfZnJlZWxpc3QgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTEwOS1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jOjExMDpcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTExLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy04MS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo4MjpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZxcy1cXHUwMDNlbG9jayk7XFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtODMtXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz05NT1zdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTAxLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEwMjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMDMtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTEyNT1zdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTMyLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEzMzpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTE4Mj1zdGF0aWMgbG9uZyBxdWV1ZV9zdGFja19tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTk4LVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjE5OTpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGlycV9mbGFncykpXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMjAwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYz0xNzI9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUsIGJvb2wgb3ZlcndyaXRlX21vZGUpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xNzktXFxua2VybmVsL2JwZi9yaW5nYnVmLmM6MTgwOlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJiLVxcdTAwM2VzcGlubG9jayk7XFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTgxLVxcdGF0b21pY19zZXQoXFx1MDAyNnJiLVxcdTAwM2VidXN5LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTQ2Mz1zdGF0aWMgdm9pZCAqX19icGZfcmluZ2J1Zl9yZXNlcnZlKHN0cnVjdCBicGZfcmluZ2J1ZiAqcmIsIHU2NCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtNDc3LVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjQ3ODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmItXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtNDc5LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2Ny1cXHQvKlxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI2ODpcXHQgKiBXZSBhcmUgZWl0aGVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHJlc19zcGluX2xvY2sgYWZ0ZXIgZ3JhYmJpbmcgdGhlXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY5LVxcdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjgyLVxcdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlxcdFxcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcXFwiRVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxcXG5cXFwiLCBzdHIsIGlycXNhdmUgPyBcXFwiX2lycXNhdmVcXFwiIDogXFxcIlxcXCIpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkF0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcXFxuXFxcIiwgbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTMtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XFx0QlVJTERfQlVHX09OKHNpemVvZihycXNwaW5sb2NrX3QpICE9IHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzAwLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcwMTpcXHRyZXQgPSByZXNfc3Bpbl9sb2NrKChycXNwaW5sb2NrX3QgKilsb2NrKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MDItXFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcwOS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MTA6X19icGZfa2Z1bmMgdm9pZCBicGZfcmVzX3NwaW5fdW5sb2NrKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzE1LVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTcte1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzIzLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MjQ6XFx0cmV0ID0gcmVzX3NwaW5fbG9jaygocnFzcGlubG9ja190ICopbG9jayk7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzI1LVxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MzQtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzM1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3NfX2lycV9mbGFnKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNi17XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NDc9QlRGX0tGVU5DU19TVEFSVChycXNwaW5sb2NrX2tmdW5jX2lkcylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NDktQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzUwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02OTc2PXN0YXRpYyBpbnQgcHJvY2Vzc19zcGluX2xvY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwMTMtXFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDE0OlxcdHNwaW5fbG9ja19vZmYgPSBpc19yZXNfbG9jayA/IHJlYy1cXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgOiByZWMtXFx1MDAzZXNwaW5fbG9ja19vZmY7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwMTUtXFx0aWYgKHNwaW5fbG9ja19vZmYgIT0gdmFsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjM9QlRGX0lEKHN0cnVjdCwgYnBmX3dxKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDgyNDpCVEZfSUQoc3RydWN0LCBicGZfcmVzX3NwaW5fbG9jaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4MjUtQlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg4MT1zdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwODg1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDg4NjpzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODcte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA1OS1cXHRLRl9icGZfcmVtb3ZlX2RlbnRyeV94YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjA6XFx0S0ZfYnBmX3Jlc19zcGluX2xvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYxLVxcdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDYyOlxcdEtGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYzLVxcdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1MzpCVEZfSUQoZnVuYywgYnBmX3Jlc19zcGluX2xvY2spXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1NTpCVEZfSUQoZnVuYywgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTYtQlRGX0lEKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI1OD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTMzMDpcXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzMzEtXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQzMz1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQzOS1cXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9zYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ0MDpcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NDEtXFx0XFx0aXJxX3NhdmUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ0MjpcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQzLVxcdFxcdFxcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MzI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzOTpzdGF0aWMgYm9vbCBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyh1MzIgYnRmX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0MC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjQxOlxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0Mi1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY0MzpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0NC1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjYwPXN0YXRpYyBib29sIGtmdW5jX3NwaW5fYWxsb3dlZCh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYyLVxcdHJldHVybiBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKGJ0Zl9pZCkgfHwgaXNfYnBmX2l0ZXJfbnVtX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjYzOlxcdCAgICAgICBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhidGZfaWQpIHx8IGlzX2JwZl9hcmVuYV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjY0LVxcdCAgICAgICBpc19icGZfc3RyZWFtX2tmdW5jKGJ0Zl9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5Mjg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ5OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDA6XFx0XFx0XFx0aWYgKCFpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhtZXRhLVxcdTAwM2VmdW5jX2lkKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDEtXFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTAyOlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDM6XFx0XFx0XFx0ICAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUwNC1cXHRcXHRcXHRcXHRmbGFncyB8PSBQUk9DRVNTX1NQSU5fTE9DSztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDU6XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTA2LVxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTEzPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NDQtXFx0aWYgKCFpbnNuLVxcdTAwM2VvZmYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NDU6XFx0ICAgIChpbnNuLVxcdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk0NjpcXHQgICAgIGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTQ3LVxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmJyYW5jaDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MS1cXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDI6XFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE0MzpcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQ0LVxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz0zNzA9c3RhdGljIGludCB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zNzEte1xcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM6MzcyOlxcdHJhd19yZXNfc3Bpbl9sb2NrKFxcdTAwMjZycXNwaW5sb2NrKTtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM3My1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9Mzc2PXN0YXRpYyB2b2lkIHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX3VubG9jayhpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODAtXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozODE6c3RhdGljIHN0cnVjdCBsb2NrX3RvcnR1cmVfb3BzIHJhd19yZXNfc3Bpbl9sb2NrX29wcyA9IHtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM4Mi1cXHQud3JpdGVsb2NrXFx0PSB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrLFxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODgtXFx0LnJlYWR1bmxvY2sgICAgID0gTlVMTCxcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM4OTpcXHQubmFtZVxcdFxcdD0gXFxcInJhd19yZXNfc3Bpbl9sb2NrXFxcIlxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtMzkwLX07XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTM5Mj1zdGF0aWMgaW50IHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX2xvY2tfaXJxKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5NS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM5NjpcXHRyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZycXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zOTctXFx0Y3h0LmN1cl9vcHMtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTQwMT1zdGF0aWMgdm9pZCB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV91bmxvY2tfaXJxKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjQwNjpzdGF0aWMgc3RydWN0IGxvY2tfdG9ydHVyZV9vcHMgcmF3X3Jlc19zcGluX2xvY2tfaXJxX29wcyA9IHtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNy1cXHQud3JpdGVsb2NrXFx0PSB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrX2lycSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6NDguOTM3ODg1MjUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDA2ODI4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTcGluIExvY2sgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQncyBhdCB0aGUgaGVhcnQgb2YgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLCBib3RoIG9mIHdoaWNoIGFyZSwgb2YgY291cnNlLCBCUEYga2Z1bmNzLiBJdCdzIGFsc28gdXRpbGl6ZWQgYnkgYHJhd19yZXNfc3Bpbl9sb2NrYCwgYW5kIHRoYXQncyB1c2VkIGFjcm9zcyB0aGUgQlBGIGNvZGViYXNlIOKAkyBhcmVuYSBtYW5hZ2VtZW50LCBsb2NhbCBzdG9yYWdlLCB0aGUgTFJVIGxpc3QsIGFsbCBvZiBpdC4gR2l2ZW4gdGhhdCB3aWRlc3ByZWFkIHVzYWdlLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHN5c2NhbGxzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCBgYnBmX3Jlc19zcGluX2xvY2tgLCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfcmVzX3NwaW5fbG9ja2AgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYCBhcmVuJ3QgZXhwb3J0ZWQgYXMgc3RhbmRhcmQgZnVuY3Rpb25zLCBidXQgYXJlIGRlZmluZWQgcHVyZWx5IGFzIGtmdW5jcy4gKkNoZWNrcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uKiBZZXMsIHRoZXkgYXJlIGluZGVlZCBrZnVuY3MuIE5vdywgSSdtIGdvaW5nIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo1NC40Mzg1NzE1ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDIzODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVzX3NwaW5fbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjgyLVxcdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlxcdFxcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcXFwiRVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxcXG5cXFwiLCBzdHIsIGlycXNhdmUgPyBcXFwiX2lycXNhdmVcXFwiIDogXFxcIlxcXCIpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkF0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcXFxuXFxcIiwgbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTMtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XFx0QlVJTERfQlVHX09OKHNpemVvZihycXNwaW5sb2NrX3QpICE9IHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MDktXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzExLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MTY6X19icGZfa2Z1bmMgaW50IGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFnc19faXJxX2ZsYWcpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzE3LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNC1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MzU6X19icGZfa2Z1bmMgdm9pZCBicGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFnc19faXJxX2ZsYWcpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM2LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc0Nz1CVEZfS0ZVTkNTX1NUQVJUKHJxc3BpbmxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0ODpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9jaylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NTA6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUsIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc1MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo1NC42MDg4MjAyODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMDA1MDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNwaW4gTG9ja3MgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQlBGIHNwaW4gbG9jayBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAuIFRoZXkgc2VlbSBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCBtYWtlcyBzZW5zZS4gQWxzbywgSSdtIG5vdGluZyB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgdGhlIG9uZSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBgQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpcyB0aGF0ICphbGwqPyBJIG5lZWQgdG8gYmUgc3VyZSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBkaWcgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhpcyBjb2RlLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBwaWVjZXMgb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6NTkuODI4ODc0MTA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4OTgzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQxOjAwLjA0Mzc3OTM0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzM0MjEwNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTcGlubG9jayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYEJQRl9TWVNDQUxMYCwgbm90aGluZyB0b28gb2JzY3VyZS4gTGV0J3Mgc3RhcnQgYnkgc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFJpZ2h0LCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGlzIHNlbGVjdGVkIGJ5IGBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTYC4gR29vZCwgZ29vZCwgd2UgY2FuIGp1c3QgZm9jdXMgb24gYEJQRl9TWVNDQUxMYCB0aGVuLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBjbGVhbmluZyB1cCBhIGRlYWRsb2NrIHNjZW5hcmlvLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGZpeCBhZGRyZXNzZXMgYSBidWcgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYC4gSSBzZWUgdGhlIGNvZGUgc25pcHBldCBub3csIGNoYW5naW5nIHRoZSBsb2dpYyB3aGVyZSBpdCdzIGhhbmRsaW5nIGBFREVBRExLYCwgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHF1ZXVlIGRlc3RydWN0aW9uIG9uIGRlYWRsb2NrLCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgLlxuXG5UaGlzIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSBjYWxsZWQsIHNwZWNpZmljYWxseSBieSB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbi4gQW5kIHRoYXQncyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBzcGlubG9jayBnZXRzIHVzZWQgYnkgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgIGtmdW5jcywgYW5kIGJ5IEJQRiBtYXBzIGludGVybmFsbHkuIFRoaXMgaXMgYW4gYXJlYSB3ZSBzaG91bGQgZGVmaW5pdGVseSBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwMiwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDE6MDkuNzc3OTk0NjY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4ODk1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja1wiLFxuICAgIFwiYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFkbG9jayBoYW5kbGluZyBsb2dpYyBpbiBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB1c2luZyBgYnBmX3Jlc19zcGluX2xvY2tgIGtmdW5jcywgYXMgd2VsbCBhcyBpbnRlcm5hbGx5IGJ5IHZhcmlvdXMgQlBGIG1hcHMuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aFwiLFxuICAgIFwiYnBmX3Jlc19zcGluX2xvY2tcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 15:55:56 +0000 UTC FinishedAt: 2026-08-02 16:41:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "fdeba03fea78407a8c52faa99177c9f7f29f90eb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "18290c01-e9f2-41bc-a11b-731d93bed596" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "resilient_queued_spin_lock_slowpath", "bpf_res_spin_lock", "bpf_res_spin_lock_irqsave" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9ycXNwaW5sb2NrLmMgYi9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xuaW5kZXggZTRlMzM4Y2RiNDM3Yy4uMjEyOWRlZmM0YTlhNyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xuQEAgLTU3Miw5ICYjNDM7NTcyLDEwIEBAIGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcbiBcbiBcdC8qIERpc2FibGUgcXVldWUgZGVzdHJ1Y3Rpb24gd2hlbiB3ZSBkZXRlY3QgZGVhZGxvY2tzLiAqL1xuIFx0aWYgKHJldCA9PSAtRURFQURMSykge1xuLVx0XHRpZiAoIW5leHQpXG4mIzQzO1x0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiBcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuLVx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuJiM0MztcdFx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAgICYjMzQ7YnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCmluZGV4IGU0ZTMzOGNkYjQzN2MuLjIxMjlkZWZjNGE5YTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jCkBAIC01NzIsOSAmIzQzOzU3MiwxMCBAQCBpbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpCiAKIAkvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi8KIAlpZiAocmV0ID09IC1FREVBRExLKSB7Ci0JCWlmICghbmV4dCkKJiM0MzsJCWlmICghdHJ5X2NtcHhjaGdfdGFpbChsb2NrLCB0YWlsLCAwKSkgewogCQkJbmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZCgmYW1wO25vZGUtJmd0O25leHQsIChWQUwpKTsKLQkJYXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkKCZhbXA7bmV4dC0mZ3Q7bG9ja2VkKTsKJiM0MzsJCQlhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoJmFtcDtuZXh0LSZndDtsb2NrZWQpOwomIzQzOwkJfQogCQlnb3RvIGVycl9yZWxlYXNlX25vZGU7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBga2VybmVsL2JwZi9ycXNwaW5sb2NrLmNgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgaXQmIzM5O3MgYSB2ZXJ5IHNwZWNpZmljIGFyZWEsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBpcyBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rLiBUaGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHRhcmdldGluZyB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbiwgd2hpY2ggc3VnZ2VzdHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzcGlubG9jayBpbXBsZW1lbnRhdGlvbiBpcyBuZWNlc3NhcnkuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgY29kZSBzbmlwcGV0IGl0c2VsZi4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGNvbmRpdGlvbmFsIHdpdGhpbiB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgKGAtRURFQURMS2ApLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIGhvdyB0aGUgbG9jayBiZWhhdmVzIHdoZW4gYSBkZWFkbG9jayBpcyBkZXRlY3RlZC4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNoZWNrZWQgYGlmICghbmV4dClgLiBOb3csIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIHRoYXQgd2l0aCBhIGB0cnlfY21weGNoZ190YWlsYCBjYWxsIGFuZCB0aGVuIHRoZSBgYXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkYCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsbHkgbW9yZSByb2J1c3QgbWVjaGFuaXNtIGZvciBoYW5kbGluZyBjb250ZW5kZWQgc3BpbmxvY2sgdW5sb2NraW5nIGluIHRoZSBwcmVzZW5jZSBvZiBkZWFkbG9ja3MuIFRoZSBgdHJ5X2NtcHhjaGdfdGFpbGAgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gYXRvbWljYWxseSB1cGRhdGUgdGhlIHRhaWwgb2YgdGhlIGxvY2sgcXVldWUsIHdoaWNoIHdvdWxkIG1ha2Ugc2Vuc2UuCgpUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBzcGlubG9jayBpdHNlbGYsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiBCUEYuIFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZT8gV2hhdCBvdGhlciBmdW5jdGlvbnMgaW4gYHJxc3BpbmxvY2suY2AgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2U/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBzaWRlIGVmZmVjdHMgaW4gdGhlIEJQRiBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jPTI2MT1pbnQgX19sb2NrZnVuYyByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY5LVx0ICogZGVhZGxvY2sgZGV0ZWN0aW9uIGVudHJ5IHdoZW4gcXVldWVkIHNwaW5sb2NrcyBhcmUgZGlzYWJsZWQsIG9yIGZyb21cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIGFmdGVyIGdyYWJiaW5nIHRoZSBkZWFkbG9ja1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjcxLVx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTMwNT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcW5vZGUsIHJxbm9kZXNbX1FfTUFYX05PREVTXSk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzEzLS8qKlxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MzE0OiAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMzOC0gKi9cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zNDAte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2Njc6RVhQT1JUX1NZTUJPTF9HUEwocmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipLY29uZmlnIERpdmUgZm9yIEJQRiBTcGlubG9jayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgYnVpbGQgb2YgYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgc3BlY2lmaWMgZmlsZSBnZXRzIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCwgaXMgdG8gZXhhbWluZSB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucywgaWYgYW55LCBkaXJlY3RseSBpbmZsdWVuY2UgaXRzIGluY2x1c2lvbiwgb3IgaWYgaXQmIzM5O3MgaW5kaXJlY3RseSBjb250cm9sbGVkIHRocm91Z2ggc29tZSBicm9hZGVyIEJQRiBvciBzY2hlZHVsZXIgY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgdXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnFzcGlubG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNz1vYmotJChDT05GSUdfQlBGX0pJVCkgJiM0Mzs9IHRyYW1wb2xpbmUub1xua2VybmVsL2JwZi9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xOS1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9NzU9Q0ZMQUdTX1JFTU9WRV9yaW5nYnVmLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6NzY6Q0ZMQUdTX1JFTU9WRV9ycXNwaW5sb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbiBpcyBpbnZvbHZlZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIG9idmlvdXMgb25lLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIGh1bnQgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9yIHVzYWdlIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkmIzM5O20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBmdXJ0aGVyIHJlZmluZSB0aGUgY29tcGlsYXRpb24gb3IgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiwgYmVzaWRlcyBqdXN0IHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gRmluZGluZyB0aGVzZSBjb25kaXRpb25zIHdpbGwgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgYWN0aXZhdGlvbiBwcm9maWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvcnFzcGlubG9jay5jLTI1LSNpbmNsdWRlIFx1MDAzY2FzbS9ieXRlb3JkZXIuaFx1MDAzZVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNy0jaW5jbHVkZSBcdTAwM2Nhc20vcXNwaW5sb2NrLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zNS0gKi9cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjM2OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzctI2luY2x1ZGUgXCYjMzQ7Li4vbG9ja2luZy9xc3BpbmxvY2suaFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChyZXNpbGllbnRfdGFzX3NwaW5fbG9jayk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTYtXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyOTc6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3BpbmxvY2sgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJIHNlZSB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgZGVtYW5kaW5nIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AsIGFuZCBJJiMzOTtsbCBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMjk3LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgYSBjaGVjayBsaWtlIHRoaXMgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgYWN0dWFsIGRlcGVuZGVuY3kgY2hlY2sgb3IgaW1wbGVtZW50YXRpb24gdGhhdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiB0aGUgQ09ORklHIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0cmV0dXJuIDA7XG4gMjkxOlx0b3V0OlxuIDI5MjpcdFx0cmVsZWFzZV9oZWxkX2xvY2tfZW50cnkoKTtcbiAyOTM6XHRcdHJldHVybiByZXQ7XG4gMjk0Olx0fVxuIDI5NTpcdEVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKTtcbiAyOTY6XHRcbiAyOTc6XHQjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NcbiAyOTg6XHRcbiAyOTk6XHQvKlxuIDMwMDpcdCAqIFBlci1DUFUgcXVldWUgbm9kZSBzdHJ1Y3R1cmVzOyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNCBuZXN0ZWRcbiAzMDE6XHQgKiBjb250ZXh0czogdGFzaywgc29mdGlycSwgaGFyZGlycSwgbm1pLlxuIDMwMjpcdCAqXG4gMzAzOlx0ICogRXhhY3RseSBmaXRzIG9uZSA2NC1ieXRlIGNhY2hlbGluZSBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuXG4gMzA0Olx0ICovXG4gMzA1Olx0c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHFub2RlLCBycW5vZGVzW19RX01BWF9OT0RFU10pO1xuIDMwNjpcdFxuIDMwNzpcdCNpZm5kZWYgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZVxuIDMwODpcdCNkZWZpbmUgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZSh2LCBjKSBzbXBfY29uZF9sb2FkX2FjcXVpcmUodiwgYylcbiAzMDk6XHQjZW5kaWZcbiAzMTA6XHRcbiAzMTE6XHQjZGVmaW5lIHJlc19hdG9taWNfY29uZF9yZWFkX2FjcXVpcmUodiwgYykgcmVzX3NtcF9jb25kX2xvYWRfYWNxdWlyZShcdTAwMjYodiktXHUwMDNlY291bnRlciwgKGMpKVxuIDMxMjpcdFxuIDMxMzpcdC8qKlxuIDMxNDpcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXG4gMzE1Olx0ICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxuIDMxNjpcdCAqIEB2YWw6IEN1cnJlbnQgdmFsdWUgb2YgdGhlIHF1ZXVlZCBzcGlubG9jayAzMi1iaXQgd29yZFxuIDMxNzpcdCAqXG4gMzE4Olx0ICogUmV0dXJuOlxuIDMxOTpcdCAqICogMFx0XHQtIExvY2sgd2FzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseS5cbiAzMjA6XHQgKiAqIC1FREVBRExLXHQtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgQUEvQUJCQSBkZWFkbG9jay5cbiAzMjE6XHQgKiAqIC1FVElNRURPVVQgLSBMb2NrIGFjcXVpc2l0aW9uIGZhaWxlZCBiZWNhdXNlIG9mIHRpbWVvdXQuXG4gMzIyOlx0ICpcbiAzMjM6XHQgKiAocXVldWUgdGFpbCwgcGVuZGluZyBiaXQsIGxvY2sgdmFsdWUpXG4gMzI0Olx0ICpcbiAzMjU6XHQgKiAgICAgICAgICAgICAgZmFzdCAgICAgOiAgICBzbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgdW5sb2NrXG4gMzI2Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gMzI3Olx0ICogdW5jb250ZW5kZWQgICgwLDAsMCkgLTotLVx1MDAzZSAoMCwwLDEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTotLVx1MDAzZSAoKiwqLDApXG4gMzI4Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0tLS0tLS0uLS0tLS0tLiAgICAgICAgICAgICAvICA6XG4gMzI5Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgdiAgICAgICAgICAgXFwgICAgICBcXCAgICAgICAgICAgIHwgIDpcbiAzMzA6XHQgKiBwZW5kaW5nICAgICAgICAgICAgICAgOiAgICAoMCwxLDEpICYjNDM7LS1cdTAwM2UgKDAsMSwwKSAgIFxcICAgICAgICAgICB8ICA6XG4gMzMxOlx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0mIzM5OyAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgOlxuIDMzMjpcdCAqICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgIHYgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgOlxuIDMzMzpcdCAqIHVuY29udGVuZGVkICAgICAgICAgICA6ICAgIChuLHgseSkgJiM0MzstLVx1MDAzZSAobiwwLDApIC0tJiMzOTsgICAgICAgICAgIHwgIDpcbiAzMzQ6XHQgKiAgIHF1ZXVlICAgICAgICAgICAgICAgOiAgICAgICB8IF4tLSYjMzk7ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XG4gMzM1Olx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XG4gMzM2Olx0ICogY29udGVuZGVkICAgICAgICAgICAgIDogICAgKCoseCx5KSAmIzQzOy0tXHUwMDNlICgqLDAsMCkgLS0tXHUwMDNlICgqLDAsMSkgLSYjMzk7ICA6XG4gMzM3Olx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgICBeLS0mIzM5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuIDMzODpcdCAqL1xuIDMzOTpcdGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcbiAzNDA6XHR7XG4gMzQxOlx0XHRzdHJ1Y3QgbWNzX3NwaW5sb2NrICpwcmV2LCAqbmV4dCwgKm5vZGU7XG4gMzQyOlx0XHRzdHJ1Y3QgcnFzcGlubG9ja190aW1lb3V0IHRzO1xuIDM0MzpcdFx0aW50IGlkeCwgcmV0ID0gMDtcbiAzNDQ6XHRcdHUzMiBvbGQsIHRhaWw7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRCVUlMRF9CVUdfT04oQ09ORklHX05SX0NQVVMgXHUwMDNlPSAoMVUgXHUwMDNjXHUwMDNjIF9RX1RBSUxfQ1BVX0JJVFMpKTtcbiAzNDc6XHRcbiAzNDg6XHRcdGlmIChyZXNpbGllbnRfdmlydF9zcGluX2xvY2tfZW5hYmxlZCgpKVxuIDM0OTpcdFx0XHRyZXR1cm4gcmVzaWxpZW50X3ZpcnRfc3Bpbl9sb2NrKGxvY2spO1xuIDM1MDpcdFxuIDM1MTpcdFx0UkVTX0lOSVRfVElNRU9VVCh0cyk7XG4gMzUyOlx0XG4gMzUzOlx0XHQvKlxuIDM1NDpcdFx0ICogV2FpdCBmb3IgaW4tcHJvZ3Jlc3MgcGVuZGluZy1cdTAwM2Vsb2NrZWQgaGFuZC1vdmVycyB3aXRoIGEgYm91bmRlZFxuIDM1NTpcdFx0ICogbnVtYmVyIG9mIHNwaW5zIHNvIHRoYXQgd2UgZ3VhcmFudGVlIGZvcndhcmQgcHJvZ3Jlc3MuXG4gMzU2Olx0XHQgKlxuIDM1NzpcdFx0ICogMCwxLDAgLVx1MDAzZSAwLDAsMVxuIDM1ODpcdFx0ICovXG4gMzU5Olx0XHRpZiAodmFsID09IF9RX1BFTkRJTkdfVkFMKSB7XG4gMzYwOlx0XHRcdGludCBjbnQgPSBfUV9QRU5ESU5HX0xPT1BTO1xuIDM2MTpcdFx0XHR2YWwgPSBhdG9taWNfY29uZF9yZWFkX3JlbGF4ZWQoXHUwMDI2bG9jay1cdTAwM2V2YWwsXG4gMzYyOlx0XHRcdFx0XHRcdCAgICAgICAoVkFMICE9IF9RX1BFTkRJTkdfVkFMKSB8fCAhY250LS0pO1xuIDM2MzpcdFx0fVxuIDM2NDpcdFxuIDM2NTpcdFx0LypcbiAzNjY6XHRcdCAqIElmIHdlIG9ic2VydmUgYW55IGNvbnRlbnRpb247IHF1ZXVlLlxuIDM2NzpcdFx0ICovXG4gMzY4Olx0XHRpZiAodmFsIFx1MDAyNiB+X1FfTE9DS0VEX01BU0spXG4gMzY5Olx0XHRcdGdvdG8gcXVldWU7XG4gMzcwOlx0XG4gMzcxOlx0XHQvKlxuIDM3MjpcdFx0ICogdHJ5bG9jayB8fCBwZW5kaW5nXG4gMzczOlx0XHQgKlxuIDM3NDpcdFx0ICogMCwwLCogLVx1MDAzZSAwLDEsKiAtXHUwMDNlIDAsMCwxIHBlbmRpbmcsIHRyeWxvY2tcbiAzNzU6XHRcdCAqL1xuIDM3NjpcdFx0dmFsID0gcXVldWVkX2ZldGNoX3NldF9wZW5kaW5nX2FjcXVpcmUobG9jayk7XG4gMzc3Olx0XG4gMzc4Olx0XHQvKlxuIDM3OTpcdFx0ICogSWYgd2Ugb2JzZXJ2ZSBjb250ZW50aW9uLCB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgbG9ja2VyLlxuIDM4MDpcdFx0ICpcbiAzODE6XHRcdCAqIFVuZG8gYW5kIHF1ZXVlOyBvdXIgc2V0dGluZyBvZiBQRU5ESU5HIG1pZ2h0IGhhdmUgbWFkZSB0aGVcbiAzODI6XHRcdCAqIG4sMCwwIC1cdTAwM2UgMCwwLDAgdHJhbnNpdGlvbiBmYWlsIGFuZCBpdCB3aWxsIG5vdyBiZSB3YWl0aW5nXG4gMzgzOlx0XHQgKiBvbiBAbmV4dCB0byBiZWNvbWUgIU5VTEwuXG4gMzg0Olx0XHQgKi9cbiAzODU6XHRcdGlmICh1bmxpa2VseSh2YWwgXHUwMDI2IH5fUV9MT0NLRURfTUFTSykpIHtcbiAzODY6XHRcbiAzODc6XHRcdFx0LyogVW5kbyBQRU5ESU5HIGlmIHdlIHNldCBpdC4gKi9cbiAzODg6XHRcdFx0aWYgKCEodmFsIFx1MDAyNiBfUV9QRU5ESU5HX01BU0spKVxuIDM4OTpcdFx0XHRcdGNsZWFyX3BlbmRpbmcobG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uCgoqKkFuYWx5emluZyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgKioKClJpZ2h0LCBzbyB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgbmVzdGxlZCBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGJsb2NrLiAgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSwgb2YgY291cnNlLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyByZWxldmFuY2UuICBJcyBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gYXQgcGxheSBoZXJlLCBvciBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgb25lcz8gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhpczsga25vd2luZyBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgb2J2aW91cyBwbGFjZXMgdG8gbG9vayB3b3VsZCBiZSBlaXRoZXIgYGtlcm5lbC9icGYvS2NvbmZpZ2AgKHNpbmNlIHdlIGFyZSBkaXNjdXNzaW5nIHRoZSBrZXJuZWwpIG9yIG1heWJlIGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIGBRVUVVRURfU1BJTkxPQ0tTYCBpcyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVUVVRURfU1BJTkxPQ0tTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9LY29uZmlnLmxvY2tzPTIzOT1jb25maWcgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0MS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Mjpjb25maWcgUVVFVUVEX1NQSU5MT0NLU1xua2VybmVsL0tjb25maWcubG9ja3MtMjQzLVx0ZGVmX2Jvb2wgeSBpZiBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3BpbmxvY2sgQ29uZmlndXJhdGlvbiBhbmQgQlBGIEludGVncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzcGlubG9ja3MgYXJlIGNvbmZpZ3VyZWQgaW4gdGhpcyBrZXJuZWwgYnVpbGQuIEl0IGxvb2tzIGxpa2UgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgKnByb3ZpZGVkKiBgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU2AgaXMgYWxzbyBzZXQuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgYmVoYXZpb3IgSSYjMzk7ZCBleHBlY3QuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSB0aGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgaXMgYmVpbmcgY29tcGlsZWQgKm9ubHkqIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCBzdWdnZXN0cyBhIGRpcmVjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIGFuZCBzb21lIHNwZWNpZmljIHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCBtZSBqdW1wIGludG8gdGhlIGNvZGUgYW5kIGZvY3VzIG9uIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1NzIuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgQlBGLXJlbGF0ZWQgc3BpbmxvY2sgaW50ZXJhY3Rpb24gaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0XHRcdHByZWZldGNodyhuZXh0KTtcbiA1NTE6XHRcdH1cbiA1NTI6XHRcbiA1NTM6XHRcdC8qXG4gNTU0Olx0XHQgKiB3ZSYjMzk7cmUgYXQgdGhlIGhlYWQgb2YgdGhlIHdhaXRxdWV1ZSwgd2FpdCBmb3IgdGhlIG93bmVyIFx1MDAyNiBwZW5kaW5nIHRvXG4gNTU1Olx0XHQgKiBnbyBhd2F5LlxuIDU1NjpcdFx0ICpcbiA1NTc6XHRcdCAqICoseCx5IC1cdTAwM2UgKiwwLDBcbiA1NTg6XHRcdCAqXG4gNTU5Olx0XHQgKiB0aGlzIHdhaXQgbG9vcCBtdXN0IHVzZSBhIGxvYWQtYWNxdWlyZSBzdWNoIHRoYXQgd2UgbWF0Y2ggdGhlXG4gNTYwOlx0XHQgKiBzdG9yZS1yZWxlYXNlIHRoYXQgY2xlYXJzIHRoZSBsb2NrZWQgYml0IGFuZCBjcmVhdGUgbG9ja1xuIDU2MTpcdFx0ICogc2VxdWVudGlhbGl0eTsgdGhpcyBpcyBiZWNhdXNlIHRoZSBzZXRfbG9ja2VkKCkgZnVuY3Rpb24gYmVsb3dcbiA1NjI6XHRcdCAqIGRvZXMgbm90IGltcGx5IGEgZnVsbCBiYXJyaWVyLlxuIDU2MzpcdFx0ICpcbiA1NjQ6XHRcdCAqIFdlIHVzZSBSRVNfREVGX1RJTUVPVVQgKiAyIGFzIHRoZSBkdXJhdGlvbiwgYXMgUkVTX0RFRl9USU1FT1VUIGlzXG4gNTY1Olx0XHQgKiBtZWFudCB0byBzcGFuIG1heGltdW0gYWxsb3dlZCB0aW1lIHBlciBjcml0aWNhbCBzZWN0aW9uLCBhbmQgd2UgbWF5XG4gNTY2Olx0XHQgKiBoYXZlIGJvdGggdGhlIG93bmVyIG9mIHRoZSBsb2NrIGFuZCB0aGUgcGVuZGluZyBiaXQgd2FpdGVyIGFoZWFkIG9mXG4gNTY3Olx0XHQgKiB1cy5cbiA1Njg6XHRcdCAqL1xuIDU2OTpcdFx0UkVTX1JFU0VUX1RJTUVPVVQodHMsIFJFU19ERUZfVElNRU9VVCAqIDIpO1xuIDU3MDpcdFx0dmFsID0gcmVzX2F0b21pY19jb25kX3JlYWRfYWNxdWlyZShcdTAwMjZsb2NrLVx1MDAzZXZhbCwgIShWQUwgXHUwMDI2IF9RX0xPQ0tFRF9QRU5ESU5HX01BU0spIHx8XG4gNTcxOlx0XHRcdFx0XHRcdCAgIFJFU19DSEVDS19USU1FT1VUKHRzLCByZXQsIF9RX0xPQ0tFRF9QRU5ESU5HX01BU0spKTtcbiA1NzI6XHRcbiA1NzM6XHRcdC8qIERpc2FibGUgcXVldWUgZGVzdHJ1Y3Rpb24gd2hlbiB3ZSBkZXRlY3QgZGVhZGxvY2tzLiAqL1xuIDU3NDpcdFx0aWYgKHJldCA9PSAtRURFQURMSykge1xuIDU3NTpcdFx0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiA1NzY6XHRcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuIDU3NzpcdFx0XHRcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcdTAwMjZuZXh0LVx1MDAzZWxvY2tlZCk7XG4gNTc4Olx0XHRcdH1cbiA1Nzk6XHRcdFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xuIDU4MDpcdFx0fVxuIDU4MTpcdFxuIDU4MjpcdHdhaXRxX3RpbWVvdXQ6XG4gNTgzOlx0XHRpZiAocmV0KSB7XG4gNTg0Olx0XHRcdC8qXG4gNTg1Olx0XHRcdCAqIElmIHRoZSB0YWlsIGlzIHN0aWxsIHBvaW50aW5nIHRvIHVzLCB0aGVuIHdlIGFyZSB0aGUgZmluYWwgd2FpdGVyLFxuIDU4NjpcdFx0XHQgKiBhbmQgYXJlIHJlc3BvbnNpYmxlIGZvciByZXNldHRpbmcgdGhlIHRhaWwgYmFjayB0byAwLiBPdGhlcndpc2UsIGlmXG4gNTg3Olx0XHRcdCAqIHRoZSBjbXB4Y2hnIG9wZXJhdGlvbiBmYWlscywgd2Ugc2lnbmFsIHRoZSBuZXh0IHdhaXRlciB0byB0YWtlIGV4aXRcbiA1ODg6XHRcdFx0ICogYW5kIHRyeSB0aGUgc2FtZS4gRm9yIGEgd2FpdGVyIHdpdGggdGFpbCBub2RlICYjMzk7biYjMzk7OlxuIDU4OTpcdFx0XHQgKlxuIDU5MDpcdFx0XHQgKiBuLCosKiAtXHUwMDNlIDAsKiwqXG4gNTkxOlx0XHRcdCAqXG4gNTkyOlx0XHRcdCAqIFdoZW4gcGVyZm9ybWluZyBjbXB4Y2hnIGZvciB0aGUgd2hvbGUgd29yZCAoTlJfQ1BVUyBcdTAwM2UgMTZrKSwgaXQgaXNcbiA1OTM6XHRcdFx0ICogcG9zc2libGUgbG9ja2VkL3BlbmRpbmcgYml0cyBrZWVwIGNoYW5naW5nIGFuZCB3ZSBzZWUgZmFpbHVyZXMgZXZlblxuIDU5NDpcdFx0XHQgKiB3aGVuIHdlIHJlbWFpbiB0aGUgaGVhZCBvZiB3YWl0IHF1ZXVlLiBIb3dldmVyLCBldmVudHVhbGx5LFxuIDU5NTpcdFx0XHQgKiBwZW5kaW5nIGJpdCBvd25lciB3aWxsIHVuc2V0IHRoZSBwZW5kaW5nIGJpdCwgYW5kIG5ldyB3YWl0ZXJzXG4gNTk2Olx0XHRcdCAqIHdpbGwgcXVldWUgYmVoaW5kIHVzLiBUaGlzIHdpbGwgbGVhdmUgdGhlIGxvY2sgb3duZXIgaW5cbiA1OTc6XHRcdFx0ICogY2hhcmdlLCBhbmQgaXQgd2lsbCBldmVudHVhbGx5IGVpdGhlciBzZXQgbG9ja2VkIGJpdCB0byAwLCBvclxuIDU5ODpcdFx0XHQgKiBsZWF2ZSBpdCBhcyAxLCBhbGxvd2luZyB1cyB0byBtYWtlIHByb2dyZXNzLlxuIDU5OTpcdFx0XHQgKlxuIDYwMDpcdFx0XHQgKiBXZSB0ZXJtaW5hdGUgdGhlIHdob2xlIHdhaXQgcXVldWUgZm9yIHR3byByZWFzb25zLiBGaXJzdGx5LFxuIDYwMTpcdFx0XHQgKiB3ZSBlc2NoZXcgcGVyLXdhaXRlciB0aW1lb3V0cyB3aXRoIG9uZSBhcHBsaWVkIGF0IHRoZSBoZWFkIG9mXG4gNjAyOlx0XHRcdCAqIHRoZSB3YWl0IHF1ZXVlLiAgVGhpcyBhbGxvd3MgZXZlcnlvbmUgdG8gYnJlYWsgb3V0IGZhc3RlclxuIDYwMzpcdFx0XHQgKiBvbmNlIHdlJiMzOTt2ZSBzZWVuIHRoZSBvd25lciAvIHBlbmRpbmcgd2FpdGVyIG5vdCByZXNwb25kaW5nIGZvclxuIDYwNDpcdFx0XHQgKiB0aGUgdGltZW91dCBkdXJhdGlvbiBmcm9tIHRoZSBoZWFkLiAgU2Vjb25kbHksIGl0IGF2b2lkc1xuIDYwNTpcdFx0XHQgKiBjb21wbGljYXRlZCBzeW5jaHJvbml6YXRpb24sIGJlY2F1c2Ugd2hlbiBub3QgbGVhdmluZyBpbiBGSUZPXG4gNjA2Olx0XHRcdCAqIG9yZGVyLCBwcmV2JiMzOTtzIG5leHQgcG9pbnRlciBuZWVkcyB0byBiZSBmaXhlZCB1cCBldGMuXG4gNjA3Olx0XHRcdCAqL1xuIDYwODpcdFx0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiA2MDk6XHRcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgVkFMKTtcbiA2MTA6XHRcdFx0XHRXUklURV9PTkNFKG5leHQtXHUwMDNlbG9ja2VkLCBSRVNfVElNRU9VVF9WQUwpO1xuIDYxMTpcdFx0XHR9XG4gNjEyOlx0XHRcdGxvY2tldmVudF9pbmMocnFzcGlubG9ja19sb2NrX3RpbWVvdXQpO1xuIDYxMzpcdFx0XHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XG4gNjE0Olx0XHR9XG4gNjE1Olx0XG4gNjE2Olx0XHQvKlxuIDYxNzpcdFx0ICogY2xhaW0gdGhlIGxvY2s6XG4gNjE4Olx0XHQgKlxuIDYxOTpcdFx0ICogbiwwLDAgLVx1MDAzZSAwLDAsMSA6IGxvY2ssIHVuY29udGVuZGVkXG4gNjIwOlx0XHQgKiAqLCosMCAtXHUwMDNlICosKiwxIDogbG9jaywgY29udGVuZGVkXG4gNjIxOlx0XHQgKlxuIDYyMjpcdFx0ICogSWYgdGhlIHF1ZXVlIGhlYWQgaXMgdGhlIG9ubHkgb25lIGluIHRoZSBxdWV1ZSAobG9jayB2YWx1ZSA9PSB0YWlsKVxuIDYyMzpcdFx0ICogYW5kIG5vYm9keSBpcyBwZW5kaW5nLCBjbGVhciB0aGUgdGFpbCBjb2RlIGFuZCBncmFiIHRoZSBsb2NrLlxuIDYyNDpcdFx0ICogT3RoZXJ3aXNlLCB3ZSBvbmx5IG5lZWQgdG8gZ3JhYiB0aGUgbG9jay5cbiA2MjU6XHRcdCAqL1xuIDYyNjpcdFxuIDYyNzpcdFx0LypcbiA2Mjg6XHRcdCAqIE5vdGU6IGF0IHRoaXMgcG9pbnQ6ICh2YWwgXHUwMDI2IF9RX1BFTkRJTkdfTUFTSykgPT0gMCwgYmVjYXVzZSBvZiB0aGVcbiA2Mjk6XHRcdCAqICAgICAgIGFib3ZlIHdhaXQgY29uZGl0aW9uLCB0aGVyZWZvcmUgYW55IGNvbmN1cnJlbnQgc2V0dGluZyBvZlxuIDYzMDpcdFx0ICogICAgICAgUEVORElORyB3aWxsIG1ha2UgdGhlIHVuY29udGVuZGVkIHRyYW5zaXRpb24gZmFpbC5cbiA2MzE6XHRcdCAqL1xuIDYzMjpcdFx0aWYgKCh2YWwgXHUwMDI2IF9RX1RBSUxfTUFTSykgPT0gdGFpbCkge1xuIDYzMzpcdFx0XHRpZiAoYXRvbWljX3RyeV9jbXB4Y2hnX3JlbGF4ZWQoXHUwMDI2bG9jay1cdTAwM2V2YWwsIFx1MDAyNnZhbCwgX1FfTE9DS0VEX1ZBTCkpXG4gNjM0Olx0XHRcdFx0Z290byByZWxlYXNlOyAvKiBObyBjb250ZW50aW9uICovXG4gNjM1Olx0XHR9XG4gNjM2Olx0XG4gNjM3Olx0XHQvKlxuIDYzODpcdFx0ICogRWl0aGVyIHNvbWVib2R5IGlzIHF1ZXVlZCBiZWhpbmQgdXMgb3IgX1FfUEVORElOR19WQUwgZ290IHNldFxuIDYzOTpcdFx0ICogd2hpY2ggd2lsbCB0aGVuIGRldGVjdCB0aGUgcmVtYWluaW5nIHRhaWwgYW5kIHF1ZXVlIGJlaGluZCB1c1xuIDY0MDpcdFx0ICogZW5zdXJpbmcgd2UmIzM5O2xsIHNlZSBhIEBuZXh0LlxuIDY0MTpcdFx0ICovXG4gNjQyOlx0XHRzZXRfbG9ja2VkKGxvY2spO1xuIDY0MzpcdFxuIDY0NDpcdFx0LypcbiA2NDU6XHRcdCAqIGNvbnRlbmRlZCBwYXRoOyB3YWl0IGZvciBuZXh0IGlmIG5vdCBvYnNlcnZlZCB5ZXQsIHJlbGVhc2UuXG4gNjQ2Olx0XHQgKi9cbiA2NDc6XHRcdGlmICghbmV4dClcbiA2NDg6XHRcdFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcdTAwMjZub2RlLVx1MDAzZW5leHQsIChWQUwpKTtcbiA2NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMwMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBSZXNpbGllbnQgUXVldWVkIFNwaW4gTG9jayBTbG93IFBhdGgqKgoKT2theSwgc28gSSYjMzk7dmUgZm91bmQgYSBwcm9taXNpbmcgdGFyZ2V0OiB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbi4gSXQmIzM5O3MgcmlnaHQgdGhlcmUsIGV4cG9ydGVkLCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgY29yZSBCUEYgbG9ja2luZyBtZWNoYW5pc20uIEl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjb2RlIGFuZCB3ZWxsIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbi4KCk15IGluaXRpYWwgdGhvdWdodHMgb24gdGhlIGNvbmZpZ3MgbmVlZGVkIHdlcmUgYSBsaXR0bGUgbXVkZGxlZC4gSSBuZWVkZWQgdG8gZW5zdXJlIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgb2J2aW91c2x5LiBJIGFsc28gdGhvdWdodCBgUVVFVUVEX1NQSU5MT0NLU2Agd2FzIGEgdXNlci1zZXR0YWJsZSBvcHRpb24uIEJ1dCBhZnRlciBhIHNlY29uZCBsb29rLCBJIHJlYWxpemUgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGFjdHVhbGx5IGEgYGRlZl9ib29sYCwgdGllZCB0byBgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU2AuIEluIG90aGVyIHdvcmRzLCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50LiBTbywgbGlzdGluZyBpdCBtaWdodCBub3QgYmUgcmVsZXZhbnQsIGFuZCBsaXN0aW5nIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbi4KCkhhbmcgb24uLi4gd2hhdCBhYm91dCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgKmFsc28qIG5vdCBhIGRpcmVjdCB1c2VyIGNvbmZpZywgaXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4gU28gdGhlICpvbmx5KiB0aGluZyBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIGlzIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGJlZm9yZSBJIGxhdW5jaCBpbnRvIGZ1enppbmcsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJJiMzOTttIG1pc3NpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIENhbGxlcnMgb2YgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEl0JiMzOTtzIGEga2V5IHBhcnQgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgY2FsbCBzaXRlcyBpcyBjcml0aWNhbCBmb3IgYW5hbHl6aW5nIHBlcmZvcm1hbmNlLCBkZWJ1Z2dpbmcgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgbWF5YmUgZXZlbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc2xvd3BhdGggaXMgZW50ZXJlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcgaW4uIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBncmVwIG9yIGEgc2ltaWxhciBzZWFyY2gsIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgZG93biBpdHMgY2FsbGVycyBwcmV0dHkgcXVpY2tseS4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGlzIGNsZWFyIGFuZCBJIGNhbiBuYXJyb3cgZG93biB0aGUgc2VhcmNoLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGZyZXF1ZW50bHkgdGhlIHNsb3cgcGF0aCBpcyB0cmlnZ2VyZWQgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gVGhlIGdvYWwgaGVyZSBpcyBhIGZ1bGwgZGVwZW5kZW5jeSBncmFwaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9NDA9ZXh0ZXJuIGludCByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtNDEtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDo0MjpleHRlcm4gaW50IHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC00My0jZW5kaWZcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD0xNjk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTg4LVx0XHRyZXR1cm4gMDtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4OTpcdHJldHVybiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChsb2NrLCB2YWwpO1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkwLX1cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0yNjE9aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3Rhc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzoyNzA6XHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI3MS1cdCAqIGRldGVjdGlvbiBlbnRyeS4gTm8gbmVlZCB0byBvYnRhaW4gaXQgaGVyZS5cbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz0zMDU9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHFub2RlLCBycW5vZGVzW19RX01BWF9OT0RFU10pO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMxNDogKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCAtIGFjcXVpcmUgdGhlIHF1ZXVlZCBzcGlubG9ja1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzE1LSAqIEBsb2NrOiBQb2ludGVyIHRvIHF1ZXVlZCBzcGlubG9jayBzdHJ1Y3R1cmVcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMzgtICovXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMzk6aW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgocnFzcGlubG9ja190ICpsb2NrLCB1MzIgdmFsKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjYtfVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc3NgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzX3NwaW5fbG9ja2AgVXNhZ2UqKgoKUmlnaHQsIHNvIHRoaXMgaXMgY2FsbGVkIGZyb20gYHJlc19zcGluX2xvY2tgIHdpdGhpbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmhgLiBUaGUgYHJxc3BpbmxvY2suaGAgaGVhZGVyIGZpbGUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZXNvdXJjZS1hd2FyZSBzcGlubG9ja3MsIHByb2JhYmx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHJ1bnF1ZXVlIG1hbmFnZW1lbnQuIFRoYXQgdGVsbHMgbWUgYSBsb3QgYWxyZWFkeSwgYWN0dWFsbHkuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpjb250ZXh0Ki4gS25vd2luZyB3aGVyZSBgcmVzX3NwaW5fbG9ja2AgaXMgdXNlZCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbGVycy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBncmVwLCBgY3Njb3BlYC4uLiB3aGF0ZXZlciYjMzk7cyBhcHByb3ByaWF0ZSBmb3IgdGhpcyBjb2RlYmFzZSAtIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGByZXNfc3Bpbl9sb2NrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2UgbG9ja3MgYXJlIGJlaW5nIGFjcXVpcmVkIGFuZCB3aGF0IGRhdGEgdGhleSYjMzk7cmUgcHJvdGVjdGluZyB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlc2UgcnVucXVldWUgbG9ja3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNoZWNrIHNob3VsZCB0ZWxsIG1lIGFsbCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZnVuY3Rpb24gY2FsbHMgdG8gYHJlc19zcGluX2xvY2tgLCBhbmQgd2hhdCBjb250ZXh0IGl0IGlzIGNhbGxlZCBpbi4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzX3NwaW5fbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODY1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD0xOT1zdHJ1Y3QgcnFzcGlubG9jayB7XG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjgtICovXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyOTpzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sge1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMzAtXHR1MzIgdmFsO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oPTExMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcmVsZWFzZV9oZWxkX2xvY2tfZW50cnkodm9pZClcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xNjAtLyoqXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoxNjE6ICogcmVzX3NwaW5fbG9jayAtIGFjcXVpcmUgYSBxdWV1ZWQgc3BpbmxvY2tcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE2Mi0gKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTY4LSAqL1xuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTcwLXtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODAtXHQgKiBcdTAwM2NOTUlcdTAwM2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4MTpcdCAqIHJlc19zcGluX2xvY2soQSkgLS1cdTAwM2UgbWlzc2VkIEFBLCBsZWFkcyB0byB0aW1lb3V0XG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODItXHQgKiBcdTAwM2MvTk1JXHUwMDNlXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkzLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTk0OiNkZWZpbmUgcmVzX3NwaW5fbG9jayhsb2NrKSAoeyBncmFiX2hlbGRfbG9ja19lbnRyeShsb2NrKTsgcmVzaWxpZW50X3Rhc19zcGluX2xvY2sobG9jayk7IH0pXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xOTUtXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTk4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCByZXNfc3Bpbl91bmxvY2socnFzcGlubG9ja190ICpsb2NrKVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxMy1cdCAqIFx1MDAzY05NSVx1MDAzZVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjE0Olx0ICogcmVzX3NwaW5fbG9jayhBKSAtLVx1MDAzZSBtaXNzZWQgQUEsIGxlYWRzIHRvIHRpbWVvdXRcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxNS1cdCAqIFx1MDAzYy9OTUlcdTAwM2Vcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjQtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyMjU6I2RlZmluZSByYXdfcmVzX3NwaW5fbG9ja19pbml0KGxvY2spICh7ICoobG9jaykgPSAocnFzcGlubG9ja190KV9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7IH0pXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjYtI2Vsc2VcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIyNzojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2luaXQobG9jaykgKHsgKihsb2NrKSA9IChycXNwaW5sb2NrX3QpezB9OyB9KVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjI4LSNlbmRpZlxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjI5LVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjMwOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2sobG9jaykgICAgICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzEtXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzMtXHRcdHByZWVtcHRfZGlzYWJsZSgpOyAgICAgICAgICAgICAgICAgXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIzNDpcdFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spO1x0ICAgXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIzNS1cdFx0aWYgKF9fcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0MS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjI0MjojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDMtXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0Ni1cdFx0cHJlZW1wdF9kaXNhYmxlKCk7ICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyNDc6XHRcdF9fcmV0ID0gcmVzX3NwaW5fbG9jayhsb2NrKTsgICAgICBcXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjQ4LVx0XHRpZiAoX19yZXQpIHsgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTI2MT1zdHJ1Y3QgYnRmX3JlY29yZCB7XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0yNjQtXHRpbnQgc3Bpbl9sb2NrX29mZjtcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY1Olx0aW50IHJlc19zcGluX2xvY2tfb2ZmO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNjYtXHRpbnQgdGltZXJfb2ZmO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzQ2PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqYnRmX2ZpZWxkX3R5cGVfbmFtZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zNTEtXHRjYXNlIEJQRl9SRVNfU1BJTl9MT0NLOlxuaW5jbHVkZS9saW51eC9icGYuaDozNTI6XHRcdHJldHVybiBcJiMzNDticGZfcmVzX3NwaW5fbG9ja1wmIzM0OztcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUzLVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD0zODg9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfc2l6ZShlbnVtIGJ0Zl9maWVsZF90eXBlIHR5cGUpXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC0zOTMtXHRjYXNlIEJQRl9SRVNfU1BJTl9MT0NLOlxuaW5jbHVkZS9saW51eC9icGYuaDozOTQ6XHRcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMzk1LVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDI3LVx0Y2FzZSBCUEZfUkVTX1NQSU5fTE9DSzpcbmluY2x1ZGUvbGludXgvYnBmLmg6NDI4Olx0XHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtNDI5LVx0Y2FzZSBCUEZfVElNRVI6XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTI2Mj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIwLVx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2V6YXBfbXV0ZXgpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMTpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jLTMyMi1cdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTQ3Mz1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg1LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ4NjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg3LVx0XHQvKiBNYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdG8gYWRkcmVzcyBpbXBvc3NpYmxlIGNhc2UgKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVxua2VybmVsL2JwZi9hcmVuYS5jOjcwMjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAzLVx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04Mzg9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg2Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo4Njc6XHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODY4LVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz05Mjg9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk0Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo5NDM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxua2VybmVsL2JwZi9hcmVuYS5jLTk0NC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9OTYyPXN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTc1LVxua2VybmVsL2JwZi9hcmVuYS5jOjk3NjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcbmtlcm5lbC9icGYvYXJlbmEuYy05NzctXHRcdHNjaGVkdWxlX3dvcmsod29yayk7XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTI0Mz1zdGF0aWMgaW50IGJwZl9zZWxlbV91bmxpbmtfbWFwKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjU0LVx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgbG9jYWxfc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjU1Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNTYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNzA9aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNzktXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjgwOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yODEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zMDA9aW50IGJwZl9zZWxlbV91bmxpbmsoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTctXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzE4Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NhbF9zdG9yYWdlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0zNTA9c3RhdGljIHZvaWQgYnBmX3NlbGVtX3VubGlua19ub2ZhaWwoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjMtXHRcdGIgPSBiID8gOiBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjM2NDpcdFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjUtXHRcdGlmICghZXJyKSB7XG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM4NC1cdFx0ICogZGVzdHJveShzZWxlbTEpIHdpbGwgYmUgYWJsZSB0byBmcmVlIHRoZSBzcGVjaWFsIGZpZWxkIGFzc29jaWF0ZWRcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozODU6XHRcdCAqIHdpdGggc2VsZW0xIGFzIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoKSByZXR1cm5zIC1FVElNRURPVVQuXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzg2LVx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzkyLVx0aWYgKGxvY2FsX3N0b3JhZ2UpIHtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozOTM6XHRcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWxfc3RvcmFnZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzk0LVx0XHRpZiAoIWVycikge1xuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz00NDE9dm9pZCBfX2JwZl9sb2NhbF9zdG9yYWdlX2luc2VydF9jYWNoZShzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2UgKmxvY2FsX3N0b3JhZ2UsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cdCAqL1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjQ1MzpcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jYWxfc3RvcmFnZS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDU0LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDc2PWludCBicGZfbG9jYWxfc3RvcmFnZV9hbGxvYyh2b2lkICpvd25lcixcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDk3LVx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnN0b3JhZ2UtXHUwMDNlbGlzdCk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDk4Olx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZzdG9yYWdlLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ5OS1cdHN0b3JhZ2UtXHUwMDNlb3duZXIgPSBvd25lcjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNTA1LVx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgc3RvcmFnZSk7XG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NTA2Olx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy01MDctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz01NDc9YnBmX2xvY2FsX3N0b3JhZ2VfdXBkYXRlKHZvaWQgKm93bmVyLCBzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTAtXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NjExOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NhbF9zdG9yYWdlLVx1MDAzZWxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MzktXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NjQwOlx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZWxvY2ssIGJfZmxhZ3MpO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTY0MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTc3Mz1icGZfbG9jYWxfc3RvcmFnZV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTc5OS1cdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNtYXAtXHUwMDNlYnVja2V0c1tpXS5saXN0KTtcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo4MDA6XHRcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2c21hcC1cdTAwM2VidWNrZXRzW2ldLmxvY2spO1xua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTgwMS1cdH1cbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTI5Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfcHVzaF9mcmVlKHN0cnVjdCBicGZfbHJ1X2xpc3QgKmwsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMDMtXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjMwNDpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmwtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTMwNS1cdFx0V1JJVEVfT05DRShub2RlLVx1MDAzZXBlbmRpbmdfZnJlZSwgMSk7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz0zMTI9c3RhdGljIHZvaWQgYnBmX2xydV9saXN0X3BvcF9mcmVlX3RvX2xvY2FsKHN0cnVjdCBicGZfbHJ1ICpscnUsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMTktXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjMyMDpcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZsLVx1MDAzZWxvY2spKVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMjEtXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTQwMz1zdGF0aWMgc3RydWN0IGJwZl9scnVfbm9kZSAqYnBmX3BlcmNwdV9scnVfcG9wX2ZyZWUoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxMy1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDE0Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bC1cdTAwM2Vsb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxNS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MzY9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9jb21tb25fbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy00NDctXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQ0ODpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmxvY19sLVx1MDAzZWxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDQ5LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ4Mi1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDgzOlx0XHRpZiAoIXJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3RlYWxfbG9jX2wtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ4NC1cdFx0XHRub2RlID0gX19sb2NhbF9saXN0X3BvcF9mcmVlKHN0ZWFsX2xvY19sKTtcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5Ny1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDk4Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bG9jX2wtXHUwMDNlbG9jaywgZmxhZ3MpKSB7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5OS1cdFx0Lypcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTUyNT1zdGF0aWMgdm9pZCBicGZfY29tbW9uX2xydV9wdXNoX2ZyZWUoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTUzOS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NTQwOlx0XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsb2NfbC1cdTAwM2Vsb2NrLCBmbGFncykpIHtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTQxLVx0XHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VwZW5kaW5nX2ZyZWUsIDEpO1xuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NTY1PXN0YXRpYyB2b2lkIGJwZl9wZXJjcHVfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTcyLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo1NzM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZsLVx1MDAzZWxvY2ssIGZsYWdzKSkge1xua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy01NzQtXHRcdFdSSVRFX09OQ0Uobm9kZS1cdTAwM2VwZW5kaW5nX2ZyZWUsIDEpO1xuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NjU2PXN0YXRpYyB2b2lkIGJwZl9scnVfbG9jYWxsaXN0X2luaXQoc3RydWN0IGJwZl9scnVfbG9jYWxsaXN0ICpsb2NfbCwgaW50IGNwdSlcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY2Mi1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjYzOlx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZsb2NfbC1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjY0LX1cbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxuLS1cbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjc3LVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2Nzg6XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNmwtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY3OS19XG4tLVxua2VybmVsL2JwZi9idGYuYz0zNjU1PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTM2NjMtXHRcdHsgQlBGX1NQSU5fTE9DSywgXCYjMzQ7YnBmX3NwaW5fbG9ja1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYzozNjY0Olx0XHR7IEJQRl9SRVNfU1BJTl9MT0NLLCBcJiMzNDticGZfcmVzX3NwaW5fbG9ja1wmIzM0OywgdHJ1ZSB9LFxua2VybmVsL2JwZi9idGYuYy0zNjY1LVx0XHR7IEJQRl9USU1FUiwgXCYjMzQ7YnBmX3RpbWVyXCYjMzQ7LCB0cnVlIH0sXG4tLVxua2VybmVsL2JwZi9idGYuYz00MTE4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtNDE0MC1cdHJlYy1cdTAwM2VzcGluX2xvY2tfb2ZmID0gLUVJTlZBTDtcbmtlcm5lbC9icGYvYnRmLmM6NDE0MTpcdHJlYy1cdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiA9IC1FSU5WQUw7XG5rZXJuZWwvYnBmL2J0Zi5jLTQxNDItXHRyZWMtXHUwMDNldGltZXJfb2ZmID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzItXHRcdFx0LyogQ2FjaGUgb2Zmc2V0IGZvciBmYXN0ZXIgbG9va3VwIGF0IHJ1bnRpbWUgKi9cbmtlcm5lbC9icGYvYnRmLmM6NDE3MzpcdFx0XHRyZWMtXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgPSByZWMtXHUwMDNlZmllbGRzW2ldLm9mZnNldDtcbmtlcm5lbC9icGYvYnRmLmMtNDE3NC1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjEtXG5rZXJuZWwvYnBmL2J0Zi5jOjQyMjI6XHRpZiAocmVjLVx1MDAzZXNwaW5fbG9ja19vZmYgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZWMtXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgXHUwMDNlPSAwKSB7XG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjMtXHRcdHJldCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9idGYuYy00MjI5LVx0ICAgICBidGZfcmVjb3JkX2hhc19maWVsZChyZWMsIEJQRl9SQl9ST09UKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL2J0Zi5jOjQyMzA6XHRcdCAocmVjLVx1MDAzZXNwaW5fbG9ja19vZmYgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJlYy1cdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiBcdTAwM2MgMCkpIHtcbmtlcm5lbC9icGYvYnRmLmMtNDIzMS1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzk9c3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE0NC1cdFx0SU5JVF9ITElTVF9OVUxMU19IRUFEKFx1MDAyNmh0YWItXHUwMDNlYnVja2V0c1tpXS5oZWFkLCBpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE0NTpcdFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbaV0ucmF3X2xvY2spO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ2LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNTA9c3RhdGljIGlubGluZSBpbnQgaHRhYl9sb2NrX2J1Y2tldChzdHJ1Y3QgYnVja2V0ICpiLCB1bnNpZ25lZCBsb25nICpwZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MTU1Olx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZiLVx1MDAzZXJhd19sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNTYtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYz0zMjI9c3RhdGljIGxvbmcgdHJpZV91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy0zNDUtXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6MzQ2Olx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cmllLVx1MDAzZWxvY2ssIGlycV9mbGFncyk7XG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ3LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NDU3PXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcbi0tXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNDcxLVxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ3MjpcdHJldCA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHJpZS1cdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xua2VybmVsL2JwZi9scG1fdHJpZS5jLTQ3My1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTU3MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnRyaWVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU5Ny1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo1OTg6XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNnRyaWUtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNTk5LVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM9Nj1pbnQgcGNwdV9mcmVlbGlzdF9pbml0KHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzKVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTYtXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jOjE3Olx0XHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFx1MDAyNmhlYWQtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTE4LVx0XHRoZWFkLVx1MDAzZWZpcnN0ID0gTlVMTDtcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTM1PXN0YXRpYyBpbmxpbmUgYm9vbCBfX19wY3B1X2ZyZWVsaXN0X3B1c2goc3RydWN0IHBjcHVfZnJlZWxpc3RfaGVhZCAqaGVhZCxcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTM3LXtcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM6Mzg6XHRpZiAocmF3X3Jlc19zcGluX2xvY2soXHUwMDI2aGVhZC1cdTAwM2Vsb2NrKSlcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMzktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTQ1PXZvaWQgX19wY3B1X2ZyZWVsaXN0X3B1c2goc3RydWN0IHBjcHVfZnJlZWxpc3QgKnMsXG4tLVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy01OC1cdFx0XHRoZWFkID0gcGVyX2NwdV9wdHIocy1cdTAwM2VmcmVlbGlzdCwgY3B1KTtcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM6NTk6XHRcdFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrKFx1MDAyNmhlYWQtXHUwMDNlbG9jaykpXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTYwLVx0XHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYz0xMDA9c3RhdGljIHN0cnVjdCBwY3B1X2ZyZWVsaXN0X25vZGUgKl9fX3BjcHVfZnJlZWxpc3RfcG9wKHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzKVxuLS1cbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTA5LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzoxMTA6XHRcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZoZWFkLVx1MDAzZWxvY2spKVxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy0xMTEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtODEtXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo4MjpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cXMtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy04My1cbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz05NT1zdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxuLS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTEwMS1cbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEwMjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnFzLVx1MDAzZWxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTEwMy1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz0xMjU9c3RhdGljIGxvbmcgX19zdGFja19tYXBfZ2V0KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCBib29sIGRlbGV0ZSlcbi0tXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzItXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzoxMzM6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZxcy1cdTAwM2Vsb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzQtXHRcdHJldHVybiAtRUJVU1k7XG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9MTgyPXN0YXRpYyBsb25nIHF1ZXVlX3N0YWNrX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTk4LVxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM6MTk5Olx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cXMtXHUwMDNlbG9jaywgaXJxX2ZsYWdzKSlcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jLTIwMC1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL3JpbmdidWYuYz0xNzI9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUsIGJvb2wgb3ZlcndyaXRlX21vZGUpXG4tLVxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTc5LVxua2VybmVsL2JwZi9yaW5nYnVmLmM6MTgwOlx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZyYi1cdTAwM2VzcGlubG9jayk7XG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xODEtXHRhdG9taWNfc2V0KFx1MDAyNnJiLVx1MDAzZWJ1c3ksIDApO1xuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTQ2Mz1zdGF0aWMgdm9pZCAqX19icGZfcmluZ2J1Zl9yZXNlcnZlKHN0cnVjdCBicGZfcmluZ2J1ZiAqcmIsIHU2NCBzaXplKVxuLS1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jLTQ3Ny1cbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjQ3ODpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJiLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL3JpbmdidWYuYy00NzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTI2MT1pbnQgX19sb2NrZnVuYyByZXNpbGllbnRfdGFzX3NwaW5fbG9jayhycXNwaW5sb2NrX3QgKmxvY2spXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY3LVx0Lypcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI2ODpcdCAqIFdlIGFyZSBlaXRoZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gcmVzX3NwaW5fbG9jayBhZnRlciBncmFiYmluZyB0aGVcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NjczPXN0YXRpYyB2b2lkIGJwZl9wcm9nX3JlcG9ydF9ycXNwaW5sb2NrX3Zpb2xhdGlvbihjb25zdCBjaGFyICpzdHIsIHZvaWQgKmxvY2ssIGJvb2wgaXJxc2F2ZSlcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODItXHRicGZfc3RyZWFtX3N0YWdlKHNzLCBwcm9nLCBCUEZfU1RERVJSLCAoe1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlx0XHRicGZfc3RyZWFtX3ByaW50ayhzcywgXCYjMzQ7RVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxuXCYjMzQ7LCBzdHIsIGlycXNhdmUgPyBcJiMzNDtfaXJxc2F2ZVwmIzM0OyA6IFwmIzM0O1wmIzM0Oyk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02ODQtXHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtBdHRlbXB0ZWQgbG9jayAgID0gMHglcHhcXG5cJiMzNDssIGxvY2spO1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5My1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY5NDpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2soc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTctXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHJxc3BpbmxvY2tfdCkgIT0gc2l6ZW9mKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jaykpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzAwLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MDE6XHRyZXQgPSByZXNfc3Bpbl9sb2NrKChycXNwaW5sb2NrX3QgKilsb2NrKTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcwMi1cdGlmICh1bmxpa2VseShyZXQpKSB7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzA5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNy17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzIzLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzI0Olx0cmV0ID0gcmVzX3NwaW5fbG9jaygocnFzcGlubG9ja190ICopbG9jayk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MjUtXHRpZiAodW5saWtlbHkocmV0KSkge1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNC1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjczNTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNi17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9NzQ3PUJURl9LRlVOQ1NfU1RBUlQocnFzcGlubG9ja19rZnVuY19pZHMpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9jaylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc1MDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSwgS0ZfUkVUX05VTEwpXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Njk3Nj1zdGF0aWMgaW50IHByb2Nlc3Nfc3Bpbl9sb2NrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzAxMy1cdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDE0Olx0c3Bpbl9sb2NrX29mZiA9IGlzX3Jlc19sb2NrID8gcmVjLVx1MDAzZXJlc19zcGluX2xvY2tfb2ZmIDogcmVjLVx1MDAzZXNwaW5fbG9ja19vZmY7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzAxNS1cdGlmIChzcGluX2xvY2tfb2ZmICE9IHZhbCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDgyMz1CVEZfSUQoc3RydWN0LCBicGZfd3EpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4MjQ6QlRGX0lEKHN0cnVjdCwgYnBmX3Jlc19zcGluX2xvY2spXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4MjUtQlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4ODE9c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3Rhc2tfd29yayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA4ODY6c3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2soY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3BhcmFtICphcmcpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODcte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTAwND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDU5LVx0S0ZfYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjA6XHRLRl9icGZfcmVzX3NwaW5fbG9jayxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA2MS1cdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjI6XHRLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYzLVx0S0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTItI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNTM6QlRGX0lEKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTU1OkJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU2LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjU4PWdldF9rZnVuY19wdHJfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjYWxsZXIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzMwOlx0aWYgKGlzX2tmdW5jX2FyZ19yZXNfc3Bpbl9sb2NrKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZ10pKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzMxLVx0XHRyZXR1cm4gS0ZfQVJHX1BUUl9UT19SRVNfU1BJTl9MT0NLO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQzMz1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0MzktXHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfbG9jYWxfaXJxX3NhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0NDA6XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQxLVx0XHRpcnFfc2F2ZSA9IHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE0NDI6XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQzLVx0XHRcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjMyPXN0YXRpYyBib29sIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MzgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2Mzk6c3RhdGljIGJvb2wgaXNfYnBmX3Jlc19zcGluX2xvY2tfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0MC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NDE6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0Mi1cdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl91bmxvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NDM6XHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjQ0LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NjA9c3RhdGljIGJvb2wga2Z1bmNfc3Bpbl9hbGxvd2VkKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYyLVx0cmV0dXJuIGlzX2JwZl9ncmFwaF9hcGlfa2Z1bmMoYnRmX2lkKSB8fCBpc19icGZfaXRlcl9udW1fYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY2MzpcdCAgICAgICBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhidGZfaWQpIHx8IGlzX2JwZl9hcmVuYV9rZnVuYyhidGZfaWQpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjQtXHQgICAgICAgaXNfYnBmX3N0cmVhbV9rZnVuYyhidGZfaWQpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTkyOD1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ5OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMDpcdFx0XHRpZiAoIWlzX2JwZl9yZXNfc3Bpbl9sb2NrX2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDEtXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMjpcdFx0XHRpZiAobWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjUwMzpcdFx0XHQgICAgbWV0YS1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUwNC1cdFx0XHRcdGZsYWdzIHw9IFBST0NFU1NfU1BJTl9MT0NLO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTA1Olx0XHRcdGlmIChtZXRhLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDYtXHRcdFx0ICAgIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlXSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTM9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NDQtXHRpZiAoIWluc24tXHUwMDNlb2ZmIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTQ1Olx0ICAgIChpbnNuLVx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NDY6XHQgICAgIGluc24tXHUwMDNlaW1tID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk0Ny1cdFx0c3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqYnJhbmNoO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MS1cdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDI6XHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDM6XHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0NC1cdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9MzcwPXN0YXRpYyBpbnQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9jayhpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zNzEte1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozNzI6XHRyYXdfcmVzX3NwaW5fbG9jayhcdTAwMjZycXNwaW5sb2NrKTtcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtMzczLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz0zNzY9c3RhdGljIHZvaWQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfdW5sb2NrKGludCB0aWQgX19tYXliZV91bnVzZWQpXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODAtXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM4MTpzdGF0aWMgc3RydWN0IGxvY2tfdG9ydHVyZV9vcHMgcmF3X3Jlc19zcGluX2xvY2tfb3BzID0ge1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODItXHQud3JpdGVsb2NrXHQ9IHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX2xvY2ssXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODgtXHQucmVhZHVubG9jayAgICAgPSBOVUxMLFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozODk6XHQubmFtZVx0XHQ9IFwmIzM0O3Jhd19yZXNfc3Bpbl9sb2NrXCYjMzQ7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5MC19O1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9MzkyPXN0YXRpYyBpbnQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9ja19pcnEoaW50IHRpZCBfX21heWJlX3VudXNlZClcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5NS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM6Mzk2Olx0cmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZycXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5Ny1cdGN4dC5jdXJfb3BzLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz00MDE9c3RhdGljIHZvaWQgdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfdW5sb2NrX2lycShpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtNDA1LVxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzo0MDY6c3RhdGljIHN0cnVjdCBsb2NrX3RvcnR1cmVfb3BzIHJhd19yZXNfc3Bpbl9sb2NrX2lycV9vcHMgPSB7XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNy1cdC53cml0ZWxvY2tcdD0gdG9ydHVyZV9yYXdfcmVzX3NwaW5fd3JpdGVfbG9ja19pcnEsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTcGluIExvY2sgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgYmVjYXVzZSBpdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLCBib3RoIG9mIHdoaWNoIGFyZSwgb2YgY291cnNlLCBCUEYga2Z1bmNzLiBJdCYjMzk7cyBhbHNvIHV0aWxpemVkIGJ5IGByYXdfcmVzX3NwaW5fbG9ja2AsIGFuZCB0aGF0JiMzOTtzIHVzZWQgYWNyb3NzIHRoZSBCUEYgY29kZWJhc2Ug4oCTIGFyZW5hIG1hbmFnZW1lbnQsIGxvY2FsIHN0b3JhZ2UsIHRoZSBMUlUgbGlzdCwgYWxsIG9mIGl0LiBHaXZlbiB0aGF0IHdpZGVzcHJlYWQgdXNhZ2UsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHN5c2NhbGxzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgYGJwZl9yZXNfc3Bpbl9sb2NrYCwgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAgYXJlbiYjMzk7dCBleHBvcnRlZCBhcyBzdGFuZGFyZCBmdW5jdGlvbnMsIGJ1dCBhcmUgZGVmaW5lZCBwdXJlbHkgYXMga2Z1bmNzLiAqQ2hlY2tzIGludGVybmFsIGRvY3VtZW50YXRpb24qIFllcywgdGhleSBhcmUgaW5kZWVkIGtmdW5jcy4gTm93LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Jlc19zcGluX2xvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4Mi1cdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2ODM6XHRcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcJiMzNDtFUlJPUjogJXMgZm9yIGJwZl9yZXNfc3Bpbl9sb2NrJXNcXG5cJiMzNDssIHN0ciwgaXJxc2F2ZSA/IFwmIzM0O19pcnFzYXZlXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cdFx0YnBmX3N0cmVhbV9wcmludGsoc3MsIFwmIzM0O0F0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcblwmIzM0OywgbG9jayk7XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjkzLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTUte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjY5ODpcdEJVSUxEX0JVR19PTihzaXplb2YocnFzcGlubG9ja190KSAhPSBzaXplb2Yoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKSk7XG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzA5LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xuLS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNy17XG4tLVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM0LVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzM1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3NfX2lycV9mbGFnKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM2LXtcbi0tXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NDc9QlRGX0tGVU5DU19TVEFSVChycXNwaW5sb2NrX2tmdW5jX2lkcylcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0ODpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzQ5LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzUwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLCBLRl9SRVRfTlVMTClcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc1MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIFNwaW4gTG9ja3MgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgc3BpbiBsb2NrIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBicGZfcmVzX3NwaW5fbG9ja2AgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyB0byBpbmNsdWRlIGluIGBGb2N1c1N5bWJvbHNgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4KCk5vdywgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcGxheSBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGlzIHRoYXQgKmFsbCo/IEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgZGlnIGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXMgY29kZS4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHBpZWNlcyBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDIKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBTcGlubG9jayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGBCUEZfU1lTQ0FMTGAsIG5vdGhpbmcgdG9vIG9ic2N1cmUuIExldCYjMzk7cyBzdGFydCBieSBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gUmlnaHQsIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AgaXMgc2VsZWN0ZWQgYnkgYEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NgLiBHb29kLCBnb29kLCB3ZSBjYW4ganVzdCBmb2N1cyBvbiBgQlBGX1NZU0NBTExgIHRoZW4uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgY2xlYW5pbmcgdXAgYSBkZWFkbG9jayBzY2VuYXJpby4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBmaXggYWRkcmVzc2VzIGEgYnVnIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEkgc2VlIHRoZSBjb2RlIHNuaXBwZXQgbm93LCBjaGFuZ2luZyB0aGUgbG9naWMgd2hlcmUgaXQmIzM5O3MgaGFuZGxpbmcgYEVERUFETEtgLCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHF1ZXVlIGRlc3RydWN0aW9uIG9uIGRlYWRsb2NrLCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgLgoKVGhpcyBsb29rcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgY2FsbGVkLCBzcGVjaWZpY2FsbHkgYnkgdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24uIEFuZCB0aGF0JiMzOTtzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIHNwaW5sb2NrIGdldHMgdXNlZCBieSBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAga2Z1bmNzLCBhbmQgYnkgQlBGIG1hcHMgaW50ZXJuYWxseS4gVGhpcyBpcyBhbiBhcmVhIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoJiMzNDssCiAgICAmIzM0O2JwZl9yZXNfc3Bpbl9sb2NrJiMzNDssCiAgICAmIzM0O2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCYjMzQ7LAogICAgJiMzNDticGZfcmVzX3NwaW5fbG9jayYjMzQ7LAogICAgJiMzNDticGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFkbG9jayBoYW5kbGluZyBsb2dpYyBpbiBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB1c2luZyBgYnBmX3Jlc19zcGluX2xvY2tgIGtmdW5jcywgYXMgd2VsbCBhcyBpbnRlcm5hbGx5IGJ5IHZhcmlvdXMgQlBGIG1hcHMuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTozNS40MjAzODUwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjE2NTI3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6MzUuNDIwMzkyMzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjA1NjkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDRmNmQyNjdkMDNmOGFmOTMyZjliMTQyM2FiMDE2ZWY1NTZhZTIzYmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxNjozOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXFxuaW5kZXggZTRlMzM4Y2RiNDM3Yy4uMjEyOWRlZmM0YTlhNyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1xcbisrKyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXFxuQEAgLTU3Miw5ICs1NzIsMTAgQEAgaW50IF9fbG9ja2Z1bmMgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgocnFzcGlubG9ja190ICpsb2NrLCB1MzIgdmFsKVxcbiBcXG4gXFx0LyogRGlzYWJsZSBxdWV1ZSBkZXN0cnVjdGlvbiB3aGVuIHdlIGRldGVjdCBkZWFkbG9ja3MuICovXFxuIFxcdGlmIChyZXQgPT0gLUVERUFETEspIHtcXG4tXFx0XFx0aWYgKCFuZXh0KVxcbitcXHRcXHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcXG4gXFx0XFx0XFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcXHUwMDI2bm9kZS1cXHUwMDNlbmV4dCwgKFZBTCkpO1xcbi1cXHRcXHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXFx1MDAyNm5leHQtXFx1MDAzZWxvY2tlZCk7XFxuK1xcdFxcdFxcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcXHUwMDI2bmV4dC1cXHUwMDNlbG9ja2VkKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRnb3RvIGVycl9yZWxlYXNlX25vZGU7XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjM1Ljk4MzYwNDI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk0MDUzMjkxODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWRsb2NrIGhhbmRsaW5nIGxvZ2ljIGluIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEJQRiByZXNpbGllbnQgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gQlBGIHByb2dyYW1zIHVzaW5nIGBicGZfcmVzX3NwaW5fbG9ja2Aga2Z1bmNzLCBhcyB3ZWxsIGFzIGludGVybmFsbHkgYnkgdmFyaW91cyBCUEYgbWFwcy4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGY2ZDI2N2QwM2Y4YWY5MzJmOWIxNDIzYWIwMTZlZjU1NmFlMjNiZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTY6Mzk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG5pbmRleCBlNGUzMzhjZGI0MzdjLi4yMTI5ZGVmYzRhOWE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcbisrKyBiL2tlcm5lbC9icGYvcnFzcGlubG9jay5jXG5AQCAtNTcyLDkgKzU3MiwxMCBAQCBpbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXG4gXG4gXHQvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi9cbiBcdGlmIChyZXQgPT0gLUVERUFETEspIHtcbi1cdFx0aWYgKCFuZXh0KVxuK1x0XHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcbiBcdFx0XHRuZXh0ID0gc21wX2NvbmRfbG9hZF9yZWxheGVkKFx1MDAyNm5vZGUtXHUwMDNlbmV4dCwgKFZBTCkpO1xuLVx0XHRhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWQoXHUwMDI2bmV4dC1cdTAwM2Vsb2NrZWQpO1xuK1x0XHRcdGFyY2hfbWNzX3NwaW5fdW5sb2NrX2NvbnRlbmRlZChcdTAwMjZuZXh0LVx1MDAzZWxvY2tlZCk7XG4rXHRcdH1cbiBcdFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6MzUuOTgzNjA2Njg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc2MTYyODIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgU3BpbmxvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBpdCdzIGEgdmVyeSBzcGVjaWZpYyBhcmVhLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYgaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2UgbG9vay4gVGhlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byBiZSB0YXJnZXRpbmcgdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24gaXMgbmVjZXNzYXJ5LlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjb2RlIHNuaXBwZXQgaXRzZWxmLiBUaGV5J3ZlIGludHJvZHVjZWQgYSBjb25kaXRpb25hbCB3aXRoaW4gdGhlIGRlYWRsb2NrIGhhbmRsaW5nIChgLUVERUFETEtgKS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBpbXByb3ZlIGhvdyB0aGUgbG9jayBiZWhhdmVzIHdoZW4gYSBkZWFkbG9jayBpcyBkZXRlY3RlZC4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNoZWNrZWQgYGlmICghbmV4dClgLiBOb3csIHRoZXkndmUgcmVwbGFjZWQgdGhhdCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgIGNhbGwgYW5kIHRoZW4gdGhlIGBhcmNoX21jc19zcGluX3VubG9ja19jb250ZW5kZWRgIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgdW5jb25kaXRpb25hbGx5LiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBtb3JlIHJvYnVzdCBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIGNvbnRlbmRlZCBzcGlubG9jayB1bmxvY2tpbmcgaW4gdGhlIHByZXNlbmNlIG9mIGRlYWRsb2Nrcy4gVGhlIGB0cnlfY21weGNoZ190YWlsYCBpcyBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgdGFpbCBvZiB0aGUgbG9jayBxdWV1ZSwgd2hpY2ggd291bGQgbWFrZSBzZW5zZS5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgc3BpbmxvY2sgaXRzZWxmLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gQlBGLiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyB0byBiZSBhY3RpdmU/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIGluIGBycXNwaW5sb2NrLmNgIG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlPyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZpbGUgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCB3aWxsIGJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MsIGFuZCB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBzaWRlIGVmZmVjdHMgaW4gdGhlIEJQRiBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQzLjc0NTI2OTA4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1NDc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcXHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNzEtXFx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MzA1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMTQ6ICogcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGggLSBhY3F1aXJlIHRoZSBxdWV1ZWQgc3BpbmxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzM4LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQzLjkwNDgyMjczN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTIzODA3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgQlBGIFNwaW5sb2NrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGJ1aWxkIG9mIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IHNwZWNpZmljIGZpbGUgZ2V0cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGlzIHRvIGV4YW1pbmUgdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBkZWZpbmVkLCBhbmQgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3B0aW9ucywgaWYgYW55LCBkaXJlY3RseSBpbmZsdWVuY2UgaXRzIGluY2x1c2lvbiwgb3IgaWYgaXQncyBpbmRpcmVjdGx5IGNvbnRyb2xsZWQgdGhyb3VnaCBzb21lIGJyb2FkZXIgQlBGIG9yIHNjaGVkdWxlciBjb25maWd1cmF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyB1c2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjQ5Ljg5NzIwNzAzMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE3NTE0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnFzcGlubG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTktaWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4tLVxcbmtlcm5lbC9icGYvTWFrZWZpbGU9NzU9Q0ZMQUdTX1JFTU9WRV9yaW5nYnVmLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjc2OkNGTEFHU19SRU1PVkVfcnFzcGlubG9jay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjUwLjEzODk2NjM4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQzNTI1NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgIGZ1bmN0aW9uIGlzIGludm9sdmVkLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgYWN0aXZlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBvYnZpb3VzIG9uZS4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgZGl2ZSBpbnRvIGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIGh1bnQgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBkZWZpbml0aW9uIG9yIHVzYWdlIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAuIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGZ1cnRoZXIgcmVmaW5lIHRoZSBjb21waWxhdGlvbiBvciBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLCBiZXNpZGVzIGp1c3QgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLiBGaW5kaW5nIHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBhY3RpdmF0aW9uIHByb2ZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NzAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTo1NC41MjMzMjI0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzNzU5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvcnFzcGlubG9jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI1LSNpbmNsdWRlIFxcdTAwM2Nhc20vYnl0ZW9yZGVyLmhcXHUwMDNlXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6MjY6I2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjctI2luY2x1ZGUgXFx1MDAzY2FzbS9xc3BpbmxvY2suaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTM1LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjM2OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTM3LSNpbmNsdWRlIFxcXCIuLi9sb2NraW5nL3FzcGlubG9jay5oXFxcIlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9Mjk1PUVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yOTYtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Mjk3OiNpZmRlZiBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI5OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6Mzk6NTQuNzI1Nzg5NDk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4NTY2NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNwaW5sb2NrIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgZGVtYW5kaW5nIGBDT05GSUdfUVVFVUVEX1NQSU5MT0NLU2AuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBga2VybmVsL2JwZi9ycXNwaW5sb2NrLmNgLCBhbmQgSSdsbCBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMjk3LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIGNoZWNrIGxpa2UgdGhpcyByZXNpZGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGFjdHVhbCBkZXBlbmRlbmN5IGNoZWNrIG9yIGltcGxlbWVudGF0aW9uIHRoYXQncyB0cmlnZ2VyZWQgd2hlbiB0aGUgQ09ORklHIG9wdGlvbiBpcyBlbmFibGVkLiBUaW1lIHRvIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjM5OjU4LjExMTQ2MDEzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjUzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjkxOlxcdG91dDpcXG4gMjkyOlxcdFxcdHJlbGVhc2VfaGVsZF9sb2NrX2VudHJ5KCk7XFxuIDI5MzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTQ6XFx0fVxcbiAyOTU6XFx0RVhQT1JUX1NZTUJPTF9HUEwocmVzaWxpZW50X3Rhc19zcGluX2xvY2spO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHQjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NcXG4gMjk4OlxcdFxcbiAyOTk6XFx0LypcXG4gMzAwOlxcdCAqIFBlci1DUFUgcXVldWUgbm9kZSBzdHJ1Y3R1cmVzOyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNCBuZXN0ZWRcXG4gMzAxOlxcdCAqIGNvbnRleHRzOiB0YXNrLCBzb2Z0aXJxLCBoYXJkaXJxLCBubWkuXFxuIDMwMjpcXHQgKlxcbiAzMDM6XFx0ICogRXhhY3RseSBmaXRzIG9uZSA2NC1ieXRlIGNhY2hlbGluZSBvbiBhIDY0LWJpdCBhcmNoaXRlY3R1cmUuXFxuIDMwNDpcXHQgKi9cXG4gMzA1OlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4gMzA2OlxcdFxcbiAzMDc6XFx0I2lmbmRlZiByZXNfc21wX2NvbmRfbG9hZF9hY3F1aXJlXFxuIDMwODpcXHQjZGVmaW5lIHJlc19zbXBfY29uZF9sb2FkX2FjcXVpcmUodiwgYykgc21wX2NvbmRfbG9hZF9hY3F1aXJlKHYsIGMpXFxuIDMwOTpcXHQjZW5kaWZcXG4gMzEwOlxcdFxcbiAzMTE6XFx0I2RlZmluZSByZXNfYXRvbWljX2NvbmRfcmVhZF9hY3F1aXJlKHYsIGMpIHJlc19zbXBfY29uZF9sb2FkX2FjcXVpcmUoXFx1MDAyNih2KS1cXHUwMDNlY291bnRlciwgKGMpKVxcbiAzMTI6XFx0XFxuIDMxMzpcXHQvKipcXG4gMzE0OlxcdCAqIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoIC0gYWNxdWlyZSB0aGUgcXVldWVkIHNwaW5sb2NrXFxuIDMxNTpcXHQgKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXFxuIDMxNjpcXHQgKiBAdmFsOiBDdXJyZW50IHZhbHVlIG9mIHRoZSBxdWV1ZWQgc3BpbmxvY2sgMzItYml0IHdvcmRcXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBSZXR1cm46XFxuIDMxOTpcXHQgKiAqIDBcXHRcXHQtIExvY2sgd2FzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseS5cXG4gMzIwOlxcdCAqICogLUVERUFETEtcXHQtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgQUEvQUJCQSBkZWFkbG9jay5cXG4gMzIxOlxcdCAqICogLUVUSU1FRE9VVCAtIExvY2sgYWNxdWlzaXRpb24gZmFpbGVkIGJlY2F1c2Ugb2YgdGltZW91dC5cXG4gMzIyOlxcdCAqXFxuIDMyMzpcXHQgKiAocXVldWUgdGFpbCwgcGVuZGluZyBiaXQsIGxvY2sgdmFsdWUpXFxuIDMyNDpcXHQgKlxcbiAzMjU6XFx0ICogICAgICAgICAgICAgIGZhc3QgICAgIDogICAgc2xvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgIHVubG9ja1xcbiAzMjY6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XFxuIDMyNzpcXHQgKiB1bmNvbnRlbmRlZCAgKDAsMCwwKSAtOi0tXFx1MDAzZSAoMCwwLDEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTotLVxcdTAwM2UgKCosKiwwKVxcbiAzMjg6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0tLS0tLS0uLS0tLS0tLiAgICAgICAgICAgICAvICA6XFxuIDMyOTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICBcXFxcICAgICAgXFxcXCAgICAgICAgICAgIHwgIDpcXG4gMzMwOlxcdCAqIHBlbmRpbmcgICAgICAgICAgICAgICA6ICAgICgwLDEsMSkgKy0tXFx1MDAzZSAoMCwxLDApICAgXFxcXCAgICAgICAgICAgfCAgOlxcbiAzMzE6XFx0ICogICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0nICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICA6XFxuIDMzMjpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgIDpcXG4gMzMzOlxcdCAqIHVuY29udGVuZGVkICAgICAgICAgICA6ICAgIChuLHgseSkgKy0tXFx1MDAzZSAobiwwLDApIC0tJyAgICAgICAgICAgfCAgOlxcbiAzMzQ6XFx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgfCBeLS0nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA6XFxuIDMzNTpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDpcXG4gMzM2OlxcdCAqIGNvbnRlbmRlZCAgICAgICAgICAgICA6ICAgICgqLHgseSkgKy0tXFx1MDAzZSAoKiwwLDApIC0tLVxcdTAwM2UgKCosMCwxKSAtJyAgOlxcbiAzMzc6XFx0ICogICBxdWV1ZSAgICAgICAgICAgICAgIDogICAgICAgICBeLS0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XFxuIDMzODpcXHQgKi9cXG4gMzM5OlxcdGludCBfX2xvY2tmdW5jIHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKHJxc3BpbmxvY2tfdCAqbG9jaywgdTMyIHZhbClcXG4gMzQwOlxcdHtcXG4gMzQxOlxcdFxcdHN0cnVjdCBtY3Nfc3BpbmxvY2sgKnByZXYsICpuZXh0LCAqbm9kZTtcXG4gMzQyOlxcdFxcdHN0cnVjdCBycXNwaW5sb2NrX3RpbWVvdXQgdHM7XFxuIDM0MzpcXHRcXHRpbnQgaWR4LCByZXQgPSAwO1xcbiAzNDQ6XFx0XFx0dTMyIG9sZCwgdGFpbDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0QlVJTERfQlVHX09OKENPTkZJR19OUl9DUFVTIFxcdTAwM2U9ICgxVSBcXHUwMDNjXFx1MDAzYyBfUV9UQUlMX0NQVV9CSVRTKSk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGlmIChyZXNpbGllbnRfdmlydF9zcGluX2xvY2tfZW5hYmxlZCgpKVxcbiAzNDk6XFx0XFx0XFx0cmV0dXJuIHJlc2lsaWVudF92aXJ0X3NwaW5fbG9jayhsb2NrKTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0UkVTX0lOSVRfVElNRU9VVCh0cyk7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdC8qXFxuIDM1NDpcXHRcXHQgKiBXYWl0IGZvciBpbi1wcm9ncmVzcyBwZW5kaW5nLVxcdTAwM2Vsb2NrZWQgaGFuZC1vdmVycyB3aXRoIGEgYm91bmRlZFxcbiAzNTU6XFx0XFx0ICogbnVtYmVyIG9mIHNwaW5zIHNvIHRoYXQgd2UgZ3VhcmFudGVlIGZvcndhcmQgcHJvZ3Jlc3MuXFxuIDM1NjpcXHRcXHQgKlxcbiAzNTc6XFx0XFx0ICogMCwxLDAgLVxcdTAwM2UgMCwwLDFcXG4gMzU4OlxcdFxcdCAqL1xcbiAzNTk6XFx0XFx0aWYgKHZhbCA9PSBfUV9QRU5ESU5HX1ZBTCkge1xcbiAzNjA6XFx0XFx0XFx0aW50IGNudCA9IF9RX1BFTkRJTkdfTE9PUFM7XFxuIDM2MTpcXHRcXHRcXHR2YWwgPSBhdG9taWNfY29uZF9yZWFkX3JlbGF4ZWQoXFx1MDAyNmxvY2stXFx1MDAzZXZhbCxcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAoVkFMICE9IF9RX1BFTkRJTkdfVkFMKSB8fCAhY250LS0pO1xcbiAzNjM6XFx0XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHQvKlxcbiAzNjY6XFx0XFx0ICogSWYgd2Ugb2JzZXJ2ZSBhbnkgY29udGVudGlvbjsgcXVldWUuXFxuIDM2NzpcXHRcXHQgKi9cXG4gMzY4OlxcdFxcdGlmICh2YWwgXFx1MDAyNiB+X1FfTE9DS0VEX01BU0spXFxuIDM2OTpcXHRcXHRcXHRnb3RvIHF1ZXVlO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHQvKlxcbiAzNzI6XFx0XFx0ICogdHJ5bG9jayB8fCBwZW5kaW5nXFxuIDM3MzpcXHRcXHQgKlxcbiAzNzQ6XFx0XFx0ICogMCwwLCogLVxcdTAwM2UgMCwxLCogLVxcdTAwM2UgMCwwLDEgcGVuZGluZywgdHJ5bG9ja1xcbiAzNzU6XFx0XFx0ICovXFxuIDM3NjpcXHRcXHR2YWwgPSBxdWV1ZWRfZmV0Y2hfc2V0X3BlbmRpbmdfYWNxdWlyZShsb2NrKTtcXG4gMzc3OlxcdFxcbiAzNzg6XFx0XFx0LypcXG4gMzc5OlxcdFxcdCAqIElmIHdlIG9ic2VydmUgY29udGVudGlvbiwgdGhlcmUgaXMgYSBjb25jdXJyZW50IGxvY2tlci5cXG4gMzgwOlxcdFxcdCAqXFxuIDM4MTpcXHRcXHQgKiBVbmRvIGFuZCBxdWV1ZTsgb3VyIHNldHRpbmcgb2YgUEVORElORyBtaWdodCBoYXZlIG1hZGUgdGhlXFxuIDM4MjpcXHRcXHQgKiBuLDAsMCAtXFx1MDAzZSAwLDAsMCB0cmFuc2l0aW9uIGZhaWwgYW5kIGl0IHdpbGwgbm93IGJlIHdhaXRpbmdcXG4gMzgzOlxcdFxcdCAqIG9uIEBuZXh0IHRvIGJlY29tZSAhTlVMTC5cXG4gMzg0OlxcdFxcdCAqL1xcbiAzODU6XFx0XFx0aWYgKHVubGlrZWx5KHZhbCBcXHUwMDI2IH5fUV9MT0NLRURfTUFTSykpIHtcXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0XFx0LyogVW5kbyBQRU5ESU5HIGlmIHdlIHNldCBpdC4gKi9cXG4gMzg4OlxcdFxcdFxcdGlmICghKHZhbCBcXHUwMDI2IF9RX1BFTkRJTkdfTUFTSykpXFxuIDM4OTpcXHRcXHRcXHRcXHRjbGVhcl9wZW5kaW5nKGxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjozOTo1OC4xMTE2ODk1NTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0ODkwNDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi5cblxuKipBbmFseXppbmcgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCoqXG5cblJpZ2h0LCBzbyB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgbmVzdGxlZCBpbnNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGJsb2NrLiAgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jeSwgb2YgY291cnNlLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0cyByZWxldmFuY2UuICBJcyBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBvcHRpb24gYXQgcGxheSBoZXJlLCBvciBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgb25lcz8gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhpczsga25vd2luZyBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24uIFRoZSBvYnZpb3VzIHBsYWNlcyB0byBsb29rIHdvdWxkIGJlIGVpdGhlciBga2VybmVsL2JwZi9LY29uZmlnYCAoc2luY2Ugd2UgYXJlIGRpc2N1c3NpbmcgdGhlIGtlcm5lbCkgb3IgbWF5YmUgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgYFFVRVVFRF9TUElOTE9DS1NgIGlzIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBkaXZlIGludG8gdGhvc2UgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MDIuOTYwNjAyMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NTc4NzYxNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFFVRVVFRF9TUElOTE9DS1NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLmxvY2tzPTIzOT1jb25maWcgQVJDSF9VU0VfUVVFVUVEX1NQSU5MT0NLU1xcbi0tXFxua2VybmVsL0tjb25maWcubG9ja3MtMjQxLVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Mjpjb25maWcgUVVFVUVEX1NQSU5MT0NLU1xcbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0My1cXHRkZWZfYm9vbCB5IGlmIEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MDkuNDE4NDg3MDQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NzQwNDg4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNwaW5sb2NrIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHNwaW5sb2NrcyBhcmUgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gSXQgbG9va3MgbGlrZSBgUVVFVUVEX1NQSU5MT0NLU2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCAqcHJvdmlkZWQqIGBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTYCBpcyBhbHNvIHNldC4gVGhhdCdzIHRoZSB0eXBpY2FsIGJlaGF2aW9yIEknZCBleHBlY3QuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIHRoYXQgYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYCBpcyBiZWluZyBjb21waWxlZCAqb25seSogd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IHN1Z2dlc3RzIGEgZGlyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgYW5kIHNvbWUgc3BlY2lmaWMgcXVldWVkIHNwaW5sb2NrIGltcGxlbWVudGF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gTGV0IG1lIGp1bXAgaW50byB0aGUgY29kZSBhbmQgZm9jdXMgb24gYGtlcm5lbC9icGYvcnFzcGlubG9jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU3Mi4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgQlBGLXJlbGF0ZWQgc3BpbmxvY2sgaW50ZXJhY3Rpb24gaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMzNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQwOjEzLjI5MjUzODkxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9ycXNwaW5sb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU1MDpcXHRcXHRcXHRcXHRwcmVmZXRjaHcobmV4dCk7XFxuIDU1MTpcXHRcXHR9XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdC8qXFxuIDU1NDpcXHRcXHQgKiB3ZSdyZSBhdCB0aGUgaGVhZCBvZiB0aGUgd2FpdHF1ZXVlLCB3YWl0IGZvciB0aGUgb3duZXIgXFx1MDAyNiBwZW5kaW5nIHRvXFxuIDU1NTpcXHRcXHQgKiBnbyBhd2F5LlxcbiA1NTY6XFx0XFx0ICpcXG4gNTU3OlxcdFxcdCAqICoseCx5IC1cXHUwMDNlICosMCwwXFxuIDU1ODpcXHRcXHQgKlxcbiA1NTk6XFx0XFx0ICogdGhpcyB3YWl0IGxvb3AgbXVzdCB1c2UgYSBsb2FkLWFjcXVpcmUgc3VjaCB0aGF0IHdlIG1hdGNoIHRoZVxcbiA1NjA6XFx0XFx0ICogc3RvcmUtcmVsZWFzZSB0aGF0IGNsZWFycyB0aGUgbG9ja2VkIGJpdCBhbmQgY3JlYXRlIGxvY2tcXG4gNTYxOlxcdFxcdCAqIHNlcXVlbnRpYWxpdHk7IHRoaXMgaXMgYmVjYXVzZSB0aGUgc2V0X2xvY2tlZCgpIGZ1bmN0aW9uIGJlbG93XFxuIDU2MjpcXHRcXHQgKiBkb2VzIG5vdCBpbXBseSBhIGZ1bGwgYmFycmllci5cXG4gNTYzOlxcdFxcdCAqXFxuIDU2NDpcXHRcXHQgKiBXZSB1c2UgUkVTX0RFRl9USU1FT1VUICogMiBhcyB0aGUgZHVyYXRpb24sIGFzIFJFU19ERUZfVElNRU9VVCBpc1xcbiA1NjU6XFx0XFx0ICogbWVhbnQgdG8gc3BhbiBtYXhpbXVtIGFsbG93ZWQgdGltZSBwZXIgY3JpdGljYWwgc2VjdGlvbiwgYW5kIHdlIG1heVxcbiA1NjY6XFx0XFx0ICogaGF2ZSBib3RoIHRoZSBvd25lciBvZiB0aGUgbG9jayBhbmQgdGhlIHBlbmRpbmcgYml0IHdhaXRlciBhaGVhZCBvZlxcbiA1Njc6XFx0XFx0ICogdXMuXFxuIDU2ODpcXHRcXHQgKi9cXG4gNTY5OlxcdFxcdFJFU19SRVNFVF9USU1FT1VUKHRzLCBSRVNfREVGX1RJTUVPVVQgKiAyKTtcXG4gNTcwOlxcdFxcdHZhbCA9IHJlc19hdG9taWNfY29uZF9yZWFkX2FjcXVpcmUoXFx1MDAyNmxvY2stXFx1MDAzZXZhbCwgIShWQUwgXFx1MDAyNiBfUV9MT0NLRURfUEVORElOR19NQVNLKSB8fFxcbiA1NzE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgUkVTX0NIRUNLX1RJTUVPVVQodHMsIHJldCwgX1FfTE9DS0VEX1BFTkRJTkdfTUFTSykpO1xcbiA1NzI6XFx0XFxuIDU3MzpcXHRcXHQvKiBEaXNhYmxlIHF1ZXVlIGRlc3RydWN0aW9uIHdoZW4gd2UgZGV0ZWN0IGRlYWRsb2Nrcy4gKi9cXG4gNTc0OlxcdFxcdGlmIChyZXQgPT0gLUVERUFETEspIHtcXG4gNTc1OlxcdFxcdFxcdGlmICghdHJ5X2NtcHhjaGdfdGFpbChsb2NrLCB0YWlsLCAwKSkge1xcbiA1NzY6XFx0XFx0XFx0XFx0bmV4dCA9IHNtcF9jb25kX2xvYWRfcmVsYXhlZChcXHUwMDI2bm9kZS1cXHUwMDNlbmV4dCwgKFZBTCkpO1xcbiA1Nzc6XFx0XFx0XFx0XFx0YXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkKFxcdTAwMjZuZXh0LVxcdTAwM2Vsb2NrZWQpO1xcbiA1Nzg6XFx0XFx0XFx0fVxcbiA1Nzk6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xcbiA1ODA6XFx0XFx0fVxcbiA1ODE6XFx0XFxuIDU4MjpcXHR3YWl0cV90aW1lb3V0OlxcbiA1ODM6XFx0XFx0aWYgKHJldCkge1xcbiA1ODQ6XFx0XFx0XFx0LypcXG4gNTg1OlxcdFxcdFxcdCAqIElmIHRoZSB0YWlsIGlzIHN0aWxsIHBvaW50aW5nIHRvIHVzLCB0aGVuIHdlIGFyZSB0aGUgZmluYWwgd2FpdGVyLFxcbiA1ODY6XFx0XFx0XFx0ICogYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgcmVzZXR0aW5nIHRoZSB0YWlsIGJhY2sgdG8gMC4gT3RoZXJ3aXNlLCBpZlxcbiA1ODc6XFx0XFx0XFx0ICogdGhlIGNtcHhjaGcgb3BlcmF0aW9uIGZhaWxzLCB3ZSBzaWduYWwgdGhlIG5leHQgd2FpdGVyIHRvIHRha2UgZXhpdFxcbiA1ODg6XFx0XFx0XFx0ICogYW5kIHRyeSB0aGUgc2FtZS4gRm9yIGEgd2FpdGVyIHdpdGggdGFpbCBub2RlICduJzpcXG4gNTg5OlxcdFxcdFxcdCAqXFxuIDU5MDpcXHRcXHRcXHQgKiBuLCosKiAtXFx1MDAzZSAwLCosKlxcbiA1OTE6XFx0XFx0XFx0ICpcXG4gNTkyOlxcdFxcdFxcdCAqIFdoZW4gcGVyZm9ybWluZyBjbXB4Y2hnIGZvciB0aGUgd2hvbGUgd29yZCAoTlJfQ1BVUyBcXHUwMDNlIDE2ayksIGl0IGlzXFxuIDU5MzpcXHRcXHRcXHQgKiBwb3NzaWJsZSBsb2NrZWQvcGVuZGluZyBiaXRzIGtlZXAgY2hhbmdpbmcgYW5kIHdlIHNlZSBmYWlsdXJlcyBldmVuXFxuIDU5NDpcXHRcXHRcXHQgKiB3aGVuIHdlIHJlbWFpbiB0aGUgaGVhZCBvZiB3YWl0IHF1ZXVlLiBIb3dldmVyLCBldmVudHVhbGx5LFxcbiA1OTU6XFx0XFx0XFx0ICogcGVuZGluZyBiaXQgb3duZXIgd2lsbCB1bnNldCB0aGUgcGVuZGluZyBiaXQsIGFuZCBuZXcgd2FpdGVyc1xcbiA1OTY6XFx0XFx0XFx0ICogd2lsbCBxdWV1ZSBiZWhpbmQgdXMuIFRoaXMgd2lsbCBsZWF2ZSB0aGUgbG9jayBvd25lciBpblxcbiA1OTc6XFx0XFx0XFx0ICogY2hhcmdlLCBhbmQgaXQgd2lsbCBldmVudHVhbGx5IGVpdGhlciBzZXQgbG9ja2VkIGJpdCB0byAwLCBvclxcbiA1OTg6XFx0XFx0XFx0ICogbGVhdmUgaXQgYXMgMSwgYWxsb3dpbmcgdXMgdG8gbWFrZSBwcm9ncmVzcy5cXG4gNTk5OlxcdFxcdFxcdCAqXFxuIDYwMDpcXHRcXHRcXHQgKiBXZSB0ZXJtaW5hdGUgdGhlIHdob2xlIHdhaXQgcXVldWUgZm9yIHR3byByZWFzb25zLiBGaXJzdGx5LFxcbiA2MDE6XFx0XFx0XFx0ICogd2UgZXNjaGV3IHBlci13YWl0ZXIgdGltZW91dHMgd2l0aCBvbmUgYXBwbGllZCBhdCB0aGUgaGVhZCBvZlxcbiA2MDI6XFx0XFx0XFx0ICogdGhlIHdhaXQgcXVldWUuICBUaGlzIGFsbG93cyBldmVyeW9uZSB0byBicmVhayBvdXQgZmFzdGVyXFxuIDYwMzpcXHRcXHRcXHQgKiBvbmNlIHdlJ3ZlIHNlZW4gdGhlIG93bmVyIC8gcGVuZGluZyB3YWl0ZXIgbm90IHJlc3BvbmRpbmcgZm9yXFxuIDYwNDpcXHRcXHRcXHQgKiB0aGUgdGltZW91dCBkdXJhdGlvbiBmcm9tIHRoZSBoZWFkLiAgU2Vjb25kbHksIGl0IGF2b2lkc1xcbiA2MDU6XFx0XFx0XFx0ICogY29tcGxpY2F0ZWQgc3luY2hyb25pemF0aW9uLCBiZWNhdXNlIHdoZW4gbm90IGxlYXZpbmcgaW4gRklGT1xcbiA2MDY6XFx0XFx0XFx0ICogb3JkZXIsIHByZXYncyBuZXh0IHBvaW50ZXIgbmVlZHMgdG8gYmUgZml4ZWQgdXAgZXRjLlxcbiA2MDc6XFx0XFx0XFx0ICovXFxuIDYwODpcXHRcXHRcXHRpZiAoIXRyeV9jbXB4Y2hnX3RhaWwobG9jaywgdGFpbCwgMCkpIHtcXG4gNjA5OlxcdFxcdFxcdFxcdG5leHQgPSBzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXFx1MDAyNm5vZGUtXFx1MDAzZW5leHQsIFZBTCk7XFxuIDYxMDpcXHRcXHRcXHRcXHRXUklURV9PTkNFKG5leHQtXFx1MDAzZWxvY2tlZCwgUkVTX1RJTUVPVVRfVkFMKTtcXG4gNjExOlxcdFxcdFxcdH1cXG4gNjEyOlxcdFxcdFxcdGxvY2tldmVudF9pbmMocnFzcGlubG9ja19sb2NrX3RpbWVvdXQpO1xcbiA2MTM6XFx0XFx0XFx0Z290byBlcnJfcmVsZWFzZV9ub2RlO1xcbiA2MTQ6XFx0XFx0fVxcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHQvKlxcbiA2MTc6XFx0XFx0ICogY2xhaW0gdGhlIGxvY2s6XFxuIDYxODpcXHRcXHQgKlxcbiA2MTk6XFx0XFx0ICogbiwwLDAgLVxcdTAwM2UgMCwwLDEgOiBsb2NrLCB1bmNvbnRlbmRlZFxcbiA2MjA6XFx0XFx0ICogKiwqLDAgLVxcdTAwM2UgKiwqLDEgOiBsb2NrLCBjb250ZW5kZWRcXG4gNjIxOlxcdFxcdCAqXFxuIDYyMjpcXHRcXHQgKiBJZiB0aGUgcXVldWUgaGVhZCBpcyB0aGUgb25seSBvbmUgaW4gdGhlIHF1ZXVlIChsb2NrIHZhbHVlID09IHRhaWwpXFxuIDYyMzpcXHRcXHQgKiBhbmQgbm9ib2R5IGlzIHBlbmRpbmcsIGNsZWFyIHRoZSB0YWlsIGNvZGUgYW5kIGdyYWIgdGhlIGxvY2suXFxuIDYyNDpcXHRcXHQgKiBPdGhlcndpc2UsIHdlIG9ubHkgbmVlZCB0byBncmFiIHRoZSBsb2NrLlxcbiA2MjU6XFx0XFx0ICovXFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdC8qXFxuIDYyODpcXHRcXHQgKiBOb3RlOiBhdCB0aGlzIHBvaW50OiAodmFsIFxcdTAwMjYgX1FfUEVORElOR19NQVNLKSA9PSAwLCBiZWNhdXNlIG9mIHRoZVxcbiA2Mjk6XFx0XFx0ICogICAgICAgYWJvdmUgd2FpdCBjb25kaXRpb24sIHRoZXJlZm9yZSBhbnkgY29uY3VycmVudCBzZXR0aW5nIG9mXFxuIDYzMDpcXHRcXHQgKiAgICAgICBQRU5ESU5HIHdpbGwgbWFrZSB0aGUgdW5jb250ZW5kZWQgdHJhbnNpdGlvbiBmYWlsLlxcbiA2MzE6XFx0XFx0ICovXFxuIDYzMjpcXHRcXHRpZiAoKHZhbCBcXHUwMDI2IF9RX1RBSUxfTUFTSykgPT0gdGFpbCkge1xcbiA2MzM6XFx0XFx0XFx0aWYgKGF0b21pY190cnlfY21weGNoZ19yZWxheGVkKFxcdTAwMjZsb2NrLVxcdTAwM2V2YWwsIFxcdTAwMjZ2YWwsIF9RX0xPQ0tFRF9WQUwpKVxcbiA2MzQ6XFx0XFx0XFx0XFx0Z290byByZWxlYXNlOyAvKiBObyBjb250ZW50aW9uICovXFxuIDYzNTpcXHRcXHR9XFxuIDYzNjpcXHRcXG4gNjM3OlxcdFxcdC8qXFxuIDYzODpcXHRcXHQgKiBFaXRoZXIgc29tZWJvZHkgaXMgcXVldWVkIGJlaGluZCB1cyBvciBfUV9QRU5ESU5HX1ZBTCBnb3Qgc2V0XFxuIDYzOTpcXHRcXHQgKiB3aGljaCB3aWxsIHRoZW4gZGV0ZWN0IHRoZSByZW1haW5pbmcgdGFpbCBhbmQgcXVldWUgYmVoaW5kIHVzXFxuIDY0MDpcXHRcXHQgKiBlbnN1cmluZyB3ZSdsbCBzZWUgYSBAbmV4dC5cXG4gNjQxOlxcdFxcdCAqL1xcbiA2NDI6XFx0XFx0c2V0X2xvY2tlZChsb2NrKTtcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0LypcXG4gNjQ1OlxcdFxcdCAqIGNvbnRlbmRlZCBwYXRoOyB3YWl0IGZvciBuZXh0IGlmIG5vdCBvYnNlcnZlZCB5ZXQsIHJlbGVhc2UuXFxuIDY0NjpcXHRcXHQgKi9cXG4gNjQ3OlxcdFxcdGlmICghbmV4dClcXG4gNjQ4OlxcdFxcdFxcdG5leHQgPSBzbXBfY29uZF9sb2FkX3JlbGF4ZWQoXFx1MDAyNm5vZGUtXFx1MDAzZW5leHQsIChWQUwpKTtcXG4gNjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDoxMy4yOTI3OTAwNTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxOTMyNjc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBSZXNpbGllbnQgUXVldWVkIFNwaW4gTG9jayBTbG93IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGZvdW5kIGEgcHJvbWlzaW5nIHRhcmdldDogdGhlIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24uIEl0J3MgcmlnaHQgdGhlcmUsIGV4cG9ydGVkLCBhbmQgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgY29yZSBCUEYgbG9ja2luZyBtZWNoYW5pc20uIEl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNvZGUgYW5kIHdlbGwgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduLlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIG9uIHRoZSBjb25maWdzIG5lZWRlZCB3ZXJlIGEgbGl0dGxlIG11ZGRsZWQuIEkgbmVlZGVkIHRvIGVuc3VyZSBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIG9idmlvdXNseS4gSSBhbHNvIHRob3VnaHQgYFFVRVVFRF9TUElOTE9DS1NgIHdhcyBhIHVzZXItc2V0dGFibGUgb3B0aW9uLiBCdXQgYWZ0ZXIgYSBzZWNvbmQgbG9vaywgSSByZWFsaXplIGBRVUVVRURfU1BJTkxPQ0tTYCBpcyBhY3R1YWxseSBhIGBkZWZfYm9vbGAsIHRpZWQgdG8gYEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NgLiBJbiBvdGhlciB3b3JkcywgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4gU28sIGxpc3RpbmcgaXQgbWlnaHQgbm90IGJlIHJlbGV2YW50LCBhbmQgbGlzdGluZyBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24uXG5cbkhhbmcgb24uLi4gd2hhdCBhYm91dCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgPyBBaCwgcmlnaHQsIHRoYXQncyAqYWxzbyogbm90IGEgZGlyZWN0IHVzZXIgY29uZmlnLCBpdCBpcyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLiBTbyB0aGUgKm9ubHkqIHRoaW5nIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgaXMgYEJQRl9TWVNDQUxMYC5cblxuTm93LCBiZWZvcmUgSSBsYXVuY2ggaW50byBmdXp6aW5nLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBJJ20gbWlzc2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzAwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MTguOTEyMTIxNTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjExNjU0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDoyNS4xMjM3ODMwMThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQwNjUxOTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBDYWxsZXJzIG9mIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgaXMgY3JpdGljYWwgZm9yIGFuYWx5emluZyBwZXJmb3JtYW5jZSwgZGVidWdnaW5nIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIG1heWJlIGV2ZW4gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc2xvd3BhdGggaXMgZW50ZXJlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQgdGhpcyBpcyBoYXBwZW5pbmcgaW4uIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGdyZXAgb3IgYSBzaW1pbGFyIHNlYXJjaCwgSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBkb3duIGl0cyBjYWxsZXJzIHByZXR0eSBxdWlja2x5LiBIb3BlZnVsbHksIHRoZSBuYW1pbmcgaXMgY2xlYXIgYW5kIEkgY2FuIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgZnJlcXVlbnRseSB0aGUgc2xvdyBwYXRoIGlzIHRyaWdnZXJlZCBhbmQgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLiBUaGUgZ29hbCBoZXJlIGlzIGEgZnVsbCBkZXBlbmRlbmN5IGdyYXBoIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6MzIuNTMwMzA4OTkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ2MDc5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaD00MD1leHRlcm4gaW50IHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jayk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtNDEtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6NDI6ZXh0ZXJuIGludCByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTQzLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTY5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTg4LVxcdFxcdHJldHVybiAwO1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE4OTpcXHRyZXR1cm4gcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgobG9jaywgdmFsKTtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xOTAtfVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2OS1cXHQgKiBkZWFkbG9jayBkZXRlY3Rpb24gZW50cnkgd2hlbiBxdWV1ZWQgc3BpbmxvY2tzIGFyZSBkaXNhYmxlZCwgb3IgZnJvbVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI3MDpcXHQgKiByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aCBhZnRlciBncmFiYmluZyB0aGUgZGVhZGxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0yNzEtXFx0ICogZGV0ZWN0aW9uIGVudHJ5LiBObyBuZWVkIHRvIG9idGFpbiBpdCBoZXJlLlxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MzA1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBxbm9kZSwgcnFub2Rlc1tfUV9NQVhfTk9ERVNdKTtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTMxMy0vKipcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzozMTQ6ICogcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGggLSBhY3F1aXJlIHRoZSBxdWV1ZWQgc3BpbmxvY2tcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy0zMTUtICogQGxvY2s6IFBvaW50ZXIgdG8gcXVldWVkIHNwaW5sb2NrIHN0cnVjdHVyZVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzM4LSAqL1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjMzOTppbnQgX19sb2NrZnVuYyByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aChycXNwaW5sb2NrX3QgKmxvY2ssIHUzMiB2YWwpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMzQwLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY2Ni19XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjY3OkVYUE9SVF9TWU1CT0xfR1BMKHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02NjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQwOjM5LjI3NjQwMDE2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3OTIyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzX3NwaW5fbG9ja2AgVXNhZ2UqKlxuXG5SaWdodCwgc28gdGhpcyBpcyBjYWxsZWQgZnJvbSBgcmVzX3NwaW5fbG9ja2Agd2l0aGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaGAuIFRoZSBgcnFzcGlubG9jay5oYCBoZWFkZXIgZmlsZSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggcmVzb3VyY2UtYXdhcmUgc3BpbmxvY2tzLCBwcm9iYWJseSBzb21ldGhpbmcgcmVsYXRlZCB0byBydW5xdWV1ZSBtYW5hZ2VtZW50LiBUaGF0IHRlbGxzIG1lIGEgbG90IGFscmVhZHksIGFjdHVhbGx5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCouIEtub3dpbmcgd2hlcmUgYHJlc19zcGluX2xvY2tgIGlzIHVzZWQgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGxlcnMuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgLSBncmVwLCBgY3Njb3BlYC4uLiB3aGF0ZXZlcidzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGNvZGViYXNlIC0gdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHJlc19zcGluX2xvY2tgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGVzZSBsb2NrcyBhcmUgYmVpbmcgYWNxdWlyZWQgYW5kIHdoYXQgZGF0YSB0aGV5J3JlIHByb3RlY3RpbmcgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXNlIHJ1bnF1ZXVlIGxvY2tzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgdGVsbCBtZSBhbGwgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uIGNhbGxzIHRvIGByZXNfc3Bpbl9sb2NrYCwgYW5kIHdoYXQgY29udGV4dCBpdCBpcyBjYWxsZWQgaW4uIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NzYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo0Mi45MjQzMjY5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMzU1MTQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNfc3Bpbl9sb2NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTk9c3RydWN0IHJxc3BpbmxvY2sge1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMjgtICovXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6Mjk6c3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrIHtcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0zMC1cXHR1MzIgdmFsO1xcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg9MTEwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCByZWxlYXNlX2hlbGRfbG9ja19lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTYwLS8qKlxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE2MTogKiByZXNfc3Bpbl9sb2NrIC0gYWNxdWlyZSBhIHF1ZXVlZCBzcGlubG9ja1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE2Mi0gKiBAbG9jazogUG9pbnRlciB0byBxdWV1ZWQgc3BpbmxvY2sgc3RydWN0dXJlXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xNjgtICovXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MTY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlc19zcGluX2xvY2socnFzcGlubG9ja190ICpsb2NrKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE3MC17XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0xODAtXFx0ICogXFx1MDAzY05NSVxcdTAwM2VcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoxODE6XFx0ICogcmVzX3NwaW5fbG9jayhBKSAtLVxcdTAwM2UgbWlzc2VkIEFBLCBsZWFkcyB0byB0aW1lb3V0XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTgyLVxcdCAqIFxcdTAwM2MvTk1JXFx1MDAzZVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmgtMTkzLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjE5NDojZGVmaW5lIHJlc19zcGluX2xvY2sobG9jaykgKHsgZ3JhYl9oZWxkX2xvY2tfZW50cnkobG9jayk7IHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKGxvY2spOyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTE5NS1cXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oPTE5OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcmVzX3NwaW5fdW5sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIxMy1cXHQgKiBcXHUwMDNjTk1JXFx1MDAzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIxNDpcXHQgKiByZXNfc3Bpbl9sb2NrKEEpIC0tXFx1MDAzZSBtaXNzZWQgQUEsIGxlYWRzIHRvIHRpbWVvdXRcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMTUtXFx0ICogXFx1MDAzYy9OTUlcXHUwMDNlXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjQtI2lmZGVmIENPTkZJR19RVUVVRURfU1BJTkxPQ0tTXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjI1OiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2tfaW5pdChsb2NrKSAoeyAqKGxvY2spID0gKHJxc3BpbmxvY2tfdClfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIyNi0jZWxzZVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oOjIyNzojZGVmaW5lIHJhd19yZXNfc3Bpbl9sb2NrX2luaXQobG9jaykgKHsgKihsb2NrKSA9IChycXNwaW5sb2NrX3QpezB9OyB9KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIyOC0jZW5kaWZcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMjktXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjMwOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2sobG9jaykgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzEtXFx0KHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTIzMy1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTsgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyMzQ6XFx0XFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spO1xcdCAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yMzUtXFx0XFx0aWYgKF9fcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDEtXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9ycXNwaW5sb2NrLmg6MjQyOiNkZWZpbmUgcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgICAgXFxcXFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcnFzcGlubG9jay5oLTI0My1cXHQoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDYtXFx0XFx0cHJlZW1wdF9kaXNhYmxlKCk7ICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaDoyNDc6XFx0XFx0X19yZXQgPSByZXNfc3Bpbl9sb2NrKGxvY2spOyAgICAgIFxcXFxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL3Jxc3BpbmxvY2suaC0yNDgtXFx0XFx0aWYgKF9fcmV0KSB7ICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MjYxPXN0cnVjdCBidGZfcmVjb3JkIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjY0LVxcdGludCBzcGluX2xvY2tfb2ZmO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6MjY1OlxcdGludCByZXNfc3Bpbl9sb2NrX29mZjtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI2Ni1cXHRpbnQgdGltZXJfb2ZmO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD0zNDY9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpidGZfZmllbGRfdHlwZV9uYW1lKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzUxLVxcdGNhc2UgQlBGX1JFU19TUElOX0xPQ0s6XFxuaW5jbHVkZS9saW51eC9icGYuaDozNTI6XFx0XFx0cmV0dXJuIFxcXCJicGZfcmVzX3NwaW5fbG9ja1xcXCI7XFxuaW5jbHVkZS9saW51eC9icGYuaC0zNTMtXFx0Y2FzZSBCUEZfVElNRVI6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM4OD1zdGF0aWMgaW5saW5lIHUzMiBidGZfZmllbGRfdHlwZV9zaXplKGVudW0gYnRmX2ZpZWxkX3R5cGUgdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzkzLVxcdGNhc2UgQlBGX1JFU19TUElOX0xPQ0s6XFxuaW5jbHVkZS9saW51eC9icGYuaDozOTQ6XFx0XFx0cmV0dXJuIHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtMzk1LVxcdGNhc2UgQlBGX1RJTUVSOlxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaD00MjI9c3RhdGljIGlubGluZSB1MzIgYnRmX2ZpZWxkX3R5cGVfYWxpZ24oZW51bSBidGZfZmllbGRfdHlwZSB0eXBlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC00MjctXFx0Y2FzZSBCUEZfUkVTX1NQSU5fTE9DSzpcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQyODpcXHRcXHRyZXR1cm4gX19hbGlnbm9mX18oc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQyOS1cXHRjYXNlIEJQRl9USU1FUjpcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0yNjI9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIwLVxcdG11dGV4X2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2V6YXBfbXV0ZXgpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjE6XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIyLVxcdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDczPXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg2OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg3LVxcdFxcdC8qIE1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB0byBhZGRyZXNzIGltcG9zc2libGUgY2FzZSAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MDI6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MDMtXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04Mzg9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtODY2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njc6XFx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTg2OC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05Mjg9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTQyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5NDM6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NDQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz05NjI9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk3NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTc2OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYy05NzctXFx0XFx0c2NoZWR1bGVfd29yayh3b3JrKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNDM9c3RhdGljIGludCBicGZfc2VsZW1fdW5saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0pXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjU0LVxcdGIgPSBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzoyNTU6XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Yi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0yNTYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYz0yNzA9aW50IGJwZl9zZWxlbV9saW5rX21hcChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTI3OS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MjgwOlxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMjgxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9MzAwPWludCBicGZfc2VsZW1fdW5saW5rKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zMTctXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjMxODpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsb2NhbF9zdG9yYWdlLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTMxOS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTM1MD1zdGF0aWMgdm9pZCBicGZfc2VsZW1fdW5saW5rX25vZmFpbChzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfZWxlbSAqc2VsZW0sXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzYzLVxcdFxcdGIgPSBiID8gOiBzZWxlY3RfYnVja2V0KHNtYXAsIGxvY2FsX3N0b3JhZ2UpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzozNjQ6XFx0XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Yi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zNjUtXFx0XFx0aWYgKCFlcnIpIHtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zODQtXFx0XFx0ICogZGVzdHJveShzZWxlbTEpIHdpbGwgYmUgYWJsZSB0byBmcmVlIHRoZSBzcGVjaWFsIGZpZWxkIGFzc29jaWF0ZWRcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6Mzg1OlxcdFxcdCAqIHdpdGggc2VsZW0xIGFzIHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoKSByZXR1cm5zIC1FVElNRURPVVQuXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTM4Ni1cXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy0zOTItXFx0aWYgKGxvY2FsX3N0b3JhZ2UpIHtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6MzkzOlxcdFxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY2FsX3N0b3JhZ2UtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtMzk0LVxcdFxcdGlmICghZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDQxPXZvaWQgX19icGZfbG9jYWxfc3RvcmFnZV9pbnNlcnRfY2FjaGUoc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlICpsb2NhbF9zdG9yYWdlLFxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTQ1Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDUzOlxcdGVyciA9IHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY2FsX3N0b3JhZ2UtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNDU0LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NDc2PWludCBicGZfbG9jYWxfc3RvcmFnZV9hbGxvYyh2b2lkICpvd25lcixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00OTctXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZzdG9yYWdlLVxcdTAwM2VsaXN0KTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM6NDk4OlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnN0b3JhZ2UtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy00OTktXFx0c3RvcmFnZS1cXHUwMDNlb3duZXIgPSBvd25lcjtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy01MDUtXFx0YiA9IHNlbGVjdF9idWNrZXQoc21hcCwgc3RvcmFnZSk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjUwNjpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jLTUwNy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jPTU0Nz1icGZfbG9jYWxfc3RvcmFnZV91cGRhdGUodm9pZCAqb3duZXIsIHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNjEwLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo2MTE6XFx0ZXJyID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jYWxfc3RvcmFnZS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MTItXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy02MzktXFxua2VybmVsL2JwZi9icGZfbG9jYWxfc3RvcmFnZS5jOjY0MDpcXHRlcnIgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2Vsb2NrLCBiX2ZsYWdzKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtNjQxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmM9NzczPWJwZl9sb2NhbF9zdG9yYWdlX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYy03OTktXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZzbWFwLVxcdTAwM2VidWNrZXRzW2ldLmxpc3QpO1xcbmtlcm5lbC9icGYvYnBmX2xvY2FsX3N0b3JhZ2UuYzo4MDA6XFx0XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2c21hcC1cXHUwMDNlYnVja2V0c1tpXS5sb2NrKTtcXG5rZXJuZWwvYnBmL2JwZl9sb2NhbF9zdG9yYWdlLmMtODAxLVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9Mjk2PXN0YXRpYyB2b2lkIGJwZl9scnVfbGlzdF9wdXNoX2ZyZWUoc3RydWN0IGJwZl9scnVfbGlzdCAqbCxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMzAzLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MzA0OlxcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZsLVxcdTAwM2Vsb2NrLCBmbGFncykpIHtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTMwNS1cXHRcXHRXUklURV9PTkNFKG5vZGUtXFx1MDAzZXBlbmRpbmdfZnJlZSwgMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTMxMj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfcG9wX2ZyZWVfdG9fbG9jYWwoc3RydWN0IGJwZl9scnUgKmxydSxcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMzE5LVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MzIwOlxcdGlmIChyYXdfcmVzX3NwaW5fbG9jayhcXHUwMDI2bC1cXHUwMDNlbG9jaykpXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0zMjEtXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MDM9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9wZXJjcHVfbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQxMy1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQxNDpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bC1cXHUwMDNlbG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDE1LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz00MzY9c3RhdGljIHN0cnVjdCBicGZfbHJ1X25vZGUgKmJwZl9jb21tb25fbHJ1X3BvcF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ0Ny1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjQ0ODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ0OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDgyLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NDgzOlxcdFxcdGlmICghcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c3RlYWxfbG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNDg0LVxcdFxcdFxcdG5vZGUgPSBfX2xvY2FsX2xpc3RfcG9wX2ZyZWUoc3RlYWxfbG9jX2wpO1xcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy00OTctXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo0OTg6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmxvY19sLVxcdTAwM2Vsb2NrLCBmbGFncykpIHtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTQ5OS1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz01MjU9c3RhdGljIHZvaWQgYnBmX2NvbW1vbl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfbHJ1ICpscnUsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTUzOS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjU0MDpcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2bG9jX2wtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTQxLVxcdFxcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlcGVuZGluZ19mcmVlLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NTY1PXN0YXRpYyB2b2lkIGJwZl9wZXJjcHVfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy01NzItXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo1NzM6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmwtXFx1MDAzZWxvY2ssIGZsYWdzKSkge1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNTc0LVxcdFxcdFdSSVRFX09OQ0Uobm9kZS1cXHUwMDNlcGVuZGluZ19mcmVlLCAxKTtcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM9NjU2PXN0YXRpYyB2b2lkIGJwZl9scnVfbG9jYWxsaXN0X2luaXQoc3RydWN0IGJwZl9scnVfbG9jYWxsaXN0ICpsb2NfbCwgaW50IGNwdSlcXG4tLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtNjYyLVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6NjYzOlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNmxvY19sLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTY2NC19XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTY2Nj1zdGF0aWMgdm9pZCBicGZfbHJ1X2xpc3RfaW5pdChzdHJ1Y3QgYnBmX2xydV9saXN0ICpsKVxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02NzctXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzo2Nzg6XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2bC1cXHUwMDNlbG9jayk7XFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy02NzktfVxcbi0tXFxua2VybmVsL2JwZi9idGYuYz0zNjU1PXN0YXRpYyBpbnQgYnRmX2dldF9maWVsZF90eXBlKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YXJfdHlwZSxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzY2My1cXHRcXHR7IEJQRl9TUElOX0xPQ0ssIFxcXCJicGZfc3Bpbl9sb2NrXFxcIiwgdHJ1ZSB9LFxcbmtlcm5lbC9icGYvYnRmLmM6MzY2NDpcXHRcXHR7IEJQRl9SRVNfU1BJTl9MT0NLLCBcXFwiYnBmX3Jlc19zcGluX2xvY2tcXFwiLCB0cnVlIH0sXFxua2VybmVsL2JwZi9idGYuYy0zNjY1LVxcdFxcdHsgQlBGX1RJTUVSLCBcXFwiYnBmX3RpbWVyXFxcIiwgdHJ1ZSB9LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYz00MTE4PXN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy00MTQwLVxcdHJlYy1cXHUwMDNlc3Bpbl9sb2NrX29mZiA9IC1FSU5WQUw7XFxua2VybmVsL2JwZi9idGYuYzo0MTQxOlxcdHJlYy1cXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgPSAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYnRmLmMtNDE0Mi1cXHRyZWMtXFx1MDAzZXRpbWVyX29mZiA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzItXFx0XFx0XFx0LyogQ2FjaGUgb2Zmc2V0IGZvciBmYXN0ZXIgbG9va3VwIGF0IHJ1bnRpbWUgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jOjQxNzM6XFx0XFx0XFx0cmVjLVxcdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiA9IHJlYy1cXHUwMDNlZmllbGRzW2ldLm9mZnNldDtcXG5rZXJuZWwvYnBmL2J0Zi5jLTQxNzQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjEtXFxua2VybmVsL2JwZi9idGYuYzo0MjIyOlxcdGlmIChyZWMtXFx1MDAzZXNwaW5fbG9ja19vZmYgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByZWMtXFx1MDAzZXJlc19zcGluX2xvY2tfb2ZmIFxcdTAwM2U9IDApIHtcXG5rZXJuZWwvYnBmL2J0Zi5jLTQyMjMtXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtNDIyOS1cXHQgICAgIGJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKHJlYywgQlBGX1JCX1JPT1QpKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvYnRmLmM6NDIzMDpcXHRcXHQgKHJlYy1cXHUwMDNlc3Bpbl9sb2NrX29mZiBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmVjLVxcdTAwM2VyZXNfc3Bpbl9sb2NrX29mZiBcXHUwMDNjIDApKSB7XFxua2VybmVsL2JwZi9idGYuYy00MjMxLVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMzk9c3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ0LVxcdFxcdElOSVRfSExJU1RfTlVMTFNfSEVBRChcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tpXS5oZWFkLCBpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNDU6XFx0XFx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcXHUwMDI2aHRhYi1cXHUwMDNlYnVja2V0c1tpXS5yYXdfbG9jayk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ2LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MTUwPXN0YXRpYyBpbmxpbmUgaW50IGh0YWJfbG9ja19idWNrZXQoc3RydWN0IGJ1Y2tldCAqYiwgdW5zaWduZWQgbG9uZyAqcGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTU0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE1NTpcXHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZiLVxcdTAwM2VyYXdfbG9jaywgZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE1Ni1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jPTMyMj1zdGF0aWMgbG9uZyB0cmllX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ1LVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzozNDY6XFx0cmV0ID0gcmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHJpZS1cXHUwMDNlbG9jaywgaXJxX2ZsYWdzKTtcXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtMzQ3LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9NDU3PXN0YXRpYyBsb25nIHRyaWVfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqX2tleSlcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NzEtXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjQ3MjpcXHRyZXQgPSByYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cmllLVxcdTAwM2Vsb2NrLCBpcnFfZmxhZ3MpO1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy00NzMtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz01NzE9c3RhdGljIHN0cnVjdCBicGZfbWFwICp0cmllX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTU5Ny1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6NTk4OlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRyaWUtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy01OTktXFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTY9aW50IHBjcHVfZnJlZWxpc3RfaW5pdChzdHJ1Y3QgcGNwdV9mcmVlbGlzdCAqcylcXG4tLVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTYtXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzoxNzpcXHRcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZoZWFkLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTE4LVxcdFxcdGhlYWQtXFx1MDAzZWZpcnN0ID0gTlVMTDtcXG4tLVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmM9MzU9c3RhdGljIGlubGluZSBib29sIF9fX3BjcHVfZnJlZWxpc3RfcHVzaChzdHJ1Y3QgcGNwdV9mcmVlbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy0zNy17XFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzozODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMzktXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYz00NT12b2lkIF9fcGNwdV9mcmVlbGlzdF9wdXNoKHN0cnVjdCBwY3B1X2ZyZWVsaXN0ICpzLFxcbi0tXFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYy01OC1cXHRcXHRcXHRoZWFkID0gcGVyX2NwdV9wdHIocy1cXHUwMDNlZnJlZWxpc3QsIGNwdSk7XFxua2VybmVsL2JwZi9wZXJjcHVfZnJlZWxpc3QuYzo1OTpcXHRcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtNjAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jPTEwMD1zdGF0aWMgc3RydWN0IHBjcHVfZnJlZWxpc3Rfbm9kZSAqX19fcGNwdV9mcmVlbGlzdF9wb3Aoc3RydWN0IHBjcHVfZnJlZWxpc3QgKnMpXFxuLS1cXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jLTEwOS1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3BlcmNwdV9mcmVlbGlzdC5jOjExMDpcXHRcXHRpZiAocmF3X3Jlc19zcGluX2xvY2soXFx1MDAyNmhlYWQtXFx1MDAzZWxvY2spKVxcbmtlcm5lbC9icGYvcGVyY3B1X2ZyZWVsaXN0LmMtMTExLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmM9NjU9c3RhdGljIHN0cnVjdCBicGZfbWFwICpxdWV1ZV9zdGFja19tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy04MS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYzo4MjpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZxcy1cXHUwMDNlbG9jayk7XFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtODMtXFxuLS1cXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYz05NT1zdGF0aWMgbG9uZyBfX3F1ZXVlX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTAxLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEwMjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMDMtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTEyNT1zdGF0aWMgbG9uZyBfX3N0YWNrX21hcF9nZXQoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIGJvb2wgZGVsZXRlKVxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTMyLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjEzMzpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGZsYWdzKSlcXG5rZXJuZWwvYnBmL3F1ZXVlX3N0YWNrX21hcHMuYy0xMzQtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jPTE4Mj1zdGF0aWMgbG9uZyBxdWV1ZV9zdGFja19tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMTk4LVxcbmtlcm5lbC9icGYvcXVldWVfc3RhY2tfbWFwcy5jOjE5OTpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cXMtXFx1MDAzZWxvY2ssIGlycV9mbGFncykpXFxua2VybmVsL2JwZi9xdWV1ZV9zdGFja19tYXBzLmMtMjAwLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYz0xNzI9c3RhdGljIHN0cnVjdCBicGZfcmluZ2J1ZiAqYnBmX3JpbmdidWZfYWxsb2Moc2l6ZV90IGRhdGFfc3osIGludCBudW1hX25vZGUsIGJvb2wgb3ZlcndyaXRlX21vZGUpXFxuLS1cXG5rZXJuZWwvYnBmL3JpbmdidWYuYy0xNzktXFxua2VybmVsL2JwZi9yaW5nYnVmLmM6MTgwOlxcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJiLVxcdTAwM2VzcGlubG9jayk7XFxua2VybmVsL2JwZi9yaW5nYnVmLmMtMTgxLVxcdGF0b21pY19zZXQoXFx1MDAyNnJiLVxcdTAwM2VidXN5LCAwKTtcXG4tLVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jPTQ2Mz1zdGF0aWMgdm9pZCAqX19icGZfcmluZ2J1Zl9yZXNlcnZlKHN0cnVjdCBicGZfcmluZ2J1ZiAqcmIsIHU2NCBzaXplKVxcbi0tXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtNDc3LVxcbmtlcm5lbC9icGYvcmluZ2J1Zi5jOjQ3ODpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cmItXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9yaW5nYnVmLmMtNDc5LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM9MjYxPWludCBfX2xvY2tmdW5jIHJlc2lsaWVudF90YXNfc3Bpbl9sb2NrKHJxc3BpbmxvY2tfdCAqbG9jaylcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTI2Ny1cXHQvKlxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjI2ODpcXHQgKiBXZSBhcmUgZWl0aGVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIHJlc19zcGluX2xvY2sgYWZ0ZXIgZ3JhYmJpbmcgdGhlXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtMjY5LVxcdCAqIGRlYWRsb2NrIGRldGVjdGlvbiBlbnRyeSB3aGVuIHF1ZXVlZCBzcGlubG9ja3MgYXJlIGRpc2FibGVkLCBvciBmcm9tXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjgyLVxcdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlxcdFxcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcXFwiRVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxcXG5cXFwiLCBzdHIsIGlycXNhdmUgPyBcXFwiX2lycXNhdmVcXFwiIDogXFxcIlxcXCIpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkF0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcXFxuXFxcIiwgbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTMtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XFx0QlVJTERfQlVHX09OKHNpemVvZihycXNwaW5sb2NrX3QpICE9IHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzAwLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcwMTpcXHRyZXQgPSByZXNfc3Bpbl9sb2NrKChycXNwaW5sb2NrX3QgKilsb2NrKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MDItXFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcwOS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MTA6X19icGZfa2Z1bmMgdm9pZCBicGZfcmVzX3NwaW5fdW5sb2NrKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTEte1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzE1LVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjcxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKmZsYWdzX19pcnFfZmxhZylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MTcte1xcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzIzLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MjQ6XFx0cmV0ID0gcmVzX3NwaW5fbG9jaygocnFzcGlubG9ja190ICopbG9jayk7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzI1LVxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MzQtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzM1Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBicGZfcmVzX3NwaW5fbG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyAqZmxhZ3NfX2lycV9mbGFnKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNi17XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz03NDc9QlRGX0tGVU5DU19TVEFSVChycXNwaW5sb2NrX2tmdW5jX2lkcylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NDg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrLCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NDktQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzUwOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlLCBLRl9SRVRfTlVMTClcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03NTEtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02OTc2PXN0YXRpYyBpbnQgcHJvY2Vzc19zcGluX2xvY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwMTMtXFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MDE0OlxcdHNwaW5fbG9ja19vZmYgPSBpc19yZXNfbG9jayA/IHJlYy1cXHUwMDNlcmVzX3NwaW5fbG9ja19vZmYgOiByZWMtXFx1MDAzZXNwaW5fbG9ja19vZmY7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwMTUtXFx0aWYgKHNwaW5fbG9ja19vZmYgIT0gdmFsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTA4MjM9QlRGX0lEKHN0cnVjdCwgYnBmX3dxKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDgyNDpCVEZfSUQoc3RydWN0LCBicGZfcmVzX3NwaW5fbG9jaylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4MjUtQlRGX0lEKHN0cnVjdCwgYnBmX3Rhc2tfd29yaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDg4MT1zdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9wYXJhbSAqYXJnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwODg1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDg4NjpzdGF0aWMgYm9vbCBpc19rZnVuY19hcmdfcmVzX3NwaW5fbG9jayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfcGFyYW0gKmFyZylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA4ODcte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTA1OS1cXHRLRl9icGZfcmVtb3ZlX2RlbnRyeV94YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwNjA6XFx0S0ZfYnBmX3Jlc19zcGluX2xvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYxLVxcdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDYyOlxcdEtGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDYzLVxcdEtGX2JwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1MzpCVEZfSUQoZnVuYywgYnBmX3Jlc19zcGluX2xvY2spXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfcmVzX3NwaW5fdW5sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1NTpCVEZfSUQoZnVuYywgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTYtQlRGX0lEKGZ1bmMsIGJwZl9yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI1OD1nZXRfa2Z1bmNfcHRyX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY2FsbGVyLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTMzMDpcXHRpZiAoaXNfa2Z1bmNfYXJnX3Jlc19zcGluX2xvY2sobWV0YS1cXHUwMDNlYnRmLCBcXHUwMDI2YXJnc1thcmddKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzMzEtXFx0XFx0cmV0dXJuIEtGX0FSR19QVFJfVE9fUkVTX1NQSU5fTE9DSztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTQzMz1zdGF0aWMgaW50IHByb2Nlc3NfaXJxX2ZsYWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTQzOS1cXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2xvY2FsX2lycV9zYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ0MDpcXHQgICAgbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE0NDEtXFx0XFx0aXJxX3NhdmUgPSB0cnVlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTQ0MjpcXHRcXHRpZiAobWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNDQzLVxcdFxcdFxcdGtmdW5jX2NsYXNzID0gSVJRX0xPQ0tfS0ZVTkM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MzI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzOTpzdGF0aWMgYm9vbCBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyh1MzIgYnRmX2lkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0MC17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjQxOlxcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0Mi1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY0MzpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY0NC1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjYwPXN0YXRpYyBib29sIGtmdW5jX3NwaW5fYWxsb3dlZCh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjYyLVxcdHJldHVybiBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKGJ0Zl9pZCkgfHwgaXNfYnBmX2l0ZXJfbnVtX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjYzOlxcdCAgICAgICBpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhidGZfaWQpIHx8IGlzX2JwZl9hcmVuYV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjY0LVxcdCAgICAgICBpc19icGZfc3RyZWFtX2tmdW5jKGJ0Zl9pZCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE5Mjg9c3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjQ5OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDA6XFx0XFx0XFx0aWYgKCFpc19icGZfcmVzX3NwaW5fbG9ja19rZnVuYyhtZXRhLVxcdTAwM2VmdW5jX2lkKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1MDEtXFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyNTAyOlxcdFxcdFxcdGlmIChtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDM6XFx0XFx0XFx0ICAgIG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjUwNC1cXHRcXHRcXHRcXHRmbGFncyB8PSBQUk9DRVNTX1NQSU5fTE9DSztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1MDU6XFx0XFx0XFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTA2LVxcdFxcdFxcdCAgICBtZXRhLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmVdKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTEzPXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NDQtXFx0aWYgKCFpbnNuLVxcdTAwM2VvZmYgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NDU6XFx0ICAgIChpbnNuLVxcdTAwM2VpbW0gPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjk0NjpcXHQgICAgIGluc24tXFx1MDAzZWltbSA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZV0pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTQ3LVxcdFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmJyYW5jaDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MS1cXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNDI6XFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzE0MzpcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQ0LVxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYz0zNzA9c3RhdGljIGludCB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zNzEte1xcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM6MzcyOlxcdHJhd19yZXNfc3Bpbl9sb2NrKFxcdTAwMjZycXNwaW5sb2NrKTtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM3My1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9Mzc2PXN0YXRpYyB2b2lkIHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX3VubG9jayhpbnQgdGlkIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODAtXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzozODE6c3RhdGljIHN0cnVjdCBsb2NrX3RvcnR1cmVfb3BzIHJhd19yZXNfc3Bpbl9sb2NrX29wcyA9IHtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM4Mi1cXHQud3JpdGVsb2NrXFx0PSB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrLFxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zODgtXFx0LnJlYWR1bmxvY2sgICAgID0gTlVMTCxcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM4OTpcXHQubmFtZVxcdFxcdD0gXFxcInJhd19yZXNfc3Bpbl9sb2NrXFxcIlxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtMzkwLX07XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTM5Mj1zdGF0aWMgaW50IHRvcnR1cmVfcmF3X3Jlc19zcGluX3dyaXRlX2xvY2tfaXJxKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTM5NS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjM5NjpcXHRyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZycXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy0zOTctXFx0Y3h0LmN1cl9vcHMtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTQwMT1zdGF0aWMgdm9pZCB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV91bmxvY2tfaXJxKGludCB0aWQgX19tYXliZV91bnVzZWQpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjQwNjpzdGF0aWMgc3RydWN0IGxvY2tfdG9ydHVyZV9vcHMgcmF3X3Jlc19zcGluX2xvY2tfaXJxX29wcyA9IHtcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTQwNy1cXHQud3JpdGVsb2NrXFx0PSB0b3J0dXJlX3Jhd19yZXNfc3Bpbl93cml0ZV9sb2NrX2lycSxcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6NDguOTM3ODg1MjUyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDA2ODI4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTcGluIExvY2sgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGJlY2F1c2UgaXQncyBhdCB0aGUgaGVhcnQgb2YgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLCBib3RoIG9mIHdoaWNoIGFyZSwgb2YgY291cnNlLCBCUEYga2Z1bmNzLiBJdCdzIGFsc28gdXRpbGl6ZWQgYnkgYHJhd19yZXNfc3Bpbl9sb2NrYCwgYW5kIHRoYXQncyB1c2VkIGFjcm9zcyB0aGUgQlBGIGNvZGViYXNlIOKAkyBhcmVuYSBtYW5hZ2VtZW50LCBsb2NhbCBzdG9yYWdlLCB0aGUgTFJVIGxpc3QsIGFsbCBvZiBpdC4gR2l2ZW4gdGhhdCB3aWRlc3ByZWFkIHVzYWdlLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gQlBGIHN5c2NhbGxzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZSBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCBgYnBmX3Jlc19zcGluX2xvY2tgLCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBicGZfcmVzX3NwaW5fbG9ja2AgYW5kIGBicGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlYCBhcmVuJ3QgZXhwb3J0ZWQgYXMgc3RhbmRhcmQgZnVuY3Rpb25zLCBidXQgYXJlIGRlZmluZWQgcHVyZWx5IGFzIGtmdW5jcy4gKkNoZWNrcyBpbnRlcm5hbCBkb2N1bWVudGF0aW9uKiBZZXMsIHRoZXkgYXJlIGluZGVlZCBrZnVuY3MuIE5vdywgSSdtIGdvaW5nIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY2AgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo1NC40Mzg1NzE1ODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDIzODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVzX3NwaW5fbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3Jxc3BpbmxvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3Jxc3BpbmxvY2suYz02NzM9c3RhdGljIHZvaWQgYnBmX3Byb2dfcmVwb3J0X3Jxc3BpbmxvY2tfdmlvbGF0aW9uKGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqbG9jaywgYm9vbCBpcnFzYXZlKVxcbi0tXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjgyLVxcdGJwZl9zdHJlYW1fc3RhZ2Uoc3MsIHByb2csIEJQRl9TVERFUlIsICh7XFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NjgzOlxcdFxcdGJwZl9zdHJlYW1fcHJpbnRrKHNzLCBcXFwiRVJST1I6ICVzIGZvciBicGZfcmVzX3NwaW5fbG9jayVzXFxcXG5cXFwiLCBzdHIsIGlycXNhdmUgPyBcXFwiX2lycXNhdmVcXFwiIDogXFxcIlxcXCIpO1xcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY4NC1cXHRcXHRicGZfc3RyZWFtX3ByaW50ayhzcywgXFxcIkF0dGVtcHRlZCBsb2NrICAgPSAweCVweFxcXFxuXFxcIiwgbG9jayk7XFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTMtXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6Njk0Ol9fYnBmX2tmdW5jIGludCBicGZfcmVzX3NwaW5fbG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNjk1LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTY5Ny1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo2OTg6XFx0QlVJTERfQlVHX09OKHNpemVvZihycXNwaW5sb2NrX3QpICE9IHNpemVvZihzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2spKTtcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy02OTktXFxuLS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYy03MDktXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmM6NzEwOl9fYnBmX2tmdW5jIHZvaWQgYnBmX3Jlc19zcGluX3VubG9jayhzdHJ1Y3QgYnBmX3Jlc19zcGluX2xvY2sgKmxvY2spXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzExLXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTcxNS1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MTY6X19icGZfa2Z1bmMgaW50IGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFnc19faXJxX2ZsYWcpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzE3LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTczNC1cXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3MzU6X19icGZfa2Z1bmMgdm9pZCBicGZfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoc3RydWN0IGJwZl9yZXNfc3Bpbl9sb2NrICpsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFnc19faXJxX2ZsYWcpXFxua2VybmVsL2JwZi9ycXNwaW5sb2NrLmMtNzM2LXtcXG4tLVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jPTc0Nz1CVEZfS0ZVTkNTX1NUQVJUKHJxc3BpbmxvY2tfa2Z1bmNfaWRzKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jOjc0ODpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX2xvY2ssIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc0OS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9jaylcXG5rZXJuZWwvYnBmL3Jxc3BpbmxvY2suYzo3NTA6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmUsIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvcnFzcGlubG9jay5jLTc1MS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxNjo0MDo1NC42MDg4MjAyODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMDA1MDYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFNwaW4gTG9ja3MgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgQlBGIHNwaW4gbG9jayBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgYnBmX3Jlc19zcGluX2xvY2tgIGFuZCBgYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZWAuIFRoZXkgc2VlbSBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgdG8gaW5jbHVkZSBpbiBgRm9jdXNTeW1ib2xzYC4gVGhhdCBtYWtlcyBzZW5zZS4gQWxzbywgSSdtIG5vdGluZyB0aGF0IGByZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aGAgaXMgdGhlIG9uZSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBgQlBGX1NZU0NBTExgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpcyB0aGF0ICphbGwqPyBJIG5lZWQgdG8gYmUgc3VyZSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLiBMZXQncyBkaWcgaW50byBga2VybmVsL2JwZi9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhpcyBjb2RlLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBwaWVjZXMgb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDA6NTkuODI4ODc0MTA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ4OTgzNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDE2OjQxOjAwLjA0Mzc3OTM0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NzM0MjEwNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBTcGlubG9jayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYEJQRl9TWVNDQUxMYCwgbm90aGluZyB0b28gb2JzY3VyZS4gTGV0J3Mgc3RhcnQgYnkgc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFJpZ2h0LCBgQ09ORklHX1FVRVVFRF9TUElOTE9DS1NgIGlzIHNlbGVjdGVkIGJ5IGBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTYC4gR29vZCwgZ29vZCwgd2UgY2FuIGp1c3QgZm9jdXMgb24gYEJQRl9TWVNDQUxMYCB0aGVuLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBjbGVhbmluZyB1cCBhIGRlYWRsb2NrIHNjZW5hcmlvLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIGZpeCBhZGRyZXNzZXMgYSBidWcgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYC4gSSBzZWUgdGhlIGNvZGUgc25pcHBldCBub3csIGNoYW5naW5nIHRoZSBsb2dpYyB3aGVyZSBpdCdzIGhhbmRsaW5nIGBFREVBRExLYCwgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHF1ZXVlIGRlc3RydWN0aW9uIG9uIGRlYWRsb2NrLCB3aXRoIGEgYHRyeV9jbXB4Y2hnX3RhaWxgLlxuXG5UaGlzIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgd2hpY2ggaXMgaW1wb3J0YW50LiBUaGlzIHBhdGggaXMgZGVmaW5pdGVseSBjYWxsZWQsIHNwZWNpZmljYWxseSBieSB0aGUgYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCBmdW5jdGlvbi4gQW5kIHRoYXQncyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBzcGlubG9jayBnZXRzIHVzZWQgYnkgYGJwZl9yZXNfc3Bpbl9sb2NrYCBhbmQgYGJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVgIGtmdW5jcywgYW5kIGJ5IEJQRiBtYXBzIGludGVybmFsbHkuIFRoaXMgaXMgYW4gYXJlYSB3ZSBzaG91bGQgZGVmaW5pdGVseSBmdXp6LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAwMiwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTY6NDE6MDkuNzc3OTk0NjY0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4ODk1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoXCIsXG4gICAgXCJicGZfcmVzX3NwaW5fbG9ja1wiLFxuICAgIFwiYnBmX3Jlc19zcGluX2xvY2tfaXJxc2F2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFkbG9jayBoYW5kbGluZyBsb2dpYyBpbiBgcmVzaWxpZW50X3F1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGhgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBCUEYgcmVzaWxpZW50IHF1ZXVlZCBzcGlubG9jayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyB1c2luZyBgYnBmX3Jlc19zcGluX2xvY2tgIGtmdW5jcywgYXMgd2VsbCBhcyBpbnRlcm5hbGx5IGJ5IHZhcmlvdXMgQlBGIG1hcHMuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXNpbGllbnRfcXVldWVkX3NwaW5fbG9ja19zbG93cGF0aFwiLFxuICAgIFwiYnBmX3Jlc19zcGluX2xvY2tcIixcbiAgICBcImJwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZGxvY2sgaGFuZGxpbmcgbG9naWMgaW4gYHJlc2lsaWVudF9xdWV1ZWRfc3Bpbl9sb2NrX3Nsb3dwYXRoYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgQlBGIHJlc2lsaWVudCBxdWV1ZWQgc3BpbmxvY2sgaW1wbGVtZW50YXRpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgdXNpbmcgYGJwZl9yZXNfc3Bpbl9sb2NrYCBrZnVuY3MsIGFzIHdlbGwgYXMgaW50ZXJuYWxseSBieSB2YXJpb3VzIEJQRiBtYXBzLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[1] Phase: Succeeded StartedAt: 2026-08-02 16:41:21 +0000 UTC FinishedAt: 2026-08-02 16:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 16:41:21 +0000 UTC FinishedAt: 2026-08-02 16:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2] Phase: Succeeded StartedAt: 2026-08-02 16:41:21 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 16:41:22 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 16:41:22 +0000 UTC FinishedAt: 2026-08-02 16:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 16:41:22 +0000 UTC FinishedAt: 2026-08-02 16:41:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwv9p5/series-workflowwv9p5-convert-artifact-3782537202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 16:42:03 +0000 UTC FinishedAt: 2026-08-02 17:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 16:42:03 +0000 UTC FinishedAt: 2026-08-02 17:08:49 +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:*8d63a714-083d-4929-a161-9a6b51be3efa,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-workflowwv9p5/series-workflowwv9p5-convert-artifact-3782537202/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": "ca7a3319-0071-495c-85bb-d6c7a0b7206e", "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-workflowwv9p5/series-workflowwv9p5-build-action-1885763440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 16:42:03 +0000 UTC FinishedAt: 2026-08-02 17:08:39 +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:*8d63a714-083d-4929-a161-9a6b51be3efa,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-workflowwv9p5/series-workflowwv9p5-convert-artifact-3782537202/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": "ca7a3319-0071-495c-85bb-d6c7a0b7206e", "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-workflowwv9p5/series-workflowwv9p5-build-action-1885763440/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 17:08:49 +0000 UTC FinishedAt: 2026-08-02 17:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 17:08:49 +0000 UTC FinishedAt: 2026-08-02 17:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 17:08:49 +0000 UTC FinishedAt: 2026-08-02 17:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 17:08:49 +0000 UTC FinishedAt: 2026-08-02 17:08:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowwv9p5/series-workflowwv9p5-convert-artifact-2305183245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 17:08:59 +0000 UTC FinishedAt: 2026-08-02 17:11:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 17:08:59 +0000 UTC FinishedAt: 2026-08-02 17:10:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca7a3319-0071-495c-85bb-d6c7a0b7206e,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-workflowwv9p5/series-workflowwv9p5-build-action-1885763440/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-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 17:11:05 +0000 UTC FinishedAt: 2026-08-02 17:11:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 17:11:05 +0000 UTC FinishedAt: 2026-08-02 17:11:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 17:11:05 +0000 UTC FinishedAt: 2026-08-02 17:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 17:11:05 +0000 UTC FinishedAt: 2026-08-02 17:32:36 +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:*8d63a714-083d-4929-a161-9a6b51be3efa,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-workflowwv9p5/series-workflowwv9p5-convert-artifact-2305183245/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": "6870cdff-2927-44ab-84c4-a74c5317834a", "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-workflowwv9p5/series-workflowwv9p5-build-action-462871529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 17:11:05 +0000 UTC FinishedAt: 2026-08-02 17:32:26 +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:*8d63a714-083d-4929-a161-9a6b51be3efa,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-workflowwv9p5/series-workflowwv9p5-convert-artifact-2305183245/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": "6870cdff-2927-44ab-84c4-a74c5317834a", "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-workflowwv9p5/series-workflowwv9p5-build-action-462871529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 17:32:36 +0000 UTC FinishedAt: 2026-08-02 17:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 17:32:36 +0000 UTC FinishedAt: 2026-08-02 17:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 17:32:36 +0000 UTC FinishedAt: 2026-08-02 17:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 17:32:36 +0000 UTC FinishedAt: 2026-08-02 17:34:35 +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:*6870cdff-2927-44ab-84c4-a74c5317834a,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-workflowwv9p5/series-workflowwv9p5-build-action-462871529/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-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"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:*ca7a3319-0071-495c-85bb-d6c7a0b7206e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6870cdff-2927-44ab-84c4-a74c5317834a,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-workflowwv9p5/series-workflowwv9p5-build-action-1885763440/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-workflowwv9p5/series-workflowwv9p5-build-action-462871529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 17:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 17:34:51 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"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-workflowwv9p5/series-workflowwv9p5-convert-artifact-1108546034/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 17:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 17:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 17:34:45 +0000 UTC FinishedAt: 2026-08-02 17:34:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 17:34:55 +0000 UTC FinishedAt: 2026-08-02 20:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwv9p5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["resilient_queued_spin_lock_slowpath","bpf_res_spin_lock","bpf_res_spin_lock_irqsave"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdeba03fea78407a8c52faa99177c9f7f29f90eb","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"18290c01-e9f2-41bc-a11b-731d93bed596","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 17:34:55 +0000 UTC FinishedAt: 2026-08-02 20:36:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca7a3319-0071-495c-85bb-d6c7a0b7206e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6870cdff-2927-44ab-84c4-a74c5317834a,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-workflowwv9p5/series-workflowwv9p5-build-action-1885763440/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-workflowwv9p5/series-workflowwv9p5-build-action-462871529/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-workflowwv9p5/series-workflowwv9p5-convert-artifact-1108546034/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,}