Name: series-workflowsphdc Phase: Succeeded StartedAt: 2026-07-17 15:08:47 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[0] Phase: Succeeded StartedAt: 2026-07-17 15:08:47 +0000 UTC FinishedAt: 2026-07-17 15:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 15:08:47 +0000 UTC FinishedAt: 2026-07-17 15:40:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "e23f4c5a-79a8-4076-a371-6449d281d191" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "apply_range_set_cb", "apply_range_clear_cb", "arena_map_mem_usage", "arena_alloc_pages", "arena_free_pages", "arena_vm_fault" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXBwbHlfcmFuZ2Vfc2V0X2NiJiMzNDssCiAgICAmIzM0O2FwcGx5X3JhbmdlX2NsZWFyX2NiJiMzNDssCiAgICAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAgICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTU0ZmQzZWVjZDdlYmFiNWY4YzBkYWNjZDRiZGZhOGY0NTRmYmQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTU6Mzc6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA4MGI3YjhhNjk0NDY0NS4uZjA0NmU4NzhmN2FlMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTU1LDggJiM0Mzs1NSwxMCBAQCBzdHJ1Y3QgYnBmX2FyZW5hIHtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07XG4gXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0c3RydWN0IHJhbmdlX3RyZWUgcnQ7XG4tXHQvKiBwcm90ZWN0cyBydCAqL1xuJiM0MztcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xuIFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xuJiM0MztcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xuJiM0MztcdHU2NCBucl9wYWdlcztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdm1hX2xpc3Q7XG4gXHQvKiBwcm90ZWN0cyB2bWFfbGlzdCAqL1xuIFx0c3RydWN0IG11dGV4IGxvY2s7XG5AQCAtMTQzLDE0ICYjNDM7MTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG4gfVxuIFxuIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0aW50IGk7XG4gfTtcbiBcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG4mIzQzO1x0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gfTtcbiBcbiBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5AQCAtMTgwLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXG4gXHRcdGlmIChwdGVfbm9uZShvbGQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRwdGVwX2dldF9hbmRfY2xlYXIoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlKTtcbiBcdFx0Zmx1c2hfdGxiX2JlZm9yZV9zZXQoYWRkcik7XG5AQCAtMTk2LDYgJiM0MzsxOTgsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcHRldmFsKTtcbiAjZW5kaWZcbiBcdGQtXHUwMDNlaSYjNDM7JiM0Mzs7XG4mIzQzO1x0V1JJVEVfT05DRShkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLCBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzICYjNDM7IDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIyNywxMCAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuJiM0MztcdGlmIChwYWdlID09IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdF9fbGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlcGNwX2xsaXN0LCBkLVx1MDAzZWZyZWVfcGFnZXMpO1xuJiM0MztcdFdSSVRFX09OQ0UoZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcywgZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcyAtIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQxMyw3ICYjNDM7NDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gfVxuIFxuIHN0cnVjdCB2bWFfbGlzdCB7XG5AQCAtNTA2LDggJiM0Mzs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4gXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAsXG4tXHRcdFx0XHRcdCAuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlIH07XG4mIzQzO1x0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xuIFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbiBcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNnBhZ2UpO1xuIFx0aWYgKHJldCkge1xuQEAgLTY5Niw4ICYjNDM7NzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnRcbiBcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4mIzQzO1x0ZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xuLVx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXG4gXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuQEAgLTg3Myw4ICYjNDM7ODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcbiBcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFxuIFx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZyZWVfcGFnZXMpO1xuJiM0MztcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3Qgc3RydWN0IHBhZ2VzICovXG4gXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbkBAIC05ODEsOCAmIzQzOzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4mIzQzO1x0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbiBcdGNkYXRhLmZyZWVfcGFnZXMgPSBcdTAwMjZmcmVlX3BhZ2VzO1xuLVx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlO1xuIFx0YXJlbmFfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0dXNlcl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChhcmVuYSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5pbmRleCBkOTg1NzdhNmJhYmMwZS4uMWFkNWQwM2QwN2FkYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuQEAgLTIyMiw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxuIFx0XHQgIFwmIzM0O3N0b3JlX3JlbGVhc2U2NF9yZXN1bHRcJiMzNDspO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDtcbiBcdGludCBlcnI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5AQCAtNjYsNyAmIzQzOzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKHZvaWQpXG4gXHRjbG9zZShtYXBfZmQpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7b25lX3Bhc3RfZW5kXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5pbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfaHRhYl9hc20odm9pZClcbiBcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9odGFiX2xsdm1cJiMzNDspKVxuIFx0XHR0ZXN0X2FyZW5hX2h0YWJfbGx2bSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuaW5kZXggNGYyODY2YTYxNWNlNTIuLjI2NDhlMDZmNTNkMDcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbkBAIC02OCw3ICYjNDM7NjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcbiBcdGFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2xpc3RfMVwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCAmIzQzOzEsMTIyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3VzZXIuaFx1MDAzZVxuJiM0MzsjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbV91c2FnZS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7c1xuJiM0MzsgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2ZkXHUwMDNlIFwmIzM0O21lbWxvY2s6XCYjMzQ7IGxpbmUgKHRoZSBzYW1lIHZhbHVlIGJwZnRvb2wgbWFwIHNob3dcbiYjNDM7ICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIG1hcF9tZW1sb2NrKGludCBtYXBfZmQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdLCBsaW5lWzEyOF07XG4mIzQzO1x0bG9uZyBtZW1sb2NrID0gLTE7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDsvcHJvYy9zZWxmL2ZkaW5mby8lZFwmIzM0OywgbWFwX2ZkKTtcbiYjNDM7XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGYsIFwmIzM0O29wZW5fZmRpbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuJiM0MztcdFx0aWYgKHNzY2FuZihsaW5lLCBcJiMzNDttZW1sb2NrOlxcdCVsZFwmIzM0OywgXHUwMDI2bWVtbG9jaykgPT0gMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRBU1NFUlRfTkVRKG1lbWxvY2ssIC0xLCBcJiMzNDtwYXJzZV9tZW1sb2NrXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gbWVtbG9jaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGludCBlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDtcbiYjNDM7XHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuJiM0MztcdGNoYXIgKmJhc2U7XG4mIzQzO1x0c2l6ZV90IHN6O1xuJiM0MztcdGludCBmZCwgaTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlc2ggYXJlbmE6IG5vIGRhdGEgcGFnZXMsIGFuZCB0aGUgc2NyYXRjaCBwYWdlIGlzIG5vdCBjb3VudGVkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwmIzM0O2luaXRpYWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFsbG9jX2NudCA9IDE3O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5hbGxvYywgXCYjMzQ7YWxsb2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3RcbiYjNDM7XHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxuJiM0MztcdCAqIHJlZCBDSSBydW4gaXMgbm90IG1pc3Rha2VuIGZvciBhIGNvdW50aW5nIGJ1Zy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLCBcJiMzNDthcmVuYV9hbGxvY19wYWdlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNyAqIHBzLCBcJiMzNDthZnRlcl9hbGxvY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDE7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwmIzM0O2ZyZWVfb25lXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE2ICogcHMsIFwmIzM0O2FmdGVyX2ZyZWVfb25lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSB0ZW4gcGFnZXMgaW4gb25lIGNhbGwgKGJ1bGsgcGF0aCk7IG9ubHkgdGhlIGZyZWVkIHBhZ2VzIGNvdW50LiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxICogcHM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSAxMDtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9idWxrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXCYjMzQ7YWZ0ZXJfZnJlZV9idWxrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXHUwMDNlIGFyZW5hIGVtcHR5IGFnYWluLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxMSAqIHBzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gNjtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9yZXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwmIzM0O2FmdGVyX2ZyZWVfcmVzdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cbiYjNDM7XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG4mIzQzO1x0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihiYXNlLCBcJiMzNDthcmVuYV9iYXNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YmFzZVtpICogcHNdID0gMTtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCA4ICogcHMsIFwmIzM0O2FmdGVyX2ZhdWx0aW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxuJiM0MztcdCAqIChlbGV2YXRlZCByZWZjb3VudCksIHNvIHRoaXMgYWxzbyBleGVyY2lzZXMgdGhlIHphcCBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ciA9IGJhc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA4O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX2ZhdWx0ZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7YWZ0ZXJfZnJlZV9mYXVsdGVkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbmluZGV4IGFjYjlkNTNiNTk3MzNmLi41NDViMDVkN2EwYWE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuQEAgLTEwMSw3ICYjNDM7MTAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2tfc2l6ZShpbnQgc2l6ZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuIHtcbiBcdHJlcGVhdCA9IDEwMDA7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9zcGluX2xvY2tfMVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zdHIodm9pZClcbiBcdGFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX3N0cnNlYXJjaFwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfc3RyKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9wYXJhbGxlbF90ZXN0KHN0cnVjdCBsaWJhcmVuYSAqc2tlbCwgc3RydWN0IGJwZl9wcm9ncmFtXG4gXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xuIH1cbiBcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcbiBcdHN0cnVjdCBsaWJhcmVuYSAqc2tlbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbiAgKiBSdW4gdGhlIHRlc3QgZGVwZW5kaW5nIG9uIHdoZXRoZXIgTExWTSBjYW4gY29tcGlsZSBhcmVuYSBBU0FOXG4gICogcHJvZ3JhbXMuXG4gICovXG4tdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXG4ge1xuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cbiBcdHJ1bl90ZXN0KCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ1NWVjZDY2OWE1YWJmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbkBAIC0wLDAgJiM0MzsxLDQwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbiYjNDM7XHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjNDM7I2Vsc2VcbiYjNDM7XHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjNDM7I2VuZGlmXG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19hcmVuYSAqcHRyO1xuJiM0MztpbnQgYWxsb2NfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGFsbG9jYXRlICovXG4mIzQzO2xvbmcgZnJlZV9ieXRlX29mZjtcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXG4mIzQzO2ludCBmcmVlX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBmcmVlICovXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGFsbG9jKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdC8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLiAqL1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk1NGZkM2VlY2Q3ZWJhYjVmOGMwZGFjY2Q0YmRmYThmNDU0ZmJkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5mMDQ2ZTg3OGY3YWUxNSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuYwpAQCAtNTUsOCAmIzQzOzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEgewogCXN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07CiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTsKIAlzdHJ1Y3QgcmFuZ2VfdHJlZSBydDsKLQkvKiBwcm90ZWN0cyBydCAqLwomIzQzOwkvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi8KIAlycXNwaW5sb2NrX3Qgc3BpbmxvY2s7CiYjNDM7CS8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqLwomIzQzOwl1NjQgbnJfcGFnZXM7CiAJc3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDsKIAkvKiBwcm90ZWN0cyB2bWFfbGlzdCAqLwogCXN0cnVjdCBtdXRleCBsb2NrOwpAQCAtMTQzLDE0ICYjNDM7MTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpCiB9CiAKIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKLQlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogCWludCBpOwogfTsKIAogc3RydWN0IGNsZWFyX3JhbmdlX2RhdGEgewomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlczsKLQlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogfTsKIAogc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQpAQCAtMTgwLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAKIAkJaWYgKHB0ZV9ub25lKG9sZCkpCiAJCQljb250aW51ZTsKLQkJaWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtJmd0O3NjcmF0Y2hfcGFnZSkpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC0mZ3Q7YXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlwdGVwX2dldF9hbmRfY2xlYXIoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUpOwogCQlmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTsKQEAgLTE5Niw2ICYjNDM7MTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQogCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7CiAjZW5kaWYKIAlkLSZndDtpJiM0MzsmIzQzOzsKJiM0MzsJV1JJVEVfT05DRShkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMsIGQtJmd0O2FyZW5hLSZndDtucl9wYWdlcyAmIzQzOyAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI3LDEwICYjNDM7MjMwLDExIEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQogCSAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzCiAJICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLgogCSAqLwotCWlmIChwYWdlID09IGQtJmd0O3NjcmF0Y2hfcGFnZSkKJiM0MzsJaWYgKHBhZ2UgPT0gZC0mZ3Q7YXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSkKIAkJcmV0dXJuIDA7CiAKIAlfX2xsaXN0X2FkZCgmYW1wO3BhZ2UtJmd0O3BjcF9sbGlzdCwgZC0mZ3Q7ZnJlZV9wYWdlcyk7CiYjNDM7CVdSSVRFX09OQ0UoZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzLCBkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMgLSAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEzLDcgJiM0Mzs0MTcsOSBAQCBzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKIHsKLQlyZXR1cm4gMDsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApOwomIzQzOwomIzQzOwlyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtJmd0O25yX3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogfQogCiBzdHJ1Y3Qgdm1hX2xpc3QgewpAQCAtNTA2LDggJiM0Mzs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlpZiAocmV0KQogCQlnb3RvIG91dF9zaWdzZWd2X21lbWNnOwogCi0Jc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAsCi0JCQkJCSAuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSB9OwomIzQzOwlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKIAkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwogCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewpAQCAtNjk2LDggJiM0Mzs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudAogCQlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CWRhdGEuYXJlbmEgPSBhcmVuYTsKIAlkYXRhLnBhZ2VzID0gcGFnZXM7Ci0JZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlOwogCiAJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKIAkJZ290byBvdXRfZnJlZV9wYWdlczsKQEAgLTg3Myw4ICYjNDM7ODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwomIzQzOwljZGF0YS5hcmVuYSA9IGFyZW5hOwogCWNkYXRhLmZyZWVfcGFnZXMgPSAmYW1wO2ZyZWVfcGFnZXM7Ci0JY2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAkvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHN0cnVjdCBwYWdlcyAqLwogCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCAmYW1wO2NkYXRhKTsKQEAgLTk4MSw4ICYjNDM7OTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCiAJaW5pdF9sbGlzdF9oZWFkKCZhbXA7ZnJlZV9wYWdlcyk7CiYjNDM7CWNkYXRhLmFyZW5hID0gYXJlbmE7CiAJY2RhdGEuZnJlZV9wYWdlcyA9ICZhbXA7ZnJlZV9wYWdlczsKLQljZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlOwogCWFyZW5hX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTsKIAl1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jCmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwpAQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0b3JlX3JlbGVhc2Uoc3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWwpCiAJCSAgJiMzNDtzdG9yZV9yZWxlYXNlNjRfcmVzdWx0JiMzNDspOwogfQogCi12b2lkIHRlc3RfYXJlbmFfYXRvbWljcyh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKQogewogCXN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCmluZGV4IDRiNGFkYjNmNGI3MWViLi4wMWZjZjQ5NjVlYTQzYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMKQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlX29uZV9wYXN0X2VuZCh2b2lkKQogCWNsb3NlKG1hcF9mZCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7b25lX3Bhc3RfZW5kJiMzNDspKQogCQl0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYwppbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfaHRhYl9hc20odm9pZCkKIAlhcmVuYV9odGFiX2FzbV9fZGVzdHJveShza2VsKTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX2h0YWIodm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2h0YWJfbGx2bSYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9odGFiX2xsdm0oKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYwppbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKQEAgLTY4LDcgJiM0Mzs2OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKGludCBjbnQsIGJvb2wgbm9uc2xlZXBhYmxlKQogCWFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9saXN0XzEmIzM0OykpCiAJCXRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMKQEAgLTAsMCAmIzQzOzEsMTIyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7cwomIzQzOyAqIC9wcm9jLyZsdDtwaWQmZ3Q7L2ZkaW5mby8mbHQ7ZmQmZ3Q7ICYjMzQ7bWVtbG9jazomIzM0OyBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93CiYjNDM7ICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XSwgbGluZVsxMjhdOwomIzQzOwlsb25nIG1lbWxvY2sgPSAtMTsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLyVkJiMzNDssIG1hcF9mZCk7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihmLCAmIzM0O29wZW5fZmRpbmZvJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0O21lbWxvY2s6XHQlbGQmIzM0OywgJmFtcDttZW1sb2NrKSA9PSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJQVNTRVJUX05FUShtZW1sb2NrLCAtMSwgJiMzNDtwYXJzZV9tZW1sb2NrJiMzNDspOwomIzQzOwlyZXR1cm4gbWVtbG9jazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksICZhbXA7b3B0cyk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBuYW1lKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXJlbmFfbWVtX3VzYWdlICpza2VsOwomIzQzOwljb25zdCBsb25nIHBzID0gUEFHRV9TSVpFOwomIzQzOwljaGFyICpiYXNlOwomIzQzOwlzaXplX3Qgc3o7CiYjNDM7CWludCBmZCwgaTsKJiM0MzsKJiM0MzsJc2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZkID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy5hcmVuYSk7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIGFyZW5hOiBubyBkYXRhIHBhZ2VzLCBhbmQgdGhlIHNjcmF0Y2ggcGFnZSBpcyBub3QgY291bnRlZC4gKi8KJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDtpbml0aWFsJiMzNDspOwomIzQzOwomIzQzOwkvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O2FsbG9jX2NudCA9IDE3OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmFsbG9jLCAmIzM0O2FsbG9jJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdAomIzQzOwkgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYQomIzQzOwkgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7YnNzLSZndDtwdHIsICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgJiMzNDthZnRlcl9hbGxvYyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfYnl0ZV9vZmYgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfY250ID0gMTsKJiM0MzsJaWYgKHJ1bihza2VsLSZndDtwcm9ncy5mcmVlX3BhZ2VzLCAmIzM0O2ZyZWVfb25lJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE2ICogcHMsICYjMzQ7YWZ0ZXJfZnJlZV9vbmUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGVuIHBhZ2VzIGluIG9uZSBjYWxsIChidWxrIHBhdGgpOyBvbmx5IHRoZSBmcmVlZCBwYWdlcyBjb3VudC4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMSAqIHBzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfY250ID0gMTA7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX2J1bGsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCAmIzM0O2FmdGVyX2ZyZWVfYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtJmd0OyBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMTEgKiBwczsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDY7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX3Jlc3QmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDthZnRlcl9mcmVlX3Jlc3QmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtCiYjNDM7CSAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmcKJiM0MzsJICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLgomIzQzOwkgKi8KJiM0MzsJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoc2tlbC0mZ3Q7bWFwcy5hcmVuYSwgJmFtcDtzeik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihiYXNlLCAmIzM0O2FyZW5hX2Jhc2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYmFzZVtpICogcHNdID0gMTsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgOCAqIHBzLCAmIzM0O2FmdGVyX2ZhdWx0aW4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYQomIzQzOwkgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC4KJiM0MzsJICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHRyID0gYmFzZTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDg7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX2ZhdWx0ZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDthZnRlcl9mcmVlX2ZhdWx0ZWQmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlhcmVuYV9tZW1fdXNhZ2VfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwppbmRleCBhY2I5ZDUzYjU5NzMzZi4uNTQ1YjA1ZDdhMGFhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jCkBAIC0xMDEsNyAmIzQzOzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpCiAJcmV0dXJuOwogfQogCi12b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zcGluX2xvY2sodm9pZCkKIHsKIAlyZXBlYXQgPSAxMDAwOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfc3Bpbl9sb2NrXzEmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCmluZGV4IGY4MWEwYzA2NjUwNTk2Li4wYzFjNmNiZmEwZjE5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMKQEAgLTIzLDcgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3RyKHZvaWQpCiAJYXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX3N0cnNlYXJjaCYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9zdHIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9wYXJhbGxlbF90ZXN0KHN0cnVjdCBsaWJhcmVuYSAqc2tlbCwgc3RydWN0IGJwZl9wcm9ncmFtCiAJcnVuX2xpYmFyZW5hX3BhcmFsbGVsX2Zpbmkoc2tlbCwgbmFtZSwgcHJlZml4bGVuKTsKIH0KIAotdm9pZCB0ZXN0X2xpYmFyZW5hKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKQogewogCXN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJnczsKIAlzdHJ1Y3QgbGliYXJlbmEgKnNrZWw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKaW5kZXggZjg5NzQwNWY3MDFkZDUuLjljMzFiMTdkYmYzOTFmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKQogICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTgogICogcHJvZ3JhbXMuCiAgKi8KLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpCiB7CiAjaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOCiAJcnVuX3Rlc3QoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDU1ZWNkNjY5YTVhYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMKQEAgLTAsMCAmIzQzOzEsNDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi8KJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NAomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbHNlCiYjNDM7CV9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgJmx0OyZsdDsgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovCiYjNDM7I2VuZGlmCiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIF9fYXJlbmEgKnB0cjsKJiM0MztpbnQgYWxsb2NfY250OwkJLyogaW46ICBwYWdlcyB0byBhbGxvY2F0ZSAqLwomIzQzO2xvbmcgZnJlZV9ieXRlX29mZjsJLyogaW46ICBieXRlIG9mZnNldCB3aXRoaW4gcHRyIHRvIHN0YXJ0IGZyZWVpbmcgKi8KJiM0MztpbnQgZnJlZV9jbnQ7CQkvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi8KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGFsbG9jKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CS8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC0mZ3Q7YnNzLSZndDtwdHIuICovCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCBmb3IgaXQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBjbGVhcmx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYXJlbmEgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byB0cmFjayB0aGUgYWN0dWFsIG1lbW9yeSB1c2FnZSBvZiB0aGUgQlBGIGFyZW5hLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcg4oCTIHdlIGFsd2F5cyBuZWVkIHByZWNpc2UgYWNjb3VudGluZy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOiBUaGV5JiMzOTt2ZSBhZGRlZCBgdTY0IG5yX3BhZ2VzYCB0byB0aGUgYGJwZl9hcmVuYWAgc3RydWN0LiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgY291bnRlciwgb2J2aW91cy4gVGhleSYjMzk7dmUgYWxzbyB1cGRhdGVkIGBhcHBseV9yYW5nZV9kYXRhYCBhbmQgYGNsZWFyX3JhbmdlX2RhdGFgIHRvIHJlY2VpdmUgdGhlIGBicGZfYXJlbmFgIHBvaW50ZXIgaW5zdGVhZCBvZiBhIGBwYWdlYCBwb2ludGVyLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBjYWxsYmFja3MgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgY291bnRlci4gYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgYXJlIHRoZSBrZXkgdXBkYXRlczsgaW5jcmVtZW50aW5nL2RlY3JlbWVudGluZyBgZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gR29vZC4KCk5vdywgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgdGhleSYjMzk7cmUgcmV0dXJuaW5nIGBSRUFEX09OQ0UoYXJlbmEtJmd0O25yX3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZUYCBpbnN0ZWFkIG9mIHplcm8uIFRoYXQgY2FsY3VsYXRlcyB0aGUgbWVtb3J5IHVzYWdlIGJhc2VkIG9uIHRoZSBwYWdlIGNvdW50LiBBbmQgdGhpcyBmdW5jdGlvbiBpcyBhIGNhbGxiYWNrIGZvciBgc3RydWN0IGJwZl9tYXBfb3BzYCwgYW5kIGZyb20gdGhlIGNvbW1lbnQgaXQmIzM5O3MgcHJvYmFibHkgaG93IGBicGZfbWFwX21lbV91c2FnZWAgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIHRoZSB1c2VyLiBJIGNhbiBzZWUgdGhlIGludGVudGlvbi4KClNvLCB0aGlzIGNoYW5nZSBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZvciB0aGUgQlBGIGFyZW5hLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGVyZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTAtXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTEyLS8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMzogKiBhcmVuYV9tYXBfbWVtX3VzYWdlKCkgaXMgc3VyZmFjZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBtYXAmIzM5O3NcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTE0LSAqIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2UgXCYjMzQ7bWVtbG9jazpcJiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCoqCgpPa2F5LCBzbyBJIHNlZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBhcmVuYV9tYXBfb3BzLm1hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0cmFja2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBCUEYgYXJlbmFzLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBCUEYgbWFwIGNyZWF0aW9uIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgZGVmaW5pdGVseSBtYWtlcyBpdCBhIHBvdGVudGlhbCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzICYjMzQ7eWVzLCB0aGlzIHdhcnJhbnRzIGEgZGVlcCBkaXZlIHdpdGggZnV6emluZy4mIzM0OyBXaHk/IEJlY2F1c2UgYW55IGNoYW5nZSB0aGF0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGlzIGRvZXMgd2l0aCBCUEYgYXJlbmEgbWVtb3J5IHRyYWNraW5nLCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuIE1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBCUEYsIGlzIGEgY2xhc3NpYyBhcmVhIGZvciB0aGVzZSBpc3N1ZXMgdG8gc3VyZmFjZS4gSXQmIzM5O3MgYSBrZXkgYXJlYSB0aGF0IGNhbiBiZWNvbWUgcHJvYmxlbWF0aWMsIGFuZCBuZWVkcyB0byBiZSBldmFsdWF0ZWQuCgpCZWZvcmUgSSBjb21taXQgdG8gc2V0dGluZyB1cCBhIGZ1enppbmcgY2FtcGFpZ24sIEkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIGFyZW5hcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtub2JzIG9yIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb3IgcHJlc2VuY2Ugb2YgdGhpcyBtZW1vcnkgdHJhY2tpbmcgY29kZS4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW5mb3JtIG15IGZ1enppbmcgc3RyYXRlZ3k7IGVuc3VyaW5nIHRoYXQgSSBhbSB0YXJnZXRpbmcgdGhlIGNvZGUgSSB0aGluayBJIGFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTEwMTojZGVmaW5lIEJQRl9BUkVOQV9BQ0NFU1MgICAgICAgICAgIEJJVCgyMSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcdEdFTk1BU0soMzEsIDI3KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMTE6XHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg2LVx0aWYgKGlzX2FyZW5hKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3Olx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4OC1cdFx0Lypcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyAmIzQzOz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg0LVx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OykpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC0yLS8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTk6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jPTExPWV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjU6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTgzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVx0cnVuX3Rlc3QoKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yNy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVx0c3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jOjM6I2RlZmluZSBCUEZfQVJFTkFfRk9SQ0VfQVNNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gdGhpbmtpbmcsIHRoYXQgc291bmRzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gb25lIHRvIHNlZSBhc3NvY2lhdGVkIHdpdGggZW5hYmxpbmcgQlBGIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyB0aGUgb25lIHdlJiMzOTtyZSBhZnRlci4KClRvIHZlcmlmeSwgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gZWl0aGVyIGBrZXJuZWwvYnBmL0tjb25maWdgICh0aGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UsIGdpdmVuIGl0cyBwdXJwb3NlKSBvciwgYWx0ZXJuYXRpdmVseSwgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHdoZXJlIHRoZSBCUEYgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGV2ZW4gaW4gYSBgS2NvbmZpZy5wbGF0Zm9ybWAgaW4gb25lIG9mIHRob3NlIHBhdGhzLiBGcm9tIHRoZXJlIEkgY2FuIGNvbmZpcm0gdGhhdCBpdCBpcyBpbmRlZWQgd2hhdCBJIGFtIGFmdGVyLCBvciBpZiBJIG5lZWQgdG8gYWRqdXN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHdoaWxlIEkmIzM5O20gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTc9aWYgUkNfQ09SRVxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTE4LVxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnOjE5OmNvbmZpZyBCUEZfTElSQ19NT0RFMlxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpcmMgZGV2aWNlc1wmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzPTI0Mj1jb25maWcgUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0NS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Njpjb25maWcgQlBGX0FSQ0hfU1BJTkxPQ0tcbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0Ny1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMy0jIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctNS1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6MjptZW51Y29uZmlnIEJQRl9QUkVMT0FEXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtQcmVsb2FkIEJQRiBmaWxlIHN5c3RlbSB3aXRoIGtlcm5lbCBzcGVjaWZpYyBwcm9ncmFtIGFuZCBtYXAgaXRlcmF0b3JzXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc9MTQ9aWYgQlBGX1BSRUxPQURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7YnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2NT1jb25maWcgUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODY3LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODY4OmNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjktXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTEzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBBcmVuYSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBga2VybmVsL2JwZi9hcmVuYS5jYCBmaWxlIGdldHMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSBjb21tb24gd2F5IHRvIG1hbmFnZSBmZWF0dXJlIGZsYWdzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBqdXN0IGdvIGFuZCAqbG9vayogYXQgdGhlIGNvZGUuIFRoYXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24uIEdyYWJiaW5nIHRoZSBjb2RlIGlzIGxpa2UgcnVubmluZyBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGNvbnRyb2wgbG9naWMgSSB3b3VsZCBleHBlY3QgdG8gZmluZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL2J0dC5jPTM5PXN0YXRpYyBpbnQgYXJlbmFfcmVhZF9ieXRlcyhzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDQtXG5kcml2ZXJzL252ZGltbS9idHQuYzo0NTpcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXG5kcml2ZXJzL252ZGltbS9idHQuYy00Ni1cdG9mZnNldCA9IGFkanVzdF9pbml0aWFsX29mZnNldChuZF9idHQsIG9mZnNldCk7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9NTA9c3RhdGljIGludCBhcmVuYV93cml0ZV9ieXRlcyhzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXG5kcml2ZXJzL252ZGltbS9idHQuYzo1NjpcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cdG9mZnNldCA9IGFkanVzdF9pbml0aWFsX29mZnNldChuZF9idHQsIG9mZnNldCk7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjc0NjpcdFx0XHRcdHNpemVfdCBzdGFydCwgc2l6ZV90IGFyZW5hX29mZilcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzg5LVx0LyogJiMzOTtBYnNvbHV0ZSYjMzk7IHZhbHVlcywgcmVsYXRpdmUgdG8gc3RhcnQgb2Ygc3RvcmFnZSBzcGFjZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmM6NzkwOlx0YXJlbmEtXHUwMDNlaW5mb29mZiA9IGFyZW5hX29mZjtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc5MS1cdGFyZW5hLVx1MDAzZWRhdGFvZmYgPSBhcmVuYS1cdTAwM2VpbmZvb2ZmICYjNDM7IEJUVF9QR19TSVpFO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MjE6XHRcdFx0XHR1NjQgYXJlbmFfb2ZmKVxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy04MzAtXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XHRhcmVuYS1cdTAwM2VuZXh0b2ZmID0gKHN1cGVyLVx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiAmIzQzO1xuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVx0XHRcdGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZW5leHRvZmYpKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzMzpcdGFyZW5hLVx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzQ6XHRhcmVuYS1cdTAwM2VkYXRhb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWRhdGFvZmYpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM1Olx0YXJlbmEtXHUwMDNlbWFwb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZW1hcG9mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzY6XHRhcmVuYS1cdTAwM2Vsb2dvZmYgPSBhcmVuYV9vZmYgJiM0MzsgbGU2NF90b19jcHUoc3VwZXItXHUwMDNlbG9nb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNzpcdGFyZW5hLVx1MDAzZWluZm8yb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWluZm8yb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzOC1cbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz05MzA9c3RhdGljIGludCBjcmVhdGVfYXJlbmFzKHN0cnVjdCBidHQgKmJ0dClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjMtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXG5kcml2ZXJzL252ZGltbS9idHQuYzo5NjQ6ICogdG8gdGhhdCBhcmVuYSBvY2N1cnMgZm9yIHRoZSBmaXJzdCB0aW1lLlxuZHJpdmVycy9udmRpbW0vYnR0LmMtOTY1LSAqL1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5oPTEyND1zdHJ1Y3QgYWxpZ25lZF9sb2NrIHtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXG5kcml2ZXJzL252ZGltbS9idHQuaDoxMzM6ICogQHNpemU6XHRcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cbmRyaXZlcnMvbnZkaW1tL2J0dC5oLTEzNC0gKlx0XHRcdFRoaXMgaW5jbHVkZXMgYXJlbmEgbWV0YWRhdGEuXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTg3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjYyLVx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkyNjM6XHRcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7JXMgaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXIuXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyNjQtXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5NTM9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc5NTctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc5NTg6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk1OS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTU9c3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNy1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE4Olx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOS0jaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBgYXJlbmEub2AqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgYXJlbmEub2AgaXMgb25seSBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFsbCBlbmFibGVkLiBUaGF0IGBCUEZfU1lTQ0FMTGAgY29uZmlnIGlzIHRoZSBrZXkgb25lIGhlcmUgdG8gZm9jdXMgb24uIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBoYXZlIGNoYW5nZWQgdGhhdCBhcmUgcmVsYXRlZCB0byBmdXp6aW5nLiBJIHNlZToKCiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYAoqICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYAoqICAgYGFyZW5hX21hcF9tZW1fdXNhZ2VgCiogICBgYXJlbmFfdm1fZmF1bHRgCiogICBgYXJlbmFfYWxsb2NfcGFnZXNgCiogICBgYXJlbmFfZnJlZV9wYWdlc2AKKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmAKCkFscmlnaHQsIHRoYXQgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIGxpc3QuICBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgYWxsIGxvb2sgbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhcmUgYWNjdXJhdGUgYW5kIGluIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2V8YXJlbmFfdm1fZmF1bHR8YXJlbmFfYWxsb2NfcGFnZXN8YXJlbmFfZnJlZV9wYWdlc3xhcmVuYV9mcmVlX3dvcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwOT1pbnQgYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC03MTItI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuaW5jbHVkZS9saW51eC9icGYuaDo3MTM6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcxNC1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDo3MTU6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNjp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuaW5jbHVkZS9saW51eC9icGYuaC03MTctXHRcdFx0XHQgICAgICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC03MTgtI2Vsc2VcbmluY2x1ZGUvbGludXgvYnBmLmg6NzE5OnN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzIwLVx0XHRcdFx0XHRcdFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyNC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NzI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmluY2x1ZGUvbGludXgvYnBmLmgtNzI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyOC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NzI5OnN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuaW5jbHVkZS9saW51eC9icGYuaC03MzAtXHRcdFx0XHRcdFx0ICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cbmtlcm5lbC9icGYvYXJlbmEuYz01MT1zdHJ1Y3QgYnBmX2FyZW5hIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03My1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMjktXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTMxMS1cdGluaXRfaXJxX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEsIGFyZW5hX2ZyZWVfaXJxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTI6XHRJTklUX1dPUksoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrLCBhcmVuYV9mcmVlX3dvcmtlcik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzEzLVx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIGF0dHIpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00MTI9c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxua2VybmVsL2JwZi9hcmVuYS5jOjQxODpzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NDctXHQuY2xvc2VcdFx0PSBhcmVuYV92bV9jbG9zZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDg6XHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDktfTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTAtXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NTU9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2My0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo2NjQ6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxua2VybmVsL2JwZi9hcmVuYS5jLTY2NS1cdFx0XHQgICAgICBib29sIHNsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzAtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTc4NT1zdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg0Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo4NDM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ0LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMwLSAqIFJlc2VydmUgYW4gYXJlbmEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHdpdGhvdXQgcG9wdWxhdGluZyBpdC4gVGhpcyBjYWxsIHN0b3BzXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTMxOiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxua2VybmVsL2JwZi9hcmVuYS5jLTkzMi0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYz05MzM9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo5Njc6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxua2VybmVsL2JwZi9hcmVuYS5jLTk2OC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA0MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc3LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc4LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg2Olx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgKGxvbmcpcHRyX19pZ24sIHBhZ2VfY250LCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg3LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwODk6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDkwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA5NS1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjEwOTY6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTExND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExNjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNy1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDYwPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjQtXHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNTpcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNjpcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI3LVx0S0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjE3PUJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIxODpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjE5OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyMC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzA0PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNjpcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA4LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTY1OD1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Njk1LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfZHlucHRyX2Zyb21fZmlsZV9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTY6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5Ny1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njk4Olx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5OTpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MDAtXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTcwMTpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwMi1cdH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtNy0gKiBFYWNoIGNodW5rIGFkZGVkIHRvIEBzY2gtXHUwMDNlYXJlbmFfcG9vbCBjb21lcyBmcm9tIG9uZVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSgpIGNhbGwgYW5kIGlzIHJlZ2lzdGVyZWQgYXQgdGhlXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtOS0gKiBrZXJuZWwtc2lkZSBtYXBwaW5nIGFkZHJlc3MuIENhbGxlcnMgdHJhbnNsYXRlIHRvIHRoZSBCUEYtYXJlbmEgZm9ybVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz01Nz12b2lkIHNjeF9hcmVuYV9wb29sX2Rlc3Ryb3koc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy02Ni0vKlxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjY3OiAqIEdyb3cgdGhlIHBvb2wgYnkgQHBhZ2VfY250IHBhZ2VzLiBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKCkgYW5kXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtNjgtICogZ2VuX3Bvb2xfYWRkKCkgKHdoaWNoIGNhbGxzIHZ6YWxsb2MoR0ZQX0tFUk5FTCkpIHJlcXVpcmUgYSBzbGVlcGFibGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODAtXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODE6XHRwID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZShzY2gtXHUwMDNlYXJlbmFfbWFwLCBOVUxMLFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTgyLVx0XHRcdFx0XHQgICAgcGFnZV9jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTk2LVx0aWYgKHJldCkge1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjk3Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHNjaC1cdTAwM2VhcmVuYV9tYXAsIHAsIHBhZ2VfY250KTtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy05OC1cdFx0cmV0dXJuIHJldDtcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Mi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjgzOnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTg0LVx0XHRcdFx0ICAgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncykgX19rc3ltIF9fd2VhaztcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Ni1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yMD1jaGFyIF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmVuYVsxXTtcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTI1LVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDoyNjpzdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTI3LVx0XHRcdFx0XHRcdCAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDozMTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM9MTA3MD1zMzIgQlBGX1NUUlVDVF9PUFNfU0xFRVBBQkxFKHFtYXBfaW5pdClcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExMy1cdG5yX3BhZ2VzID0gKG1heF90YXNrcyAqIFRBU0tfQ1RYX1NUUklERSAmIzQzOyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYzoxMTE0Olx0c2xhYiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgbnJfcGFnZXMsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExNS1cdGlmICghc2xhYikge1xuLS1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM1LVx0ICovXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTEzNjpcdHFhX2lkbGVfY2lkcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM3LVx0aWYgKCFxYV9pZGxlX2NpZHMpIHtcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYz0xMDE9dm9pZCBfX2FyZW5hICpzY3hfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBzZHRfcG9vbCAqcG9vbClcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYy0xMTEtXHRpZiAocG9vbC1cdTAwM2VpZHggXHUwMDNlPSBtYXhfZWxlbXMpIHtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jOjExMjpcdFx0c2xhYiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jLTExMy1cdFx0XHRkaXZfcm91bmRfdXAobWF4X2VsZW1zICogZWxlbV9zaXplLCBQQUdFX1NJWkUpLCBOVU1BX05PX05PREUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD0yMD1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC0zMi1yZWZpbGw6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6MzM6XHRcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtMzQtXHRcdGlmICghcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg9NTU9c3RhdGljIGlubGluZSB2b2lkIGJwZl9mcmVlKHZvaWQgX19hcmVuYSAqYWRkcilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjEtXHRpZiAoLS0oKm9ial9jbnQpID09IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg9OTI9dm9pZCBodGFiX2luaXQoc3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfaHRhYi5oLTkzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfaHRhYi5oOjk0Olx0dm9pZCBfX2FyZW5hICpidWNrZXRzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAyLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmgtOTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjQ3OnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00OC1cdFx0XHRcdCAgICBpbnQgbm9kZV9pZCwgX191NjQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg9NDk9aW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD01OT1fX3dlYWsgY2hhciBhcmVuYVsxXTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtNjQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NjU6c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTY2LVx0XHRcdFx0XHRcdCAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02OS19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9idWRkeS5oPTU9ZW51bSBidWRkeV9jb25zdHMge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaDozNjpcdCAqIEFsaWdubWVudCBmb3IgY2h1bmsgYWxsb2NhdGlvbnMgYmFzZWQgb24gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaC0zNy1cdCAqIFRoZSBhcmVuYSBhbGxvY2F0aW9uIGtmdW5jIGRvZXMgbm90IGhhdmUgYW4gYWxpZ25tZW50IGFyZ3VtZW50LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYz0zNzU9dm9pZCAqX19hc2FuX21lbXNldCh2b2lkICpwLCBpbnQgYywgc2l6ZV90IG4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM4Mi0gKiBQb2lzb25pbmcgY29kZSwgdXNlZCB3aGVuIHdlIGFkZCBtb3JlIGZyZWVkIG1lbW9yeSB0byB0aGUgYWxsb2NhdG9yIGJ5OlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jOjM4MzogKiBcdGEpIHB1bGxpbmcgbWVtb3J5IGZyb20gdGhlIGFyZW5hIHNlZ21lbnQgdXNpbmcgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy0zODQtICogXHRiKSBmcmVlaW5nIG1lbW9yeSBmcm9tIGFwcGxpY2F0aW9uIGNvZGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzg2PV9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5My1cdCAqIG1lbW9yeSB0byB0aGUgYXBwbGljYXRpb24gdGhhdCBoYXMgYSBncmFudWxlLWFsaWduZWQgc3RhcnRpbmcgYWRkcmVzcyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzozOTQ6XHQgKiBhbmQgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzIHJldHVybnMgcGFnZS1hbGlnbmVkIG1lbW9yeS4gQSBub24tYWxpZ25lZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5NS1cdCAqIGFkZHIgdGhlbiBpbXBsaWVzIHdlJiMzOTtyZSBmcmVlaW5nIGEgZGlmZmVyZW50IGFkZHJlc3MgdGhhbiB0aGUgb25lIHdlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUyOS1cdCAqIHBhZ2VzIGFyZSBub3QgYWxsb2NhdGVkLCBhY2Nlc3NlcyB0byBpdCB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdHMgYW5kIHdpbGwgYmVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1MzA6XHQgKiByZXBvcnRlZCB0aHJvdWdoIEJQRiBzdHJlYW1zLiBBbnkgcGFnZXMgYWxsb2NhdGVkIHRocm91Z2ggYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTMxLVx0ICogc2hvdWxkIGJlIHBvaXNvbmVkIGJ5IHRoZSBhbGxvY2F0b3IgcmlnaHQgYWZ0ZXIgdGhlIGNhbGwgc3VjY2VlZHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTMyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTMzOlx0c2hhZG93X21hcCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUzNC1cdFx0XHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilfX2FzYW5fc2hhZG93X21lbW9yeV9keW5hbWljX2FkZHJlc3MsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz03Nj1zdGF0aWMgdm9pZCBidWRkeV91bnJlc2VydmVfYXJlbmFfdmFkZHIoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy03Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjc4Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTc5LVx0XHRcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKShCVUREWV9WQUREUl9PRkZTRVQgJiM0MzsgYnVkZHktXHUwMDNldmFkZHIpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQwOC1cdC8qIFVucmVzZXJ2ZSB0aGUgYWRkcmVzcyBzcGFjZS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NDA5Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDEwLVx0XHRcdCAgICAgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjQxMjpcdGNodW5rID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQxMy1cdFx0XHRcdCAgICAgIEJVRERZX0NIVU5LX1BBR0VTLCBOVU1BX05PX05PREUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDI2LVx0XHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NDI3Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhZGRyLCBCVUREWV9DSFVOS19QQUdFUyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQyOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz01NjQ9X193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTU4Mi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo1ODM6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy01ODQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NjA1PV9fd2VhayBpbnQgYnVkZHlfZGVzdHJveShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy02MjEtXHRcdFx0ICAgIEJVRERZX0NIVU5LX1BBR0VTICogX19QQUdFX1NJWkUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo2MjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy02MjMtXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTItLypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEzOiAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTQtICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2NmZFx1MDAzZSBcJiMzNDttZW1sb2NrOlwmIzM0OyBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy02OC1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo2OTpcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzAtXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTcyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo3MzpcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzXCYjMzQ7KSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc0LVx0XHRnb3RvIG91dDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy03Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjc3Olx0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzgtXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYz0yMTg9aW50IHVhZihjb25zdCB2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyODpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyOTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMtMjMwLVx0dWFmX3JlY292ZXJ5X2ZhaWxzID0gMjQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jPTI0PWludCBhbGxvYyh2b2lkICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjI2Olx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjctXHQvKiBTdWNjZXNzL2ZhaWx1cmUgaXMgY2hlY2tlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ci4gKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmM9MzI9aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYy0zNS1cdFx0cmV0dXJuIDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmM6MzY6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzctXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jPTM3NT1fX2xvZ19sZXZlbCgyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozNzY6X19tc2coXCYjMzQ7IDY6IC4xMjM0NS4uLi4gKDg1KSBjYWxsIGJwZl9hcmVuYV9hbGxvY19wYWdlc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzc3LV9fbXNnKFwmIzM0OyA3OiAwLi4uLi4uLi4uIChiZikgcjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpXCYjMzQ7KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM9Mzc5PV9fbmFrZWQgdm9pZCBhZGRyX3NwYWNlX2Nhc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM4Ni1cdFx0XCYjMzQ7cjUgPSAwO1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozODc6XHRcdFwmIzM0O2NhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zODgtXHRcdFwmIzM0O3IxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM5My1cdFx0OlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozOTQ6XHRcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzk1LVx0XHQgIF9faW1tX2FkZHIoYXJlbmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz00NzY9dm9pZCBrZnVuY19yb290KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTQ3Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jOjQ3ODpcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtNDc5LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yOD1pbnQgYmFzaWNfYWxsb2MxX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MzM6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTM0LVx0aWYgKCFwYWdlMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zNi1cdCpwYWdlMSA9IDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzozNzpcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzgtXHRpZiAoIXBhZ2UyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQwLVx0KnBhZ2UyID0gMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQxOlx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyLVx0aWYgKG5vX3BhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDctXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5LVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTU5PWludCBiYXNpY19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NjQ6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTY1LVx0aWYgKCFwYWdlMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy02Ny1cdCpwYWdlMSA9IDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo2ODpcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjktXHRpZiAoIXBhZ2UyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTcxLVx0KnBhZ2UyID0gMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjcyOlx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTczLVx0aWYgKG5vX3BhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNzgtXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6Nzk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgwLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgzLVx0XHRyZXR1cm4gNztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjg0Olx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04NS1cdGlmICghcGFnZTMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9OTg9aW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxMDM6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMiwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTEwNC1cdGlmICghcGFnZTEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTIwLVx0XHRyZXR1cm4gNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjEyMTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTIyLVx0aWYgKCpwYWdlMSAhPSAwIFx1MDAyNlx1MDAyNiAqcGFnZTEgIT0gMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMzY9aW50IGJhc2ljX2FsbG9jMih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTQxOlx0cGFnZTEgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNDItXHRpZiAoIXBhZ2UxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1OC1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxNTk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE2MC1cdGlmICgqcGFnZTEgIT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xNzg9aW50IGJhc2ljX2FsbG9jM19ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxODM6XHRwYWdlcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhci1cdTAwM2VtYXAsIE5VTEwsIGFyLVx1MDAzZW1hcC5tYXhfZW50cmllcywgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4NC1cdGlmICghcGFnZXMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTkxPWludCBiYXNpY19hbGxvYzModm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE5NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5NjpcdHBhZ2VzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyLVx1MDAzZW1hcCwgTlVMTCwgYXItXHUwMDNlbWFwLm1heF9lbnRyaWVzLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTk3LVx0aWYgKCFwYWdlcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yMDQ9aW50IGJhc2ljX3Jlc2VydmUxX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIwOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjIxMDpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMTEtXHRpZiAoIXBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjIxLVx0LyogVHJ5IHRvIGV4cGxpY2l0bHkgYWxsb2NhdGUgdGhlIHJlc2VydmVkIHBhZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyMjI6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjIzLVx0aWYgKHBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjI2LVx0LyogVHJ5IHRvIGltcGxpY2l0bHkgYWxsb2NhdGUgdGhlIHBhZ2UgKHNpbmNlIHRoZXJlJiMzOTtzIG9ubHkgMiBvZiB0aGVtKS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjIyNzpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMjgtXHRpZiAocGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yMzY9aW50IGJhc2ljX3Jlc2VydmUxKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNDI6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjQzLVx0aWYgKCFwYWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1My1cdC8qIFRyeSB0byBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZSByZXNlcnZlZCBwYWdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjU0Olx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1NS1cdGlmIChwYWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1OC1cdC8qIFRyeSB0byBpbXBsaWNpdGx5IGFsbG9jYXRlIHRoZSBwYWdlIChzaW5jZSB0aGVyZSYjMzk7cyBvbmx5IDIgb2YgdGhlbSkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNTk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjYwLVx0aWYgKHBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjY4PWludCBiYXNpY19yZXNlcnZlMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNzk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjgwLVx0aWYgKCh1NjQpcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yODg9aW50IGJhc2ljX3Jlc2VydmUyKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyOTk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzAwLVx0aWYgKCh1NjQpcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00MTI9aW50IGl0ZXJfbWFwczEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDE3LVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQxODpcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhtYXAsIE5VTEwsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00MTktXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00MjQ9aW50IGl0ZXJfbWFwczIoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDI3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDI4Olx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCh2b2lkICopc2VxLCBOVUxMLCAxLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyOS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQzND1pbnQgaXRlcl9tYXBzMyhzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00MzktXHRcdHJldHVybiAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDQwOlx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSwgTlVMTCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ0MS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ0OT1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00NjQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2ODYKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogMTAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBucl9wYWdlc2AgdHJhY2tpbmcgd2l0aGluIGBzdHJ1Y3QgYnBmX2FyZW5hYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHBvdGVudGlhbCBtZW1vcnktbWFuYWdlbWVudC1yZWxhdGVkIHZ1bG5lcmFiaWxpdHkuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcywgb2J2aW91c2x5LCB0aGUgcHJpbWFyeSBlbmFibGVyLiAgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgcHJvYmFibHkgaW1wbGljaXQgcmVxdWlyZW1lbnRzIGZvciB0aGUgYGFyZW5hLm9gIGNvbXBpbGF0aW9uIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHkuICBTbywgYEJQRl9TWVNDQUxMYCBpdCBpcy4KCk5vdywgd2hpY2ggc3ltYm9scyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQ/IExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBpdCBzZWVtcyB3ZSBoYXZlOgoKKiAgIGBhcmVuYV9tYXBfbWVtX3VzYWdlYDogVGhpcyBpcyBhIGNhbGxiYWNrIGZvciBgbWFwX21lbV91c2FnZWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIEJQRiBtYXAgb3BlcmF0aW9ucy4KKiAgIGBhcmVuYV92bV9mYXVsdGA6IFRoaXMgaXMgYSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgIGZhdWx0IGNhbGxiYWNrLgoqICAgYGFyZW5hX2FsbG9jX3BhZ2VzYDogVGhpcyBpcyBjYWxsZWQgYnkgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2Aga2Z1bmMuCiogICBgYXJlbmFfZnJlZV9wYWdlc2A6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfYXJlbmFfZnJlZV9wYWdlc2Aga2Z1bmMuCiogICBgYXJlbmFfZnJlZV93b3JrZXJgOiBUaGlzIGlzIGNhbGxlZCB2aWEgd29ya3F1ZXVlLgoKU28sIHRoZSBmb2N1cyBwb2ludHMgYXJlOiBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuCgpCdXQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBhIGJpdCBtb3JlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IGBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlYCBhbmQgYGFwcGx5X3RvX3BhZ2VfcmFuZ2VgLCB3aGljaCBhcmUsIGluIHR1cm4sIGNhbGxlZCBieSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBUaGV5IGNvbnRhaW4gdGhlIGBucl9wYWdlc2AgbWFuaXB1bGF0aW9uIGxvZ2ljLiBUaGVzZSBzZWVtIGltcG9ydGFudCwgYW5kIHRoZXkmIzM5O3JlIHN0YXRpYywgc28gbGV0JiMzOTtzIGluY2x1ZGUgdGhlbS4KClRoZXJlZm9yZSwgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZToKCiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYAoqICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYAoqICAgYGFyZW5hX21hcF9tZW1fdXNhZ2VgCiogICBgYXJlbmFfYWxsb2NfcGFnZXNgCiogICBgYXJlbmFfZnJlZV9wYWdlc2AKKiAgIGBhcmVuYV92bV9mYXVsdGAKCkFuZCwgdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgaXM6IGBCUEZfU1lTQ0FMTGAuCgoqKkNvbmNsdXNpb246KiogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZywgZXhwb3NpbmcgYG5yX3BhZ2VzYCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBhbmQgdXBkYXRlcyBjb3JlIEJQRiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MuIFRoYXQgbWFrZXMgaXQgd29ydGggZnV6emluZyB0byBleGFtaW5lIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM3OjU1LjA5NjU4MjYxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjY1ODA4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgcG9wdWxhdGVkIHBhZ2VzIChgbnJfcGFnZXNgKSBhbmQgcmVwb3J0IGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IHVwZGF0ZXMgdGhlIHBhZ2UgcmFuZ2UgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbWVtb3J5IHRyYWNraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozNzo1NS4wOTY1ODk2NTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk1ODI3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5OTU0ZmQzZWVjZDdlYmFiNWY4YzBkYWNjZDRiZGZhOGY0NTRmYmQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5mMDQ2ZTg3OGY3YWUxNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7XFxuIFxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07XFxuIFxcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XFxuIFxcdHN0cnVjdCByYW5nZV90cmVlIHJ0O1xcbi1cXHQvKiBwcm90ZWN0cyBydCAqL1xcbitcXHQvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi9cXG4gXFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xcbitcXHQvKiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHBvcHVsYXRlZCBpbiB0aGUgYXJlbmEgKi9cXG4rXFx0dTY0IG5yX3BhZ2VzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0O1xcbiBcXHQvKiBwcm90ZWN0cyB2bWFfbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG5AQCAtMTQzLDE0ICsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcilcXG4gfVxcbiBcXG4gc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4tXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gXFx0aW50IGk7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xcbiBcXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcXG4tXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5AQCAtMTgwLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFxuIFxcdFxcdGlmIChwdGVfbm9uZShvbGQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZXNjcmF0Y2hfcGFnZSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0XFx0cHRlcF9nZXRfYW5kX2NsZWFyKFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xcbiBcXHRcXHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcXG5AQCAtMTk2LDYgKzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xcbiAjZW5kaWZcXG4gXFx0ZC1cXHUwMDNlaSsrO1xcbitcXHRXUklURV9PTkNFKGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcywgZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzICsgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG4gXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHBhZ2UgPT0gZC1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbitcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbitcXHRXUklURV9PTkNFKGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcywgZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzIC0gMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiB7XFxuLVxcdHJldHVybiAwO1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuK1xcbitcXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXFx1MDAzZW5yX3BhZ2VzKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiB9XFxuIFxcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xcbkBAIC01MDYsOCArNTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuIFxcbi1cXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UgfTtcXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4gXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4gXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTY5Niw4ICs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG4tXFx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXG4gXFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xcbkBAIC04NzMsOCArODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFxuIFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2ZnJlZV9wYWdlcyk7XFxuK1xcdGNkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGNkYXRhLmZyZWVfcGFnZXMgPSBcXHUwMDI2ZnJlZV9wYWdlcztcXG4tXFx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZTtcXG4gXFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cXG4gXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFxcdTAwMjZjZGF0YSk7XFxuQEAgLTk4MSw4ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4rXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG4gXFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFxcdTAwMjZmcmVlX3BhZ2VzO1xcbi1cXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XFxuIFxcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXFxuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxcbiBcXHRcXHQgIFxcXCJzdG9yZV9yZWxlYXNlNjRfcmVzdWx0XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcXG4gXFx0Y2xvc2UobWFwX2ZkKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJvbmVfcGFzdF9lbmRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXFxuIFxcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfaHRhYl9sbHZtXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcXG4gXFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2xpc3RfMVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xcbkBAIC0wLDAgKzEsMTIyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG4rICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcXG4rXFx0bG9uZyBtZW1sb2NrID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFxcXCIsIG1hcF9mZCk7XFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fZmRpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwibWVtbG9jazpcXFxcdCVsZFxcXCIsIFxcdTAwMjZtZW1sb2NrKSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFxcXCJwYXJzZV9tZW1sb2NrXFxcIik7XFxuK1xcdHJldHVybiBtZW1sb2NrO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgKmJhc2U7XFxuK1xcdHNpemVfdCBzejtcXG4rXFx0aW50IGZkLCBpO1xcbitcXG4rXFx0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFxcXCJpbml0aWFsXFxcIik7XFxuK1xcbitcXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWFsbG9jX2NudCA9IDE3O1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmFsbG9jLCBcXFwiYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbitcXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxcbitcXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXFxcImFmdGVyX2FsbG9jXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIGEgc2luZ2xlIHBhZ2UgKGFyZW5hX2ZyZWVfcGFnZXMgcGFnZV9jbnQ9PTEgcGF0aCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9jbnQgPSAxO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX29uZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXFxcImFmdGVyX2ZyZWVfb25lXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDEwO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX2J1bGtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXFxcImFmdGVyX2ZyZWVfYnVsa1xcXCIpO1xcbitcXG4rXFx0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXFx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDY7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfcmVzdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfcmVzdFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cXG4rXFx0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xcbitcXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXFxuK1xcdCAqL1xcbitcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgXFxcImFyZW5hX2Jhc2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuK1xcdFxcdGJhc2VbaSAqIHBzXSA9IDE7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXFxcImFmdGVyX2ZhdWx0aW5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxcbitcXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyID0gYmFzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDg7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfZmF1bHRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfZmF1bHRlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbiB7XFxuIFxcdHJlcGVhdCA9IDEwMDA7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9zcGluX2xvY2tfMVxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxcbiBcXHRhcmVuYV9zdHJzZWFyY2hfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfc3Ryc2VhcmNoXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfc3RyKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxcbiBcXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcXG4gXFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTlxcbiAgKiBwcm9ncmFtcy5cXG4gICovXFxuLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiB7XFxuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG4gXFx0cnVuX3Rlc3QoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDU1ZWNkNjY5YTVhYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxuQEAgLTAsMCArMSw0MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2FyZW5hX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3ZvaWQgX19hcmVuYSAqcHRyO1xcbitpbnQgYWxsb2NfY250O1xcdFxcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cXG4rbG9uZyBmcmVlX2J5dGVfb2ZmO1xcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXFxuK2ludCBmcmVlX2NudDtcXHRcXHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBhbGxvYyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xcbitcXHQvKiBTdWNjZXNzL2ZhaWx1cmUgaXMgY2hlY2tlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyLiAqL1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxcbit7XFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAoY2hhciBfX2FyZW5hICopcHRyICsgZnJlZV9ieXRlX29mZiwgZnJlZV9jbnQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM3OjU2LjIxNzE0MTY1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNDUyMzQ5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk1NGZkM2VlY2Q3ZWJhYjVmOGMwZGFjY2Q0YmRmYThmNDU0ZmJkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA4MGI3YjhhNjk0NDY0NS4uZjA0NmU4NzhmN2FlMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTU1LDggKzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEge1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcbiBcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRzdHJ1Y3QgcmFuZ2VfdHJlZSBydDtcbi1cdC8qIHByb3RlY3RzIHJ0ICovXG4rXHQvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi9cbiBcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcbitcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xuK1x0dTY0IG5yX3BhZ2VzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDtcbiBcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbkBAIC0xNDMsMTQgKzE0NSwxNCBAQCBzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxuIH1cbiBcbiBzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0aW50IGk7XG4gfTtcbiBcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xuLVx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbkBAIC0xODAsNyArMTgyLDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAocHRlX25vbmUob2xkKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRwdGVwX2dldF9hbmRfY2xlYXIoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlKTtcbiBcdFx0Zmx1c2hfdGxiX2JlZm9yZV9zZXQoYWRkcik7XG5AQCAtMTk2LDYgKzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xuICNlbmRpZlxuIFx0ZC1cdTAwM2VpKys7XG4rXHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgKyAxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuK1x0aWYgKHBhZ2UgPT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0X19sbGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VwY3BfbGxpc3QsIGQtXHUwMDNlZnJlZV9wYWdlcyk7XG4rXHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgLSAxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4tXHRyZXR1cm4gMDtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbitcbitcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gfVxuIFxuIHN0cnVjdCB2bWFfbGlzdCB7XG5AQCAtNTA2LDggKzUxMiw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiBcbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCxcbi1cdFx0XHRcdFx0IC5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UgfTtcbitcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAgfTtcbiBcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG4gXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC02OTYsOCArNzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnRcbiBcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4rXHRkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG4tXHRkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcbiBcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG5AQCAtODczLDggKzg3OCw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbitcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3Qgc3RydWN0IHBhZ2VzICovXG4gXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbkBAIC05ODEsOCArOTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbitcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdGFyZW5hX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxuIFx0XHQgIFwic3RvcmVfcmVsZWFzZTY0X3Jlc3VsdFwiKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDtcbiBcdGludCBlcnI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcbiBcdGNsb3NlKG1hcF9mZCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwib25lX3Bhc3RfZW5kXCIpKVxuIFx0XHR0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXG4gXHRhcmVuYV9odGFiX2FzbV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2h0YWIodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2h0YWJfbGx2bVwiKSlcbiBcdFx0dGVzdF9hcmVuYV9odGFiX2xsdm0oKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcbiBcdGFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9saXN0XzFcIikpXG4gXHRcdHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCArMSwxMjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImFyZW5hX21lbV91c2FnZS5za2VsLmhcIlxuK1xuKy8qXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcbisgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2ZkXHUwMDNlIFwibWVtbG9jazpcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XG4rICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS5cbisgKi9cbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcbitcdGxvbmcgbWVtbG9jayA9IC0xO1xuK1x0RklMRSAqZjtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFwiLCBtYXBfZmQpO1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihmLCBcIm9wZW5fZmRpbmZvXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwibWVtbG9jazpcXHQlbGRcIiwgXHUwMDI2bWVtbG9jaykgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGZjbG9zZShmKTtcbitcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFwicGFyc2VfbWVtbG9ja1wiKTtcbitcdHJldHVybiBtZW1sb2NrO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0aW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbitcbitcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBuYW1lKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDtcbitcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4rXHRjaGFyICpiYXNlO1xuK1x0c2l6ZV90IHN6O1xuK1x0aW50IGZkLCBpO1xuK1xuK1x0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRmZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSk7XG4rXG4rXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcImluaXRpYWxcIik7XG4rXG4rXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWxsb2NfY250ID0gMTc7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuYWxsb2MsIFwiYWxsb2NcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0LypcbitcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxuK1x0ICogaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlKSwgbm90IGEgbWlzY291bnQgLS0gZmxhZyBpdCBkaXN0aW5jdGx5IHNvIGFcbitcdCAqIHJlZCBDSSBydW4gaXMgbm90IG1pc3Rha2VuIGZvciBhIGNvdW50aW5nIGJ1Zy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ciwgXCJhcmVuYV9hbGxvY19wYWdlc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNyAqIHBzLCBcImFmdGVyX2FsbG9jXCIpO1xuK1xuK1x0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDE7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX29uZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNiAqIHBzLCBcImFmdGVyX2ZyZWVfb25lXCIpO1xuK1xuK1x0LyogRnJlZSB0ZW4gcGFnZXMgaW4gb25lIGNhbGwgKGJ1bGsgcGF0aCk7IG9ubHkgdGhlIGZyZWVkIHBhZ2VzIGNvdW50LiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gMTA7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX2J1bGtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCBcImFmdGVyX2ZyZWVfYnVsa1wiKTtcbitcbitcdC8qIEZyZWUgdGhlIHJlbWFpbmluZyBzaXggLVx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxMSAqIHBzO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA2O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9yZXN0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwiYWZ0ZXJfZnJlZV9yZXN0XCIpO1xuK1xuK1x0LypcbitcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG4rXHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG4rXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4rXHQgKi9cbitcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJhc2UsIFwiYXJlbmFfYmFzZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBpKyspXG4rXHRcdGJhc2VbaSAqIHBzXSA9IDE7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCA4ICogcHMsIFwiYWZ0ZXJfZmF1bHRpblwiKTtcbitcbitcdC8qXG4rXHQgKiBGcmVlIHRoZSBmYXVsdGVkLWluIHBhZ2VzIGZyb20gQlBGLiBUaGV5IGFyZSBtYXBwZWQgaW50byB0aGUgdXNlciB2bWFcbitcdCAqIChlbGV2YXRlZCByZWZjb3VudCksIHNvIHRoaXMgYWxzbyBleGVyY2lzZXMgdGhlIHphcCBwYXRoLlxuK1x0ICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIgPSBiYXNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDg7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX2ZhdWx0ZWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCJhZnRlcl9mcmVlX2ZhdWx0ZWRcIik7XG4rb3V0OlxuK1x0YXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5pbmRleCBhY2I5ZDUzYjU5NzMzZi4uNTQ1YjA1ZDdhMGFhNzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2tfc2l6ZShpbnQgc2l6ZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4ge1xuIFx0cmVwZWF0ID0gMTAwMDtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfc3Bpbl9sb2NrXzFcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxuIFx0YXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX3N0cnNlYXJjaFwiKSlcbiBcdFx0dGVzdF9hcmVuYV9zdHIoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxuIFx0cnVuX2xpYmFyZW5hX3BhcmFsbGVsX2Zpbmkoc2tlbCwgbmFtZSwgcHJlZml4bGVuKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2xpYmFyZW5hKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcbiBcdHN0cnVjdCBsaWJhcmVuYSAqc2tlbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU5cbiAgKiBwcm9ncmFtcy5cbiAgKi9cbi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuIHtcbiAjaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXG4gXHRydW5fdGVzdCgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NTVlY2Q2NjlhNWFiZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXG5AQCAtMCwwICsxLDQwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2FyZW5hX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2Vsc2VcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbmRpZlxuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rdm9pZCBfX2FyZW5hICpwdHI7XG4raW50IGFsbG9jX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBhbGxvY2F0ZSAqL1xuK2xvbmcgZnJlZV9ieXRlX29mZjtcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXG4raW50IGZyZWVfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGFsbG9jKHZvaWQgKmN0eClcbit7XG4rXHRwdHIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIGFsbG9jX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcbitcdC8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLiAqL1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXG4re1xuK1x0aWYgKCFwdHIpXG4rXHRcdHJldHVybiAxO1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIChjaGFyIF9fYXJlbmEgKilwdHIgKyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzc6NTYuMjE3MTQzNjIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNjMzMDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCBmb3IgaXQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBjbGVhcmx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBhcmVuYSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gdHJhY2sgdGhlIGFjdHVhbCBtZW1vcnkgdXNhZ2Ugb2YgdGhlIEJQRiBhcmVuYSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIOKAkyB3ZSBhbHdheXMgbmVlZCBwcmVjaXNlIGFjY291bnRpbmcuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IFRoZXkndmUgYWRkZWQgYHU2NCBucl9wYWdlc2AgdG8gdGhlIGBicGZfYXJlbmFgIHN0cnVjdC4gUmlnaHQsIHRoYXQncyB0aGUgY291bnRlciwgb2J2aW91cy4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYGFwcGx5X3JhbmdlX2RhdGFgIGFuZCBgY2xlYXJfcmFuZ2VfZGF0YWAgdG8gcmVjZWl2ZSB0aGUgYGJwZl9hcmVuYWAgcG9pbnRlciBpbnN0ZWFkIG9mIGEgYHBhZ2VgIHBvaW50ZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGNhbGxiYWNrcyBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhhdCBjb3VudGVyLiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBhcmUgdGhlIGtleSB1cGRhdGVzOyBpbmNyZW1lbnRpbmcvZGVjcmVtZW50aW5nIGBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gR29vZC5cblxuTm93LCB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGV5J3JlIHJldHVybmluZyBgUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVGAgaW5zdGVhZCBvZiB6ZXJvLiBUaGF0IGNhbGN1bGF0ZXMgdGhlIG1lbW9yeSB1c2FnZSBiYXNlZCBvbiB0aGUgcGFnZSBjb3VudC4gQW5kIHRoaXMgZnVuY3Rpb24gaXMgYSBjYWxsYmFjayBmb3IgYHN0cnVjdCBicGZfbWFwX29wc2AsIGFuZCBmcm9tIHRoZSBjb21tZW50IGl0J3MgcHJvYmFibHkgaG93IGBicGZfbWFwX21lbV91c2FnZWAgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIHRoZSB1c2VyLiBJIGNhbiBzZWUgdGhlIGludGVudGlvbi5cblxuU28sIHRoaXMgY2hhbmdlIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBCUEYgYXJlbmEuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9hcmVuYS5jYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MDIuMDUzNDc3MzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDc4ODAzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfbWFwX21lbV91c2FnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMi0vKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEzOiAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCdzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTQtICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM4OjA3LjMwMTM2NDU1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjcyODQyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYXJlbmFfbWFwX21lbV91c2FnZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBhcmVuYV9tYXBfb3BzLm1hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0cmFja2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBCUEYgYXJlbmFzLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIEJQRiBtYXAgY3JlYXRpb24gYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZWZpbml0ZWx5IG1ha2VzIGl0IGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBcInllcywgdGhpcyB3YXJyYW50cyBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuXCIgV2h5PyBCZWNhdXNlIGFueSBjaGFuZ2UgdGhhdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhpcyBkb2VzIHdpdGggQlBGIGFyZW5hIG1lbW9yeSB0cmFja2luZywgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBNZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoaW4gQlBGLCBpcyBhIGNsYXNzaWMgYXJlYSBmb3IgdGhlc2UgaXNzdWVzIHRvIHN1cmZhY2UuIEl0J3MgYSBrZXkgYXJlYSB0aGF0IGNhbiBiZWNvbWUgcHJvYmxlbWF0aWMsIGFuZCBuZWVkcyB0byBiZSBldmFsdWF0ZWQuXG5cbkJlZm9yZSBJIGNvbW1pdCB0byBzZXR0aW5nIHVwIGEgZnV6emluZyBjYW1wYWlnbiwgSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlbmFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga25vYnMgb3IgY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvciBwcmVzZW5jZSBvZiB0aGlzIG1lbW9yeSB0cmFja2luZyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneTsgZW5zdXJpbmcgdGhhdCBJIGFtIHRhcmdldGluZyB0aGUgY29kZSBJIHRoaW5rIEkgYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODoxMS4zMjg2NTExNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODY1NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQVJFTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTA0Nj1zdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMDE6I2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMi0jZGVmaW5lIEJQRl9GSVhVUF9SRUdfTUFTS1xcdEdFTk1BU0soMzEsIDI3KVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTEwNT1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHRpbnQgYXJlbmFfcmVnID0gRklFTERfR0VUKEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSywgZXgtXFx1MDAzZWZpeHVwKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTExOlxcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cXHUwMDNlZml4dXAgXFx1MDAyNiBCUEZfQVJFTkFfQUNDRVNTKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEyLVxcdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMjk9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4Ni1cXHRpZiAoaXNfYXJlbmEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3OlxcdFxcdGV4LVxcdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExODgtXFx0XFx0LypcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE2LVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChCUEZfQVJFTkFfRk9SQ0VfQVNNKVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTg0ND1MSUJBUkVOQV9BU0FOX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYXNhbi5za2VsLmhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyArPSAtREhBU19CUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGU9Nzk9bGliYXJlbmEuYnBmLm86ICQoTElCQVJFTkFfT0JKRUNUUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZS04NC1cXHQkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcXHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAkKEFTQU5fRkxBR1MpIC1EQlBGX0FSRU5BX0FTQU4gJChCUEZfVEFSR0VUX0VORElBTikgLWMgJFxcdTAwM2MgLW8gJEBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtMzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChCUEZfQVJFTkFfRk9SQ0VfQVNNKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKSkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgtMi0vKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjM6I2lmbmRlZiBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTU0Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaD0xNT1leHRlcm4gdm9sYXRpbGUgYm9vbCBhc2FuX3JlcG9ydF9vbmNlO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDoyNjojaWZkZWYgQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9ODU9c3RhdGljIHZvaWQgKCpfX2FzYW5fYnRmX2FuY2hvcnNbXSkoaW50cHRyX3QpID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDo5MjojZWxzZSAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaD05Nz1fX3dlYWsgYm9vbCBhc2FuX3JlYWR5KHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oOjk5OiNlbmRpZiAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC0xMDAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYz0xMT1leHRlcm4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMtMTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMtMTQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy04MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYzo1OiNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtNi0jaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYzo5MDojaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVxcdHJ1bl90ZXN0KCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiLmMtMjcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiLmM6Mjg6I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIHx8IGRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVxcdHN0cnVjdCBodGFiIF9fYXJlbmEgKmh0YWI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYzozOiNkZWZpbmUgQlBGX0FSRU5BX0ZPUkNFX0FTTVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jLTQtI2RlZmluZSBhcmVuYV9odGFiX2xsdm0gYXJlbmFfaHRhYl9hc21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MTYuMjk3MzE1NzU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEknbSB0aGlua2luZywgdGhhdCBzb3VuZHMgbGlrZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBoZXJlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiAgSXQncyB0aGUgbW9zdCBjb21tb24gb25lIHRvIHNlZSBhc3NvY2lhdGVkIHdpdGggZW5hYmxpbmcgQlBGIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBvbmUgd2UncmUgYWZ0ZXIuXG5cblRvIHZlcmlmeSwgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gbG9vayBpbiBlaXRoZXIgYGtlcm5lbC9icGYvS2NvbmZpZ2AgKHRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlLCBnaXZlbiBpdHMgcHVycG9zZSkgb3IsIGFsdGVybmF0aXZlbHksIGBpbml0L0tjb25maWdgIHRvIHNlZSB3aGVyZSB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGluIG9uZSBvZiB0aG9zZSwgb3IgcGVyaGFwcyBldmVuIGluIGEgYEtjb25maWcucGxhdGZvcm1gIGluIG9uZSBvZiB0aG9zZSBwYXRocy4gRnJvbSB0aGVyZSBJIGNhbiBjb25maXJtIHRoYXQgaXQgaXMgaW5kZWVkIHdoYXQgSSBhbSBhZnRlciwgb3IgaWYgSSBuZWVkIHRvIGFkanVzdC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHdoaWxlIEknbSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODoxOS42OTc0NzMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEyMTA2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnPTE3PWlmIFJDX0NPUkVcXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnOjE5OmNvbmZpZyBCUEZfTElSQ19NT0RFMlxcbmRyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZy0yMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpcmMgZGV2aWNlc1xcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzPTI0Mj1jb25maWcgUVVFVUVEX1NQSU5MT0NLU1xcbi0tXFxua2VybmVsL0tjb25maWcubG9ja3MtMjQ1LVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Njpjb25maWcgQlBGX0FSQ0hfU1BJTkxPQ0tcXG5rZXJuZWwvS2NvbmZpZy5sb2Nrcy0yNDctXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMtIyBCUEYgaW50ZXJwcmV0ZXIgdGhhdCwgZm9yIGV4YW1wbGUsIGNsYXNzaWMgc29ja2V0IGZpbHRlcnMgZGVwZW5kIG9uLlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcXG5rZXJuZWwvYnBmL0tjb25maWctNS1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiYnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04NjU9Y29uZmlnIFBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODY3LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg2ODpjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg2OS1cXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM4OjI1LjEwOTU4NzAxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc3NjIxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQXJlbmEgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGZpbGUgZ2V0cyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBhIGNvbW1vbiB3YXkgdG8gbWFuYWdlIGZlYXR1cmUgZmxhZ3Mgb3IgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGp1c3QgZ28gYW5kICpsb29rKiBhdCB0aGUgY29kZS4gVGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYCNpZmRlZmAgb3Igc2ltaWxhciBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBHcmFiYmluZyB0aGUgY29kZSBpcyBsaWtlIHJ1bm5pbmcgYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBjb250cm9sIGxvZ2ljIEkgd291bGQgZXhwZWN0IHRvIGZpbmQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MjguNjc3MzUxOTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYwMzkwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vYnR0LmM9Mzk9c3RhdGljIGludCBhcmVuYV9yZWFkX2J5dGVzKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjQ1OlxcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXFx0b2Zmc2V0ID0gYWRqdXN0X2luaXRpYWxfb2Zmc2V0KG5kX2J0dCwgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XFx0LyogYXJlbmEgb2Zmc2V0cyBtYXkgYmUgc2hpZnRlZCBmcm9tIHRoZSBiYXNlIG9mIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XFx0XFx0XFx0XFx0c2l6ZV90IHN0YXJ0LCBzaXplX3QgYXJlbmFfb2ZmKVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy03ODktXFx0LyogJ0Fic29sdXRlJyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYzo3OTA6XFx0YXJlbmEtXFx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzkxLVxcdGFyZW5hLVxcdTAwM2VkYXRhb2ZmID0gYXJlbmEtXFx1MDAzZWluZm9vZmYgKyBCVFRfUEdfU0laRTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlxcdFxcdFxcdFxcdHU2NCBhcmVuYV9vZmYpXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMC1cXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XFx0YXJlbmEtXFx1MDAzZW5leHRvZmYgPSAoc3VwZXItXFx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiArXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVxcdFxcdFxcdGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VuZXh0b2ZmKSk7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMzOlxcdGFyZW5hLVxcdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNDpcXHRhcmVuYS1cXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VkYXRhb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzU6XFx0YXJlbmEtXFx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VtYXBvZmYpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNjpcXHRhcmVuYS1cXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICsgbGU2NF90b19jcHUoc3VwZXItXFx1MDAzZWxvZ29mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM3OlxcdGFyZW5hLVxcdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VpbmZvMm9mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODM4LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTMwPXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjMtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTY0OiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjUtICovXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXFxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlxcdFxcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcXHRcXHRcXHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTg3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyNjItXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MjYzOlxcdFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiJXMgaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXIuXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjY0LVxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04Ni1cXHR1YWRkcjMyID0gKHUzMikodW5zaWduZWQgbG9uZylwO1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04OC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9Nzk1Mz1zdGF0aWMgaW50IHNjeF9hcmVuYV9zY2FuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03OTU3LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6Nzk1ODpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk1OS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTE1PXN0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNy1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTg6XFx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTktI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MzYuMjM3NzU3NDE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjU0Njk1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgYGFyZW5hLm9gKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgYXJlbmEub2AgaXMgb25seSBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFsbCBlbmFibGVkLiBUaGF0IGBCUEZfU1lTQ0FMTGAgY29uZmlnIGlzIHRoZSBrZXkgb25lIGhlcmUgdG8gZm9jdXMgb24uIEdvdCBpdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgaGF2ZSBjaGFuZ2VkIHRoYXQgYXJlIHJlbGF0ZWQgdG8gZnV6emluZy4gSSBzZWU6XG5cbiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYFxuKiAgIGBhcHBseV9yYW5nZV9jbGVhcl9jYmBcbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWBcbiogICBgYXJlbmFfdm1fZmF1bHRgXG4qICAgYGFyZW5hX2FsbG9jX3BhZ2VzYFxuKiAgIGBhcmVuYV9mcmVlX3BhZ2VzYFxuKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmBcblxuQWxyaWdodCwgdGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgbGlzdC4gIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgYGFyZW5hX3ZtX2ZhdWx0YCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCBhbGwgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYXJlIGFjY3VyYXRlIGFuZCBpbiB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODo0MS4yMDMyMzAyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwOTg3MzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9tYXBfbWVtX3VzYWdlfGFyZW5hX3ZtX2ZhdWx0fGFyZW5hX2FsbG9jX3BhZ2VzfGFyZW5hX2ZyZWVfcGFnZXN8YXJlbmFfZnJlZV93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NDMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmluY2x1ZGUvbGludXgvYnBmLmg9NzA5PWludCBicGZfZHlucHRyX2Zyb21fZmlsZV9zbGVlcGFibGUoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzEyLSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6NzEzOnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzE0LVxcdFxcdFxcdFxcdFxcdCAgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNTp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNjp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzE3LVxcdFxcdFxcdFxcdCAgICAgIHU2NCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC03MTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxOTpzdGF0aWMgaW5saW5lIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxuaW5jbHVkZS9saW51eC9icGYuaC03MjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzI0LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6NzI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyOC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcyOTpzdGF0aWMgaW5saW5lIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTczMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zOS0gKiBpbnRvIGtlcm5lbCBhbmQgdXNlciB2bWEuXFxua2VybmVsL2JwZi9hcmVuYS5jOjQwOiAqIGJwZiBwcm9ncmFtIGNhbiBhbGxvY2F0ZSBhIHBhZ2UgdmlhIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGtmdW5jXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXFxua2VybmVsL2JwZi9hcmVuYS5jPTUxPXN0cnVjdCBicGZfYXJlbmEge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03My1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0yMTA9c3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI5LVxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTEtXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzEzLVxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQxMj1zdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ2ND1zdGF0aWMgdm9pZCBhcmVuYV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3OTpzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDM9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ3LVxcdC5jbG9zZVxcdFxcdD0gYXJlbmFfdm1fY2xvc2UsXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0ODpcXHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ5LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU1PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2My0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY0OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY1LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc3MC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Nzg1PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04NDItXFxua2VybmVsL2JwZi9hcmVuYS5jOjg0MzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ0LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzAtICogUmVzZXJ2ZSBhbiBhcmVuYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Ugd2l0aG91dCBwb3B1bGF0aW5nIGl0LiBUaGlzIGNhbGwgc3RvcHNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTMxOiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzItICovXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzMz1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjk2NzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA0MT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNDM6X19icGZfa2Z1bmMgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNDQtXFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDUyOlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTU6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2NDpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2Ni1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc2OlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3Ny19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODAte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtXFx0XFx0cmV0dXJuO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg2OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODctfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg5OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTAte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXFx0XFx0cmV0dXJuO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTE0PUJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjExMTY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTE3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTA2MD1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjQtXFx0S0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTI1OlxcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMjY6XFx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI3LVxcdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjE3PUJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMTg6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMTk6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyMC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3MDQ9c3RhdGljIGJvb2wgaXNfYnBmX2FyZW5hX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MDY6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNzpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MDgtXFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjU4PXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5NS1cXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5NjpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTctXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTg6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5OTpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwMC1cXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTcwMTpcXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MDItXFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTctICogRWFjaCBjaHVuayBhZGRlZCB0byBAc2NoLVxcdTAwM2VhcmVuYV9wb29sIGNvbWVzIGZyb20gb25lXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSgpIGNhbGwgYW5kIGlzIHJlZ2lzdGVyZWQgYXQgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTktICoga2VybmVsLXNpZGUgbWFwcGluZyBhZGRyZXNzLiBDYWxsZXJzIHRyYW5zbGF0ZSB0byB0aGUgQlBGLWFyZW5hIGZvcm1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz01Nz12b2lkIHNjeF9hcmVuYV9wb29sX2Rlc3Ryb3koc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTY2LS8qXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjY3OiAqIEdyb3cgdGhlIHBvb2wgYnkgQHBhZ2VfY250IHBhZ2VzLiBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKCkgYW5kXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTY4LSAqIGdlbl9wb29sX2FkZCgpICh3aGljaCBjYWxscyB2emFsbG9jKEdGUF9LRVJORUwpKSByZXF1aXJlIGEgc2xlZXBhYmxlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04MC1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODE6XFx0cCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUoc2NoLVxcdTAwM2VhcmVuYV9tYXAsIE5VTEwsXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTgyLVxcdFxcdFxcdFxcdFxcdCAgICBwYWdlX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy05Ni1cXHRpZiAocmV0KSB7XFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjk3OlxcdFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUoc2NoLVxcdTAwM2VhcmVuYV9tYXAsIHAsIHBhZ2VfY250KTtcXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtOTgtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTgyLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjgzOnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yMD1jaGFyIF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmVuYVsxXTtcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMjUtXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDoyNjpzdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaC0yNy1cXHRcXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncylcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmg6MzE6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzIte1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L3NjeF9xbWFwLmJwZi5jPTEwNzA9czMyIEJQRl9TVFJVQ1RfT1BTX1NMRUVQQUJMRShxbWFwX2luaXQpXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExMy1cXHRucl9wYWdlcyA9IChtYXhfdGFza3MgKiBUQVNLX0NUWF9TVFJJREUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTtcXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTExNDpcXHRzbGFiID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgbnJfcGFnZXMsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvc2NoZWRfZXh0L3NjeF9xbWFwLmJwZi5jLTExMTUtXFx0aWYgKCFzbGFiKSB7XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTEzNS1cXHQgKi9cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTEzNjpcXHRxYV9pZGxlX2NpZHMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM3LVxcdGlmICghcWFfaWRsZV9jaWRzKSB7XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYz0xMDE9dm9pZCBfX2FyZW5hICpzY3hfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBzZHRfcG9vbCAqcG9vbClcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jLTExMS1cXHRpZiAocG9vbC1cXHUwMDNlaWR4IFxcdTAwM2U9IG1heF9lbGVtcykge1xcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jOjExMjpcXHRcXHRzbGFiID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCxcXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYy0xMTMtXFx0XFx0XFx0ZGl2X3JvdW5kX3VwKG1heF9lbGVtcyAqIGVsZW1fc2l6ZSwgUEFHRV9TSVpFKSwgTlVNQV9OT19OT0RFLCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD0yMD1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTMyLXJlZmlsbDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6MzM6XFx0XFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTM0LVxcdFxcdGlmICghcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg9OTI9dm9pZCBodGFiX2luaXQoc3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2h0YWIuaC05My17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg6OTQ6XFx0dm9pZCBfX2FyZW5hICpidWNrZXRzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMiwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2h0YWIuaC05NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NDc6dm9pZCBfX2FyZW5hKiBicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00OC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC01MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD01OT1fX3dlYWsgY2hhciBhcmVuYVsxXTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NjU6c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02OS19XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtNzEte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaD01PWVudW0gYnVkZHlfY29uc3RzIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzUtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9idWRkeS5oOjM2OlxcdCAqIEFsaWdubWVudCBmb3IgY2h1bmsgYWxsb2NhdGlvbnMgYmFzZWQgb24gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzctXFx0ICogVGhlIGFyZW5hIGFsbG9jYXRpb24ga2Z1bmMgZG9lcyBub3QgaGF2ZSBhbiBhbGlnbm1lbnQgYXJndW1lbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzc1PXZvaWQgKl9fYXNhbl9tZW1zZXQodm9pZCAqcCwgaW50IGMsIHNpemVfdCBuKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM4Mi0gKiBQb2lzb25pbmcgY29kZSwgdXNlZCB3aGVuIHdlIGFkZCBtb3JlIGZyZWVkIG1lbW9yeSB0byB0aGUgYWxsb2NhdG9yIGJ5OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzozODM6ICogXFx0YSkgcHVsbGluZyBtZW1vcnkgZnJvbSB0aGUgYXJlbmEgc2VnbWVudCB1c2luZyBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy0zODQtICogXFx0YikgZnJlZWluZyBtZW1vcnkgZnJvbSBhcHBsaWNhdGlvbiBjb2RlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzg2PV9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtMzkzLVxcdCAqIG1lbW9yeSB0byB0aGUgYXBwbGljYXRpb24gdGhhdCBoYXMgYSBncmFudWxlLWFsaWduZWQgc3RhcnRpbmcgYWRkcmVzcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6Mzk0OlxcdCAqIGFuZCBicGZfYXJlbmFfYWxsb2NfcGFnZXMgcmV0dXJucyBwYWdlLWFsaWduZWQgbWVtb3J5LiBBIG5vbi1hbGlnbmVkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5NS1cXHQgKiBhZGRyIHRoZW4gaW1wbGllcyB3ZSdyZSBmcmVlaW5nIGEgZGlmZmVyZW50IGFkZHJlc3MgdGhhbiB0aGUgb25lIHdlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9NDg1PV9fd2VhayBfX25vYXNhbiBpbnQgYXNhbl9pbml0KHN0cnVjdCBhc2FuX2luaXRfYXJncyAqYXJncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01MjktXFx0ICogcGFnZXMgYXJlIG5vdCBhbGxvY2F0ZWQsIGFjY2Vzc2VzIHRvIGl0IHdpbGwgdHJpZ2dlciBwYWdlIGZhdWx0cyBhbmQgd2lsbCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1MzA6XFx0ICogcmVwb3J0ZWQgdGhyb3VnaCBCUEYgc3RyZWFtcy4gQW55IHBhZ2VzIGFsbG9jYXRlZCB0aHJvdWdoIGJwZl9hcmVuYV9hbGxvY19wYWdlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01MzEtXFx0ICogc2hvdWxkIGJlIHBvaXNvbmVkIGJ5IHRoZSBhbGxvY2F0b3IgcmlnaHQgYWZ0ZXIgdGhlIGNhbGwgc3VjY2VlZHMuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUzMi1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTMzOlxcdHNoYWRvd19tYXAgPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTM0LVxcdFxcdFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKV9fYXNhbl9zaGFkb3dfbWVtb3J5X2R5bmFtaWNfYWRkcmVzcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NzY9c3RhdGljIHZvaWQgYnVkZHlfdW5yZXNlcnZlX2FyZW5hX3ZhZGRyKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTc3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjc4OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNzktXFx0XFx0XFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopKEJVRERZX1ZBRERSX09GRlNFVCArIGJ1ZGR5LVxcdTAwM2V2YWRkciksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jPTM4ND1zdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQwOC1cXHQvKiBVbnJlc2VydmUgdGhlIGFkZHJlc3Mgc3BhY2UuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo0MDk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTAtXFx0XFx0XFx0ICAgICBCVUREWV9DSFVOS19QQUdFUyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo0MTI6XFx0Y2h1bmsgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTMtXFx0XFx0XFx0XFx0ICAgICAgQlVERFlfQ0hVTktfUEFHRVMsIE5VTUFfTk9fTk9ERSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQyNi1cXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjQyNzpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWRkciwgQlVERFlfQ0hVTktfUEFHRVMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDI4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz01NjQ9X193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNTgyLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NTgzOlxcdFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTU4NC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NjA1PV9fd2VhayBpbnQgYnVkZHlfZGVzdHJveShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTYyMS1cXHRcXHRcXHQgICAgQlVERFlfQ0hVTktfUEFHRVMgKiBfX1BBR0VfU0laRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo2MjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNjIzLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTEyLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTM6ICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xNC0gKiAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2ZkXFx1MDAzZSBcXFwibWVtbG9jazpcXFwiIGxpbmUgKHRoZSBzYW1lIHZhbHVlIGJwZnRvb2wgbWFwIHNob3dcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jPTQ4PXZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy02OC1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjY5OlxcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTcwLVxcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy03Mi1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo3MzpcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6Nzc6XFx0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc4LVxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cXHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEwMDpcXHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTAxLVxcdCAqIGxvYWQsIHNvIGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoKSBoYW5kcyBiYWNrIHRoYXQgYmFzZS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjg6XFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYz0yND1pbnQgYWxsb2Modm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYy0yNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjI2OlxcdHB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIGFsbG9jX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjctXFx0LyogU3VjY2Vzcy9mYWlsdXJlIGlzIGNoZWNrZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXB0ci4gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYz0zMj1pbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzUtXFx0XFx0cmV0dXJuIDE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjM2OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciArIGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzctXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jPTM3NT1fX2xvZ19sZXZlbCgyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM6Mzc2Ol9fbXNnKFxcXCIgNjogLjEyMzQ1Li4uLiAoODUpIGNhbGwgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM3Ny1fX21zZyhcXFwiIDc6IDAuLi4uLi4uLi4gKGJmKSByMSA9IGFkZHJfc3BhY2VfY2FzdChyMCwgMCwgMSlcXFwiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz0zNzk9X19uYWtlZCB2b2lkIGFkZHJfc3BhY2VfY2FzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zODYtXFx0XFx0XFxcInI1ID0gMDtcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozODc6XFx0XFx0XFxcImNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM4OC1cXHRcXHRcXFwicjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpO1xcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzkzLVxcdFxcdDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jOjM5NDpcXHRcXHQ6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zOTUtXFx0XFx0ICBfX2ltbV9hZGRyKGFyZW5hKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz00NzY9dm9pZCBrZnVuY19yb290KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy00Nzcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM6NDc4OlxcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTQ3OS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yOD1pbnQgYmFzaWNfYWxsb2MxX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MzM6XFx0cGFnZTEgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTM0LVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zNi1cXHQqcGFnZTEgPSAxO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjM3OlxcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zOC1cXHRpZiAoIXBhZ2UyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDAtXFx0KnBhZ2UyID0gMjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0MTpcXHRub19wYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00Mi1cXHRpZiAobm9fcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ3LVxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQ4OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRpZiAoKnBhZ2UxICE9IDEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz01OT1pbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjY0OlxcdHBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy02NS1cXHRpZiAoIXBhZ2UxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjctXFx0KnBhZ2UxID0gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo2ODpcXHRwYWdlMiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjktXFx0aWYgKCFwYWdlMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTcxLVxcdCpwYWdlMiA9IDI7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NzI6XFx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNzMtXFx0aWYgKG5vX3BhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy03OC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo3OTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODAtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODMtXFx0XFx0cmV0dXJuIDc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6ODQ6XFx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTg1LVxcdGlmICghcGFnZTMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz05OD1pbnQgYmFzaWNfYWxsb2MyX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjEwMzpcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTA0LVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMjAtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTIxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMjItXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTM2PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE0MTpcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQyLVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTgtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTU5OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNjAtXFx0aWYgKCpwYWdlMSAhPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTc4PWludCBiYXNpY19hbGxvYzNfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTgzOlxcdHBhZ2VzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhci1cXHUwMDNlbWFwLCBOVUxMLCBhci1cXHUwMDNlbWFwLm1heF9lbnRyaWVzLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4NC1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTkxPWludCBiYXNpY19hbGxvYzModm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5NjpcXHRwYWdlcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXItXFx1MDAzZW1hcCwgTlVMTCwgYXItXFx1MDAzZW1hcC5tYXhfZW50cmllcywgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOTctXFx0aWYgKCFwYWdlcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTIwND1pbnQgYmFzaWNfcmVzZXJ2ZTFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjEwOlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIxMS1cXHRpZiAoIXBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMjEtXFx0LyogVHJ5IHRvIGV4cGxpY2l0bHkgYWxsb2NhdGUgdGhlIHJlc2VydmVkIHBhZ2UuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjIyOlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyMy1cXHRpZiAocGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyNi1cXHQvKiBUcnkgdG8gaW1wbGljaXRseSBhbGxvY2F0ZSB0aGUgcGFnZSAoc2luY2UgdGhlcmUncyBvbmx5IDIgb2YgdGhlbSkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjI3OlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyOC1cXHRpZiAocGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTIzNj1pbnQgYmFzaWNfcmVzZXJ2ZTEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjQxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI0MjpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNDMtXFx0aWYgKCFwYWdlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjUzLVxcdC8qIFRyeSB0byBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZSByZXNlcnZlZCBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI1NDpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNTUtXFx0aWYgKHBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNTgtXFx0LyogVHJ5IHRvIGltcGxpY2l0bHkgYWxsb2NhdGUgdGhlIHBhZ2UgKHNpbmNlIHRoZXJlJ3Mgb25seSAyIG9mIHRoZW0pLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI1OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNjAtXFx0aWYgKHBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yNjg9aW50IGJhc2ljX3Jlc2VydmUyX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI3OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yODAtXFx0aWYgKCh1NjQpcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTI4OD1pbnQgYmFzaWNfcmVzZXJ2ZTIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjk4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI5OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zMDAtXFx0aWYgKCh1NjQpcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQxMj1pbnQgaXRlcl9tYXBzMShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQxNy1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0MTg6XFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcCwgTlVMTCwgbWFwLVxcdTAwM2VtYXhfZW50cmllcywgMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDE5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NDI0PWludCBpdGVyX21hcHMyKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDI3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQyODpcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoKHZvaWQgKilzZXEsIE5VTEwsIDEsIDAsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyOS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQzND1pbnQgaXRlcl9tYXBzMyhzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQzOS1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0NDA6XFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcC1cXHUwMDNlaW5uZXJfbWFwX21ldGEsIE5VTEwsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDAsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ0MS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ0OT1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ2NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6NDkuMDEzMTMzODgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDA3OTg3Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCUEYgQXJlbmEgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBucl9wYWdlc2AgdHJhY2tpbmcgd2l0aGluIGBzdHJ1Y3QgYnBmX2FyZW5hYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHBvdGVudGlhbCBtZW1vcnktbWFuYWdlbWVudC1yZWxhdGVkIHZ1bG5lcmFiaWxpdHkuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMsIG9idmlvdXNseSwgdGhlIHByaW1hcnkgZW5hYmxlci4gIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYXJlIHByb2JhYmx5IGltcGxpY2l0IHJlcXVpcmVtZW50cyBmb3IgdGhlIGBhcmVuYS5vYCBjb21waWxhdGlvbiBvbiBtb3N0IGFyY2hpdGVjdHVyZXMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHkuICBTbywgYEJQRl9TWVNDQUxMYCBpdCBpcy5cblxuTm93LCB3aGljaCBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbXBhY3RlZD8gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2FsbHMsIGl0IHNlZW1zIHdlIGhhdmU6XG5cbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWA6IFRoaXMgaXMgYSBjYWxsYmFjayBmb3IgYG1hcF9tZW1fdXNhZ2VgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBCUEYgbWFwIG9wZXJhdGlvbnMuXG4qICAgYGFyZW5hX3ZtX2ZhdWx0YDogVGhpcyBpcyBhIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAgZmF1bHQgY2FsbGJhY2suXG4qICAgYGFyZW5hX2FsbG9jX3BhZ2VzYDogVGhpcyBpcyBjYWxsZWQgYnkgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2Aga2Z1bmMuXG4qICAgYGFyZW5hX2ZyZWVfcGFnZXNgOiBUaGlzIGlzIGNhbGxlZCBieSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGtmdW5jLlxuKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmA6IFRoaXMgaXMgY2FsbGVkIHZpYSB3b3JrcXVldWUuXG5cblNvLCB0aGUgZm9jdXMgcG9pbnRzIGFyZTogYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBgYXJlbmFfdm1fZmF1bHRgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLlxuXG5CdXQsIGxldCdzIGRpZyBpbnRvIHRoZSBwYXRjaCdzIGNvcmUgbG9naWMgYSBiaXQgbW9yZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCwgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gVGhleSBjb250YWluIHRoZSBgbnJfcGFnZXNgIG1hbmlwdWxhdGlvbiBsb2dpYy4gVGhlc2Ugc2VlbSBpbXBvcnRhbnQsIGFuZCB0aGV5J3JlIHN0YXRpYywgc28gbGV0J3MgaW5jbHVkZSB0aGVtLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYFxuKiAgIGBhcHBseV9yYW5nZV9jbGVhcl9jYmBcbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWBcbiogICBgYXJlbmFfYWxsb2NfcGFnZXNgXG4qICAgYGFyZW5hX2ZyZWVfcGFnZXNgXG4qICAgYGFyZW5hX3ZtX2ZhdWx0YFxuXG5BbmQsIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzOiBgQlBGX1NZU0NBTExgLlxuXG4qKkNvbmNsdXNpb246KiogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZywgZXhwb3NpbmcgYG5yX3BhZ2VzYCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBhbmQgdXBkYXRlcyBjb3JlIEJQRiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MuIFRoYXQgbWFrZXMgaXQgd29ydGggZnV6emluZyB0byBleGFtaW5lIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4NiwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM5OjAyLjAyMTEyNTkyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTI0MjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowsphdc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 15:08:47 +0000 UTC FinishedAt: 2026-07-17 15:39:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "e23f4c5a-79a8-4076-a371-6449d281d191" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "apply_range_set_cb", "apply_range_clear_cb", "arena_map_mem_usage", "arena_alloc_pages", "arena_free_pages", "arena_vm_fault" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXBwbHlfcmFuZ2Vfc2V0X2NiJiMzNDssCiAgICAmIzM0O2FwcGx5X3JhbmdlX2NsZWFyX2NiJiMzNDssCiAgICAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAgICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5OTU0ZmQzZWVjZDdlYmFiNWY4YzBkYWNjZDRiZGZhOGY0NTRmYmQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMTU6Mzc6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA4MGI3YjhhNjk0NDY0NS4uZjA0NmU4NzhmN2FlMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTU1LDggJiM0Mzs1NSwxMCBAQCBzdHJ1Y3QgYnBmX2FyZW5hIHtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07XG4gXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0c3RydWN0IHJhbmdlX3RyZWUgcnQ7XG4tXHQvKiBwcm90ZWN0cyBydCAqL1xuJiM0MztcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xuIFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xuJiM0MztcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xuJiM0MztcdHU2NCBucl9wYWdlcztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdm1hX2xpc3Q7XG4gXHQvKiBwcm90ZWN0cyB2bWFfbGlzdCAqL1xuIFx0c3RydWN0IG11dGV4IGxvY2s7XG5AQCAtMTQzLDE0ICYjNDM7MTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG4gfVxuIFxuIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0aW50IGk7XG4gfTtcbiBcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG4mIzQzO1x0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG4gXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gfTtcbiBcbiBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5AQCAtMTgwLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXG4gXHRcdGlmIChwdGVfbm9uZShvbGQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRwdGVwX2dldF9hbmRfY2xlYXIoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlKTtcbiBcdFx0Zmx1c2hfdGxiX2JlZm9yZV9zZXQoYWRkcik7XG5AQCAtMTk2LDYgJiM0MzsxOTgsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXHRzZXRfcHRlX2F0KFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSwgcHRldmFsKTtcbiAjZW5kaWZcbiBcdGQtXHUwMDNlaSYjNDM7JiM0Mzs7XG4mIzQzO1x0V1JJVEVfT05DRShkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLCBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzICYjNDM7IDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIyNywxMCAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuJiM0MztcdGlmIChwYWdlID09IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdF9fbGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlcGNwX2xsaXN0LCBkLVx1MDAzZWZyZWVfcGFnZXMpO1xuJiM0MztcdFdSSVRFX09OQ0UoZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcywgZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcyAtIDEpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQxMyw3ICYjNDM7NDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gfVxuIFxuIHN0cnVjdCB2bWFfbGlzdCB7XG5AQCAtNTA2LDggJiM0Mzs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4gXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAsXG4tXHRcdFx0XHRcdCAuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlIH07XG4mIzQzO1x0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xuIFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbiBcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNnBhZ2UpO1xuIFx0aWYgKHJldCkge1xuQEAgLTY5Niw4ICYjNDM7NzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnRcbiBcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4mIzQzO1x0ZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xuLVx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXG4gXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuQEAgLTg3Myw4ICYjNDM7ODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcbiBcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xuIFxuIFx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZyZWVfcGFnZXMpO1xuJiM0MztcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3Qgc3RydWN0IHBhZ2VzICovXG4gXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbkBAIC05ODEsOCAmIzQzOzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4mIzQzO1x0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbiBcdGNkYXRhLmZyZWVfcGFnZXMgPSBcdTAwMjZmcmVlX3BhZ2VzO1xuLVx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlO1xuIFx0YXJlbmFfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0dXNlcl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChhcmVuYSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5pbmRleCBkOTg1NzdhNmJhYmMwZS4uMWFkNWQwM2QwN2FkYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuQEAgLTIyMiw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxuIFx0XHQgIFwmIzM0O3N0b3JlX3JlbGVhc2U2NF9yZXN1bHRcJiMzNDspO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDtcbiBcdGludCBlcnI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5AQCAtNjYsNyAmIzQzOzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKHZvaWQpXG4gXHRjbG9zZShtYXBfZmQpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7b25lX3Bhc3RfZW5kXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5pbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfaHRhYl9hc20odm9pZClcbiBcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9odGFiX2xsdm1cJiMzNDspKVxuIFx0XHR0ZXN0X2FyZW5hX2h0YWJfbGx2bSgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuaW5kZXggNGYyODY2YTYxNWNlNTIuLjI2NDhlMDZmNTNkMDcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbkBAIC02OCw3ICYjNDM7NjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcbiBcdGFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2xpc3RfMVwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCAmIzQzOzEsMTIyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3VzZXIuaFx1MDAzZVxuJiM0MzsjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbV91c2FnZS5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7c1xuJiM0MzsgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2ZkXHUwMDNlIFwmIzM0O21lbWxvY2s6XCYjMzQ7IGxpbmUgKHRoZSBzYW1lIHZhbHVlIGJwZnRvb2wgbWFwIHNob3dcbiYjNDM7ICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBsb25nIG1hcF9tZW1sb2NrKGludCBtYXBfZmQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdLCBsaW5lWzEyOF07XG4mIzQzO1x0bG9uZyBtZW1sb2NrID0gLTE7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDsvcHJvYy9zZWxmL2ZkaW5mby8lZFwmIzM0OywgbWFwX2ZkKTtcbiYjNDM7XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGYsIFwmIzM0O29wZW5fZmRpbmZvXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuJiM0MztcdFx0aWYgKHNzY2FuZihsaW5lLCBcJiMzNDttZW1sb2NrOlxcdCVsZFwmIzM0OywgXHUwMDI2bWVtbG9jaykgPT0gMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRBU1NFUlRfTkVRKG1lbWxvY2ssIC0xLCBcJiMzNDtwYXJzZV9tZW1sb2NrXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gbWVtbG9jaztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdGludCBlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDtcbiYjNDM7XHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuJiM0MztcdGNoYXIgKmJhc2U7XG4mIzQzO1x0c2l6ZV90IHN6O1xuJiM0MztcdGludCBmZCwgaTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtvcGVuX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlc2ggYXJlbmE6IG5vIGRhdGEgcGFnZXMsIGFuZCB0aGUgc2NyYXRjaCBwYWdlIGlzIG5vdCBjb3VudGVkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwmIzM0O2luaXRpYWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFsbG9jX2NudCA9IDE3O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5hbGxvYywgXCYjMzQ7YWxsb2NcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3RcbiYjNDM7XHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxuJiM0MztcdCAqIHJlZCBDSSBydW4gaXMgbm90IG1pc3Rha2VuIGZvciBhIGNvdW50aW5nIGJ1Zy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLCBcJiMzNDthcmVuYV9hbGxvY19wYWdlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNyAqIHBzLCBcJiMzNDthZnRlcl9hbGxvY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDE7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwmIzM0O2ZyZWVfb25lXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE2ICogcHMsIFwmIzM0O2FmdGVyX2ZyZWVfb25lXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSB0ZW4gcGFnZXMgaW4gb25lIGNhbGwgKGJ1bGsgcGF0aCk7IG9ubHkgdGhlIGZyZWVkIHBhZ2VzIGNvdW50LiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxICogcHM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSAxMDtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9idWxrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXCYjMzQ7YWZ0ZXJfZnJlZV9idWxrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXHUwMDNlIGFyZW5hIGVtcHR5IGFnYWluLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxMSAqIHBzO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gNjtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9yZXN0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwmIzM0O2FmdGVyX2ZyZWVfcmVzdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cbiYjNDM7XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG4mIzQzO1x0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihiYXNlLCBcJiMzNDthcmVuYV9iYXNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YmFzZVtpICogcHNdID0gMTtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCA4ICogcHMsIFwmIzM0O2FmdGVyX2ZhdWx0aW5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxuJiM0MztcdCAqIChlbGV2YXRlZCByZWZjb3VudCksIHNvIHRoaXMgYWxzbyBleGVyY2lzZXMgdGhlIHphcCBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ciA9IGJhc2U7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA4O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX2ZhdWx0ZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7YWZ0ZXJfZnJlZV9mYXVsdGVkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbmluZGV4IGFjYjlkNTNiNTk3MzNmLi41NDViMDVkN2EwYWE3MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuQEAgLTEwMSw3ICYjNDM7MTAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2tfc2l6ZShpbnQgc2l6ZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuIHtcbiBcdHJlcGVhdCA9IDEwMDA7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9zcGluX2xvY2tfMVwmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5AQCAtMjMsNyAmIzQzOzIzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zdHIodm9pZClcbiBcdGFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX3N0cnNlYXJjaFwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfc3RyKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9wYXJhbGxlbF90ZXN0KHN0cnVjdCBsaWJhcmVuYSAqc2tlbCwgc3RydWN0IGJwZl9wcm9ncmFtXG4gXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xuIH1cbiBcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcbiBcdHN0cnVjdCBsaWJhcmVuYSAqc2tlbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbiAgKiBSdW4gdGhlIHRlc3QgZGVwZW5kaW5nIG9uIHdoZXRoZXIgTExWTSBjYW4gY29tcGlsZSBhcmVuYSBBU0FOXG4gICogcHJvZ3JhbXMuXG4gICovXG4tdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXG4ge1xuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cbiBcdHJ1bl90ZXN0KCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ1NWVjZDY2OWE1YWJmXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbkBAIC0wLDAgJiM0MzsxLDQwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuJiM0MztcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbiYjNDM7XHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjNDM7I2Vsc2VcbiYjNDM7XHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjNDM7I2VuZGlmXG4mIzQzO30gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19hcmVuYSAqcHRyO1xuJiM0MztpbnQgYWxsb2NfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGFsbG9jYXRlICovXG4mIzQzO2xvbmcgZnJlZV9ieXRlX29mZjtcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXG4mIzQzO2ludCBmcmVlX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBmcmVlICovXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGFsbG9jKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdC8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLiAqL1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTk1NGZkM2VlY2Q3ZWJhYjVmOGMwZGFjY2Q0YmRmYThmNDU0ZmJkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jCmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5mMDQ2ZTg3OGY3YWUxNSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYXJlbmEuYwpAQCAtNTUsOCAmIzQzOzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEgewogCXN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07CiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTsKIAlzdHJ1Y3QgcmFuZ2VfdHJlZSBydDsKLQkvKiBwcm90ZWN0cyBydCAqLwomIzQzOwkvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi8KIAlycXNwaW5sb2NrX3Qgc3BpbmxvY2s7CiYjNDM7CS8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqLwomIzQzOwl1NjQgbnJfcGFnZXM7CiAJc3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDsKIAkvKiBwcm90ZWN0cyB2bWFfbGlzdCAqLwogCXN0cnVjdCBtdXRleCBsb2NrOwpAQCAtMTQzLDE0ICYjNDM7MTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpCiB9CiAKIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKLQlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogCWludCBpOwogfTsKIAogc3RydWN0IGNsZWFyX3JhbmdlX2RhdGEgewomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTsKIAlzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlczsKLQlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogfTsKIAogc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQpAQCAtMTgwLDcgJiM0MzsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAKIAkJaWYgKHB0ZV9ub25lKG9sZCkpCiAJCQljb250aW51ZTsKLQkJaWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtJmd0O3NjcmF0Y2hfcGFnZSkpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC0mZ3Q7YXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlwdGVwX2dldF9hbmRfY2xlYXIoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUpOwogCQlmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTsKQEAgLTE5Niw2ICYjNDM7MTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQogCXNldF9wdGVfYXQoJmFtcDtpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7CiAjZW5kaWYKIAlkLSZndDtpJiM0MzsmIzQzOzsKJiM0MzsJV1JJVEVfT05DRShkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMsIGQtJmd0O2FyZW5hLSZndDtucl9wYWdlcyAmIzQzOyAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI3LDEwICYjNDM7MjMwLDExIEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQogCSAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzCiAJICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLgogCSAqLwotCWlmIChwYWdlID09IGQtJmd0O3NjcmF0Y2hfcGFnZSkKJiM0MzsJaWYgKHBhZ2UgPT0gZC0mZ3Q7YXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSkKIAkJcmV0dXJuIDA7CiAKIAlfX2xsaXN0X2FkZCgmYW1wO3BhZ2UtJmd0O3BjcF9sbGlzdCwgZC0mZ3Q7ZnJlZV9wYWdlcyk7CiYjNDM7CVdSSVRFX09OQ0UoZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzLCBkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMgLSAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEzLDcgJiM0Mzs0MTcsOSBAQCBzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogCiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKIHsKLQlyZXR1cm4gMDsKJiM0MzsJc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApOwomIzQzOwomIzQzOwlyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtJmd0O25yX3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZUOwogfQogCiBzdHJ1Y3Qgdm1hX2xpc3QgewpAQCAtNTA2LDggJiM0Mzs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlpZiAocmV0KQogCQlnb3RvIG91dF9zaWdzZWd2X21lbWNnOwogCi0Jc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAsCi0JCQkJCSAuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZSB9OwomIzQzOwlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKIAkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwogCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewpAQCAtNjk2LDggJiM0Mzs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudAogCQlicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CWRhdGEuYXJlbmEgPSBhcmVuYTsKIAlkYXRhLnBhZ2VzID0gcGFnZXM7Ci0JZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlOwogCiAJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKIAkJZ290byBvdXRfZnJlZV9wYWdlczsKQEAgLTg3Myw4ICYjNDM7ODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgcGdvZmYsIHBhZ2VfY250KTsKIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwomIzQzOwljZGF0YS5hcmVuYSA9IGFyZW5hOwogCWNkYXRhLmZyZWVfcGFnZXMgPSAmYW1wO2ZyZWVfcGFnZXM7Ci0JY2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAkvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHN0cnVjdCBwYWdlcyAqLwogCWFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoJmFtcDtpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCwKIAkJCQkgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCAmYW1wO2NkYXRhKTsKQEAgLTk4MSw4ICYjNDM7OTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCiAJaW5pdF9sbGlzdF9oZWFkKCZhbXA7ZnJlZV9wYWdlcyk7CiYjNDM7CWNkYXRhLmFyZW5hID0gYXJlbmE7CiAJY2RhdGEuZnJlZV9wYWdlcyA9ICZhbXA7ZnJlZV9wYWdlczsKLQljZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlOwogCWFyZW5hX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTsKIAl1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jCmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwpAQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0b3JlX3JlbGVhc2Uoc3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWwpCiAJCSAgJiMzNDtzdG9yZV9yZWxlYXNlNjRfcmVzdWx0JiMzNDspOwogfQogCi12b2lkIHRlc3RfYXJlbmFfYXRvbWljcyh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKQogewogCXN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCmluZGV4IDRiNGFkYjNmNGI3MWViLi4wMWZjZjQ5NjVlYTQzYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMKQEAgLTY2LDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlX29uZV9wYXN0X2VuZCh2b2lkKQogCWNsb3NlKG1hcF9mZCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7b25lX3Bhc3RfZW5kJiMzNDspKQogCQl0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYwppbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfaHRhYl9hc20odm9pZCkKIAlhcmVuYV9odGFiX2FzbV9fZGVzdHJveShza2VsKTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX2h0YWIodm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2h0YWJfbGx2bSYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9odGFiX2xsdm0oKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYwppbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKQEAgLTY4LDcgJiM0Mzs2OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKGludCBjbnQsIGJvb2wgbm9uc2xlZXBhYmxlKQogCWFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9saXN0XzEmIzM0OykpCiAJCXRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMKQEAgLTAsMCAmIzQzOzEsMTIyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDthcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7cwomIzQzOyAqIC9wcm9jLyZsdDtwaWQmZ3Q7L2ZkaW5mby8mbHQ7ZmQmZ3Q7ICYjMzQ7bWVtbG9jazomIzM0OyBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93CiYjNDM7ICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKQomIzQzO3sKJiM0MzsJY2hhciBwYXRoWzY0XSwgbGluZVsxMjhdOwomIzQzOwlsb25nIG1lbWxvY2sgPSAtMTsKJiM0MzsJRklMRSAqZjsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLyVkJiMzNDssIG1hcF9mZCk7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihmLCAmIzM0O29wZW5fZmRpbmZvJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkgewomIzQzOwkJaWYgKHNzY2FuZihsaW5lLCAmIzM0O21lbWxvY2s6XHQlbGQmIzM0OywgJmFtcDttZW1sb2NrKSA9PSAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJQVNTRVJUX05FUShtZW1sb2NrLCAtMSwgJiMzNDtwYXJzZV9tZW1sb2NrJiMzNDspOwomIzQzOwlyZXR1cm4gbWVtbG9jazsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksICZhbXA7b3B0cyk7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBuYW1lKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXJlbmFfbWVtX3VzYWdlICpza2VsOwomIzQzOwljb25zdCBsb25nIHBzID0gUEFHRV9TSVpFOwomIzQzOwljaGFyICpiYXNlOwomIzQzOwlzaXplX3Qgc3o7CiYjNDM7CWludCBmZCwgaTsKJiM0MzsKJiM0MzsJc2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtvcGVuX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWZkID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy5hcmVuYSk7CiYjNDM7CiYjNDM7CS8qIEZyZXNoIGFyZW5hOiBubyBkYXRhIHBhZ2VzLCBhbmQgdGhlIHNjcmF0Y2ggcGFnZSBpcyBub3QgY291bnRlZC4gKi8KJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDtpbml0aWFsJiMzNDspOwomIzQzOwomIzQzOwkvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O2FsbG9jX2NudCA9IDE3OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmFsbG9jLCAmIzM0O2FsbG9jJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CS8qCiYjNDM7CSAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdAomIzQzOwkgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYQomIzQzOwkgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC0mZ3Q7YnNzLSZndDtwdHIsICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgJiMzNDthZnRlcl9hbGxvYyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfYnl0ZV9vZmYgPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfY250ID0gMTsKJiM0MzsJaWYgKHJ1bihza2VsLSZndDtwcm9ncy5mcmVlX3BhZ2VzLCAmIzM0O2ZyZWVfb25lJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE2ICogcHMsICYjMzQ7YWZ0ZXJfZnJlZV9vbmUmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGVuIHBhZ2VzIGluIG9uZSBjYWxsIChidWxrIHBhdGgpOyBvbmx5IHRoZSBmcmVlZCBwYWdlcyBjb3VudC4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMSAqIHBzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2ZyZWVfY250ID0gMTA7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX2J1bGsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCAmIzM0O2FmdGVyX2ZyZWVfYnVsayYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtJmd0OyBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMTEgKiBwczsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDY7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX3Jlc3QmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDthZnRlcl9mcmVlX3Jlc3QmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtCiYjNDM7CSAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmcKJiM0MzsJICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLgomIzQzOwkgKi8KJiM0MzsJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoc2tlbC0mZ3Q7bWFwcy5hcmVuYSwgJmFtcDtzeik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihiYXNlLCAmIzM0O2FyZW5hX2Jhc2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDg7IGkmIzQzOyYjNDM7KQomIzQzOwkJYmFzZVtpICogcHNdID0gMTsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgOCAqIHBzLCAmIzM0O2FmdGVyX2ZhdWx0aW4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYQomIzQzOwkgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC4KJiM0MzsJICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7cHRyID0gYmFzZTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDg7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX2ZhdWx0ZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJQVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgJiMzNDthZnRlcl9mcmVlX2ZhdWx0ZWQmIzM0Oyk7CiYjNDM7b3V0OgomIzQzOwlhcmVuYV9tZW1fdXNhZ2VfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwppbmRleCBhY2I5ZDUzYjU5NzMzZi4uNTQ1YjA1ZDdhMGFhNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jCkBAIC0xMDEsNyAmIzQzOzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpCiAJcmV0dXJuOwogfQogCi12b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zcGluX2xvY2sodm9pZCkKIHsKIAlyZXBlYXQgPSAxMDAwOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfc3Bpbl9sb2NrXzEmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCmluZGV4IGY4MWEwYzA2NjUwNTk2Li4wYzFjNmNiZmEwZjE5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMKQEAgLTIzLDcgJiM0MzsyMyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3RyKHZvaWQpCiAJYXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX3N0cnNlYXJjaCYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9zdHIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9wYXJhbGxlbF90ZXN0KHN0cnVjdCBsaWJhcmVuYSAqc2tlbCwgc3RydWN0IGJwZl9wcm9ncmFtCiAJcnVuX2xpYmFyZW5hX3BhcmFsbGVsX2Zpbmkoc2tlbCwgbmFtZSwgcHJlZml4bGVuKTsKIH0KIAotdm9pZCB0ZXN0X2xpYmFyZW5hKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKQogewogCXN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJnczsKIAlzdHJ1Y3QgbGliYXJlbmEgKnNrZWw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKaW5kZXggZjg5NzQwNWY3MDFkZDUuLjljMzFiMTdkYmYzOTFmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKQogICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTgogICogcHJvZ3JhbXMuCiAgKi8KLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpCiB7CiAjaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOCiAJcnVuX3Rlc3QoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDU1ZWNkNjY5YTVhYmYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMKQEAgLTAsMCAmIzQzOzEsNDAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi8KJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NAomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbHNlCiYjNDM7CV9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgJmx0OyZsdDsgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovCiYjNDM7I2VuZGlmCiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0Mzt2b2lkIF9fYXJlbmEgKnB0cjsKJiM0MztpbnQgYWxsb2NfY250OwkJLyogaW46ICBwYWdlcyB0byBhbGxvY2F0ZSAqLwomIzQzO2xvbmcgZnJlZV9ieXRlX29mZjsJLyogaW46ICBieXRlIG9mZnNldCB3aXRoaW4gcHRyIHRvIHN0YXJ0IGZyZWVpbmcgKi8KJiM0MztpbnQgZnJlZV9jbnQ7CQkvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi8KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGFsbG9jKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CS8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC0mZ3Q7YnNzLSZndDtwdHIuICovCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJYnBmX2FyZW5hX2ZyZWVfcGFnZXMoJmFtcDthcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCBmb3IgaXQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBjbGVhcmx5LCB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgYXJlbmEgbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byB0cmFjayB0aGUgYWN0dWFsIG1lbW9yeSB1c2FnZSBvZiB0aGUgQlBGIGFyZW5hLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcg4oCTIHdlIGFsd2F5cyBuZWVkIHByZWNpc2UgYWNjb3VudGluZy4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOiBUaGV5JiMzOTt2ZSBhZGRlZCBgdTY0IG5yX3BhZ2VzYCB0byB0aGUgYGJwZl9hcmVuYWAgc3RydWN0LiBSaWdodCwgdGhhdCYjMzk7cyB0aGUgY291bnRlciwgb2J2aW91cy4gVGhleSYjMzk7dmUgYWxzbyB1cGRhdGVkIGBhcHBseV9yYW5nZV9kYXRhYCBhbmQgYGNsZWFyX3JhbmdlX2RhdGFgIHRvIHJlY2VpdmUgdGhlIGBicGZfYXJlbmFgIHBvaW50ZXIgaW5zdGVhZCBvZiBhIGBwYWdlYCBwb2ludGVyLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBjYWxsYmFja3MgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgY291bnRlci4gYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgYXJlIHRoZSBrZXkgdXBkYXRlczsgaW5jcmVtZW50aW5nL2RlY3JlbWVudGluZyBgZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gR29vZC4KCk5vdywgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBjaGFuZ2UgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgdGhleSYjMzk7cmUgcmV0dXJuaW5nIGBSRUFEX09OQ0UoYXJlbmEtJmd0O25yX3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZUYCBpbnN0ZWFkIG9mIHplcm8uIFRoYXQgY2FsY3VsYXRlcyB0aGUgbWVtb3J5IHVzYWdlIGJhc2VkIG9uIHRoZSBwYWdlIGNvdW50LiBBbmQgdGhpcyBmdW5jdGlvbiBpcyBhIGNhbGxiYWNrIGZvciBgc3RydWN0IGJwZl9tYXBfb3BzYCwgYW5kIGZyb20gdGhlIGNvbW1lbnQgaXQmIzM5O3MgcHJvYmFibHkgaG93IGBicGZfbWFwX21lbV91c2FnZWAgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIHRoZSB1c2VyLiBJIGNhbiBzZWUgdGhlIGludGVudGlvbi4KClNvLCB0aGlzIGNoYW5nZSBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGZvciB0aGUgQlBGIGFyZW5hLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGVyZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTAtXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTEyLS8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMzogKiBhcmVuYV9tYXBfbWVtX3VzYWdlKCkgaXMgc3VyZmFjZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBtYXAmIzM5O3NcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTE0LSAqIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2UgXCYjMzQ7bWVtbG9jazpcJiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCoqCgpPa2F5LCBzbyBJIHNlZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBhcmVuYV9tYXBfb3BzLm1hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0cmFja2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBCUEYgYXJlbmFzLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBCUEYgbWFwIGNyZWF0aW9uIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgZGVmaW5pdGVseSBtYWtlcyBpdCBhIHBvdGVudGlhbCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSBpbW1lZGlhdGUgYXNzZXNzbWVudCBsZWFucyB0b3dhcmRzICYjMzQ7eWVzLCB0aGlzIHdhcnJhbnRzIGEgZGVlcCBkaXZlIHdpdGggZnV6emluZy4mIzM0OyBXaHk/IEJlY2F1c2UgYW55IGNoYW5nZSB0aGF0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMsIGFuZCB0aGlzIGRvZXMgd2l0aCBCUEYgYXJlbmEgbWVtb3J5IHRyYWNraW5nLCBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuIE1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHdpdGhpbiBCUEYsIGlzIGEgY2xhc3NpYyBhcmVhIGZvciB0aGVzZSBpc3N1ZXMgdG8gc3VyZmFjZS4gSXQmIzM5O3MgYSBrZXkgYXJlYSB0aGF0IGNhbiBiZWNvbWUgcHJvYmxlbWF0aWMsIGFuZCBuZWVkcyB0byBiZSBldmFsdWF0ZWQuCgpCZWZvcmUgSSBjb21taXQgdG8gc2V0dGluZyB1cCBhIGZ1enppbmcgY2FtcGFpZ24sIEkgc2hvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQlBGIGFyZW5hcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGtub2JzIG9yIGNvbXBpbGUtdGltZSBmbGFncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb3IgcHJlc2VuY2Ugb2YgdGhpcyBtZW1vcnkgdHJhY2tpbmcgY29kZS4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW5mb3JtIG15IGZ1enppbmcgc3RyYXRlZ3k7IGVuc3VyaW5nIHRoYXQgSSBhbSB0YXJnZXRpbmcgdGhlIGNvZGUgSSB0aGluayBJIGFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTEwMTojZGVmaW5lIEJQRl9BUkVOQV9BQ0NFU1MgICAgICAgICAgIEJJVCgyMSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcdEdFTk1BU0soMzEsIDI3KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMTE6XHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg2LVx0aWYgKGlzX2FyZW5hKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3Olx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4OC1cdFx0Lypcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyAmIzQzOz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg0LVx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OykpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC0yLS8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTk6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jPTExPWV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjU6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTgzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVx0cnVuX3Rlc3QoKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yNy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVx0c3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jOjM6I2RlZmluZSBCUEZfQVJFTkFfRk9SQ0VfQVNNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MjAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBCUEYgU3lzdGVtIENhbGwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gdGhpbmtpbmcsIHRoYXQgc291bmRzIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gb25lIHRvIHNlZSBhc3NvY2lhdGVkIHdpdGggZW5hYmxpbmcgQlBGIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCYjMzk7cyB0aGUgb25lIHdlJiMzOTtyZSBhZnRlci4KClRvIHZlcmlmeSwgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gZWl0aGVyIGBrZXJuZWwvYnBmL0tjb25maWdgICh0aGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UsIGdpdmVuIGl0cyBwdXJwb3NlKSBvciwgYWx0ZXJuYXRpdmVseSwgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIHdoZXJlIHRoZSBCUEYgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaW4gb25lIG9mIHRob3NlLCBvciBwZXJoYXBzIGV2ZW4gaW4gYSBgS2NvbmZpZy5wbGF0Zm9ybWAgaW4gb25lIG9mIHRob3NlIHBhdGhzLiBGcm9tIHRoZXJlIEkgY2FuIGNvbmZpcm0gdGhhdCBpdCBpcyBpbmRlZWQgd2hhdCBJIGFtIGFmdGVyLCBvciBpZiBJIG5lZWQgdG8gYWRqdXN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHdoaWxlIEkmIzM5O20gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21lZGlhL3JjL0tjb25maWc9MTc9aWYgUkNfQ09SRVxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTE4LVxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnOjE5OmNvbmZpZyBCUEZfTElSQ19NT0RFMlxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpcmMgZGV2aWNlc1wmIzM0O1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzPTI0Mj1jb25maWcgUVVFVUVEX1NQSU5MT0NLU1xuLS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0NS1cbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Njpjb25maWcgQlBGX0FSQ0hfU1BJTkxPQ0tcbmtlcm5lbC9LY29uZmlnLmxvY2tzLTI0Ny1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctMy0jIEJQRiBpbnRlcnByZXRlciB0aGF0LCBmb3IgZXhhbXBsZSwgY2xhc3NpYyBzb2NrZXQgZmlsdGVycyBkZXBlbmQgb24uXG5rZXJuZWwvYnBmL0tjb25maWc6NDpjb25maWcgQlBGXG5rZXJuZWwvYnBmL0tjb25maWctNS1cdGJvb2xcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy03Mi1cbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxua2VybmVsL2JwZi9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXCYjMzQ7a2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWdcJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo5Mjpjb25maWcgQlBGX0xTTVxua2VybmVsL2JwZi9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbi0tXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc6MjptZW51Y29uZmlnIEJQRl9QUkVMT0FEXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtQcmVsb2FkIEJQRiBmaWxlIHN5c3RlbSB3aXRoIGtlcm5lbCBzcGVjaWZpYyBwcm9ncmFtIGFuZCBtYXAgaXRlcmF0b3JzXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWc9MTQ9aWYgQlBGX1BSRUxPQURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7YnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVwmIzM0O1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTg2NT1jb25maWcgUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODY3LVxua2VybmVsL3RyYWNlL0tjb25maWc6ODY4OmNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NjktXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTEzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBBcmVuYSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBga2VybmVsL2JwZi9hcmVuYS5jYCBmaWxlIGdldHMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIEJQRiBjb250ZXh0LCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSBjb21tb24gd2F5IHRvIG1hbmFnZSBmZWF0dXJlIGZsYWdzIG9yIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBqdXN0IGdvIGFuZCAqbG9vayogYXQgdGhlIGNvZGUuIFRoYXQmIzM5O3MgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBgI2lmZGVmYCBvciBzaW1pbGFyIGRpcmVjdGl2ZXMgdGhhdCBjb250cm9sIGl0cyBpbmNsdXNpb24uIEdyYWJiaW5nIHRoZSBjb2RlIGlzIGxpa2UgcnVubmluZyBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGNvbnRyb2wgbG9naWMgSSB3b3VsZCBleHBlY3QgdG8gZmluZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZkaW1tL2J0dC5jPTM5PXN0YXRpYyBpbnQgYXJlbmFfcmVhZF9ieXRlcyhzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDQtXG5kcml2ZXJzL252ZGltbS9idHQuYzo0NTpcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXG5kcml2ZXJzL252ZGltbS9idHQuYy00Ni1cdG9mZnNldCA9IGFkanVzdF9pbml0aWFsX29mZnNldChuZF9idHQsIG9mZnNldCk7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9NTA9c3RhdGljIGludCBhcmVuYV93cml0ZV9ieXRlcyhzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXG5kcml2ZXJzL252ZGltbS9idHQuYzo1NjpcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cdG9mZnNldCA9IGFkanVzdF9pbml0aWFsX29mZnNldChuZF9idHQsIG9mZnNldCk7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjc0NjpcdFx0XHRcdHNpemVfdCBzdGFydCwgc2l6ZV90IGFyZW5hX29mZilcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzg5LVx0LyogJiMzOTtBYnNvbHV0ZSYjMzk7IHZhbHVlcywgcmVsYXRpdmUgdG8gc3RhcnQgb2Ygc3RvcmFnZSBzcGFjZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmM6NzkwOlx0YXJlbmEtXHUwMDNlaW5mb29mZiA9IGFyZW5hX29mZjtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc5MS1cdGFyZW5hLVx1MDAzZWRhdGFvZmYgPSBhcmVuYS1cdTAwM2VpbmZvb2ZmICYjNDM7IEJUVF9QR19TSVpFO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MjE6XHRcdFx0XHR1NjQgYXJlbmFfb2ZmKVxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy04MzAtXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XHRhcmVuYS1cdTAwM2VuZXh0b2ZmID0gKHN1cGVyLVx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiAmIzQzO1xuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVx0XHRcdGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZW5leHRvZmYpKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzMzpcdGFyZW5hLVx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzQ6XHRhcmVuYS1cdTAwM2VkYXRhb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWRhdGFvZmYpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM1Olx0YXJlbmEtXHUwMDNlbWFwb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZW1hcG9mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzY6XHRhcmVuYS1cdTAwM2Vsb2dvZmYgPSBhcmVuYV9vZmYgJiM0MzsgbGU2NF90b19jcHUoc3VwZXItXHUwMDNlbG9nb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNzpcdGFyZW5hLVx1MDAzZWluZm8yb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWluZm8yb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzOC1cbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz05MzA9c3RhdGljIGludCBjcmVhdGVfYXJlbmFzKHN0cnVjdCBidHQgKmJ0dClcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjMtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXG5kcml2ZXJzL252ZGltbS9idHQuYzo5NjQ6ICogdG8gdGhhdCBhcmVuYSBvY2N1cnMgZm9yIHRoZSBmaXJzdCB0aW1lLlxuZHJpdmVycy9udmRpbW0vYnR0LmMtOTY1LSAqL1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5oPTEyND1zdHJ1Y3QgYWxpZ25lZF9sb2NrIHtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXG5kcml2ZXJzL252ZGltbS9idHQuaDoxMzM6ICogQHNpemU6XHRcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cbmRyaXZlcnMvbnZkaW1tL2J0dC5oLTEzNC0gKlx0XHRcdFRoaXMgaW5jbHVkZXMgYXJlbmEgbWV0YWRhdGEuXG4tLVxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTg3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjYyLVx0XHRcdGlmIChyZWctXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkyNjM6XHRcdFx0XHRicGZfbG9nKGxvZywgXCYjMzQ7JXMgaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXIuXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyNjQtXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc5NTM9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc5NTctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc5NTg6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk1OS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTU9c3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNy1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE4Olx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOS0jaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBgYXJlbmEub2AqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgYXJlbmEub2AgaXMgb25seSBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFsbCBlbmFibGVkLiBUaGF0IGBCUEZfU1lTQ0FMTGAgY29uZmlnIGlzIHRoZSBrZXkgb25lIGhlcmUgdG8gZm9jdXMgb24uIEdvdCBpdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBoYXZlIGNoYW5nZWQgdGhhdCBhcmUgcmVsYXRlZCB0byBmdXp6aW5nLiBJIHNlZToKCiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYAoqICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYAoqICAgYGFyZW5hX21hcF9tZW1fdXNhZ2VgCiogICBgYXJlbmFfdm1fZmF1bHRgCiogICBgYXJlbmFfYWxsb2NfcGFnZXNgCiogICBgYXJlbmFfZnJlZV9wYWdlc2AKKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmAKCkFscmlnaHQsIHRoYXQgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIGxpc3QuICBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAgYWxsIGxvb2sgbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgdGFyZ2V0ZWQgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbiBuYW1lcyBhcmUgYWNjdXJhdGUgYW5kIGluIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2V8YXJlbmFfdm1fZmF1bHR8YXJlbmFfYWxsb2NfcGFnZXN8YXJlbmFfZnJlZV9wYWdlc3xhcmVuYV9mcmVlX3dvcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjQzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTcwOT1pbnQgYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlKHN0cnVjdCBmaWxlICpmaWxlLCB1MzIgZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9icGYuaC03MTItI2lmIGRlZmluZWQoQ09ORklHX01NVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxuaW5jbHVkZS9saW51eC9icGYuaDo3MTM6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcxNC1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDo3MTU6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNjp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuaW5jbHVkZS9saW51eC9icGYuaC03MTctXHRcdFx0XHQgICAgICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC03MTgtI2Vsc2VcbmluY2x1ZGUvbGludXgvYnBmLmg6NzE5OnN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzIwLVx0XHRcdFx0XHRcdFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyNC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NzI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmluY2x1ZGUvbGludXgvYnBmLmgtNzI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyOC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NzI5OnN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuaW5jbHVkZS9saW51eC9icGYuaC03MzAtXHRcdFx0XHRcdFx0ICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cbmtlcm5lbC9icGYvYXJlbmEuYz01MT1zdHJ1Y3QgYnBmX2FyZW5hIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03My1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjEwPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2VfY2xlYXJfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMjktXHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yNjY9c3RhdGljIHN0cnVjdCBicGZfbWFwICphcmVuYV9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTMxMS1cdGluaXRfaXJxX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEsIGFyZW5hX2ZyZWVfaXJxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTI6XHRJTklUX1dPUksoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrLCBhcmVuYV9mcmVlX3dvcmtlcik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzEzLVx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIGF0dHIpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00MTI9c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxua2VybmVsL2JwZi9hcmVuYS5jOjQxODpzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NDctXHQuY2xvc2VcdFx0PSBhcmVuYV92bV9jbG9zZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDg6XHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDktfTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTAtXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NTU9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2My0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo2NjQ6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxua2VybmVsL2JwZi9hcmVuYS5jLTY2NS1cdFx0XHQgICAgICBib29sIHNsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzAtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTc4NT1zdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTg0Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo4NDM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ0LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMwLSAqIFJlc2VydmUgYW4gYXJlbmEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHdpdGhvdXQgcG9wdWxhdGluZyBpdC4gVGhpcyBjYWxsIHN0b3BzXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTMxOiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxua2VybmVsL2JwZi9hcmVuYS5jLTkzMi0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYz05MzM9c3RhdGljIGludCBhcmVuYV9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk2Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo5Njc6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxua2VybmVsL2JwZi9hcmVuYS5jLTk2OC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA0MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc3LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc4LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg2Olx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgKGxvbmcpcHRyX19pZ24sIHBhZ2VfY250LCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg3LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjEwODk6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDkwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA5NS1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjEwOTY6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTExND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTExNjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNy1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDYwPWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjQtXHRLRl9icGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNTpcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNjpcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI3LVx0S0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjE3PUJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIxODpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjE5OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyMC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzA0PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNjpcdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNzpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA4LVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTY1OD1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Njk1LVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfZHlucHRyX2Zyb21fZmlsZV9zbGVlcGFibGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTY6XHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5Ny1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njk4Olx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5OTpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MDAtXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTcwMTpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwMi1cdH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtNy0gKiBFYWNoIGNodW5rIGFkZGVkIHRvIEBzY2gtXHUwMDNlYXJlbmFfcG9vbCBjb21lcyBmcm9tIG9uZVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSgpIGNhbGwgYW5kIGlzIHJlZ2lzdGVyZWQgYXQgdGhlXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtOS0gKiBrZXJuZWwtc2lkZSBtYXBwaW5nIGFkZHJlc3MuIENhbGxlcnMgdHJhbnNsYXRlIHRvIHRoZSBCUEYtYXJlbmEgZm9ybVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz01Nz12b2lkIHNjeF9hcmVuYV9wb29sX2Rlc3Ryb3koc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy02Ni0vKlxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjY3OiAqIEdyb3cgdGhlIHBvb2wgYnkgQHBhZ2VfY250IHBhZ2VzLiBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKCkgYW5kXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtNjgtICogZ2VuX3Bvb2xfYWRkKCkgKHdoaWNoIGNhbGxzIHZ6YWxsb2MoR0ZQX0tFUk5FTCkpIHJlcXVpcmUgYSBzbGVlcGFibGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtODAtXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODE6XHRwID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZShzY2gtXHUwMDNlYXJlbmFfbWFwLCBOVUxMLFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTgyLVx0XHRcdFx0XHQgICAgcGFnZV9jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTk2LVx0aWYgKHJldCkge1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjk3Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHNjaC1cdTAwM2VhcmVuYV9tYXAsIHAsIHBhZ2VfY250KTtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy05OC1cdFx0cmV0dXJuIHJldDtcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Mi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjgzOnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTg0LVx0XHRcdFx0ICAgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncykgX19rc3ltIF9fd2VhaztcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Ni1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yMD1jaGFyIF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmVuYVsxXTtcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTI1LVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDoyNjpzdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTI3LVx0XHRcdFx0XHRcdCAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDozMTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM9MTA3MD1zMzIgQlBGX1NUUlVDVF9PUFNfU0xFRVBBQkxFKHFtYXBfaW5pdClcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExMy1cdG5yX3BhZ2VzID0gKG1heF90YXNrcyAqIFRBU0tfQ1RYX1NUUklERSAmIzQzOyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYzoxMTE0Olx0c2xhYiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgbnJfcGFnZXMsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExNS1cdGlmICghc2xhYikge1xuLS1cbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM1LVx0ICovXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTEzNjpcdHFhX2lkbGVfY2lkcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM3LVx0aWYgKCFxYV9pZGxlX2NpZHMpIHtcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYz0xMDE9dm9pZCBfX2FyZW5hICpzY3hfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBzZHRfcG9vbCAqcG9vbClcbi0tXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYy0xMTEtXHRpZiAocG9vbC1cdTAwM2VpZHggXHUwMDNlPSBtYXhfZWxlbXMpIHtcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jOjExMjpcdFx0c2xhYiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jLTExMy1cdFx0XHRkaXZfcm91bmRfdXAobWF4X2VsZW1zICogZWxlbV9zaXplLCBQQUdFX1NJWkUpLCBOVU1BX05PX05PREUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD0yMD1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC0zMi1yZWZpbGw6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6MzM6XHRcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtMzQtXHRcdGlmICghcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg9NTU9c3RhdGljIGlubGluZSB2b2lkIGJwZl9mcmVlKHZvaWQgX19hcmVuYSAqYWRkcilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjEtXHRpZiAoLS0oKm9ial9jbnQpID09IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg9OTI9dm9pZCBodGFiX2luaXQoc3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfaHRhYi5oLTkzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfaHRhYi5oOjk0Olx0dm9pZCBfX2FyZW5hICpidWNrZXRzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAyLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmgtOTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTQ2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjQ3OnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00OC1cdFx0XHRcdCAgICBpbnQgbm9kZV9pZCwgX191NjQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg9NDk9aW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD01OT1fX3dlYWsgY2hhciBhcmVuYVsxXTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtNjQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NjU6c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTY2LVx0XHRcdFx0XHRcdCAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02OS19XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTcxLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9idWRkeS5oPTU9ZW51bSBidWRkeV9jb25zdHMge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzUtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaDozNjpcdCAqIEFsaWdubWVudCBmb3IgY2h1bmsgYWxsb2NhdGlvbnMgYmFzZWQgb24gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaC0zNy1cdCAqIFRoZSBhcmVuYSBhbGxvY2F0aW9uIGtmdW5jIGRvZXMgbm90IGhhdmUgYW4gYWxpZ25tZW50IGFyZ3VtZW50LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYz0zNzU9dm9pZCAqX19hc2FuX21lbXNldCh2b2lkICpwLCBpbnQgYywgc2l6ZV90IG4pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM4Mi0gKiBQb2lzb25pbmcgY29kZSwgdXNlZCB3aGVuIHdlIGFkZCBtb3JlIGZyZWVkIG1lbW9yeSB0byB0aGUgYWxsb2NhdG9yIGJ5OlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jOjM4MzogKiBcdGEpIHB1bGxpbmcgbWVtb3J5IGZyb20gdGhlIGFyZW5hIHNlZ21lbnQgdXNpbmcgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy0zODQtICogXHRiKSBmcmVlaW5nIG1lbW9yeSBmcm9tIGFwcGxpY2F0aW9uIGNvZGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzg2PV9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5My1cdCAqIG1lbW9yeSB0byB0aGUgYXBwbGljYXRpb24gdGhhdCBoYXMgYSBncmFudWxlLWFsaWduZWQgc3RhcnRpbmcgYWRkcmVzcyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzozOTQ6XHQgKiBhbmQgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzIHJldHVybnMgcGFnZS1hbGlnbmVkIG1lbW9yeS4gQSBub24tYWxpZ25lZFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5NS1cdCAqIGFkZHIgdGhlbiBpbXBsaWVzIHdlJiMzOTtyZSBmcmVlaW5nIGEgZGlmZmVyZW50IGFkZHJlc3MgdGhhbiB0aGUgb25lIHdlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUyOS1cdCAqIHBhZ2VzIGFyZSBub3QgYWxsb2NhdGVkLCBhY2Nlc3NlcyB0byBpdCB3aWxsIHRyaWdnZXIgcGFnZSBmYXVsdHMgYW5kIHdpbGwgYmVcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1MzA6XHQgKiByZXBvcnRlZCB0aHJvdWdoIEJQRiBzdHJlYW1zLiBBbnkgcGFnZXMgYWxsb2NhdGVkIHRocm91Z2ggYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTMxLVx0ICogc2hvdWxkIGJlIHBvaXNvbmVkIGJ5IHRoZSBhbGxvY2F0b3IgcmlnaHQgYWZ0ZXIgdGhlIGNhbGwgc3VjY2VlZHMuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTMyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTMzOlx0c2hhZG93X21hcCA9ICh1NjQpYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUzNC1cdFx0XHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilfX2FzYW5fc2hhZG93X21lbW9yeV9keW5hbWljX2FkZHJlc3MsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz03Nj1zdGF0aWMgdm9pZCBidWRkeV91bnJlc2VydmVfYXJlbmFfdmFkZHIoc3RydWN0IGJ1ZGR5IF9fYXJlbmEgKmJ1ZGR5KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy03Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjc4Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTc5LVx0XHRcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKShCVUREWV9WQUREUl9PRkZTRVQgJiM0MzsgYnVkZHktXHUwMDNldmFkZHIpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9Mzg0PXN0YXRpYyBzdHJ1Y3QgYnVkZHlfY2h1bmsgX19hcmVuYSAqYnVkZHlfY2h1bmtfZ2V0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQwOC1cdC8qIFVucmVzZXJ2ZSB0aGUgYWRkcmVzcyBzcGFjZS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NDA5Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDEwLVx0XHRcdCAgICAgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjQxMjpcdGNodW5rID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQxMy1cdFx0XHRcdCAgICAgIEJVRERZX0NIVU5LX1BBR0VTLCBOVU1BX05PX05PREUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDI2LVx0XHQgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NDI3Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhZGRyLCBCVUREWV9DSFVOS19QQUdFUyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQyOC1cdFx0cmV0dXJuIE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz01NjQ9X193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTU4Mi1cdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo1ODM6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy01ODQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NjA1PV9fd2VhayBpbnQgYnVkZHlfZGVzdHJveShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy02MjEtXHRcdFx0ICAgIEJVRERZX0NIVU5LX1BBR0VTICogX19QQUdFX1NJWkUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo2MjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy02MjMtXHR9XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTItLypcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEzOiAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCYjMzk7c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTQtICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2NmZFx1MDAzZSBcJiMzNDttZW1sb2NrOlwmIzM0OyBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy02OC1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo2OTpcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzAtXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTcyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo3MzpcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzXCYjMzQ7KSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc0LVx0XHRnb3RvIG91dDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy03Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjc3Olx0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzgtXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYz0yMTg9aW50IHVhZihjb25zdCB2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyODpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyOTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMtMjMwLVx0dWFmX3JlY292ZXJ5X2ZhaWxzID0gMjQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jPTI0PWludCBhbGxvYyh2b2lkICpjdHgpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjUte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjI2Olx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjctXHQvKiBTdWNjZXNzL2ZhaWx1cmUgaXMgY2hlY2tlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ci4gKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmM9MzI9aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYy0zNS1cdFx0cmV0dXJuIDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmM6MzY6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzctXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jPTM3NT1fX2xvZ19sZXZlbCgyKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozNzY6X19tc2coXCYjMzQ7IDY6IC4xMjM0NS4uLi4gKDg1KSBjYWxsIGJwZl9hcmVuYV9hbGxvY19wYWdlc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzc3LV9fbXNnKFwmIzM0OyA3OiAwLi4uLi4uLi4uIChiZikgcjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpXCYjMzQ7KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM9Mzc5PV9fbmFrZWQgdm9pZCBhZGRyX3NwYWNlX2Nhc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM4Ni1cdFx0XCYjMzQ7cjUgPSAwO1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozODc6XHRcdFwmIzM0O2NhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zODgtXHRcdFwmIzM0O3IxID0gYWRkcl9zcGFjZV9jYXN0KHIwLCAwLCAxKTtcJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM5My1cdFx0OlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozOTQ6XHRcdDogX19pbW0oYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzk1LVx0XHQgIF9faW1tX2FkZHIoYXJlbmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz00NzY9dm9pZCBrZnVuY19yb290KHZvaWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTQ3Ny17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jOjQ3ODpcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtNDc5LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yOD1pbnQgYmFzaWNfYWxsb2MxX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTMyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MzM6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTM0LVx0aWYgKCFwYWdlMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zNi1cdCpwYWdlMSA9IDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzozNzpcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzgtXHRpZiAoIXBhZ2UyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQwLVx0KnBhZ2UyID0gMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQxOlx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyLVx0aWYgKG5vX3BhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDctXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5LVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTU5PWludCBiYXNpY19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTYzLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NjQ6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTY1LVx0aWYgKCFwYWdlMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy02Ny1cdCpwYWdlMSA9IDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo2ODpcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjktXHRpZiAoIXBhZ2UyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTcxLVx0KnBhZ2UyID0gMjtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjcyOlx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTczLVx0aWYgKG5vX3BhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNzgtXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6Nzk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgwLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgzLVx0XHRyZXR1cm4gNztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjg0Olx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04NS1cdGlmICghcGFnZTMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9OTg9aW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxMDM6XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMiwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTEwNC1cdGlmICghcGFnZTEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTIwLVx0XHRyZXR1cm4gNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjEyMTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTIyLVx0aWYgKCpwYWdlMSAhPSAwIFx1MDAyNlx1MDAyNiAqcGFnZTEgIT0gMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMzY9aW50IGJhc2ljX2FsbG9jMih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTQxOlx0cGFnZTEgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNDItXHRpZiAoIXBhZ2UxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1OC1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxNTk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE2MC1cdGlmICgqcGFnZTEgIT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xNzg9aW50IGJhc2ljX2FsbG9jM19ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxODM6XHRwYWdlcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhci1cdTAwM2VtYXAsIE5VTEwsIGFyLVx1MDAzZW1hcC5tYXhfZW50cmllcywgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4NC1cdGlmICghcGFnZXMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTkxPWludCBiYXNpY19hbGxvYzModm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE5NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5NjpcdHBhZ2VzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyLVx1MDAzZW1hcCwgTlVMTCwgYXItXHUwMDNlbWFwLm1heF9lbnRyaWVzLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTk3LVx0aWYgKCFwYWdlcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yMDQ9aW50IGJhc2ljX3Jlc2VydmUxX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIwOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjIxMDpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMTEtXHRpZiAoIXBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjIxLVx0LyogVHJ5IHRvIGV4cGxpY2l0bHkgYWxsb2NhdGUgdGhlIHJlc2VydmVkIHBhZ2UuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyMjI6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjIzLVx0aWYgKHBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjI2LVx0LyogVHJ5IHRvIGltcGxpY2l0bHkgYWxsb2NhdGUgdGhlIHBhZ2UgKHNpbmNlIHRoZXJlJiMzOTtzIG9ubHkgMiBvZiB0aGVtKS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjIyNzpcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMjgtXHRpZiAocGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yMzY9aW50IGJhc2ljX3Jlc2VydmUxKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNDEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNDI6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjQzLVx0aWYgKCFwYWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1My1cdC8qIFRyeSB0byBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZSByZXNlcnZlZCBwYWdlLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjU0Olx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1NS1cdGlmIChwYWdlKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTI1OC1cdC8qIFRyeSB0byBpbXBsaWNpdGx5IGFsbG9jYXRlIHRoZSBwYWdlIChzaW5jZSB0aGVyZSYjMzk7cyBvbmx5IDIgb2YgdGhlbSkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNTk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjYwLVx0aWYgKHBhZ2UpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjY4PWludCBiYXNpY19yZXNlcnZlMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNzk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjgwLVx0aWYgKCh1NjQpcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yODg9aW50IGJhc2ljX3Jlc2VydmUyKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyOTk6XHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzAwLVx0aWYgKCh1NjQpcGFnZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00MTI9aW50IGl0ZXJfbWFwczEoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDE3LVx0XHRyZXR1cm4gMDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQxODpcdGJwZl9hcmVuYV9hbGxvY19wYWdlcyhtYXAsIE5VTEwsIG1hcC1cdTAwM2VtYXhfZW50cmllcywgMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00MTktXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00MjQ9aW50IGl0ZXJfbWFwczIoc3RydWN0IGJwZl9pdGVyX19icGZfbWFwICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDI3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDI4Olx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCh2b2lkICopc2VxLCBOVUxMLCAxLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyOS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQzND1pbnQgaXRlcl9tYXBzMyhzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00MzktXHRcdHJldHVybiAwO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDQwOlx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcC1cdTAwM2Vpbm5lcl9tYXBfbWV0YSwgTlVMTCwgbWFwLVx1MDAzZW1heF9lbnRyaWVzLCAwLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ0MS1cdHJldHVybiAwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ0OT1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00NjQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2ODYKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogMTAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBucl9wYWdlc2AgdHJhY2tpbmcgd2l0aGluIGBzdHJ1Y3QgYnBmX2FyZW5hYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHBvdGVudGlhbCBtZW1vcnktbWFuYWdlbWVudC1yZWxhdGVkIHZ1bG5lcmFiaWxpdHkuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcywgb2J2aW91c2x5LCB0aGUgcHJpbWFyeSBlbmFibGVyLiAgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgcHJvYmFibHkgaW1wbGljaXQgcmVxdWlyZW1lbnRzIGZvciB0aGUgYGFyZW5hLm9gIGNvbXBpbGF0aW9uIG9uIG1vc3QgYXJjaGl0ZWN0dXJlcywgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHkuICBTbywgYEJQRl9TWVNDQUxMYCBpdCBpcy4KCk5vdywgd2hpY2ggc3ltYm9scyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQ/IExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBpdCBzZWVtcyB3ZSBoYXZlOgoKKiAgIGBhcmVuYV9tYXBfbWVtX3VzYWdlYDogVGhpcyBpcyBhIGNhbGxiYWNrIGZvciBgbWFwX21lbV91c2FnZWAsIHdoaWNoIGlzIGNydWNpYWwgZm9yIEJQRiBtYXAgb3BlcmF0aW9ucy4KKiAgIGBhcmVuYV92bV9mYXVsdGA6IFRoaXMgaXMgYSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgIGZhdWx0IGNhbGxiYWNrLgoqICAgYGFyZW5hX2FsbG9jX3BhZ2VzYDogVGhpcyBpcyBjYWxsZWQgYnkgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2Aga2Z1bmMuCiogICBgYXJlbmFfZnJlZV9wYWdlc2A6IFRoaXMgaXMgY2FsbGVkIGJ5IGBicGZfYXJlbmFfZnJlZV9wYWdlc2Aga2Z1bmMuCiogICBgYXJlbmFfZnJlZV93b3JrZXJgOiBUaGlzIGlzIGNhbGxlZCB2aWEgd29ya3F1ZXVlLgoKU28sIHRoZSBmb2N1cyBwb2ludHMgYXJlOiBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAuCgpCdXQsIGxldCYjMzk7cyBkaWcgaW50byB0aGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBhIGJpdCBtb3JlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGJ5IGBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlYCBhbmQgYGFwcGx5X3RvX3BhZ2VfcmFuZ2VgLCB3aGljaCBhcmUsIGluIHR1cm4sIGNhbGxlZCBieSBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLiBUaGV5IGNvbnRhaW4gdGhlIGBucl9wYWdlc2AgbWFuaXB1bGF0aW9uIGxvZ2ljLiBUaGVzZSBzZWVtIGltcG9ydGFudCwgYW5kIHRoZXkmIzM5O3JlIHN0YXRpYywgc28gbGV0JiMzOTtzIGluY2x1ZGUgdGhlbS4KClRoZXJlZm9yZSwgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHNob3VsZCBiZToKCiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYAoqICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYAoqICAgYGFyZW5hX21hcF9tZW1fdXNhZ2VgCiogICBgYXJlbmFfYWxsb2NfcGFnZXNgCiogICBgYXJlbmFfZnJlZV9wYWdlc2AKKiAgIGBhcmVuYV92bV9mYXVsdGAKCkFuZCwgdGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgaXM6IGBCUEZfU1lTQ0FMTGAuCgoqKkNvbmNsdXNpb246KiogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZywgZXhwb3NpbmcgYG5yX3BhZ2VzYCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBhbmQgdXBkYXRlcyBjb3JlIEJQRiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MuIFRoYXQgbWFrZXMgaXQgd29ydGggZnV6emluZyB0byBleGFtaW5lIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAxNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkgYW5kIHJlcG9ydCBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCB1cGRhdGVzIHRoZSBwYWdlIHJhbmdlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoaXMgY291bnRlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIEJQRiBtYXAgb3BlcmF0aW9ucyBhbmQga2Z1bmNzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM3OjU1LjA5NjU4MjYxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjY1ODA4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgcG9wdWxhdGVkIHBhZ2VzIChgbnJfcGFnZXNgKSBhbmQgcmVwb3J0IGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IHVwZGF0ZXMgdGhlIHBhZ2UgcmFuZ2UgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbWVtb3J5IHRyYWNraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozNzo1NS4wOTY1ODk2NTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk1ODI3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5OTU0ZmQzZWVjZDdlYmFiNWY4YzBkYWNjZDRiZGZhOGY0NTRmYmQ4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5mMDQ2ZTg3OGY3YWUxNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcXG4rKysgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7XFxuIFxcdHN0cnVjdCB2bV9zdHJ1Y3QgKmtlcm5fdm07XFxuIFxcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XFxuIFxcdHN0cnVjdCByYW5nZV90cmVlIHJ0O1xcbi1cXHQvKiBwcm90ZWN0cyBydCAqL1xcbitcXHQvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi9cXG4gXFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xcbitcXHQvKiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHBvcHVsYXRlZCBpbiB0aGUgYXJlbmEgKi9cXG4rXFx0dTY0IG5yX3BhZ2VzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0O1xcbiBcXHQvKiBwcm90ZWN0cyB2bWFfbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG5AQCAtMTQzLDE0ICsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcilcXG4gfVxcbiBcXG4gc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlcztcXG4tXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gXFx0aW50IGk7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xcbiBcXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcXG4tXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5AQCAtMTgwLDcgKzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFxuIFxcdFxcdGlmIChwdGVfbm9uZShvbGQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZXNjcmF0Y2hfcGFnZSkpXFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0XFx0cHRlcF9nZXRfYW5kX2NsZWFyKFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xcbiBcXHRcXHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcXG5AQCAtMTk2LDYgKzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFx0c2V0X3B0ZV9hdChcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xcbiAjZW5kaWZcXG4gXFx0ZC1cXHUwMDNlaSsrO1xcbitcXHRXUklURV9PTkNFKGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcywgZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzICsgMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4gXFx0ICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3NcXG4gXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHBhZ2UgPT0gZC1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbitcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbitcXHRXUklURV9PTkNFKGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcywgZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzIC0gMSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiB7XFxuLVxcdHJldHVybiAwO1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuK1xcbitcXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXFx1MDAzZW5yX3BhZ2VzKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiB9XFxuIFxcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xcbkBAIC01MDYsOCArNTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuIFxcbi1cXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UgfTtcXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4gXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4gXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTY5Niw4ICs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG4tXFx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXG4gXFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xcbkBAIC04NzMsOCArODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFxuIFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2ZnJlZV9wYWdlcyk7XFxuK1xcdGNkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGNkYXRhLmZyZWVfcGFnZXMgPSBcXHUwMDI2ZnJlZV9wYWdlcztcXG4tXFx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZTtcXG4gXFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cXG4gXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFxcdTAwMjZjZGF0YSk7XFxuQEAgLTk4MSw4ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4rXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG4gXFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFxcdTAwMjZmcmVlX3BhZ2VzO1xcbi1cXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XFxuIFxcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXFxuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxcbiBcXHRcXHQgIFxcXCJzdG9yZV9yZWxlYXNlNjRfcmVzdWx0XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcXG4gXFx0Y2xvc2UobWFwX2ZkKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJvbmVfcGFzdF9lbmRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXFxuIFxcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfaHRhYl9sbHZtXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcXG4gXFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2xpc3RfMVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xcbkBAIC0wLDAgKzEsMTIyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG4rICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcXG4rXFx0bG9uZyBtZW1sb2NrID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFxcXCIsIG1hcF9mZCk7XFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fZmRpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwibWVtbG9jazpcXFxcdCVsZFxcXCIsIFxcdTAwMjZtZW1sb2NrKSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFxcXCJwYXJzZV9tZW1sb2NrXFxcIik7XFxuK1xcdHJldHVybiBtZW1sb2NrO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgKmJhc2U7XFxuK1xcdHNpemVfdCBzejtcXG4rXFx0aW50IGZkLCBpO1xcbitcXG4rXFx0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFxcXCJpbml0aWFsXFxcIik7XFxuK1xcbitcXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWFsbG9jX2NudCA9IDE3O1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmFsbG9jLCBcXFwiYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbitcXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxcbitcXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXFxcImFmdGVyX2FsbG9jXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIGEgc2luZ2xlIHBhZ2UgKGFyZW5hX2ZyZWVfcGFnZXMgcGFnZV9jbnQ9PTEgcGF0aCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9jbnQgPSAxO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX29uZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXFxcImFmdGVyX2ZyZWVfb25lXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDEwO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX2J1bGtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXFxcImFmdGVyX2ZyZWVfYnVsa1xcXCIpO1xcbitcXG4rXFx0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXFx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDY7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfcmVzdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfcmVzdFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cXG4rXFx0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xcbitcXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXFxuK1xcdCAqL1xcbitcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgXFxcImFyZW5hX2Jhc2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuK1xcdFxcdGJhc2VbaSAqIHBzXSA9IDE7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXFxcImFmdGVyX2ZhdWx0aW5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxcbitcXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyID0gYmFzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDg7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfZmF1bHRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfZmF1bHRlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbiB7XFxuIFxcdHJlcGVhdCA9IDEwMDA7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9zcGluX2xvY2tfMVxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxcbiBcXHRhcmVuYV9zdHJzZWFyY2hfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfc3Ryc2VhcmNoXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfc3RyKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxcbiBcXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcXG4gXFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTlxcbiAgKiBwcm9ncmFtcy5cXG4gICovXFxuLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiB7XFxuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG4gXFx0cnVuX3Rlc3QoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDU1ZWNkNjY5YTVhYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxuQEAgLTAsMCArMSw0MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2FyZW5hX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3ZvaWQgX19hcmVuYSAqcHRyO1xcbitpbnQgYWxsb2NfY250O1xcdFxcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cXG4rbG9uZyBmcmVlX2J5dGVfb2ZmO1xcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXFxuK2ludCBmcmVlX2NudDtcXHRcXHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBhbGxvYyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xcbitcXHQvKiBTdWNjZXNzL2ZhaWx1cmUgaXMgY2hlY2tlZCBmcm9tIHVzZXIgc3BhY2UgdmlhIHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyLiAqL1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxcbit7XFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAoY2hhciBfX2FyZW5hICopcHRyICsgZnJlZV9ieXRlX29mZiwgZnJlZV9jbnQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM3OjU2LjIxNzE0MTY1MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNDUyMzQ5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTk1NGZkM2VlY2Q3ZWJhYjVmOGMwZGFjY2Q0YmRmYThmNDU0ZmJkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDE3IDE1OjM3OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA4MGI3YjhhNjk0NDY0NS4uZjA0NmU4NzhmN2FlMTUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTU1LDggKzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEge1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcbiBcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRzdHJ1Y3QgcmFuZ2VfdHJlZSBydDtcbi1cdC8qIHByb3RlY3RzIHJ0ICovXG4rXHQvKiBwcm90ZWN0cyBydCBhbmQgbnJfcGFnZXMgKi9cbiBcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcbitcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xuK1x0dTY0IG5yX3BhZ2VzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDtcbiBcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbkBAIC0xNDMsMTQgKzE0NSwxNCBAQCBzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxuIH1cbiBcbiBzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIFx0aW50IGk7XG4gfTtcbiBcbiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xuLVx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbkBAIC0xODAsNyArMTgyLDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuIFxuIFx0XHRpZiAocHRlX25vbmUob2xkKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbitcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRwdGVwX2dldF9hbmRfY2xlYXIoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlKTtcbiBcdFx0Zmx1c2hfdGxiX2JlZm9yZV9zZXQoYWRkcik7XG5AQCAtMTk2LDYgKzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xuICNlbmRpZlxuIFx0ZC1cdTAwM2VpKys7XG4rXHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgKyAxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuK1x0aWYgKHBhZ2UgPT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0X19sbGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VwY3BfbGxpc3QsIGQtXHUwMDNlZnJlZV9wYWdlcyk7XG4rXHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgLSAxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcbiBzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiB7XG4tXHRyZXR1cm4gMDtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbitcbitcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gfVxuIFxuIHN0cnVjdCB2bWFfbGlzdCB7XG5AQCAtNTA2LDggKzUxMiw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiBcbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCxcbi1cdFx0XHRcdFx0IC5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UgfTtcbitcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAgfTtcbiBcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG4gXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbiBcdGlmIChyZXQpIHtcbkBAIC02OTYsOCArNzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnRcbiBcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4rXHRkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG4tXHRkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcbiBcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG5AQCAtODczLDggKzg3OCw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsXG4gXHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbitcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdC8qIGNsZWFyIHB0ZXMgYW5kIGNvbGxlY3Qgc3RydWN0IHBhZ2VzICovXG4gXHRhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBwYWdlX2NudCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiBcdFx0XHRcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFx1MDAyNmNkYXRhKTtcbkBAIC05ODEsOCArOTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbitcdGNkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRjZGF0YS5mcmVlX3BhZ2VzID0gXHUwMDI2ZnJlZV9wYWdlcztcbi1cdGNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcdGFyZW5hX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxuIFx0XHQgIFwic3RvcmVfcmVsZWFzZTY0X3Jlc3VsdFwiKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDtcbiBcdGludCBlcnI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcbiBcdGNsb3NlKG1hcF9mZCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwib25lX3Bhc3RfZW5kXCIpKVxuIFx0XHR0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXG4gXHRhcmVuYV9odGFiX2FzbV9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2h0YWIodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2h0YWJfbGx2bVwiKSlcbiBcdFx0dGVzdF9hcmVuYV9odGFiX2xsdm0oKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcbiBcdGFyZW5hX2xpc3RfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9saXN0XzFcIikpXG4gXHRcdHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKDEsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzJkMWExZDY3M2NmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCArMSwxMjIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbisjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi9cbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbisjZW5kaWZcbitcbisjaW5jbHVkZSBcImFyZW5hX21lbV91c2FnZS5za2VsLmhcIlxuK1xuKy8qXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcbisgKiAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvZmRpbmZvL1x1MDAzY2ZkXHUwMDNlIFwibWVtbG9jazpcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XG4rICogcHJpbnRzKS4gUmVhZCBpdCBkaXJlY3RseSBzbyB0aGUgdGVzdCBoYXMgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeS5cbisgKi9cbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxuK3tcbitcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcbitcdGxvbmcgbWVtbG9jayA9IC0xO1xuK1x0RklMRSAqZjtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFwiLCBtYXBfZmQpO1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihmLCBcIm9wZW5fZmRpbmZvXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHR3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmKSkge1xuK1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwibWVtbG9jazpcXHQlbGRcIiwgXHUwMDI2bWVtbG9jaykgPT0gMSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGZjbG9zZShmKTtcbitcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFwicGFyc2VfbWVtbG9ja1wiKTtcbitcdHJldHVybiBtZW1sb2NrO1xuK31cbitcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0aW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbitcbitcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBuYW1lKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXG4re1xuK1x0c3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDtcbitcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4rXHRjaGFyICpiYXNlO1xuK1x0c2l6ZV90IHN6O1xuK1x0aW50IGZkLCBpO1xuK1xuK1x0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXHRmZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSk7XG4rXG4rXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcImluaXRpYWxcIik7XG4rXG4rXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWxsb2NfY250ID0gMTc7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuYWxsb2MsIFwiYWxsb2NcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0LypcbitcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxuK1x0ICogaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlKSwgbm90IGEgbWlzY291bnQgLS0gZmxhZyBpdCBkaXN0aW5jdGx5IHNvIGFcbitcdCAqIHJlZCBDSSBydW4gaXMgbm90IG1pc3Rha2VuIGZvciBhIGNvdW50aW5nIGJ1Zy5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXB0ciwgXCJhcmVuYV9hbGxvY19wYWdlc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNyAqIHBzLCBcImFmdGVyX2FsbG9jXCIpO1xuK1xuK1x0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDE7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX29uZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNiAqIHBzLCBcImFmdGVyX2ZyZWVfb25lXCIpO1xuK1xuK1x0LyogRnJlZSB0ZW4gcGFnZXMgaW4gb25lIGNhbGwgKGJ1bGsgcGF0aCk7IG9ubHkgdGhlIGZyZWVkIHBhZ2VzIGNvdW50LiAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gMTA7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX2J1bGtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCBcImFmdGVyX2ZyZWVfYnVsa1wiKTtcbitcbitcdC8qIEZyZWUgdGhlIHJlbWFpbmluZyBzaXggLVx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxMSAqIHBzO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA2O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9yZXN0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwiYWZ0ZXJfZnJlZV9yZXN0XCIpO1xuK1xuK1x0LypcbitcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG4rXHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG4rXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4rXHQgKi9cbitcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtXHUwMDNlbWFwcy5hcmVuYSwgXHUwMDI2c3opO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJhc2UsIFwiYXJlbmFfYmFzZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBpKyspXG4rXHRcdGJhc2VbaSAqIHBzXSA9IDE7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCA4ICogcHMsIFwiYWZ0ZXJfZmF1bHRpblwiKTtcbitcbitcdC8qXG4rXHQgKiBGcmVlIHRoZSBmYXVsdGVkLWluIHBhZ2VzIGZyb20gQlBGLiBUaGV5IGFyZSBtYXBwZWQgaW50byB0aGUgdXNlciB2bWFcbitcdCAqIChlbGV2YXRlZCByZWZjb3VudCksIHNvIHRoaXMgYWxzbyBleGVyY2lzZXMgdGhlIHphcCBwYXRoLlxuK1x0ICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIgPSBiYXNlO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDg7XG4rXHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCJmcmVlX2ZhdWx0ZWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCJhZnRlcl9mcmVlX2ZhdWx0ZWRcIik7XG4rb3V0OlxuK1x0YXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5pbmRleCBhY2I5ZDUzYjU5NzMzZi4uNTQ1YjA1ZDdhMGFhNzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2tfc2l6ZShpbnQgc2l6ZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4ge1xuIFx0cmVwZWF0ID0gMTAwMDtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfc3Bpbl9sb2NrXzFcIikpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxuIFx0YXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX3N0cnNlYXJjaFwiKSlcbiBcdFx0dGVzdF9hcmVuYV9zdHIoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxuIFx0cnVuX2xpYmFyZW5hX3BhcmFsbGVsX2Zpbmkoc2tlbCwgbmFtZSwgcHJlZml4bGVuKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2xpYmFyZW5hKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcbiBcdHN0cnVjdCBsaWJhcmVuYSAqc2tlbDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtODUsNyArODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU5cbiAgKiBwcm9ncmFtcy5cbiAgKi9cbi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuIHtcbiAjaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXG4gXHRydW5fdGVzdCgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NTVlY2Q2NjlhNWFiZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXG5AQCAtMCwwICsxLDQwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2FyZW5hX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2Vsc2VcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbmRpZlxuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rdm9pZCBfX2FyZW5hICpwdHI7XG4raW50IGFsbG9jX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBhbGxvY2F0ZSAqL1xuK2xvbmcgZnJlZV9ieXRlX29mZjtcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXG4raW50IGZyZWVfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4raW50IGFsbG9jKHZvaWQgKmN0eClcbit7XG4rXHRwdHIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIGFsbG9jX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcbitcdC8qIFN1Y2Nlc3MvZmFpbHVyZSBpcyBjaGVja2VkIGZyb20gdXNlciBzcGFjZSB2aWEgc2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyLiAqL1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXG4re1xuK1x0aWYgKCFwdHIpXG4rXHRcdHJldHVybiAxO1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIChjaGFyIF9fYXJlbmEgKilwdHIgKyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzc6NTYuMjE3MTQzNjIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzNjMzMDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBhZGRpbmcgYSBuZXcgdGVzdCBmb3IgaXQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBmdW5jdGlvbmFsLCBjbGVhcmx5LCB0aGV5J3JlIGNoYW5naW5nIHRoZSBhcmVuYSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gdHJhY2sgdGhlIGFjdHVhbCBtZW1vcnkgdXNhZ2Ugb2YgdGhlIEJQRiBhcmVuYSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIOKAkyB3ZSBhbHdheXMgbmVlZCBwcmVjaXNlIGFjY291bnRpbmcuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IFRoZXkndmUgYWRkZWQgYHU2NCBucl9wYWdlc2AgdG8gdGhlIGBicGZfYXJlbmFgIHN0cnVjdC4gUmlnaHQsIHRoYXQncyB0aGUgY291bnRlciwgb2J2aW91cy4gVGhleSd2ZSBhbHNvIHVwZGF0ZWQgYGFwcGx5X3JhbmdlX2RhdGFgIGFuZCBgY2xlYXJfcmFuZ2VfZGF0YWAgdG8gcmVjZWl2ZSB0aGUgYGJwZl9hcmVuYWAgcG9pbnRlciBpbnN0ZWFkIG9mIGEgYHBhZ2VgIHBvaW50ZXIuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGNhbGxiYWNrcyBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhhdCBjb3VudGVyLiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBhcmUgdGhlIGtleSB1cGRhdGVzOyBpbmNyZW1lbnRpbmcvZGVjcmVtZW50aW5nIGBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gR29vZC5cblxuTm93LCB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIGNoYW5nZSBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLCB0aGV5J3JlIHJldHVybmluZyBgUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVGAgaW5zdGVhZCBvZiB6ZXJvLiBUaGF0IGNhbGN1bGF0ZXMgdGhlIG1lbW9yeSB1c2FnZSBiYXNlZCBvbiB0aGUgcGFnZSBjb3VudC4gQW5kIHRoaXMgZnVuY3Rpb24gaXMgYSBjYWxsYmFjayBmb3IgYHN0cnVjdCBicGZfbWFwX29wc2AsIGFuZCBmcm9tIHRoZSBjb21tZW50IGl0J3MgcHJvYmFibHkgaG93IGBicGZfbWFwX21lbV91c2FnZWAgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIHRoZSB1c2VyLiBJIGNhbiBzZWUgdGhlIGludGVudGlvbi5cblxuU28sIHRoaXMgY2hhbmdlIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBCUEYgYXJlbmEuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBpcyBhY3R1YWxseSB1c2VkIHdpdGhpbiBga2VybmVsL2JwZi9hcmVuYS5jYC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MDIuMDUzNDc3MzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDc4ODAzNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfbWFwX21lbV91c2FnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMi0vKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEzOiAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCdzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTQtICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM4OjA3LjMwMTM2NDU1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjcyODQyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBgYXJlbmFfbWFwX21lbV91c2FnZWAqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBhcmVuYV9tYXBfb3BzLm1hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciB0cmFja2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiBCUEYgYXJlbmFzLCB3aGljaCBpcyBnb29kLiBUaGUgZmFjdCB0aGF0IGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIEJQRiBtYXAgY3JlYXRpb24gYW5kIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBkZWZpbml0ZWx5IG1ha2VzIGl0IGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgbGVhbnMgdG93YXJkcyBcInllcywgdGhpcyB3YXJyYW50cyBhIGRlZXAgZGl2ZSB3aXRoIGZ1enppbmcuXCIgV2h5PyBCZWNhdXNlIGFueSBjaGFuZ2UgdGhhdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhpcyBkb2VzIHdpdGggQlBGIGFyZW5hIG1lbW9yeSB0cmFja2luZywgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSwgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBNZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aXRoaW4gQlBGLCBpcyBhIGNsYXNzaWMgYXJlYSBmb3IgdGhlc2UgaXNzdWVzIHRvIHN1cmZhY2UuIEl0J3MgYSBrZXkgYXJlYSB0aGF0IGNhbiBiZWNvbWUgcHJvYmxlbWF0aWMsIGFuZCBuZWVkcyB0byBiZSBldmFsdWF0ZWQuXG5cbkJlZm9yZSBJIGNvbW1pdCB0byBzZXR0aW5nIHVwIGEgZnV6emluZyBjYW1wYWlnbiwgSSBzaG91bGQgY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBCUEYgYXJlbmFzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgc3BlY2lmaWMga25vYnMgb3IgY29tcGlsZS10aW1lIGZsYWdzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvciBwcmVzZW5jZSBvZiB0aGlzIG1lbW9yeSB0cmFja2luZyBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBpbmZvcm0gbXkgZnV6emluZyBzdHJhdGVneTsgZW5zdXJpbmcgdGhhdCBJIGFtIHRhcmdldGluZyB0aGUgY29kZSBJIHRoaW5rIEkgYW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODoxMS4zMjg2NTExNTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODY1NzYwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQVJFTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTA0Nj1zdGF0aWMgdm9pZCBidWlsZF9lcGlsb2d1ZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBib29sIHdhc19jbGFzc2ljKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMDE6I2RlZmluZSBCUEZfQVJFTkFfQUNDRVNTICAgICAgICAgICBCSVQoMjEpXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMi0jZGVmaW5lIEJQRl9GSVhVUF9SRUdfTUFTS1xcdEdFTk1BU0soMzEsIDI3KVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTEwNT1ib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMC1cXHRpbnQgYXJlbmFfcmVnID0gRklFTERfR0VUKEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSywgZXgtXFx1MDAzZWZpeHVwKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTExOlxcdGJvb2wgaXNfYXJlbmEgPSAhIShleC1cXHUwMDNlZml4dXAgXFx1MDAyNiBCUEZfQVJFTkFfQUNDRVNTKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEyLVxcdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMjk9c3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4Ni1cXHRpZiAoaXNfYXJlbmEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3OlxcdFxcdGV4LVxcdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExODgtXFx0XFx0LypcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE2LVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChCUEZfQVJFTkFfRk9SQ0VfQVNNKVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTg0ND1MSUJBUkVOQV9BU0FOX1NLRUwgOj0gbGliYXJlbmEvbGliYXJlbmFfYXNhbi5za2VsLmhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyArPSAtREhBU19CUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGU9Nzk9bGliYXJlbmEuYnBmLm86ICQoTElCQVJFTkFfT0JKRUNUUylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZS04NC1cXHQkKGNhbGwgbXNnLENMTkctQlBGLGxpYmFyZW5hLCRAKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcXHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAkKEFTQU5fRkxBR1MpIC1EQlBGX0FSRU5BX0FTQU4gJChCUEZfVEFSR0VUX0VORElBTikgLWMgJFxcdTAwM2MgLW8gJEBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtMzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChCUEZfQVJFTkFfRk9SQ0VfQVNNKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKSkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgtMi0vKiBDb3B5cmlnaHQgKGMpIDIwMjUgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjM6I2lmbmRlZiBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTU0Mi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaD0xNT1leHRlcm4gdm9sYXRpbGUgYm9vbCBhc2FuX3JlcG9ydF9vbmNlO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTI1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDoyNjojaWZkZWYgQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9ODU9c3RhdGljIHZvaWQgKCpfX2FzYW5fYnRmX2FuY2hvcnNbXSkoaW50cHRyX3QpID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTkxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDo5MjojZWxzZSAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaD05Nz1fX3dlYWsgYm9vbCBhc2FuX3JlYWR5KHZvaWQpIHsgcmV0dXJuIHRydWU7IH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oOjk5OiNlbmRpZiAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC0xMDAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYz0xMT1leHRlcm4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMtMTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMtMTQtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy04MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTgyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYzo1OiNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtNi0jaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYzo5MDojaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVxcdHJ1bl90ZXN0KCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiLmMtMjcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiLmM6Mjg6I2lmIGRlZmluZWQoX19CUEZfRkVBVFVSRV9BRERSX1NQQUNFX0NBU1QpIHx8IGRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVxcdHN0cnVjdCBodGFiIF9fYXJlbmEgKmh0YWI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYzozOiNkZWZpbmUgQlBGX0FSRU5BX0ZPUkNFX0FTTVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jLTQtI2RlZmluZSBhcmVuYV9odGFiX2xsdm0gYXJlbmFfaHRhYl9hc21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MTYuMjk3MzE1NzU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgQlBGIFN5c3RlbSBDYWxsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEknbSB0aGlua2luZywgdGhhdCBzb3VuZHMgbGlrZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBoZXJlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLiAgSXQncyB0aGUgbW9zdCBjb21tb24gb25lIHRvIHNlZSBhc3NvY2lhdGVkIHdpdGggZW5hYmxpbmcgQlBGIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBvbmUgd2UncmUgYWZ0ZXIuXG5cblRvIHZlcmlmeSwgbGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG8gZG91YmxlLWNoZWNrLiBJJ20gZ29pbmcgdG8gbG9vayBpbiBlaXRoZXIgYGtlcm5lbC9icGYvS2NvbmZpZ2AgKHRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlLCBnaXZlbiBpdHMgcHVycG9zZSkgb3IsIGFsdGVybmF0aXZlbHksIGBpbml0L0tjb25maWdgIHRvIHNlZSB3aGVyZSB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGluIG9uZSBvZiB0aG9zZSwgb3IgcGVyaGFwcyBldmVuIGluIGEgYEtjb25maWcucGxhdGZvcm1gIGluIG9uZSBvZiB0aG9zZSBwYXRocy4gRnJvbSB0aGVyZSBJIGNhbiBjb25maXJtIHRoYXQgaXQgaXMgaW5kZWVkIHdoYXQgSSBhbSBhZnRlciwgb3IgaWYgSSBuZWVkIHRvIGFkanVzdC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHdoaWxlIEknbSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODoxOS42OTc0NzMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEyMTA2NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnPTE3PWlmIFJDX0NPUkVcXG5kcml2ZXJzL21lZGlhL3JjL0tjb25maWctMTgtXFxuZHJpdmVycy9tZWRpYS9yYy9LY29uZmlnOjE5OmNvbmZpZyBCUEZfTElSQ19NT0RFMlxcbmRyaXZlcnMvbWVkaWEvcmMvS2NvbmZpZy0yMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGxpcmMgZGV2aWNlc1xcXCJcXG4tLVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzPTI0Mj1jb25maWcgUVVFVUVEX1NQSU5MT0NLU1xcbi0tXFxua2VybmVsL0tjb25maWcubG9ja3MtMjQ1LVxcbmtlcm5lbC9LY29uZmlnLmxvY2tzOjI0Njpjb25maWcgQlBGX0FSQ0hfU1BJTkxPQ0tcXG5rZXJuZWwvS2NvbmZpZy5sb2Nrcy0yNDctXFx0Ym9vbFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTMtIyBCUEYgaW50ZXJwcmV0ZXIgdGhhdCwgZm9yIGV4YW1wbGUsIGNsYXNzaWMgc29ja2V0IGZpbHRlcnMgZGVwZW5kIG9uLlxcbmtlcm5lbC9icGYvS2NvbmZpZzo0OmNvbmZpZyBCUEZcXG5rZXJuZWwvYnBmL0tjb25maWctNS1cXHRib29sXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTcyLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo3Mzpjb25maWcgQlBGX1VOUFJJVl9ERUZBVUxUX09GRlxcbmtlcm5lbC9icGYvS2NvbmZpZy03NC1cXHRib29sIFxcXCJEaXNhYmxlIHVucHJpdmlsZWdlZCBCUEYgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcbi0tXFxua2VybmVsL2JwZi9wcmVsb2FkL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZzoyOm1lbnVjb25maWcgQlBGX1BSRUxPQURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlByZWxvYWQgQlBGIGZpbGUgc3lzdGVtIHdpdGgga2VybmVsIHNwZWNpZmljIHByb2dyYW0gYW5kIG1hcCBpdGVyYXRvcnNcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZz0xND1pZiBCUEZfUFJFTE9BRFxcbmtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnOjE1OmNvbmZpZyBCUEZfUFJFTE9BRF9VTURcXG5rZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiYnBmX3ByZWxvYWQga2VybmVsIG1vZHVsZVxcXCJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz04NjU9Y29uZmlnIFBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODY3LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg2ODpjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg2OS1cXHRib29sIFxcXCJFbmFibGUgQlBGIHByb2dyYW1zIHRvIG92ZXJyaWRlIGEga3Byb2JlZCBmdW5jdGlvblxcXCJcXG4tLVxcbm5ldC9LY29uZmlnPTM1ND1jb25maWcgQlFMXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjAtXFxubmV0L0tjb25maWc6MzYxOmNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnLTM2Mi1cXHRib29sIFxcXCJlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM4OjI1LjEwOTU4NzAxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc3NjIxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgQXJlbmEgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGZpbGUgZ2V0cyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGNvbnRleHQsIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBhIGNvbW1vbiB3YXkgdG8gbWFuYWdlIGZlYXR1cmUgZmxhZ3Mgb3IgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGp1c3QgZ28gYW5kICpsb29rKiBhdCB0aGUgY29kZS4gVGhhdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYCNpZmRlZmAgb3Igc2ltaWxhciBkaXJlY3RpdmVzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBHcmFiYmluZyB0aGUgY29kZSBpcyBsaWtlIHJ1bm5pbmcgYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBjb250cm9sIGxvZ2ljIEkgd291bGQgZXhwZWN0IHRvIGZpbmQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MjguNjc3MzUxOTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYwMzkwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vYnR0LmM9Mzk9c3RhdGljIGludCBhcmVuYV9yZWFkX2J5dGVzKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjQ1OlxcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXFx0b2Zmc2V0ID0gYWRqdXN0X2luaXRpYWxfb2Zmc2V0KG5kX2J0dCwgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XFx0LyogYXJlbmEgb2Zmc2V0cyBtYXkgYmUgc2hpZnRlZCBmcm9tIHRoZSBiYXNlIG9mIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XFx0XFx0XFx0XFx0c2l6ZV90IHN0YXJ0LCBzaXplX3QgYXJlbmFfb2ZmKVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy03ODktXFx0LyogJ0Fic29sdXRlJyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYzo3OTA6XFx0YXJlbmEtXFx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzkxLVxcdGFyZW5hLVxcdTAwM2VkYXRhb2ZmID0gYXJlbmEtXFx1MDAzZWluZm9vZmYgKyBCVFRfUEdfU0laRTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlxcdFxcdFxcdFxcdHU2NCBhcmVuYV9vZmYpXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMC1cXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XFx0YXJlbmEtXFx1MDAzZW5leHRvZmYgPSAoc3VwZXItXFx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiArXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVxcdFxcdFxcdGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VuZXh0b2ZmKSk7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMzOlxcdGFyZW5hLVxcdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNDpcXHRhcmVuYS1cXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VkYXRhb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzU6XFx0YXJlbmEtXFx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VtYXBvZmYpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNjpcXHRhcmVuYS1cXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICsgbGU2NF90b19jcHUoc3VwZXItXFx1MDAzZWxvZ29mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM3OlxcdGFyZW5hLVxcdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VpbmZvMm9mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODM4LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTMwPXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjMtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTY0OiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjUtICovXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXFxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlxcdFxcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcXHRcXHRcXHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTg3PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyNjItXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MjYzOlxcdFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiJXMgaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXIuXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjY0LVxcdFxcdFxcdFxcdFxcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04Ni1cXHR1YWRkcjMyID0gKHUzMikodW5zaWduZWQgbG9uZylwO1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04OC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9Nzk1Mz1zdGF0aWMgaW50IHNjeF9hcmVuYV9zY2FuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03OTU3LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6Nzk1ODpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzk1OS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTE1PXN0cnVjdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNy1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTg6XFx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTktI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6MzYuMjM3NzU3NDE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjU0Njk1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgYGFyZW5hLm9gKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgYXJlbmEub2AgaXMgb25seSBjb21waWxlZCB3aGVuIHdlIGhhdmUgYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFsbCBlbmFibGVkLiBUaGF0IGBCUEZfU1lTQ0FMTGAgY29uZmlnIGlzIHRoZSBrZXkgb25lIGhlcmUgdG8gZm9jdXMgb24uIEdvdCBpdC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AgaGF2ZSBjaGFuZ2VkIHRoYXQgYXJlIHJlbGF0ZWQgdG8gZnV6emluZy4gSSBzZWU6XG5cbiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYFxuKiAgIGBhcHBseV9yYW5nZV9jbGVhcl9jYmBcbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWBcbiogICBgYXJlbmFfdm1fZmF1bHRgXG4qICAgYGFyZW5hX2FsbG9jX3BhZ2VzYFxuKiAgIGBhcmVuYV9mcmVlX3BhZ2VzYFxuKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmBcblxuQWxyaWdodCwgdGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgbGlzdC4gIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgYGFyZW5hX3ZtX2ZhdWx0YCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYCBhbGwgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIGZvciB0YXJnZXRlZCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgZnVuY3Rpb24gbmFtZXMgYXJlIGFjY3VyYXRlIGFuZCBpbiB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QxNTozODo0MS4yMDMyMzAyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwOTg3MzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9tYXBfbWVtX3VzYWdlfGFyZW5hX3ZtX2ZhdWx0fGFyZW5hX2FsbG9jX3BhZ2VzfGFyZW5hX2ZyZWVfcGFnZXN8YXJlbmFfZnJlZV93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NDMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmluY2x1ZGUvbGludXgvYnBmLmg9NzA5PWludCBicGZfZHlucHRyX2Zyb21fZmlsZV9zbGVlcGFibGUoc3RydWN0IGZpbGUgKmZpbGUsIHUzMiBmbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzEyLSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbmluY2x1ZGUvbGludXgvYnBmLmg6NzEzOnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzE0LVxcdFxcdFxcdFxcdFxcdCAgdTY0IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNTp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxNjp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzE3LVxcdFxcdFxcdFxcdCAgICAgIHU2NCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC03MTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcxOTpzdGF0aWMgaW5saW5lIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxuaW5jbHVkZS9saW51eC9icGYuaC03MjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNzI0LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6NzI1OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTcyOC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjcyOTpzdGF0aWMgaW5saW5lIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTczMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zOS0gKiBpbnRvIGtlcm5lbCBhbmQgdXNlciB2bWEuXFxua2VybmVsL2JwZi9hcmVuYS5jOjQwOiAqIGJwZiBwcm9ncmFtIGNhbiBhbGxvY2F0ZSBhIHBhZ2UgdmlhIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGtmdW5jXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXFxua2VybmVsL2JwZi9hcmVuYS5jPTUxPXN0cnVjdCBicGZfYXJlbmEge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03My1zdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0yMTA9c3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI5LVxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTI2Nj1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTEtXFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzEzLVxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQxMj1zdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ2ND1zdGF0aWMgdm9pZCBhcmVuYV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3OTpzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDM9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ3LVxcdC5jbG9zZVxcdFxcdD0gYXJlbmFfdm1fY2xvc2UsXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0ODpcXHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ5LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU1PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2My0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY0OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY1LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc3MC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Nzg1PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04NDItXFxua2VybmVsL2JwZi9hcmVuYS5jOjg0MzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODQ0LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzAtICogUmVzZXJ2ZSBhbiBhcmVuYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Ugd2l0aG91dCBwb3B1bGF0aW5nIGl0LiBUaGlzIGNhbGwgc3RvcHNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTMxOiAqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyBmcm9tIGFkZGluZyBwYWdlcyB0byB0aGlzIHJhbmdlLlxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzItICovXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzMz1zdGF0aWMgaW50IGFyZW5hX3Jlc2VydmVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy05NjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjk2NzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTA0MT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNDM6X19icGZfa2Z1bmMgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNDQtXFx0XFx0XFx0XFx0XFx0aW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDUyOlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTU6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2NDpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2Ni1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5vZGVfaWQsIHU2NCBmbGFncylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDc2OlxcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3Ny19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzk6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODAte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODUtXFx0XFx0cmV0dXJuO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg2OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwODctfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDg4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg5OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTAte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOTUtXFx0XFx0cmV0dXJuO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDk2OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDk3LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTE0PUJURl9LRlVOQ1NfU1RBUlQoYXJlbmFfa2Z1bmNzKVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjExMTY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTE3LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTA2MD1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjQtXFx0S0ZfYnBmX3Rhc2tfd29ya19zY2hlZHVsZV9yZXN1bWUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTI1OlxcdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExMjY6XFx0S0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI3LVxcdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjE3PUJURl9JRChmdW5jLCBicGZfdGFza193b3JrX3NjaGVkdWxlX3Jlc3VtZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMTg6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMTk6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyMC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3MDQ9c3RhdGljIGJvb2wgaXNfYnBmX2FyZW5hX2tmdW5jKHUzMiBidGZfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzA1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MDY6XFx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTcwNzpcXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10gfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MDgtXFx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjU4PXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5NS1cXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2R5bnB0cl9mcm9tX2ZpbGVfc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5NjpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTctXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTg6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY5OTpcXHR9IGVsc2UgaWYgKGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwMC1cXHRcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTcwMTpcXHRcXHRcXHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MDItXFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTctICogRWFjaCBjaHVuayBhZGRlZCB0byBAc2NoLVxcdTAwM2VhcmVuYV9wb29sIGNvbWVzIGZyb20gb25lXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg6ICogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSgpIGNhbGwgYW5kIGlzIHJlZ2lzdGVyZWQgYXQgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTktICoga2VybmVsLXNpZGUgbWFwcGluZyBhZGRyZXNzLiBDYWxsZXJzIHRyYW5zbGF0ZSB0byB0aGUgQlBGLWFyZW5hIGZvcm1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz01Nz12b2lkIHNjeF9hcmVuYV9wb29sX2Rlc3Ryb3koc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTY2LS8qXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjY3OiAqIEdyb3cgdGhlIHBvb2wgYnkgQHBhZ2VfY250IHBhZ2VzLiBicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKCkgYW5kXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTY4LSAqIGdlbl9wb29sX2FkZCgpICh3aGljaCBjYWxscyB2emFsbG9jKEdGUF9LRVJORUwpKSByZXF1aXJlIGEgc2xlZXBhYmxlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04MC1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM6ODE6XFx0cCA9IGJwZl9hcmVuYV9hbGxvY19wYWdlc19zbGVlcGFibGUoc2NoLVxcdTAwM2VhcmVuYV9tYXAsIE5VTEwsXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTgyLVxcdFxcdFxcdFxcdFxcdCAgICBwYWdlX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy05Ni1cXHRpZiAocmV0KSB7XFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjk3OlxcdFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUoc2NoLVxcdTAwM2VhcmVuYV9tYXAsIHAsIHBhZ2VfY250KTtcXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmMtOTgtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTgyLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjgzOnZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yMD1jaGFyIF9fYXR0cmlidXRlX18oKHdlYWspKSBhcmVuYVsxXTtcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMjUtXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDoyNjpzdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaC0yNy1cXHRcXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncylcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmg6MzE6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzIte1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L3NjeF9xbWFwLmJwZi5jPTEwNzA9czMyIEJQRl9TVFJVQ1RfT1BTX1NMRUVQQUJMRShxbWFwX2luaXQpXFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTExMy1cXHRucl9wYWdlcyA9IChtYXhfdGFza3MgKiBUQVNLX0NUWF9TVFJJREUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTtcXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTExNDpcXHRzbGFiID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgbnJfcGFnZXMsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvc2NoZWRfZXh0L3NjeF9xbWFwLmJwZi5jLTExMTUtXFx0aWYgKCFzbGFiKSB7XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmMtMTEzNS1cXHQgKi9cXG50b29scy9zY2hlZF9leHQvc2N4X3FtYXAuYnBmLmM6MTEzNjpcXHRxYV9pZGxlX2NpZHMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3NjaGVkX2V4dC9zY3hfcW1hcC5icGYuYy0xMTM3LVxcdGlmICghcWFfaWRsZV9jaWRzKSB7XFxuLS1cXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYz0xMDE9dm9pZCBfX2FyZW5hICpzY3hfYWxsb2NfZnJvbV9wb29sKHN0cnVjdCBzZHRfcG9vbCAqcG9vbClcXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jLTExMS1cXHRpZiAocG9vbC1cXHUwMDNlaWR4IFxcdTAwM2U9IG1heF9lbGVtcykge1xcbnRvb2xzL3NjaGVkX2V4dC9zY3hfc2R0LmJwZi5jOjExMjpcXHRcXHRzbGFiID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCxcXG50b29scy9zY2hlZF9leHQvc2N4X3NkdC5icGYuYy0xMTMtXFx0XFx0XFx0ZGl2X3JvdW5kX3VwKG1heF9lbGVtcyAqIGVsZW1fc2l6ZSwgUEFHRV9TSVpFKSwgTlVNQV9OT19OT0RFLCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD0yMD1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTMyLXJlZmlsbDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6MzM6XFx0XFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTM0LVxcdFxcdGlmICghcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg9OTI9dm9pZCBodGFiX2luaXQoc3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2h0YWIuaC05My17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9odGFiLmg6OTQ6XFx0dm9pZCBfX2FyZW5hICpidWNrZXRzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMiwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2h0YWIuaC05NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NDc6dm9pZCBfX2FyZW5hKiBicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC00OC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC01MS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaD01OT1fX3dlYWsgY2hhciBhcmVuYVsxXTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmg6NjU6c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02Ni1cXHRcXHRcXHRcXHRcXHRcXHQgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC02OS19XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtNzEte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYnVkZHkuaD01PWVudW0gYnVkZHlfY29uc3RzIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzUtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9idWRkeS5oOjM2OlxcdCAqIEFsaWdubWVudCBmb3IgY2h1bmsgYWxsb2NhdGlvbnMgYmFzZWQgb24gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2J1ZGR5LmgtMzctXFx0ICogVGhlIGFyZW5hIGFsbG9jYXRpb24ga2Z1bmMgZG9lcyBub3QgaGF2ZSBhbiBhbGlnbm1lbnQgYXJndW1lbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzc1PXZvaWQgKl9fYXNhbl9tZW1zZXQodm9pZCAqcCwgaW50IGMsIHNpemVfdCBuKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM4Mi0gKiBQb2lzb25pbmcgY29kZSwgdXNlZCB3aGVuIHdlIGFkZCBtb3JlIGZyZWVkIG1lbW9yeSB0byB0aGUgYWxsb2NhdG9yIGJ5OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzozODM6ICogXFx0YSkgcHVsbGluZyBtZW1vcnkgZnJvbSB0aGUgYXJlbmEgc2VnbWVudCB1c2luZyBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy0zODQtICogXFx0YikgZnJlZWluZyBtZW1vcnkgZnJvbSBhcHBsaWNhdGlvbiBjb2RlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9Mzg2PV9faGlkZGVuIF9fbm9hc2FuIGludCBhc2FuX3BvaXNvbih2b2lkIF9fYXJlbmEgKmFkZHIsIHM4IHZhbCwgc2l6ZV90IHNpemUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtMzkzLVxcdCAqIG1lbW9yeSB0byB0aGUgYXBwbGljYXRpb24gdGhhdCBoYXMgYSBncmFudWxlLWFsaWduZWQgc3RhcnRpbmcgYWRkcmVzcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6Mzk0OlxcdCAqIGFuZCBicGZfYXJlbmFfYWxsb2NfcGFnZXMgcmV0dXJucyBwYWdlLWFsaWduZWQgbWVtb3J5LiBBIG5vbi1hbGlnbmVkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTM5NS1cXHQgKiBhZGRyIHRoZW4gaW1wbGllcyB3ZSdyZSBmcmVlaW5nIGEgZGlmZmVyZW50IGFkZHJlc3MgdGhhbiB0aGUgb25lIHdlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9NDg1PV9fd2VhayBfX25vYXNhbiBpbnQgYXNhbl9pbml0KHN0cnVjdCBhc2FuX2luaXRfYXJncyAqYXJncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01MjktXFx0ICogcGFnZXMgYXJlIG5vdCBhbGxvY2F0ZWQsIGFjY2Vzc2VzIHRvIGl0IHdpbGwgdHJpZ2dlciBwYWdlIGZhdWx0cyBhbmQgd2lsbCBiZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1MzA6XFx0ICogcmVwb3J0ZWQgdGhyb3VnaCBCUEYgc3RyZWFtcy4gQW55IHBhZ2VzIGFsbG9jYXRlZCB0aHJvdWdoIGJwZl9hcmVuYV9hbGxvY19wYWdlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01MzEtXFx0ICogc2hvdWxkIGJlIHBvaXNvbmVkIGJ5IHRoZSBhbGxvY2F0b3IgcmlnaHQgYWZ0ZXIgdGhlIGNhbGwgc3VjY2VlZHMuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTUzMi1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTMzOlxcdHNoYWRvd19tYXAgPSAodTY0KWJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTM0LVxcdFxcdFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKV9fYXNhbl9zaGFkb3dfbWVtb3J5X2R5bmFtaWNfYWRkcmVzcyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NzY9c3RhdGljIHZvaWQgYnVkZHlfdW5yZXNlcnZlX2FyZW5hX3ZhZGRyKHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTc3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjc4OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNzktXFx0XFx0XFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopKEJVRERZX1ZBRERSX09GRlNFVCArIGJ1ZGR5LVxcdTAwM2V2YWRkciksXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jPTM4ND1zdGF0aWMgc3RydWN0IGJ1ZGR5X2NodW5rIF9fYXJlbmEgKmJ1ZGR5X2NodW5rX2dldChzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQwOC1cXHQvKiBVbnJlc2VydmUgdGhlIGFkZHJlc3Mgc3BhY2UuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo0MDk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTAtXFx0XFx0XFx0ICAgICBCVUREWV9DSFVOS19QQUdFUyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo0MTI6XFx0Y2h1bmsgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYy00MTMtXFx0XFx0XFx0XFx0ICAgICAgQlVERFlfQ0hVTktfUEFHRVMsIE5VTUFfTk9fTk9ERSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTQyNi1cXHRcXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jOjQyNzpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWRkciwgQlVERFlfQ0hVTktfUEFHRVMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNDI4LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYz01NjQ9X193ZWFrIGludCBidWRkeV9pbml0KHN0cnVjdCBidWRkeSBfX2FyZW5hICpidWRkeSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNTgyLVxcdGlmIChidWRkeV9sb2NrKGJ1ZGR5KSkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM6NTgzOlxcdFxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgY2h1bmssIEJVRERZX0NIVU5LX1BBR0VTKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTU4NC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmM9NjA1PV9fd2VhayBpbnQgYnVkZHlfZGVzdHJveShzdHJ1Y3QgYnVkZHkgX19hcmVuYSAqYnVkZHkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2J1ZGR5LmJwZi5jLTYyMS1cXHRcXHRcXHQgICAgQlVERFlfQ0hVTktfUEFHRVMgKiBfX1BBR0VfU0laRSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9idWRkeS5icGYuYzo2MjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBjaHVuaywgQlVERFlfQ0hVTktfUEFHRVMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYnVkZHkuYnBmLmMtNjIzLVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTEyLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTM6ICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xNC0gKiAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9mZGluZm8vXFx1MDAzY2ZkXFx1MDAzZSBcXFwibWVtbG9jazpcXFwiIGxpbmUgKHRoZSBzYW1lIHZhbHVlIGJwZnRvb2wgbWFwIHNob3dcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jPTQ4PXZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy02OC1cXHQvKlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjY5OlxcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTcwLVxcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy03Mi1cXHQgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzo3MzpcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc0LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtNzYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6Nzc6XFx0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTc4LVxcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cXHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jOjEwMDpcXHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMtMTAxLVxcdCAqIGxvYWQsIHNvIGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoKSBoYW5kcyBiYWNrIHRoYXQgYmFzZS5cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjg6XFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYz0yND1pbnQgYWxsb2Modm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYy0yNS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjI2OlxcdHB0ciA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIGFsbG9jX2NudCwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMjctXFx0LyogU3VjY2Vzcy9mYWlsdXJlIGlzIGNoZWNrZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXB0ci4gKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuYz0zMj1pbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzUtXFx0XFx0cmV0dXJuIDE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jOjM2OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciArIGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMtMzctXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jPTM3NT1fX2xvZ19sZXZlbCgyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM6Mzc2Ol9fbXNnKFxcXCIgNjogLjEyMzQ1Li4uLiAoODUpIGNhbGwgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM3Ny1fX21zZyhcXFwiIDc6IDAuLi4uLi4uLi4gKGJmKSByMSA9IGFkZHJfc3BhY2VfY2FzdChyMCwgMCwgMSlcXFwiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz0zNzk9X19uYWtlZCB2b2lkIGFkZHJfc3BhY2VfY2FzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zODYtXFx0XFx0XFxcInI1ID0gMDtcXFwiXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYzozODc6XFx0XFx0XFxcImNhbGwgJVticGZfYXJlbmFfYWxsb2NfcGFnZXNdO1xcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTM4OC1cXHRcXHRcXFwicjEgPSBhZGRyX3NwYWNlX2Nhc3QocjAsIDAsIDEpO1xcXCJcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmMtMzkzLVxcdFxcdDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jOjM5NDpcXHRcXHQ6IF9faW1tKGJwZl9hcmVuYV9hbGxvY19wYWdlcyksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy0zOTUtXFx0XFx0ICBfX2ltbV9hZGRyKGFyZW5hKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYz00NzY9dm9pZCBrZnVuY19yb290KHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2NvbXB1dGVfbGl2ZV9yZWdpc3RlcnMuYy00Nzcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9jb21wdXRlX2xpdmVfcmVnaXN0ZXJzLmM6NDc4OlxcdGJwZl9hcmVuYV9hbGxvY19wYWdlcygwLCAwLCAwLCAwLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvY29tcHV0ZV9saXZlX3JlZ2lzdGVycy5jLTQ3OS19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yOD1pbnQgYmFzaWNfYWxsb2MxX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMzItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MzM6XFx0cGFnZTEgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTM0LVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zNi1cXHQqcGFnZTEgPSAxO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjM3OlxcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zOC1cXHRpZiAoIXBhZ2UyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDAtXFx0KnBhZ2UyID0gMjtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0MTpcXHRub19wYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00Mi1cXHRpZiAobm9fcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ3LVxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQ4OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRpZiAoKnBhZ2UxICE9IDEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz01OT1pbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjY0OlxcdHBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy02NS1cXHRpZiAoIXBhZ2UxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjctXFx0KnBhZ2UxID0gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo2ODpcXHRwYWdlMiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNjktXFx0aWYgKCFwYWdlMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTcxLVxcdCpwYWdlMiA9IDI7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NzI6XFx0bm9fcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNzMtXFx0aWYgKG5vX3BhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy03OC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo3OTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODAtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODMtXFx0XFx0cmV0dXJuIDc7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6ODQ6XFx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTg1LVxcdGlmICghcGFnZTMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz05OD1pbnQgYmFzaWNfYWxsb2MyX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTAyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjEwMzpcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTA0LVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMjAtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTIxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMjItXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTM2PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE0MTpcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDIsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTQyLVxcdGlmICghcGFnZTEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTgtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTU5OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNjAtXFx0aWYgKCpwYWdlMSAhPSAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTc4PWludCBiYXNpY19hbGxvYzNfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTgzOlxcdHBhZ2VzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhci1cXHUwMDNlbWFwLCBOVUxMLCBhci1cXHUwMDNlbWFwLm1heF9lbnRyaWVzLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4NC1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTkxPWludCBiYXNpY19hbGxvYzModm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5NjpcXHRwYWdlcyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXItXFx1MDAzZW1hcCwgTlVMTCwgYXItXFx1MDAzZW1hcC5tYXhfZW50cmllcywgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOTctXFx0aWYgKCFwYWdlcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTIwND1pbnQgYmFzaWNfcmVzZXJ2ZTFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMDktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjEwOlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIxMS1cXHRpZiAoIXBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMjEtXFx0LyogVHJ5IHRvIGV4cGxpY2l0bHkgYWxsb2NhdGUgdGhlIHJlc2VydmVkIHBhZ2UuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjIyOlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyMy1cXHRpZiAocGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyNi1cXHQvKiBUcnkgdG8gaW1wbGljaXRseSBhbGxvY2F0ZSB0aGUgcGFnZSAoc2luY2UgdGhlcmUncyBvbmx5IDIgb2YgdGhlbSkuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MjI3OlxcdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIyOC1cXHRpZiAocGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTIzNj1pbnQgYmFzaWNfcmVzZXJ2ZTEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjQxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI0MjpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNDMtXFx0aWYgKCFwYWdlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjUzLVxcdC8qIFRyeSB0byBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZSByZXNlcnZlZCBwYWdlLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI1NDpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNTUtXFx0aWYgKHBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNTgtXFx0LyogVHJ5IHRvIGltcGxpY2l0bHkgYWxsb2NhdGUgdGhlIHBhZ2UgKHNpbmNlIHRoZXJlJ3Mgb25seSAyIG9mIHRoZW0pLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI1OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNjAtXFx0aWYgKHBhZ2UpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0yNjg9aW50IGJhc2ljX3Jlc2VydmUyX25vc2xlZXAodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjc4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI3OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yODAtXFx0aWYgKCh1NjQpcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTI4OD1pbnQgYmFzaWNfcmVzZXJ2ZTIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMjk4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI5OTpcXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0zMDAtXFx0aWYgKCh1NjQpcGFnZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQxMj1pbnQgaXRlcl9tYXBzMShzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQxNy1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0MTg6XFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcCwgTlVMTCwgbWFwLVxcdTAwM2VtYXhfZW50cmllcywgMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDE5LVxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NDI0PWludCBpdGVyX21hcHMyKHN0cnVjdCBicGZfaXRlcl9fYnBmX21hcCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDI3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQyODpcXHRicGZfYXJlbmFfYWxsb2NfcGFnZXMoKHZvaWQgKilzZXEsIE5VTEwsIDEsIDAsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQyOS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQzND1pbnQgaXRlcl9tYXBzMyhzdHJ1Y3QgYnBmX2l0ZXJfX2JwZl9tYXAgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQzOS1cXHRcXHRyZXR1cm4gMDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0NDA6XFx0YnBmX2FyZW5hX2FsbG9jX3BhZ2VzKG1hcC1cXHUwMDNlaW5uZXJfbWFwX21ldGEsIE5VTEwsIG1hcC1cXHUwMDNlbWF4X2VudHJpZXMsIDAsIDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ0MS1cXHRyZXR1cm4gMDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ0OT1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ2NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMTU6Mzg6NDkuMDEzMTMzODgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDA3OTg3Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCUEYgQXJlbmEgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHRvdWNoaW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBucl9wYWdlc2AgdHJhY2tpbmcgd2l0aGluIGBzdHJ1Y3QgYnBmX2FyZW5hYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHBvdGVudGlhbCBtZW1vcnktbWFuYWdlbWVudC1yZWxhdGVkIHZ1bG5lcmFiaWxpdHkuXG5cbkZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMsIG9idmlvdXNseSwgdGhlIHByaW1hcnkgZW5hYmxlci4gIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYXJlIHByb2JhYmx5IGltcGxpY2l0IHJlcXVpcmVtZW50cyBmb3IgdGhlIGBhcmVuYS5vYCBjb21waWxhdGlvbiBvbiBtb3N0IGFyY2hpdGVjdHVyZXMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHkuICBTbywgYEJQRl9TWVNDQUxMYCBpdCBpcy5cblxuTm93LCB3aGljaCBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbXBhY3RlZD8gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gY2FsbHMsIGl0IHNlZW1zIHdlIGhhdmU6XG5cbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWA6IFRoaXMgaXMgYSBjYWxsYmFjayBmb3IgYG1hcF9tZW1fdXNhZ2VgLCB3aGljaCBpcyBjcnVjaWFsIGZvciBCUEYgbWFwIG9wZXJhdGlvbnMuXG4qICAgYGFyZW5hX3ZtX2ZhdWx0YDogVGhpcyBpcyBhIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAgZmF1bHQgY2FsbGJhY2suXG4qICAgYGFyZW5hX2FsbG9jX3BhZ2VzYDogVGhpcyBpcyBjYWxsZWQgYnkgYGJwZl9hcmVuYV9hbGxvY19wYWdlc2Aga2Z1bmMuXG4qICAgYGFyZW5hX2ZyZWVfcGFnZXNgOiBUaGlzIGlzIGNhbGxlZCBieSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGtmdW5jLlxuKiAgIGBhcmVuYV9mcmVlX3dvcmtlcmA6IFRoaXMgaXMgY2FsbGVkIHZpYSB3b3JrcXVldWUuXG5cblNvLCB0aGUgZm9jdXMgcG9pbnRzIGFyZTogYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBgYXJlbmFfdm1fZmF1bHRgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfZnJlZV93b3JrZXJgLlxuXG5CdXQsIGxldCdzIGRpZyBpbnRvIHRoZSBwYXRjaCdzIGNvcmUgbG9naWMgYSBiaXQgbW9yZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCwgd2hpY2ggYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfd29ya2VyYC4gVGhleSBjb250YWluIHRoZSBgbnJfcGFnZXNgIG1hbmlwdWxhdGlvbiBsb2dpYy4gVGhlc2Ugc2VlbSBpbXBvcnRhbnQsIGFuZCB0aGV5J3JlIHN0YXRpYywgc28gbGV0J3MgaW5jbHVkZSB0aGVtLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6XG5cbiogICBgYXBwbHlfcmFuZ2Vfc2V0X2NiYFxuKiAgIGBhcHBseV9yYW5nZV9jbGVhcl9jYmBcbiogICBgYXJlbmFfbWFwX21lbV91c2FnZWBcbiogICBgYXJlbmFfYWxsb2NfcGFnZXNgXG4qICAgYGFyZW5hX2ZyZWVfcGFnZXNgXG4qICAgYGFyZW5hX3ZtX2ZhdWx0YFxuXG5BbmQsIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50IGlzOiBgQlBGX1NZU0NBTExgLlxuXG4qKkNvbmNsdXNpb246KiogVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgQlBGIG1lbW9yeSB0cmFja2luZywgZXhwb3NpbmcgYG5yX3BhZ2VzYCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBhbmQgdXBkYXRlcyBjb3JlIEJQRiBmdW5jdGlvbnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgQlBGIG1hcCBvcGVyYXRpb25zIGFuZCBrZnVuY3MuIFRoYXQgbWFrZXMgaXQgd29ydGggZnV6emluZyB0byBleGFtaW5lIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY4NiwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDE1OjM5OjAyLjAyMTEyNTkyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTI0MjI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcHBseV9yYW5nZV9zZXRfY2JcIixcbiAgICBcImFwcGx5X3JhbmdlX2NsZWFyX2NiXCIsXG4gICAgXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gICAgXCJhcmVuYV9hbGxvY19wYWdlc1wiLFxuICAgIFwiYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYXJlbmFfdm1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApIGFuZCByZXBvcnQgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgdXBkYXRlcyB0aGUgcGFnZSByYW5nZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGlzIGNvdW50ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBtZW1vcnkgdHJhY2tpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBCUEYgbWFwIG9wZXJhdGlvbnMgYW5kIGtmdW5jcywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowsphdc[1] Phase: Succeeded StartedAt: 2026-07-17 15:40:30 +0000 UTC FinishedAt: 2026-07-17 15:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-17 15:40:30 +0000 UTC FinishedAt: 2026-07-17 15:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2] Phase: Succeeded StartedAt: 2026-07-17 15:40:30 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-17 15:40:31 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-17 15:40:31 +0000 UTC FinishedAt: 2026-07-17 15:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-17 15:40:31 +0000 UTC FinishedAt: 2026-07-17 15:41:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsphdc/series-workflowsphdc-convert-artifact-1652003139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-17 15:41:12 +0000 UTC FinishedAt: 2026-07-17 16:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-17 15:41:12 +0000 UTC FinishedAt: 2026-07-17 16:16:37 +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:*82c98846-ac5e-40da-bb08-d919dc11836a,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-workflowsphdc/series-workflowsphdc-convert-artifact-1652003139/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": "decb0ec5-944b-4472-a64d-997e4834b1eb", "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-workflowsphdc/series-workflowsphdc-build-action-2412448689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-17 15:41:12 +0000 UTC FinishedAt: 2026-07-17 16:16:15 +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:*82c98846-ac5e-40da-bb08-d919dc11836a,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-workflowsphdc/series-workflowsphdc-convert-artifact-1652003139/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": "decb0ec5-944b-4472-a64d-997e4834b1eb", "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-workflowsphdc/series-workflowsphdc-build-action-2412448689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-17 16:16:37 +0000 UTC FinishedAt: 2026-07-17 16:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-17 16:16:37 +0000 UTC FinishedAt: 2026-07-17 16:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-17 16:16:37 +0000 UTC FinishedAt: 2026-07-17 16:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-17 16:16:37 +0000 UTC FinishedAt: 2026-07-17 16:16:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsphdc/series-workflowsphdc-convert-artifact-619607034/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-17 16:16:47 +0000 UTC FinishedAt: 2026-07-17 16:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-17 16:16:47 +0000 UTC FinishedAt: 2026-07-17 16:18:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*decb0ec5-944b-4472-a64d-997e4834b1eb,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-workflowsphdc/series-workflowsphdc-build-action-2412448689/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-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-17 16:19:06 +0000 UTC FinishedAt: 2026-07-17 16:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-17 16:19:06 +0000 UTC FinishedAt: 2026-07-17 16:19:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-17 16:19:06 +0000 UTC FinishedAt: 2026-07-17 16:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-17 16:19:06 +0000 UTC FinishedAt: 2026-07-17 16:54:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*82c98846-ac5e-40da-bb08-d919dc11836a,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-workflowsphdc/series-workflowsphdc-convert-artifact-619607034/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": "f29d1cd4-9e80-4979-a8fe-acaed3f90619", "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-workflowsphdc/series-workflowsphdc-build-action-3880325982/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-17 16:19:06 +0000 UTC FinishedAt: 2026-07-17 16:54:41 +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:*82c98846-ac5e-40da-bb08-d919dc11836a,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-workflowsphdc/series-workflowsphdc-convert-artifact-619607034/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": "f29d1cd4-9e80-4979-a8fe-acaed3f90619", "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-workflowsphdc/series-workflowsphdc-build-action-3880325982/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-17 16:54:51 +0000 UTC FinishedAt: 2026-07-17 16:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-17 16:54:51 +0000 UTC FinishedAt: 2026-07-17 16:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-17 16:54:51 +0000 UTC FinishedAt: 2026-07-17 16:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-17 16:54:51 +0000 UTC FinishedAt: 2026-07-17 16:56:50 +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:*f29d1cd4-9e80-4979-a8fe-acaed3f90619,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-workflowsphdc/series-workflowsphdc-build-action-3880325982/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-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +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":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"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:*decb0ec5-944b-4472-a64d-997e4834b1eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f29d1cd4-9e80-4979-a8fe-acaed3f90619,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-workflowsphdc/series-workflowsphdc-build-action-2412448689/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-workflowsphdc/series-workflowsphdc-build-action-3880325982/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 16:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 16:57:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"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-workflowsphdc/series-workflowsphdc-convert-artifact-1613299759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 16:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 16:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-17 16:57:00 +0000 UTC FinishedAt: 2026-07-17 16:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-17 16:57:21 +0000 UTC FinishedAt: 2026-07-17 20:00:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsphdc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d91ea01185656ac3ee63c5f9f6f8bde3c746b3d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"e23f4c5a-79a8-4076-a371-6449d281d191","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-17 16:57:21 +0000 UTC FinishedAt: 2026-07-17 20:00:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*decb0ec5-944b-4472-a64d-997e4834b1eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f29d1cd4-9e80-4979-a8fe-acaed3f90619,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-workflowsphdc/series-workflowsphdc-build-action-2412448689/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-workflowsphdc/series-workflowsphdc-build-action-3880325982/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-workflowsphdc/series-workflowsphdc-convert-artifact-1613299759/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,}