Name: series-workflowj97n2 Phase: Succeeded StartedAt: 2026-07-31 20:20:21 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[0] Phase: Succeeded StartedAt: 2026-07-31 20:20:21 +0000 UTC FinishedAt: 2026-07-31 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 20:20:21 +0000 UTC FinishedAt: 2026-07-31 20:44:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "DEBUG_INFO_BTF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "DEBUG_INFO_BTF", "BPF_SYSCALL" ], "series_id": "8f9b4ff6-2640-42f1-a66f-3d915e35a98a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_xdp_ct_alloc", "bpf_skb_ct_alloc", "bpf_xdp_ct_lookup", "bpf_skb_ct_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xuaW5kZXggZjk4ZDFkNGI0MmMzZC4uYzMzOTVjYjk4YzAwZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xuQEAgLTEyMiw0MiAmIzQzOzEyMiw1NiBAQCBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvdHVwbGUsIHJ0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuJiM0MztcdHUxNiBjdF96b25lX2lkO1xuJiM0MztcdHMzMiBuZXRuc19pZDtcbiYjNDM7XHR1OCBjdF96b25lX2RpciA9IDA7XG4mIzQzO1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbiYjNDM7XHR1OCBsNHByb3RvO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuJiM0MztcdGw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VsNHByb3RvKTtcbiYjNDM7XHRjdF96b25lX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlY3Rfem9uZV9pZCk7XG4gXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsxXSB8fCBvcHRzLVx1MDAzZXJlc2VydmVkWzJdKVxuJiM0MztcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4mIzQzO1x0XHRyZXNlcnZlZFswXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzBdKTtcbiYjNDM7XHRcdHJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0pO1xuJiM0MztcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRbMF0gfHwgcmVzZXJ2ZWRbMV0gfHwgcmVzZXJ2ZWRbMl0pXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2lkKVxuJiM0MztcdFx0aWYgKGN0X3pvbmVfaWQpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4mIzQzO1x0aWYgKHVubGlrZWx5KG5ldG5zX2lkIFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXHUwMDNlbDRwcm90byxcbiYjNDM7XHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sXG4gXHRcdFx0XHQgICAgSVBfQ1RfRElSX09SSUdJTkFMLCBcdTAwMjZvdHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cdTAwM2VsNHByb3RvLFxuJiM0MztcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcbiBcdFx0XHRcdCAgICBJUF9DVF9ESVJfUkVQTFksIFx1MDAyNnJ0dXBsZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFxuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBvcHRzLVx1MDAzZW5ldG5zX2lkKTtcbiYjNDM7XHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgbmV0bnNfaWQpO1xuIFx0XHRpZiAodW5saWtlbHkoIW5ldCkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT05FVCk7XG4gXHR9XG4gXG4gXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPT0gMClcbi1cdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcbi1cdFx0bmZfY3Rfem9uZV9pbml0KFx1MDAyNmN0X3pvbmUsXG4tXHRcdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfaWQsIG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIsIDApO1xuJiM0MztcdFx0aWYgKGN0X3pvbmVfZGlyID09IDApIHtcbiYjNDM7XHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuJiM0MztcdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbkBAIC0xNzEsNyAmIzQzOzE4NSw3IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4gXHRfX25mX2N0X3NldF90aW1lb3V0KGN0LCB0aW1lb3V0ICogSFopO1xuIFxuIG91dDpcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMClcbiYjNDM7XHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKVxuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXG4gXHRyZXR1cm4gY3Q7XG5AQCAtMTg2LDQ2ICYjNDM7MjAwLDYwIEBAIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqX19icGZfbmZfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbiYjNDM7XHR1MTYgY3Rfem9uZV9pZDtcbiYjNDM7XHRzMzIgbmV0bnNfaWQ7XG4mIzQzO1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuJiM0MztcdHU4IHJlc2VydmVkWzNdID0ge307XG4mIzQzO1x0dTggbDRwcm90bztcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIW9wdHMgfHwgIWJwZl90dXBsZSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRpZiAoIShvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWiB8fCBvcHRzX2xlbiA9PSAxMikpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRuZXRuc19pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZW5ldG5zX2lkKTtcbiYjNDM7XHRsNHByb3RvID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbDRwcm90byk7XG4mIzQzO1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbiYjNDM7XHRcdGN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIpO1xuJiM0MztcdFx0cmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFswXSk7XG4mIzQzO1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbiYjNDM7XHRcdHJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMl0pO1xuJiM0MztcdFx0aWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlY3Rfem9uZV9pZClcbiYjNDM7XHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgb3B0cy1cdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgbDRwcm90byAhPSBJUFBST1RPX1VEUCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPVE8pO1xuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuJiM0MztcdGlmICh1bmxpa2VseShuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLVx1MDAzZWw0cHJvdG8sXG4mIzQzO1x0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxuIFx0XHRcdFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXHUwMDI2dHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4mIzQzO1x0aWYgKG5ldG5zX2lkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFuZXQpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ORVQpO1xuIFx0fVxuIFxuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID09IDApXG4tXHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XG4tXHRcdG5mX2N0X3pvbmVfaW5pdChcdTAwMjZjdF96b25lLFxuLVx0XHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2lkLCBvcHRzLVx1MDAzZWN0X3pvbmVfZGlyLCAwKTtcbiYjNDM7XHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4mIzQzO1x0XHRcdGN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcbiYjNDM7XHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2RpciA9IGN0X3pvbmVfZGlyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmZfY3Rfem9uZV9pbml0KFx1MDAyNmN0X3pvbmUsIGN0X3pvbmVfaWQsIGN0X3pvbmVfZGlyLCAwKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7XG4gXHR9XG4gXG4gXHRoYXNoID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgXHUwMDI2Y3Rfem9uZSwgXHUwMDI2dHVwbGUpO1xuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKVxuJiM0MztcdGlmIChuZXRuc19pZCBcdTAwM2U9IDApXG4gXHRcdHB1dF9uZXQobmV0KTtcbiBcdGlmICghaGFzaClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCmluZGV4IGY5OGQxZDRiNDJjM2QuLmMzMzk1Y2I5OGMwMGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCkBAIC0xMjIsNDIgJiM0MzsxMjIsNTYgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSwKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG90dXBsZSwgcnR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lOwogCXN0cnVjdCBuZl9jb25uICpjdDsKJiM0MzsJdTE2IGN0X3pvbmVfaWQ7CiYjNDM7CXMzMiBuZXRuc19pZDsKJiM0MzsJdTggY3Rfem9uZV9kaXIgPSAwOwomIzQzOwl1OCByZXNlcnZlZFszXSA9IHt9OwomIzQzOwl1OCBsNHByb3RvOwogCWludCBlcnI7CiAKIAlpZiAoIShvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWiB8fCBvcHRzX2xlbiA9PSAxMikpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwluZXRuc19pZCA9IFJFQURfT05DRShvcHRzLSZndDtuZXRuc19pZCk7CiYjNDM7CWw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7bDRwcm90byk7CiYjNDM7CWN0X3pvbmVfaWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7Y3Rfem9uZV9pZCk7CiAJaWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7Ci0JCWlmIChvcHRzLSZndDtyZXNlcnZlZFswXSB8fCBvcHRzLSZndDtyZXNlcnZlZFsxXSB8fCBvcHRzLSZndDtyZXNlcnZlZFsyXSkKJiM0MzsJCWN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtJmd0O2N0X3pvbmVfZGlyKTsKJiM0MzsJCXJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzBdKTsKJiM0MzsJCXJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzFdKTsKJiM0MzsJCXJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzJdKTsKJiM0MzsJCWlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0gZWxzZSB7Ci0JCWlmIChvcHRzLSZndDtjdF96b25lX2lkKQomIzQzOwkJaWYgKGN0X3pvbmVfaWQpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bmV0bnNfaWQgJmx0OyBCUEZfRl9DVVJSRU5UX05FVE5TKSkKJiM0MzsJaWYgKHVubGlrZWx5KG5ldG5zX2lkICZsdDsgQlBGX0ZfQ1VSUkVOVF9ORVROUykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9PUklHSU5BTCwgJmFtcDtvdHVwbGUpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9SRVBMWSwgJmFtcDtydHVwbGUpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JaWYgKG9wdHMtJmd0O25ldG5zX2lkICZndDs9IDApIHsKLQkJbmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG9wdHMtJmd0O25ldG5zX2lkKTsKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApIHsKJiM0MzsJCW5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7CiAJCWlmICh1bmxpa2VseSghbmV0KSkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9ORVQpOwogCX0KIAogCWlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikgewotCQlpZiAob3B0cy0mZ3Q7Y3Rfem9uZV9kaXIgPT0gMCkKLQkJCW9wdHMtJmd0O2N0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjsKLQkJbmZfY3Rfem9uZV9pbml0KCZhbXA7Y3Rfem9uZSwKLQkJCQlvcHRzLSZndDtjdF96b25lX2lkLCBvcHRzLSZndDtjdF96b25lX2RpciwgMCk7CiYjNDM7CQlpZiAoY3Rfem9uZV9kaXIgPT0gMCkgewomIzQzOwkJCWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjsKJiM0MzsJCQlvcHRzLSZndDtjdF96b25lX2RpciA9IGN0X3pvbmVfZGlyOwomIzQzOwkJfQomIzQzOwkJbmZfY3Rfem9uZV9pbml0KCZhbXA7Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApOwogCX0gZWxzZSB7CiAJCWN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7CiAJfQpAQCAtMTcxLDcgJiM0MzsxODUsNyBAQCBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLAogCV9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7CiAKIG91dDoKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApCiAJCXB1dF9uZXQobmV0KTsKIAogCXJldHVybiBjdDsKQEAgLTE4Niw0NiAmIzQzOzIwMCw2MCBAQCBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKl9fYnBmX25mX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiYjNDM7CXUxNiBjdF96b25lX2lkOwomIzQzOwlzMzIgbmV0bnNfaWQ7CiYjNDM7CXU4IGN0X3pvbmVfZGlyID0gMDsKJiM0MzsJdTggcmVzZXJ2ZWRbM10gPSB7fTsKJiM0MzsJdTggbDRwcm90bzsKIAlpbnQgZXJyOwogCiAJaWYgKCFvcHRzIHx8ICFicGZfdHVwbGUpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCWlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CW5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtJmd0O25ldG5zX2lkKTsKJiM0MzsJbDRwcm90byA9IFJFQURfT05DRShvcHRzLSZndDtsNHByb3RvKTsKJiM0MzsJY3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLSZndDtjdF96b25lX2lkKTsKIAlpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHsKLQkJaWYgKG9wdHMtJmd0O3Jlc2VydmVkWzBdIHx8IG9wdHMtJmd0O3Jlc2VydmVkWzFdIHx8IG9wdHMtJmd0O3Jlc2VydmVkWzJdKQomIzQzOwkJY3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7Y3Rfem9uZV9kaXIpOwomIzQzOwkJcmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMF0pOwomIzQzOwkJcmVzZXJ2ZWRbMV0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMV0pOwomIzQzOwkJcmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMl0pOwomIzQzOwkJaWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfSBlbHNlIHsKLQkJaWYgKG9wdHMtJmd0O2N0X3pvbmVfaWQpCiYjNDM7CQlpZiAoY3Rfem9uZV9pZCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bDRwcm90byAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7IG9wdHMtJmd0O2w0cHJvdG8gIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7IGw0cHJvdG8gIT0gSVBQUk9UT19VRFApKQogCQlyZXR1cm4gRVJSX1BUUigtRVBST1RPKTsKLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bmV0bnNfaWQgJmx0OyBCUEZfRl9DVVJSRU5UX05FVE5TKSkKJiM0MzsJaWYgKHVubGlrZWx5KG5ldG5zX2lkICZsdDsgQlBGX0ZfQ1VSUkVOVF9ORVROUykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9PUklHSU5BTCwgJmFtcDt0dXBsZSk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkgewotCQluZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy0mZ3Q7bmV0bnNfaWQpOwomIzQzOwlpZiAobmV0bnNfaWQgJmd0Oz0gMCkgewomIzQzOwkJbmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTsKIAkJaWYgKHVubGlrZWx5KCFuZXQpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT05FVCk7CiAJfQogCiAJaWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7Ci0JCWlmIChvcHRzLSZndDtjdF96b25lX2RpciA9PSAwKQotCQkJb3B0cy0mZ3Q7Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSOwotCQluZl9jdF96b25lX2luaXQoJmFtcDtjdF96b25lLAotCQkJCW9wdHMtJmd0O2N0X3pvbmVfaWQsIG9wdHMtJmd0O2N0X3pvbmVfZGlyLCAwKTsKJiM0MzsJCWlmIChjdF96b25lX2RpciA9PSAwKSB7CiYjNDM7CQkJY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSOwomIzQzOwkJCW9wdHMtJmd0O2N0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7CiYjNDM7CQl9CiYjNDM7CQluZl9jdF96b25lX2luaXQoJmFtcDtjdF96b25lLCBjdF96b25lX2lkLCBjdF96b25lX2RpciwgMCk7CiAJfSBlbHNlIHsKIAkJY3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDsKIAl9CiAKIAloYXNoID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgJmFtcDtjdF96b25lLCAmYW1wO3R1cGxlKTsKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApCiAJCXB1dF9uZXQobmV0KTsKIAlpZiAoIWhhc2gpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENyaXRpY2FsIE5ldGZpbHRlciBDb25udHJhY2sgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmNgLiBJdCYjMzk7cyBhIHNvbGlkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBwb3RlbnRpYWwgVGltZS1vZi1DaGVjayB0byBUaW1lLW9mLVVzZSAoVE9DVE9VKSB2dWxuZXJhYmlsaXRpZXMuIFRoZXkmIzM5O3JlIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHRoZSBgb3B0c2AgZmllbGRzIGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBTbWFydC4gSXQgcHJldmVudHMgdGhlIEJQRiBwcm9ncmFtIGZyb20gc25lYWtpbmcgaW4gY29uY3VycmVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBgb3B0c2Agc3RydWN0IGFmdGVyIGl0cyBpbml0aWFsIGNoZWNrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdXNlLiBDbGFzc2ljIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24uCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQ/IEl04oCZcyBmdW5jdGlvbmFsbHkgc291bmQuIFdlJiMzOTtyZSBhZGRyZXNzaW5nIGEga25vd24gaXNzdWUgd2l0aGluIHRoZSBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIuIERlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB0byBjb25maXJtIHJlYWNoYWJpbGl0eSBhbmQgY29uZmlybSB0aGUgY2hhbmdlLgoKTm93LCBsZXQgbWUgcGlucG9pbnQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gUmlnaHQsIHRoZXNlIGFyZSBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZCB0byB0aGUgQlBGIHNpZGUuIEkmIzM5O2xsIG5hdmlnYXRlIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGV5IGFyZSBleHBvc2VkLiBHb3R0YSB0cmFjZSBob3cgdGhlIEJQRiBwcm9ncmFtcyBnZXQgYWNjZXNzIHRvIHRoZXNlIGd1eXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgdGhlIHBvdGVudGlhbCB2ZWN0b3IgdGhpcyBmaXhlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9uZl9jdF9hbGxvY19lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTExNz1zdGF0aWMgc3RydWN0IG5mX2Nvbm4gKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTE4Ol9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xMTktXHRcdFx0dTMyIHR1cGxlX2xlbiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19sZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzI5PWJwZl94ZHBfY3RfYWxsb2Moc3RydWN0IHhkcF9tZCAqeGRwX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzM1Olx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KGRldl9uZXQoY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYpLCBicGZfdHVwbGUsIHR1cGxlX19zeixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNi1cdFx0XHRcdCAgICAgICBvcHRzLCBvcHRzX19zeiwgMTApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM4NT1icGZfc2tiX2N0X2FsbG9jKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTM5Mi1cdG5ldCA9IHNrYi1cdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM5MzpcdG5mY3QgPSBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShuZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeiwgMTApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzk0LVx0cmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKilicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29ya2luZy9lQlBGLCBhbmQgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKkRpdmluZyBpbnRvIENvbm5lY3Rpb24gVHJhY2tpbmcgd2l0aCBYRFAgYW5kIFNLQioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSBzZWUgdGhhdCBgYnBmX3hkcF9jdF9hbGxvY2AgYW5kIGBicGZfc2tiX2N0X2FsbG9jYCBhcmUgYm90aCBjYWxsaW5nIHRoYXQgaW50ZXJuYWwgZnVuY3Rpb24sIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyBhIHNoYXJlZCBhbGxvY2F0aW9uIHBhdGh3YXkgZm9yIGNvbm50cmFjayBlbnRyaWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSYjMzk7cmUgaW4gYW4gWERQIGNvbnRleHQgb3IgYW4gU0tCIGNvbnRleHQuIFRoYXQgbGlrZWx5IG1lYW5zIHNvbWUgY29tbW9uIGNvcmUgbG9naWMuCgpOb3csIHdoZXJlIGFyZSB3ZSAqbG9va2luZyB1cCogdGhlc2UgYWxsb2NhdGVkIGVudHJpZXM/IE15IG5leHQgbW92ZSBpcyB0byBjaGVjayBvdXQgYF9fYnBmX25mX2N0X2xvb2t1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgYWN0dWFsbHkgcmV0cmlldmluZyB0aG9zZSBjb25udHJhY2sgZW50cmllcyBhZnRlciB0aGV5JiMzOTtyZSBhbGxvY2F0ZWQuIFRoZSBsb29rdXAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJldHJpZXZhbCBvY2N1cnMsIHNvIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpZmVjeWNsZS4gR290dGEgc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgbG9va3VwIGNvcnJlbGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9uZl9jdF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTg9X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xOTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxOTQ6c3RhdGljIHN0cnVjdCBuZl9jb25uICpfX2JwZl9uZl9jdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM1Nz1icGZfeGRwX2N0X2xvb2t1cChzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zNjQtXHRjYWxsZXJfbmV0ID0gZGV2X25ldChjdHgtXHUwMDNlcnhxLVx1MDAzZWRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozNjU6XHRuZmN0ID0gX19icGZfbmZfY3RfbG9va3VwKGNhbGxlcl9uZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zNjYtXHRyZXR1cm4gYnBmX2N0X29wdHNfcmVzdWx0KG9wdHMsIG9wdHNfX3N6LCBuZmN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDIxLVx0Y2FsbGVyX25ldCA9IHNrYi1cdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQyMjpcdG5mY3QgPSBfX2JwZl9uZl9jdF9sb29rdXAoY2FsbGVyX25ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQyMy1cdHJldHVybiBicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4KCioqQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludCBBbmFseXNpcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmb3VyIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgdGhlIG1haW4gaW50ZXJhY3Rpb24gcG9pbnRzIGZvciB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gc2VlaW5nOiBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBidWlsZGluZyBibG9ja3MsIGNvdmVyaW5nIGFsbG9jYXRpb24gYW5kIGxvb2t1cCwgYW5kIGRpZmZlcmVudGlhdGVkIGJ5IFhEUCBhbmQgU0tCIGNvbnRleHQuIFRoYXQgc2VlbXMgbG9naWNhbC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0cnVjdHVyZSBpcyBpbW1lZGlhdGVseSBjbGVhci4KCk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHV0aWxpemUgdGhpcyBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmbGFncyBhcmUgbmVlZGVkLCBzbyB0aGlzIGFsbCBjb21waWxlcyBjb3JyZWN0bHkuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgYW5kIHByb3Blcmx5IGludGVncmF0ZWQgd2l0aGluIHRoZSB0YXJnZXQga2VybmVsIGVudmlyb25tZW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE4PWlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Nvbm50cmFja19icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgbmZfY29ubnRyYWNrX2tmdW5jX3NldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNTU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTU5OnZvaWQgY2xlYW51cF9uZl9jb25udHJhY2tfYnBmKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NjAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0zNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6Mzc6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0zOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcdTAwM2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjQ0OT12b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX3N0YXJ0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjQ1MC17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjQ1MTpcdGNsZWFudXBfbmZfY29ubnRyYWNrX2JwZigpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI0NTItXHRjb25udHJhY2tfZ2Nfd29yay5leGl0aW5nID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjYyNT1pbnQgbmZfY29ubnRyYWNrX2luaXRfc3RhcnQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjY4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNjg3Olx0cmV0ID0gcmVnaXN0ZXJfbmZfY29ubnRyYWNrX2JwZigpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2ODgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNzM4PWludCBuZl9jb25udHJhY2tfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI3Njc6LyogY3RuZXRsaW5rIGNvZGUgc2hhcmVkIGJ5IGJvdGggY3RuZXRsaW5rIGFuZCBuZl9jb25udHJhY2tfYnBmICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjc2OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjExOiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTgtXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQ29ublRyYWNrIEJQRiBDb2RlKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25udHJhY2sgQlBGIGludGVncmF0aW9uLCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGxvb2sgZm9yIGFueSBvdGhlciBoaWRkZW4gb25lcy4mIzM0OwoKYENPTkZJR19ORl9DT05OVFJBQ0tgLCBJIHJlY2FsbCwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Ag4oCTIHByZXR0eSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbmV0ZmlsdGVyIHN0dWZmLiBBbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAsIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgbmVzdGxlZCBhd2F5IGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9idmlvdXMgZW5vdWdoLCBnaXZlbiB0aGF0IEJURiBzdHVmZi4KCkFoLCBhbmQgSSBhbG1vc3QgZm9yZ290LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgc28gYEJQRl9TWVNDQUxMYCBpcyAqZGVmaW5pdGVseSogZ29pbmcgdG8gYmUgYSBoYXJkIHJlcXVpcmVtZW50LiBObyBCUEYgd2l0aG91dCB0aGUgc3lzY2FsbC4gR29vZC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlLWNoZWNrLCBsZXQmIzM5O3MgcG9wIG9wZW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jYCBpdHNlbGYuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgbWlnaHQgYmUgYXQgcGxheSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gSXQmIzM5O3MgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ29ubmVjdGlvbiBUcmFja2luZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgd2l0aGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSBmdW5jdGlvbnMsIG9mIGNvdXJzZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQg4oCTIHZpYSBCUEYga2Z1bmNzLCBzcGVjaWZpY2FsbHkgYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0kgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2Uga2Z1bmNzLCBhbmQgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zLCBhcmUgcHJvcGVybHkgYWNjb3VudGVkIGZvciBpbiBgRm9jdXNTeW1ib2xzYCBzbyB0aGUgaW5zdHJ1bWVudGF0aW9uIGlzIGNvcnJlY3QmIzM0Oy4KCldhaXQsIGFyZW4mIzM5O3QgdGhvc2UgYF9fYnBmX25mX2N0XypgIGZ1bmN0aW9ucyBzdGF0aWM/IEkgaGF2ZSB0byBiZSBzdXJlIHRoZXkmIzM5O3JlIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbWFwLiBCdXQgdGhlbiBhZ2FpbiwgdGhleSBfYXJlXyBjYWxsZWQgYnkgdGhlIGtmdW5jcywgc28gdGhleSBzaG91bGQgYmUgcmVhY2hhYmxlLiAqV2FpdCBhIHNlY29uZCwgbWF5YmUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGFjdHVhbGx5IHN0YXRpYyEqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX25mX2N0X2FsbG9jX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MTE3PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxMTg6X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTExOS1cdFx0XHR1MzIgdHVwbGVfbGVuLCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0zMjk9YnBmX3hkcF9jdF9hbGxvYyhzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozMzU6XHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkoZGV2X25ldChjdHgtXHUwMDNlcnhxLVx1MDAzZWRldiksIGJwZl90dXBsZSwgdHVwbGVfX3N6LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM2LVx0XHRcdFx0ICAgICAgIG9wdHMsIG9wdHNfX3N6LCAxMCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9Mzg1PWJwZl9za2JfY3RfYWxsb2Moc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzkyLVx0bmV0ID0gc2tiLVx1MDAzZWRldiA/IGRldl9uZXQoc2tiLVx1MDAzZWRldikgOiBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzkzOlx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KG5ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6LCAxMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTQtXHRyZXR1cm4gKHN0cnVjdCBuZl9jb25uX19faW5pdCAqKWJwZl9jdF9vcHRzX3Jlc3VsdChvcHRzLCBvcHRzX19zeiwgbmZjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludHMgaW4gQlBGKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggQlBGLiBJIHNlZSB0aGF0IGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQgSSBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbmFycm93cyBkb3duIG15IGZvY3VzLgoKU28sIHRoZSBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgZm9yIGFsbG9jYXRpb24gYW5kIGxvb2t1cCBhcmUgY2xlYXJseSBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IGF0IHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlLCBhbmQgd2hldGhlciB0aGVzZSBhcmUgZXhwb3J0ZWQgZGlyZWN0bHkgb3IgYXMga2Z1bmNzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIHRoZSBleHBvcnQgdGFibGUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBjb25maXJtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBjYWxsYWJsZSBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkIGZyb20sIHdoYXQgbGltaXRhdGlvbnMgbWlnaHQgdGhlcmUgYmUgb24gdGhlaXIgdXNhZ2UsIGFuZCB3aGV0aGVyIHRoZXkgbWlnaHQgYmUgc3ViamVjdCB0byBjaGFuZ2Ugb3ZlciB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfeGRwX2N0X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzExPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMxMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMxMzovKiBicGZfeGRwX2N0X2FsbG9jIC0gQWxsb2NhdGUgYSBuZXcgQ1QgZW50cnlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMxNC0gKlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOD1fX2JwZl9rZnVuYyBzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzI5OmJwZl94ZHBfY3RfYWxsb2Moc3RydWN0IHhkcF9tZCAqeGRwX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMzAtXHRcdCB1MzIgdHVwbGVfX3N6LCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDMwLSAqIEBuZmN0XHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubl9fX2luaXQgb2JqZWN0LCBvYnRhaW5lZFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NDMxOiAqXHRcdCAgIHVzaW5nIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQzMi0gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00NTk9X19icGZfa2Z1bmMgdm9pZCBicGZfY3RfcmVsZWFzZShzdHJ1Y3QgbmZfY29ubiAqbmZjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00NzAtICogQG5mY3RcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQ3MTogKiAgICAgICAgICAgICAgICAgYnBmX3hkcF9jdF9hbGxvYyBvciBicGZfc2tiX2N0X2FsbG9jLlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDcyLSAqIEB0aW1lb3V0ICAgICAgLSBUaW1lb3V0IGluIG1zZWNzLlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTQ4OT1fX2JwZl9rZnVuYyBpbnQgYnBmX2N0X2NoYW5nZV90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpuZmN0LCB1MzIgdGltZW91dClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDAtICogQG5mY3RcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjUwMTogKlx0XHQgICBicGZfeGRwX2N0X2FsbG9jIG9yIGJwZl9za2JfY3RfYWxsb2MuXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDItICogQHN0YXR1cyAgICAgICAtIE5ldyBzdGF0dXMgdmFsdWUuXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NTI2PUJURl9LRlVOQ1NfU1RBUlQobmZfY3Rfa2Z1bmNfc2V0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTI3OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfeGRwX2N0X2FsbG9jLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfbG9va3VwLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgS2VybmVsIEZ1bmN0aW9uYWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIGtlcm5lbCBmdW5jdGlvbnMsIG9yIGtmdW5jcyBhcyB3ZSYjMzk7cmUgY2FsbGluZyB0aGVtLiBUaGVyZWZvcmUsIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IG5lZWRzIHRvIGVuY29tcGFzczogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLgoKTW92aW5nIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbXVzdCBjb250YWluOiBgTkZfQ09OTlRSQUNLYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjcml0aWNhbCBjb25maWdzLiBgREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5LCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2Z1bmNzLiBBbmQgYE5GX0NPTk5UUkFDS2AgaXMgY2xlYXJseSBlc3NlbnRpYWwgZm9yIHRoZSBmaWxlIHRvIGV2ZW4gY29tcGlsZSBwcm9wZXJseS4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xOD1pZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLG0pXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5Om5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIwLWVsc2UgaWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSx5KVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBCVEYgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgTkZfQ09OTlRSQUNLYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgKGJ1aWx0LWluKSwgdGhlbiBgREVCVUdfSU5GT19CVEZgIGlzIHRoZSBjb3JyZWN0IG9wdGlvbi4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgYSBsb2FkYWJsZSBtb2R1bGUsIHRoZW4gYERFQlVHX0lORk9fQlRGX01PRFVMRVNgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gSG93ZXZlciwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBidWlsZHMgZXZlcnl0aGluZyBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIG15IGFzc3VtcHRpb24gaXMgdGhhdCBgREVCVUdfSU5GT19CVEZgIGlzIHRoZSByaWdodCBjaG9pY2UuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIFN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgbW9kdWxlcyBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBhIGJ1aWx0LWluIGtlcm5lbCBjb25maWcuIFRodXMsIGBORl9DT05OVFJBQ0tgIGFuZCBgREVCVUdfSU5GT19CVEZgIHNob3VsZCBiZSBlbm91Z2gsIGFuZCBJIGRvbiYjMzk7dCBuZWVkIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBCUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBERUJVR19JTkZPX0JURmAsIG9yIGlmIGl0JiMzOTtzIGFscmVhZHkgaW1wbGljaXRseSBlbmFibGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVzZWFyY2ggdGhhdCBzcGVjaWZpYyBkZXBlbmRlbmN5IGFuZCBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBvZiBERUJVR19JTkZPX0JURioqCgpSaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYSBmZXcgY2F0ZWdvcmllcyB3ZSBtaWdodCBmaW5kLiBJJiMzOTtsbCBsaWtlbHkgc2VlIGRlcGVuZGVuY2llcyBvbiB0aGUgdG9vbGNoYWluIOKAkyB0aGluZ3MgbGlrZSB0aGUgY29tcGlsZXIgKEdDQywgQ2xhbmcpIGFuZCBhc3NlbWJsZXIsIGxpa2VseSB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgQlRGIGdlbmVyYXRpb24gYW5kIGhhbmRsaW5nLiBUaGVuLCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBrZXJuZWwgaXRzZWxmLCBzcGVjaWZpY2FsbHkgb24ga2VybmVsIGluZnJhc3RydWN0dXJlIHJlbGF0ZWQgdG8gQlRGIGhhbmRsaW5nLCBzdWNoIGFzIHRoZSBCVEYgbG9hZGVyIGFuZCB2ZXJpZmllci4gVGhlcmUgY291bGQgZXZlbiBiZSBkZXBlbmRlbmNpZXMgb24gZGVidWcgaW5mb3JtYXRpb24gZm9ybWF0cyAoRFdBUkYsIGV0Yy4pIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyBsZXZlcmFnaW5nIG9yIHJlbHlpbmcgdXBvbiwgcG90ZW50aWFsbHkgdG8gbGluayBiYWNrIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCB0aGUgQlRGIGlzIHJlZmVyZW5jaW5nLiBJIGFsc28gYW50aWNpcGF0ZSBkZXBlbmRlbmNpZXMgb24gYW55IGJ1aWxkIHN5c3RlbSBjb21wb25lbnRzIG5lY2Vzc2FyeSB0byBpbnRlZ3JhdGUgQlRGIGdlbmVyYXRpb24gaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHNvIHRvb2xzIGxpa2UgYHBhaG9sZWAgb3Igb3RoZXIgdXRpbGl0aWVzIHRoYXQgd29yayB3aXRoIERXQVJGLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBhc3BlY3RzIG9mIEJURiBnZW5lcmF0aW9uIGFyZSBjb25kaXRpb25hbCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0b28uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhY3R1YWxseSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTg6XHRjb25maWcgREVCVUdfSU5GT19CVEZcbiAzOTk6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbiA0MDA6XHRcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXHUwMDI2XHUwMDI2ICFERUJVR19JTkZPX1JFRFVDRURcbiA0MDE6XHRcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbiA0MDI6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA0MDM6XHRcdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbiA0MDQ6XHRcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xuIDQwNTpcdFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxuIDQwNjpcdFx0aGVscFxuIDQwNzpcdFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxuIDQwODpcdFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcbiA0MDk6XHRcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cbiA0MTA6XHRcbiA0MTE6XHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXG4gNDEyOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyM1xuIDQxMzpcdFx0ZGVwZW5kcyBvbiBDQ19JU19DTEFOR1xuIDQxNDpcdFx0aGVscFxuIDQxNTpcdFx0ICBEZWNpZGUgd2hldGhlciBwYWhvbGUgZW1pdHMgYnRmX3RhZyBhdHRyaWJ1dGVzIChidGZfdHlwZV90YWcgYW5kXG4gNDE2Olx0XHQgIGJ0Zl9kZWNsX3RhZykgb3Igbm90LiBDdXJyZW50bHkgb25seSBjbGFuZyBjb21waWxlciBpbXBsZW1lbnRzXG4gNDE3Olx0XHQgIHRoZXNlIGF0dHJpYnV0ZXMsIHNvIG1ha2UgdGhlIGNvbmZpZyBkZXBlbmQgb24gQ0NfSVNfQ0xBTkcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTc2CgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBOZXRmaWx0ZXIgQ29ubnRyYWNrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRlc3RpbmcgYW5kIGFuYWx5c2lzLiBGaXJzdCwgYERFQlVHX0lORk9fQlRGYCBpcyBvYnZpb3VzbHkgbGlua2VkIHRvIGBCUEZfU1lTQ0FMTGAsIHNvIEkmIzM5O2xsIGJlIGluY2x1ZGluZyBib3RoIG9mIHRob3NlIGFzIGRlcGVuZGVuY2llcy4gT24gdG9wIG9mIHRoYXQsIGBORl9DT05OVFJBQ0tgIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhvc2UgdGhyZWUgY29uZmlncy4KCk5vdywgbGV0JiMzOTtzIG1hcCB0aGUgY2hhbmdlcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSwgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIEJQRiBrZnVuY3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gQmVjYXVzZSB0aGVzZSBhcmUga2Z1bmNzLCB0aGV5JiMzOTtyZSBkZWZpbml0aXZlbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoaWNoIG1ha2VzIHRoZW0gaWRlYWwgZm9yIHRlc3RpbmcuCgpUaGUgcGF0Y2gmIzM5O3MgY3J1eCBpcyB0aGUgVE9DVE9VIGJ1ZyBmaXggdXNpbmcgYFJFQURfT05DRWAgb24gdGhlIGBvcHRzYCBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSSYjMzk7bGwgZmxhZyB0aGF0IGFzIGEgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyB0YXJnZXQuCgpMZXQgbWUgZG91YmxlLWNoZWNrIG15IGBGb2N1c1N5bWJvbHNgLiBUaGV5IHNob3VsZCBiZTogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhhdCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGlubGluZWQgYnkgdGhlIGtmdW5jcywgc28gZm9jdXNpbmcgb24gdGhlIGtmdW5jcyBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgY292ZXJhZ2UuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZnVuY3MgYXJlIGV4cG9ydGVkLiBgYnBmX3hkcF9jdF9hbGxvY2AgaXMgZXhwb3J0ZWQsIGxvY2F0ZWQgd2l0aGluIGBCVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClgLgoKU28sIGhlcmUmIzM5O3MgdGhlIHBsYW4uIEkmIzM5O2xsIHNldDoKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LCAmIzM0O2JwZl9za2JfY3RfYWxsb2MmIzM0OywgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LCAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LCAmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDsKClRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfY3RfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVE9DVE9VIGJ1ZyBpbiBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzIGJ5IHVzaW5nIFJFQURfT05DRS4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfY3RfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVE9DVE9VIGJ1ZyBpbiBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzIGJ5IHVzaW5nIFJFQURfT05DRS4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjAzLjI4NTAwOTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDMzNTQ2Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3NrYl9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3hkcF9jdF9sb29rdXBcIixcbiAgICBcImJwZl9za2JfY3RfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MjowMy4yODUwMTQ5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwOTA3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDQyYTE0Y2ZiNDE1OWMyZjJiYjYyNGU4MWE5Njk3ZjhkOGFkNWUzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMDo0MjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXFxuaW5kZXggZjk4ZDFkNGI0MmMzZC4uYzMzOTVjYjk4YzAwZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXFxuQEAgLTEyMiw0MiArMTIyLDU2IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XFxuK1xcdHUxNiBjdF96b25lX2lkO1xcbitcXHRzMzIgbmV0bnNfaWQ7XFxuK1xcdHU4IGN0X3pvbmVfZGlyID0gMDtcXG4rXFx0dTggcmVzZXJ2ZWRbM10gPSB7fTtcXG4rXFx0dTggbDRwcm90bztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRuZXRuc19pZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VuZXRuc19pZCk7XFxuK1xcdGw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlbDRwcm90byk7XFxuK1xcdGN0X3pvbmVfaWQgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlY3Rfem9uZV9pZCk7XFxuIFxcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xcbi1cXHRcXHRpZiAob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgb3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMl0pXFxuK1xcdFxcdGN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyKTtcXG4rXFx0XFx0cmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMF0pO1xcbitcXHRcXHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZFsxXSk7XFxuK1xcdFxcdHJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkWzJdKTtcXG4rXFx0XFx0aWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWN0X3pvbmVfaWQpXFxuK1xcdFxcdGlmIChjdF96b25lX2lkKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KG9wdHMtXFx1MDAzZW5ldG5zX2lkIFxcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXFxuK1xcdGlmICh1bmxpa2VseShuZXRuc19pZCBcXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuLVxcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cXHUwMDNlbDRwcm90byxcXG4rXFx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxcbiBcXHRcXHRcXHRcXHQgICAgSVBfQ1RfRElSX09SSUdJTkFMLCBcXHUwMDI2b3R1cGxlKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXFx1MDAzZWw0cHJvdG8sXFxuK1xcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcXG4gXFx0XFx0XFx0XFx0ICAgIElQX0NUX0RJUl9SRVBMWSwgXFx1MDAyNnJ0dXBsZSk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXG4tXFx0aWYgKG9wdHMtXFx1MDAzZW5ldG5zX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG9wdHMtXFx1MDAzZW5ldG5zX2lkKTtcXG4rXFx0aWYgKG5ldG5zX2lkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFuZXQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XFxuLVxcdFxcdGlmIChvcHRzLVxcdTAwM2VjdF96b25lX2RpciA9PSAwKVxcbi1cXHRcXHRcXHRvcHRzLVxcdTAwM2VjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XFxuLVxcdFxcdG5mX2N0X3pvbmVfaW5pdChcXHUwMDI2Y3Rfem9uZSxcXG4tXFx0XFx0XFx0XFx0b3B0cy1cXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIsIDApO1xcbitcXHRcXHRpZiAoY3Rfem9uZV9kaXIgPT0gMCkge1xcbitcXHRcXHRcXHRjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XFxuK1xcdFxcdFxcdG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLCBjdF96b25lX2lkLCBjdF96b25lX2RpciwgMCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7XFxuIFxcdH1cXG5AQCAtMTcxLDcgKzE4NSw3IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuIFxcdF9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChvcHRzLVxcdTAwM2VuZXRuc19pZCBcXHUwMDNlPSAwKVxcbitcXHRpZiAobmV0bnNfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0cHV0X25ldChuZXQpO1xcbiBcXG4gXFx0cmV0dXJuIGN0O1xcbkBAIC0xODYsNDYgKzIwMCw2MCBAQCBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKl9fYnBmX25mX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XFxuK1xcdHUxNiBjdF96b25lX2lkO1xcbitcXHRzMzIgbmV0bnNfaWQ7XFxuK1xcdHU4IGN0X3pvbmVfZGlyID0gMDtcXG4rXFx0dTggcmVzZXJ2ZWRbM10gPSB7fTtcXG4rXFx0dTggbDRwcm90bztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghb3B0cyB8fCAhYnBmX3R1cGxlKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZW5ldG5zX2lkKTtcXG4rXFx0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VsNHByb3RvKTtcXG4rXFx0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VjdF96b25lX2lkKTtcXG4gXFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XFxuLVxcdFxcdGlmIChvcHRzLVxcdTAwM2VyZXNlcnZlZFswXSB8fCBvcHRzLVxcdTAwM2VyZXNlcnZlZFsxXSB8fCBvcHRzLVxcdTAwM2VyZXNlcnZlZFsyXSlcXG4rXFx0XFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIpO1xcbitcXHRcXHRyZXNlcnZlZFswXSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZFswXSk7XFxuK1xcdFxcdHJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkWzFdKTtcXG4rXFx0XFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMl0pO1xcbitcXHRcXHRpZiAocmVzZXJ2ZWRbMF0gfHwgcmVzZXJ2ZWRbMV0gfHwgcmVzZXJ2ZWRbMl0pXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAob3B0cy1cXHUwMDNlY3Rfem9uZV9pZClcXG4rXFx0XFx0aWYgKGN0X3pvbmVfaWQpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9XFxuLVxcdGlmICh1bmxpa2VseShvcHRzLVxcdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IG9wdHMtXFx1MDAzZWw0cHJvdG8gIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBsNHByb3RvICE9IElQUFJPVE9fVURQKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9UTyk7XFxuLVxcdGlmICh1bmxpa2VseShvcHRzLVxcdTAwM2VuZXRuc19pZCBcXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxcbitcXHRpZiAodW5saWtlbHkobmV0bnNfaWQgXFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbi1cXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXFx1MDAzZWw0cHJvdG8sXFxuK1xcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcXG4gXFx0XFx0XFx0XFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXFx1MDAyNnR1cGxlKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRpZiAob3B0cy1cXHUwMDNlbmV0bnNfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cXHUwMDNlbmV0bnNfaWQpO1xcbitcXHRpZiAobmV0bnNfaWQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgbmV0bnNfaWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIW5ldCkpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ORVQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcXG4tXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID09IDApXFxuLVxcdFxcdFxcdG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcXG4tXFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLFxcbi1cXHRcXHRcXHRcXHRvcHRzLVxcdTAwM2VjdF96b25lX2lkLCBvcHRzLVxcdTAwM2VjdF96b25lX2RpciwgMCk7XFxuK1xcdFxcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XFxuK1xcdFxcdFxcdGN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcXG4rXFx0XFx0XFx0b3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRuZl9jdF96b25lX2luaXQoXFx1MDAyNmN0X3pvbmUsIGN0X3pvbmVfaWQsIGN0X3pvbmVfZGlyLCAwKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcXG4gXFx0fVxcbiBcXG4gXFx0aGFzaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIFxcdTAwMjZjdF96b25lLCBcXHUwMDI2dHVwbGUpO1xcbi1cXHRpZiAob3B0cy1cXHUwMDNlbmV0bnNfaWQgXFx1MDAzZT0gMClcXG4rXFx0aWYgKG5ldG5zX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0aWYgKCFoYXNoKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDMuNjM2NzIwMzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MDgxODI2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3NrYl9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3hkcF9jdF9sb29rdXBcIixcbiAgICBcImJwZl9za2JfY3RfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG5pbmRleCBmOThkMWQ0YjQyYzNkLi5jMzM5NWNiOThjMDBlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG5AQCAtMTIyLDQyICsxMjIsNTYgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbitcdHUxNiBjdF96b25lX2lkO1xuK1x0czMyIG5ldG5zX2lkO1xuK1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuK1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbitcdHU4IGw0cHJvdG87XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuK1x0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVx1MDAzZWw0cHJvdG8pO1xuK1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbitcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4rXHRcdHJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0pO1xuK1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbitcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4rXHRcdGlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfaWQpXG4rXHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuK1x0aWYgKHVubGlrZWx5KG5ldG5zX2lkIFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXHUwMDNlbDRwcm90byxcbitcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcbiBcdFx0XHRcdCAgICBJUF9DVF9ESVJfT1JJR0lOQUwsIFx1MDAyNm90dXBsZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFxuLVx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLVx1MDAzZWw0cHJvdG8sXG4rXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sXG4gXHRcdFx0XHQgICAgSVBfQ1RfRElSX1JFUExZLCBcdTAwMjZydHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4rXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghbmV0KSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcbiBcdH1cbiBcbiBcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2RpciA9PSAwKVxuLVx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuLVx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSxcbi1cdFx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cdTAwM2VjdF96b25lX2RpciwgMCk7XG4rXHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4rXHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuK1x0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcbitcdFx0fVxuK1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbkBAIC0xNzEsNyArMTg1LDcgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbiBcdF9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7XG4gXG4gb3V0OlxuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKVxuK1x0aWYgKG5ldG5zX2lkIFx1MDAzZT0gMClcbiBcdFx0cHV0X25ldChuZXQpO1xuIFxuIFx0cmV0dXJuIGN0O1xuQEAgLTE4Niw0NiArMjAwLDYwIEBAIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqX19icGZfbmZfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbitcdHUxNiBjdF96b25lX2lkO1xuK1x0czMyIG5ldG5zX2lkO1xuK1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuK1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbitcdHU4IGw0cHJvdG87XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFvcHRzIHx8ICFicGZfdHVwbGUpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuK1x0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVx1MDAzZWw0cHJvdG8pO1xuK1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbitcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4rXHRcdHJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0pO1xuK1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbitcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4rXHRcdGlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfaWQpXG4rXHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgb3B0cy1cdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbitcdGlmICh1bmxpa2VseShsNHByb3RvICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9UTyk7XG4tXHRpZiAodW5saWtlbHkob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4rXHRpZiAodW5saWtlbHkobmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cdTAwM2VsNHByb3RvLFxuK1x0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxuIFx0XHRcdFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXHUwMDI2dHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4rXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghbmV0KSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcbiBcdH1cbiBcbiBcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2RpciA9PSAwKVxuLVx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuLVx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSxcbi1cdFx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cdTAwM2VjdF96b25lX2RpciwgMCk7XG4rXHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4rXHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuK1x0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcbitcdFx0fVxuK1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbiBcbiBcdGhhc2ggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCBcdTAwMjZjdF96b25lLCBcdTAwMjZ0dXBsZSk7XG4tXHRpZiAob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2U9IDApXG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKVxuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhhc2gpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDMuNjM2NzIyMDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNDQ4NzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBOZXRmaWx0ZXIgQ29ubnRyYWNrIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AuIEl0J3MgYSBzb2xpZCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgcG90ZW50aWFsIFRpbWUtb2YtQ2hlY2sgdG8gVGltZS1vZi1Vc2UgKFRPQ1RPVSkgdnVsbmVyYWJpbGl0aWVzLiBUaGV5J3JlIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHRoZSBgb3B0c2AgZmllbGRzIGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBTbWFydC4gSXQgcHJldmVudHMgdGhlIEJQRiBwcm9ncmFtIGZyb20gc25lYWtpbmcgaW4gY29uY3VycmVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBgb3B0c2Agc3RydWN0IGFmdGVyIGl0cyBpbml0aWFsIGNoZWNrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdXNlLiBDbGFzc2ljIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24uXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudD8gSXTigJlzIGZ1bmN0aW9uYWxseSBzb3VuZC4gV2UncmUgYWRkcmVzc2luZyBhIGtub3duIGlzc3VlIHdpdGhpbiB0aGUgQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyLiBEZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGNvbmZpcm0gdGhlIGNoYW5nZS5cblxuTm93LCBsZXQgbWUgcGlucG9pbnQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gUmlnaHQsIHRoZXNlIGFyZSBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZCB0byB0aGUgQlBGIHNpZGUuIEknbGwgbmF2aWdhdGUgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jYCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQuIEdvdHRhIHRyYWNlIGhvdyB0aGUgQlBGIHByb2dyYW1zIGdldCBhY2Nlc3MgdG8gdGhlc2UgZ3V5cyB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIHZlY3RvciB0aGlzIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDkuNjQxMjEyNjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzgxNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX25mX2N0X2FsbG9jX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTExNz1zdGF0aWMgc3RydWN0IG5mX2Nvbm4gKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjExODpfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTExOS1cXHRcXHRcXHR1MzIgdHVwbGVfbGVuLCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOT1icGZfeGRwX2N0X2FsbG9jKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMzNTpcXHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkoZGV2X25ldChjdHgtXFx1MDAzZXJ4cS1cXHUwMDNlZGV2KSwgYnBmX3R1cGxlLCB0dXBsZV9fc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM2LVxcdFxcdFxcdFxcdCAgICAgICBvcHRzLCBvcHRzX19zeiwgMTApO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9Mzg1PWJwZl9za2JfY3RfYWxsb2Moc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTItXFx0bmV0ID0gc2tiLVxcdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSA6IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM5MzpcXHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkobmV0LCBicGZfdHVwbGUsIHR1cGxlX19zeiwgb3B0cywgb3B0c19fc3osIDEwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTQtXFx0cmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKilicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MjowOS42ODM2MDA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM1MjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JraW5nL2VCUEYsIGFuZCB0aGlua2luZyBvdXQgbG91ZDpcblxuKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIHdpdGggWERQIGFuZCBTS0IqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgaGFuZGxpbmcgY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEkgc2VlIHRoYXQgYGJwZl94ZHBfY3RfYWxsb2NgIGFuZCBgYnBmX3NrYl9jdF9hbGxvY2AgYXJlIGJvdGggY2FsbGluZyB0aGF0IGludGVybmFsIGZ1bmN0aW9uLCBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyBhIHNoYXJlZCBhbGxvY2F0aW9uIHBhdGh3YXkgZm9yIGNvbm50cmFjayBlbnRyaWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSdyZSBpbiBhbiBYRFAgY29udGV4dCBvciBhbiBTS0IgY29udGV4dC4gVGhhdCBsaWtlbHkgbWVhbnMgc29tZSBjb21tb24gY29yZSBsb2dpYy5cblxuTm93LCB3aGVyZSBhcmUgd2UgKmxvb2tpbmcgdXAqIHRoZXNlIGFsbG9jYXRlZCBlbnRyaWVzPyBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgb3V0IGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgYWN0dWFsbHkgcmV0cmlldmluZyB0aG9zZSBjb25udHJhY2sgZW50cmllcyBhZnRlciB0aGV5J3JlIGFsbG9jYXRlZC4gVGhlIGxvb2t1cCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmV0cmlldmFsIG9jY3Vycywgc28gdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGlmZWN5Y2xlLiBHb3R0YSBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBsb29rdXAgY29ycmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjk2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MTMuMzk3MTMwNTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjQxNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX25mX2N0X2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTg9X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE5My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxOTQ6c3RhdGljIHN0cnVjdCBuZl9jb25uICpfX2JwZl9uZl9jdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE5NS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzU3PWJwZl94ZHBfY3RfbG9va3VwKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzY0LVxcdGNhbGxlcl9uZXQgPSBkZXZfbmV0KGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM2NTpcXHRuZmN0ID0gX19icGZfbmZfY3RfbG9va3VwKGNhbGxlcl9uZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzY2LVxcdHJldHVybiBicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NDE0PWJwZl9za2JfY3RfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDIxLVxcdGNhbGxlcl9uZXQgPSBza2ItXFx1MDAzZWRldiA/IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NDIyOlxcdG5mY3QgPSBfX2JwZl9uZl9jdF9sb29rdXAoY2FsbGVyX25ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MjMtXFx0cmV0dXJuIGJwZl9jdF9vcHRzX3Jlc3VsdChvcHRzLCBvcHRzX19zeiwgbmZjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjEzLjQzOTc4MDA0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjE4ODc4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIGZ1bmN0aW9uYWxpdHkuXG5cbioqQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZvdXIgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBzZXJ2ZSBhcyB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgZm9yIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbi4gSSdtIHNlZWluZzogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBjb3ZlcmluZyBhbGxvY2F0aW9uIGFuZCBsb29rdXAsIGFuZCBkaWZmZXJlbnRpYXRlZCBieSBYRFAgYW5kIFNLQiBjb250ZXh0LiBUaGF0IHNlZW1zIGxvZ2ljYWwuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBzdHJ1Y3R1cmUgaXMgaW1tZWRpYXRlbHkgY2xlYXIuXG5cbk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHV0aWxpemUgdGhpcyBjb2RlLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIGZsYWdzIGFyZSBuZWVkZWQsIHNvIHRoaXMgYWxsIGNvbXBpbGVzIGNvcnJlY3RseS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSBhbmQgcHJvcGVybHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHRhcmdldCBrZXJuZWwgZW52aXJvbm1lbnQuIExldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjQ4LjY1ODY2MjY4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcxMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg9aWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQveGRwLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IG5mX2Nvbm50cmFja19rZnVuY19zZXQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTQ0OmludCByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNTQ1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU1OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NTk6dm9pZCBjbGVhbnVwX25mX2Nvbm50cmFja19icGYodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NjAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzozNzojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjQ0OT12b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX3N0YXJ0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI0NTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNDUxOlxcdGNsZWFudXBfbmZfY29ubnRyYWNrX2JwZigpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNDUyLVxcdGNvbm50cmFja19nY193b3JrLmV4aXRpbmcgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI2MjU9aW50IG5mX2Nvbm50cmFja19pbml0X3N0YXJ0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjY4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjY4NzpcXHRyZXQgPSByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2ODgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjczOD1pbnQgbmZfY29ubnRyYWNrX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNzY3Oi8qIGN0bmV0bGluayBjb2RlIHNoYXJlZCBieSBib3RoIGN0bmV0bGluayBhbmQgbmZfY29ubnRyYWNrX2JwZiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYzoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xOC1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0Mjo0OC43MTAzODExNDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzczNDUzNzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQ29ublRyYWNrIEJQRiBDb2RlKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgY29ubnRyYWNrIEJQRiBpbnRlZ3JhdGlvbiwgb25seSBnZXRzIGNvbXBpbGVkIGlmIGJvdGggYENPTkZJR19ORl9DT05OVFJBQ0tgIGFuZCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhcmUgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdmVyaWZ5IHRob3NlIGRlcGVuZGVuY2llcyBhbmQgbG9vayBmb3IgYW55IG90aGVyIGhpZGRlbiBvbmVzLlwiXG5cbmBDT05GSUdfTkZfQ09OTlRSQUNLYCwgSSByZWNhbGwsIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG5ldGZpbHRlciBzdHVmZi4gQW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCB0aGF0J3MgZ29pbmcgdG8gYmUgbmVzdGxlZCBhd2F5IGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9idmlvdXMgZW5vdWdoLCBnaXZlbiB0aGF0IEJURiBzdHVmZi5cblxuQWgsIGFuZCBJIGFsbW9zdCBmb3Jnb3QuIFdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIHNvIGBCUEZfU1lTQ0FMTGAgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gQlBGIHdpdGhvdXQgdGhlIHN5c2NhbGwuIEdvb2QuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2ssIGxldCdzIHBvcCBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AgaXRzZWxmLiBUaGVyZSBtaWdodCBiZSBzb21lIGltcGxpY2l0IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgbWlnaHQgYmUgYXQgcGxheSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gSXQncyBhbHdheXMgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjUzLjQ4MzgzNzc4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0Mjo1My41Mjk3MDc3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4ODU0NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb25uZWN0aW9uIFRyYWNraW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIHdpdGhpbiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gSSByZWNvZ25pemUgdGhlc2UgZnVuY3Rpb25zLCBvZiBjb3Vyc2UuIEl0J3MgaW1wb3J0YW50IHRvIG5vdGUgaG93IHRoZXkncmUgZXhwb3NlZCDigJMgdmlhIEJQRiBrZnVuY3MsIHNwZWNpZmljYWxseSBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIFRoYXQncyB0aGUga2V5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGtmdW5jcywgYW5kIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucywgYXJlIHByb3Blcmx5IGFjY291bnRlZCBmb3IgaW4gYEZvY3VzU3ltYm9sc2Agc28gdGhlIGluc3RydW1lbnRhdGlvbiBpcyBjb3JyZWN0XCIuXG5cbldhaXQsIGFyZW4ndCB0aG9zZSBgX19icGZfbmZfY3RfKmAgZnVuY3Rpb25zIHN0YXRpYz8gSSBoYXZlIHRvIGJlIHN1cmUgdGhleSdyZSBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIG1hcC4gQnV0IHRoZW4gYWdhaW4sIHRoZXkgX2FyZV8gY2FsbGVkIGJ5IHRoZSBrZnVuY3MsIHNvIHRoZXkgc2hvdWxkIGJlIHJlYWNoYWJsZS4gKldhaXQgYSBzZWNvbmQsIG1heWJlIEknbSBtaXNyZW1lbWJlcmluZy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGFjdHVhbGx5IHN0YXRpYyEqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6NTkuMjE4MjU2MTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgzOTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9uZl9jdF9hbGxvY19lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTc9c3RhdGljIHN0cnVjdCBuZl9jb25uICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxMTg6X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xMTktXFx0XFx0XFx0dTMyIHR1cGxlX2xlbiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0zMjk9YnBmX3hkcF9jdF9hbGxvYyhzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozMzU6XFx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KGRldl9uZXQoY3R4LVxcdTAwM2VyeHEtXFx1MDAzZWRldiksIGJwZl90dXBsZSwgdHVwbGVfX3N6LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNi1cXHRcXHRcXHRcXHQgICAgICAgb3B0cywgb3B0c19fc3osIDEwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM4NT1icGZfc2tiX2N0X2FsbG9jKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzkyLVxcdG5ldCA9IHNrYi1cXHUwMDNlZGV2ID8gZGV2X25ldChza2ItXFx1MDAzZWRldikgOiBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozOTM6XFx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KG5ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6LCAxMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzk0LVxcdHJldHVybiAoc3RydWN0IG5mX2Nvbm5fX19pbml0ICopYnBmX2N0X29wdHNfcmVzdWx0KG9wdHMsIG9wdHNfX3N6LCBuZmN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6NTkuMjc1MTAwNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0OTc4NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludHMgaW4gQlBGKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGludGVyYWN0cyB3aXRoIEJQRi4gSSBzZWUgdGhhdCBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQgSSBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gbXkgZm9jdXMuXG5cblNvLCB0aGUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzIGZvciBhbGxvY2F0aW9uIGFuZCBsb29rdXAgYXJlIGNsZWFybHkgYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdCBhdCB0aGUgdXNlcnNwYWNlIGludGVyZmFjZSwgYW5kIHdoZXRoZXIgdGhlc2UgYXJlIGV4cG9ydGVkIGRpcmVjdGx5IG9yIGFzIGtmdW5jcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgdGhlIGV4cG9ydCB0YWJsZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0uIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIG1lY2hhbmlzbSBpcyBiZWluZyB1c2VkIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGNhbGxhYmxlIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgd2hhdCBsaW1pdGF0aW9ucyBtaWdodCB0aGVyZSBiZSBvbiB0aGVpciB1c2FnZSwgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZSBvdmVyIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MDYuMDI0ODg5NTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ5MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMxMT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMxMzovKiBicGZfeGRwX2N0X2FsbG9jIC0gQWxsb2NhdGUgYSBuZXcgQ1QgZW50cnlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMTQtICpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOD1fX2JwZl9rZnVuYyBzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMyOTpicGZfeGRwX2N0X2FsbG9jKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzMC1cXHRcXHQgdTMyIHR1cGxlX19zeiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3opXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MzAtICogQG5mY3RcXHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubl9fX2luaXQgb2JqZWN0LCBvYnRhaW5lZFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQzMTogKlxcdFxcdCAgIHVzaW5nIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MzItICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00NTk9X19icGZfa2Z1bmMgdm9pZCBicGZfY3RfcmVsZWFzZShzdHJ1Y3QgbmZfY29ubiAqbmZjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQ3MC0gKiBAbmZjdFxcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo0NzE6ICogICAgICAgICAgICAgICAgIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00NzItICogQHRpbWVvdXQgICAgICAtIFRpbWVvdXQgaW4gbXNlY3MuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00ODk9X19icGZfa2Z1bmMgaW50IGJwZl9jdF9jaGFuZ2VfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqbmZjdCwgdTMyIHRpbWVvdXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDAtICogQG5mY3RcXHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubiBvYmplY3QsIG9idGFpbmVkIHVzaW5nXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTAxOiAqXFx0XFx0ICAgYnBmX3hkcF9jdF9hbGxvYyBvciBicGZfc2tiX2N0X2FsbG9jLlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTUwMi0gKiBAc3RhdHVzICAgICAgIC0gTmV3IHN0YXR1cyB2YWx1ZS5cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTUyNj1CVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1Mjc6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfYWxsb2MsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfbG9va3VwLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjA2LjA2NjM4OTY2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE5OTc2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgS2VybmVsIEZ1bmN0aW9uYWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBjbGVhcmx5IGluZGljYXRlcyB0aGF0IHRoZXNlIGFyZSBpbmRlZWQga2VybmVsIGZ1bmN0aW9ucywgb3Iga2Z1bmNzIGFzIHdlJ3JlIGNhbGxpbmcgdGhlbS4gVGhlcmVmb3JlLCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBuZWVkcyB0byBlbmNvbXBhc3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC5cblxuTW92aW5nIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbXVzdCBjb250YWluOiBgTkZfQ09OTlRSQUNLYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfU1lTQ0FMTGAuXG5cbk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjcml0aWNhbCBjb25maWdzLiBgREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5LCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBrZnVuY3MuIEFuZCBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGVzc2VudGlhbCBmb3IgdGhlIGZpbGUgdG8gZXZlbiBjb21waWxlIHByb3Blcmx5LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjEwLjc4NjM2Nzk2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMzQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2JwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg9aWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MTAuODI4NDA4NTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTg2Mzk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciBzeXprYWxsZXIsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgQlRGIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYE5GX0NPTk5UUkFDS2AgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIChidWlsdC1pbiksIHRoZW4gYERFQlVHX0lORk9fQlRGYCBpcyB0aGUgY29ycmVjdCBvcHRpb24uIElmIGBORl9DT05OVFJBQ0tgIGlzIGEgbG9hZGFibGUgbW9kdWxlLCB0aGVuIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYCB3b3VsZCBiZSBuZWNlc3NhcnkuIEhvd2V2ZXIsIHNpbmNlIHN5emthbGxlciB0eXBpY2FsbHkgYnVpbGRzIGV2ZXJ5dGhpbmcgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLCBteSBhc3N1bXB0aW9uIGlzIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyB0aGUgcmlnaHQgY2hvaWNlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aG91Z2guIFN5emthbGxlciBkb2Vzbid0IHVzZSBtb2R1bGVzIGJ5IGRlZmF1bHQsIHNvIGl0J3MgYSBidWlsdC1pbiBrZXJuZWwgY29uZmlnLiBUaHVzLCBgTkZfQ09OTlRSQUNLYCBhbmQgYERFQlVHX0lORk9fQlRGYCBzaG91bGQgYmUgZW5vdWdoLCBhbmQgSSBkb24ndCBuZWVkIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYEJQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYERFQlVHX0lORk9fQlRGYCwgb3IgaWYgaXQncyBhbHJlYWR5IGltcGxpY2l0bHkgZW5hYmxlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIHJlc2VhcmNoIHRoYXQgc3BlY2lmaWMgZGVwZW5kZW5jeSBhbmQgY29uZmlybSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MTUuODQ3MDUwNzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzM3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjE1Ljg5MTc5ODI2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2OTE2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgb2YgREVCVUdfSU5GT19CVEYqKlxuXG5SaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBjYXRlZ29yaWVzIHdlIG1pZ2h0IGZpbmQuIEknbGwgbGlrZWx5IHNlZSBkZXBlbmRlbmNpZXMgb24gdGhlIHRvb2xjaGFpbiDigJMgdGhpbmdzIGxpa2UgdGhlIGNvbXBpbGVyIChHQ0MsIENsYW5nKSBhbmQgYXNzZW1ibGVyLCBsaWtlbHkgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IEJURiBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZy4gVGhlbiwgSSdkIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBrZXJuZWwgaXRzZWxmLCBzcGVjaWZpY2FsbHkgb24ga2VybmVsIGluZnJhc3RydWN0dXJlIHJlbGF0ZWQgdG8gQlRGIGhhbmRsaW5nLCBzdWNoIGFzIHRoZSBCVEYgbG9hZGVyIGFuZCB2ZXJpZmllci4gVGhlcmUgY291bGQgZXZlbiBiZSBkZXBlbmRlbmNpZXMgb24gZGVidWcgaW5mb3JtYXRpb24gZm9ybWF0cyAoRFdBUkYsIGV0Yy4pIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyBsZXZlcmFnaW5nIG9yIHJlbHlpbmcgdXBvbiwgcG90ZW50aWFsbHkgdG8gbGluayBiYWNrIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCB0aGUgQlRGIGlzIHJlZmVyZW5jaW5nLiBJIGFsc28gYW50aWNpcGF0ZSBkZXBlbmRlbmNpZXMgb24gYW55IGJ1aWxkIHN5c3RlbSBjb21wb25lbnRzIG5lY2Vzc2FyeSB0byBpbnRlZ3JhdGUgQlRGIGdlbmVyYXRpb24gaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHNvIHRvb2xzIGxpa2UgYHBhaG9sZWAgb3Igb3RoZXIgdXRpbGl0aWVzIHRoYXQgd29yayB3aXRoIERXQVJGLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IGFzcGVjdHMgb2YgQlRGIGdlbmVyYXRpb24gYXJlIGNvbmRpdGlvbmFsIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRvby4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYWN0dWFsbHkgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MzoyMC4yMjg3MTc4NjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5ODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfSU5GT19TUExJVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXFxuIDQwMTpcXHRcXHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXFxuIDQwMjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbiA0MDQ6XFx0XFx0IyBwYWhvbGUgdXNlcyBlbGZ1dGlscywgd2hpY2ggZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBIZXhhZ29uIHJlbG9jYXRpb25zXFxuIDQwNTpcXHRcXHRkZXBlbmRzIG9uICFIRVhBR09OXFxuIDQwNjpcXHRcXHRoZWxwXFxuIDQwNzpcXHRcXHQgIEdlbmVyYXRlIGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIERXQVJGIGRlYnVnIGluZm8uXFxuIDQwODpcXHRcXHQgIFR1cm5pbmcgdGhpcyBvbiByZXF1aXJlcyBwYWhvbGUgdjEuMjIgb3IgbGF0ZXIsIHdoaWNoIHdpbGwgY29udmVydFxcbiA0MDk6XFx0XFx0ICBEV0FSRiB0eXBlIGluZm8gaW50byBlcXVpdmFsZW50IGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvLlxcbiA0MTA6XFx0XFxuIDQxMTpcXHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXFxuIDQxMjpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjNcXG4gNDEzOlxcdFxcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcXG4gNDE0OlxcdFxcdGhlbHBcXG4gNDE1OlxcdFxcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxcbiA0MTY6XFx0XFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xcbiA0MTc6XFx0XFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MzoyMC4yMjg4ODcxODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0MDgxNDI2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTmV0ZmlsdGVyIENvbm50cmFjayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMuIEZpcnN0LCBgREVCVUdfSU5GT19CVEZgIGlzIG9idmlvdXNseSBsaW5rZWQgdG8gYEJQRl9TWVNDQUxMYCwgc28gSSdsbCBiZSBpbmNsdWRpbmcgYm90aCBvZiB0aG9zZSBhcyBkZXBlbmRlbmNpZXMuIE9uIHRvcCBvZiB0aGF0LCBgTkZfQ09OTlRSQUNLYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhvc2UgdGhyZWUgY29uZmlncy5cblxuTm93LCBsZXQncyBtYXAgdGhlIGNoYW5nZXMuIEl0J3MgbW9kaWZ5aW5nIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSwgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIEJQRiBrZnVuY3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gQmVjYXVzZSB0aGVzZSBhcmUga2Z1bmNzLCB0aGV5J3JlIGRlZmluaXRpdmVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgd2hpY2ggbWFrZXMgdGhlbSBpZGVhbCBmb3IgdGVzdGluZy5cblxuVGhlIHBhdGNoJ3MgY3J1eCBpcyB0aGUgVE9DVE9VIGJ1ZyBmaXggdXNpbmcgYFJFQURfT05DRWAgb24gdGhlIGBvcHRzYCBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSSdsbCBmbGFnIHRoYXQgYXMgYSBcIldvcnRoRnV6emluZ1wiIHRhcmdldC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBteSBgRm9jdXNTeW1ib2xzYC4gVGhleSBzaG91bGQgYmU6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gSSdtIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhhdCwgZXZlbiB0aG91Z2ggaXQncyBtb2RpZnlpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBieSB0aGUga2Z1bmNzLCBzbyBmb2N1c2luZyBvbiB0aGUga2Z1bmNzIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBjb3ZlcmFnZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZnVuY3MgYXJlIGV4cG9ydGVkLiBgYnBmX3hkcF9jdF9hbGxvY2AgaXMgZXhwb3J0ZWQsIGxvY2F0ZWQgd2l0aGluIGBCVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClgLlxuXG5TbywgaGVyZSdzIHRoZSBwbGFuLiBJJ2xsIHNldDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiYnBmX3hkcF9jdF9hbGxvY1wiLCBcImJwZl9za2JfY3RfYWxsb2NcIiwgXCJicGZfeGRwX2N0X2xvb2t1cFwiLCBcImJwZl9za2JfY3RfbG9va3VwXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiTkZfQ09OTlRSQUNLXCIsIFwiREVCVUdfSU5GT19CVEZcIiwgXCJCUEZfU1lTQ0FMTFwiXWBcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy5cIlxuXG5UaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIGZvciB0ZXN0aW5nIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzYsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDQ6MjIuNjM3MDMyNjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTUxMTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfc2tiX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfeGRwX2N0X2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9jdF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfc2tiX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfeGRwX2N0X2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9jdF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj97n2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 20:20:21 +0000 UTC FinishedAt: 2026-07-31 20:44:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "DEBUG_INFO_BTF", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "DEBUG_INFO_BTF", "BPF_SYSCALL" ], "series_id": "8f9b4ff6-2640-42f1-a66f-3d915e35a98a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_xdp_ct_alloc", "bpf_skb_ct_alloc", "bpf_xdp_ct_lookup", "bpf_skb_ct_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xuaW5kZXggZjk4ZDFkNGI0MmMzZC4uYzMzOTVjYjk4YzAwZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xuQEAgLTEyMiw0MiAmIzQzOzEyMiw1NiBAQCBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuIFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvdHVwbGUsIHJ0dXBsZTtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuJiM0MztcdHUxNiBjdF96b25lX2lkO1xuJiM0MztcdHMzMiBuZXRuc19pZDtcbiYjNDM7XHR1OCBjdF96b25lX2RpciA9IDA7XG4mIzQzO1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbiYjNDM7XHR1OCBsNHByb3RvO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuJiM0MztcdGw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VsNHByb3RvKTtcbiYjNDM7XHRjdF96b25lX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlY3Rfem9uZV9pZCk7XG4gXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsxXSB8fCBvcHRzLVx1MDAzZXJlc2VydmVkWzJdKVxuJiM0MztcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4mIzQzO1x0XHRyZXNlcnZlZFswXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzBdKTtcbiYjNDM7XHRcdHJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0pO1xuJiM0MztcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRbMF0gfHwgcmVzZXJ2ZWRbMV0gfHwgcmVzZXJ2ZWRbMl0pXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2lkKVxuJiM0MztcdFx0aWYgKGN0X3pvbmVfaWQpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4mIzQzO1x0aWYgKHVubGlrZWx5KG5ldG5zX2lkIFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXHUwMDNlbDRwcm90byxcbiYjNDM7XHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sXG4gXHRcdFx0XHQgICAgSVBfQ1RfRElSX09SSUdJTkFMLCBcdTAwMjZvdHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cdTAwM2VsNHByb3RvLFxuJiM0MztcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcbiBcdFx0XHRcdCAgICBJUF9DVF9ESVJfUkVQTFksIFx1MDAyNnJ0dXBsZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFxuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBvcHRzLVx1MDAzZW5ldG5zX2lkKTtcbiYjNDM7XHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgbmV0bnNfaWQpO1xuIFx0XHRpZiAodW5saWtlbHkoIW5ldCkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT05FVCk7XG4gXHR9XG4gXG4gXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPT0gMClcbi1cdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcbi1cdFx0bmZfY3Rfem9uZV9pbml0KFx1MDAyNmN0X3pvbmUsXG4tXHRcdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfaWQsIG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIsIDApO1xuJiM0MztcdFx0aWYgKGN0X3pvbmVfZGlyID09IDApIHtcbiYjNDM7XHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuJiM0MztcdFx0XHRvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbkBAIC0xNzEsNyAmIzQzOzE4NSw3IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4gXHRfX25mX2N0X3NldF90aW1lb3V0KGN0LCB0aW1lb3V0ICogSFopO1xuIFxuIG91dDpcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMClcbiYjNDM7XHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKVxuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXG4gXHRyZXR1cm4gY3Q7XG5AQCAtMTg2LDQ2ICYjNDM7MjAwLDYwIEBAIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqX19icGZfbmZfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbiYjNDM7XHR1MTYgY3Rfem9uZV9pZDtcbiYjNDM7XHRzMzIgbmV0bnNfaWQ7XG4mIzQzO1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuJiM0MztcdHU4IHJlc2VydmVkWzNdID0ge307XG4mIzQzO1x0dTggbDRwcm90bztcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIW9wdHMgfHwgIWJwZl90dXBsZSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRpZiAoIShvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWiB8fCBvcHRzX2xlbiA9PSAxMikpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRuZXRuc19pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZW5ldG5zX2lkKTtcbiYjNDM7XHRsNHByb3RvID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbDRwcm90byk7XG4mIzQzO1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbiYjNDM7XHRcdGN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIpO1xuJiM0MztcdFx0cmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFswXSk7XG4mIzQzO1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbiYjNDM7XHRcdHJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMl0pO1xuJiM0MztcdFx0aWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKG9wdHMtXHUwMDNlY3Rfem9uZV9pZClcbiYjNDM7XHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgb3B0cy1cdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbiYjNDM7XHRpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgbDRwcm90byAhPSBJUFBST1RPX1VEUCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FUFJPVE8pO1xuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuJiM0MztcdGlmICh1bmxpa2VseShuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuLVx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLVx1MDAzZWw0cHJvdG8sXG4mIzQzO1x0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxuIFx0XHRcdFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXHUwMDI2dHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4mIzQzO1x0aWYgKG5ldG5zX2lkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFuZXQpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ORVQpO1xuIFx0fVxuIFxuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfZGlyID09IDApXG4tXHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XG4tXHRcdG5mX2N0X3pvbmVfaW5pdChcdTAwMjZjdF96b25lLFxuLVx0XHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2lkLCBvcHRzLVx1MDAzZWN0X3pvbmVfZGlyLCAwKTtcbiYjNDM7XHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4mIzQzO1x0XHRcdGN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcbiYjNDM7XHRcdFx0b3B0cy1cdTAwM2VjdF96b25lX2RpciA9IGN0X3pvbmVfZGlyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmZfY3Rfem9uZV9pbml0KFx1MDAyNmN0X3pvbmUsIGN0X3pvbmVfaWQsIGN0X3pvbmVfZGlyLCAwKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7XG4gXHR9XG4gXG4gXHRoYXNoID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgXHUwMDI2Y3Rfem9uZSwgXHUwMDI2dHVwbGUpO1xuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKVxuJiM0MztcdGlmIChuZXRuc19pZCBcdTAwM2U9IDApXG4gXHRcdHB1dF9uZXQobmV0KTtcbiBcdGlmICghaGFzaClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl94ZHBfY3RfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX3NrYl9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCmluZGV4IGY5OGQxZDRiNDJjM2QuLmMzMzk1Y2I5OGMwMGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jCkBAIC0xMjIsNDIgJiM0MzsxMjIsNTYgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSwKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG90dXBsZSwgcnR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lOwogCXN0cnVjdCBuZl9jb25uICpjdDsKJiM0MzsJdTE2IGN0X3pvbmVfaWQ7CiYjNDM7CXMzMiBuZXRuc19pZDsKJiM0MzsJdTggY3Rfem9uZV9kaXIgPSAwOwomIzQzOwl1OCByZXNlcnZlZFszXSA9IHt9OwomIzQzOwl1OCBsNHByb3RvOwogCWludCBlcnI7CiAKIAlpZiAoIShvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWiB8fCBvcHRzX2xlbiA9PSAxMikpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwluZXRuc19pZCA9IFJFQURfT05DRShvcHRzLSZndDtuZXRuc19pZCk7CiYjNDM7CWw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7bDRwcm90byk7CiYjNDM7CWN0X3pvbmVfaWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7Y3Rfem9uZV9pZCk7CiAJaWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7Ci0JCWlmIChvcHRzLSZndDtyZXNlcnZlZFswXSB8fCBvcHRzLSZndDtyZXNlcnZlZFsxXSB8fCBvcHRzLSZndDtyZXNlcnZlZFsyXSkKJiM0MzsJCWN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtJmd0O2N0X3pvbmVfZGlyKTsKJiM0MzsJCXJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzBdKTsKJiM0MzsJCXJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzFdKTsKJiM0MzsJCXJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtJmd0O3Jlc2VydmVkWzJdKTsKJiM0MzsJCWlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0gZWxzZSB7Ci0JCWlmIChvcHRzLSZndDtjdF96b25lX2lkKQomIzQzOwkJaWYgKGN0X3pvbmVfaWQpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bmV0bnNfaWQgJmx0OyBCUEZfRl9DVVJSRU5UX05FVE5TKSkKJiM0MzsJaWYgKHVubGlrZWx5KG5ldG5zX2lkICZsdDsgQlBGX0ZfQ1VSUkVOVF9ORVROUykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9PUklHSU5BTCwgJmFtcDtvdHVwbGUpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9SRVBMWSwgJmFtcDtydHVwbGUpOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCi0JaWYgKG9wdHMtJmd0O25ldG5zX2lkICZndDs9IDApIHsKLQkJbmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG9wdHMtJmd0O25ldG5zX2lkKTsKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApIHsKJiM0MzsJCW5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7CiAJCWlmICh1bmxpa2VseSghbmV0KSkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9ORVQpOwogCX0KIAogCWlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikgewotCQlpZiAob3B0cy0mZ3Q7Y3Rfem9uZV9kaXIgPT0gMCkKLQkJCW9wdHMtJmd0O2N0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjsKLQkJbmZfY3Rfem9uZV9pbml0KCZhbXA7Y3Rfem9uZSwKLQkJCQlvcHRzLSZndDtjdF96b25lX2lkLCBvcHRzLSZndDtjdF96b25lX2RpciwgMCk7CiYjNDM7CQlpZiAoY3Rfem9uZV9kaXIgPT0gMCkgewomIzQzOwkJCWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjsKJiM0MzsJCQlvcHRzLSZndDtjdF96b25lX2RpciA9IGN0X3pvbmVfZGlyOwomIzQzOwkJfQomIzQzOwkJbmZfY3Rfem9uZV9pbml0KCZhbXA7Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApOwogCX0gZWxzZSB7CiAJCWN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7CiAJfQpAQCAtMTcxLDcgJiM0MzsxODUsNyBAQCBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLAogCV9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7CiAKIG91dDoKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApCiAJCXB1dF9uZXQobmV0KTsKIAogCXJldHVybiBjdDsKQEAgLTE4Niw0NiAmIzQzOzIwMCw2MCBAQCBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKl9fYnBmX25mX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsCiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiYjNDM7CXUxNiBjdF96b25lX2lkOwomIzQzOwlzMzIgbmV0bnNfaWQ7CiYjNDM7CXU4IGN0X3pvbmVfZGlyID0gMDsKJiM0MzsJdTggcmVzZXJ2ZWRbM10gPSB7fTsKJiM0MzsJdTggbDRwcm90bzsKIAlpbnQgZXJyOwogCiAJaWYgKCFvcHRzIHx8ICFicGZfdHVwbGUpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCWlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CW5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtJmd0O25ldG5zX2lkKTsKJiM0MzsJbDRwcm90byA9IFJFQURfT05DRShvcHRzLSZndDtsNHByb3RvKTsKJiM0MzsJY3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLSZndDtjdF96b25lX2lkKTsKIAlpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHsKLQkJaWYgKG9wdHMtJmd0O3Jlc2VydmVkWzBdIHx8IG9wdHMtJmd0O3Jlc2VydmVkWzFdIHx8IG9wdHMtJmd0O3Jlc2VydmVkWzJdKQomIzQzOwkJY3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7Y3Rfem9uZV9kaXIpOwomIzQzOwkJcmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMF0pOwomIzQzOwkJcmVzZXJ2ZWRbMV0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMV0pOwomIzQzOwkJcmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWRbMl0pOwomIzQzOwkJaWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfSBlbHNlIHsKLQkJaWYgKG9wdHMtJmd0O2N0X3pvbmVfaWQpCiYjNDM7CQlpZiAoY3Rfem9uZV9pZCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bDRwcm90byAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7IG9wdHMtJmd0O2w0cHJvdG8gIT0gSVBQUk9UT19VRFApKQomIzQzOwlpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCAmYW1wOyZhbXA7IGw0cHJvdG8gIT0gSVBQUk9UT19VRFApKQogCQlyZXR1cm4gRVJSX1BUUigtRVBST1RPKTsKLQlpZiAodW5saWtlbHkob3B0cy0mZ3Q7bmV0bnNfaWQgJmx0OyBCUEZfRl9DVVJSRU5UX05FVE5TKSkKJiM0MzsJaWYgKHVubGlrZWx5KG5ldG5zX2lkICZsdDsgQlBGX0ZfQ1VSUkVOVF9ORVROUykpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLSZndDtsNHByb3RvLAomIzQzOwllcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sCiAJCQkJICAgIElQX0NUX0RJUl9PUklHSU5BTCwgJmFtcDt0dXBsZSk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkgewotCQluZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy0mZ3Q7bmV0bnNfaWQpOwomIzQzOwlpZiAobmV0bnNfaWQgJmd0Oz0gMCkgewomIzQzOwkJbmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTsKIAkJaWYgKHVubGlrZWx5KCFuZXQpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT05FVCk7CiAJfQogCiAJaWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7Ci0JCWlmIChvcHRzLSZndDtjdF96b25lX2RpciA9PSAwKQotCQkJb3B0cy0mZ3Q7Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSOwotCQluZl9jdF96b25lX2luaXQoJmFtcDtjdF96b25lLAotCQkJCW9wdHMtJmd0O2N0X3pvbmVfaWQsIG9wdHMtJmd0O2N0X3pvbmVfZGlyLCAwKTsKJiM0MzsJCWlmIChjdF96b25lX2RpciA9PSAwKSB7CiYjNDM7CQkJY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSOwomIzQzOwkJCW9wdHMtJmd0O2N0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7CiYjNDM7CQl9CiYjNDM7CQluZl9jdF96b25lX2luaXQoJmFtcDtjdF96b25lLCBjdF96b25lX2lkLCBjdF96b25lX2RpciwgMCk7CiAJfSBlbHNlIHsKIAkJY3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDsKIAl9CiAKIAloYXNoID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgJmFtcDtjdF96b25lLCAmYW1wO3R1cGxlKTsKLQlpZiAob3B0cy0mZ3Q7bmV0bnNfaWQgJmd0Oz0gMCkKJiM0MzsJaWYgKG5ldG5zX2lkICZndDs9IDApCiAJCXB1dF9uZXQobmV0KTsKIAlpZiAoIWhhc2gpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENyaXRpY2FsIE5ldGZpbHRlciBDb25udHJhY2sgQlBGIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmNgLiBJdCYjMzk7cyBhIHNvbGlkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBwb3RlbnRpYWwgVGltZS1vZi1DaGVjayB0byBUaW1lLW9mLVVzZSAoVE9DVE9VKSB2dWxuZXJhYmlsaXRpZXMuIFRoZXkmIzM5O3JlIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHRoZSBgb3B0c2AgZmllbGRzIGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBTbWFydC4gSXQgcHJldmVudHMgdGhlIEJQRiBwcm9ncmFtIGZyb20gc25lYWtpbmcgaW4gY29uY3VycmVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBgb3B0c2Agc3RydWN0IGFmdGVyIGl0cyBpbml0aWFsIGNoZWNrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdXNlLiBDbGFzc2ljIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24uCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQ/IEl04oCZcyBmdW5jdGlvbmFsbHkgc291bmQuIFdlJiMzOTtyZSBhZGRyZXNzaW5nIGEga25vd24gaXNzdWUgd2l0aGluIHRoZSBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXIuIERlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayB0byBjb25maXJtIHJlYWNoYWJpbGl0eSBhbmQgY29uZmlybSB0aGUgY2hhbmdlLgoKTm93LCBsZXQgbWUgcGlucG9pbnQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gUmlnaHQsIHRoZXNlIGFyZSBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZCB0byB0aGUgQlBGIHNpZGUuIEkmIzM5O2xsIG5hdmlnYXRlIHRvIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGV5IGFyZSBleHBvc2VkLiBHb3R0YSB0cmFjZSBob3cgdGhlIEJQRiBwcm9ncmFtcyBnZXQgYWNjZXNzIHRvIHRoZXNlIGd1eXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgdGhlIHBvdGVudGlhbCB2ZWN0b3IgdGhpcyBmaXhlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9uZl9jdF9hbGxvY19lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTExNz1zdGF0aWMgc3RydWN0IG5mX2Nvbm4gKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTE4Ol9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xMTktXHRcdFx0dTMyIHR1cGxlX2xlbiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19sZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzI5PWJwZl94ZHBfY3RfYWxsb2Moc3RydWN0IHhkcF9tZCAqeGRwX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM0LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzM1Olx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KGRldl9uZXQoY3R4LVx1MDAzZXJ4cS1cdTAwM2VkZXYpLCBicGZfdHVwbGUsIHR1cGxlX19zeixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNi1cdFx0XHRcdCAgICAgICBvcHRzLCBvcHRzX19zeiwgMTApO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM4NT1icGZfc2tiX2N0X2FsbG9jKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTM5Mi1cdG5ldCA9IHNrYi1cdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM5MzpcdG5mY3QgPSBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShuZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeiwgMTApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzk0LVx0cmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKilicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyOTYKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29ya2luZy9lQlBGLCBhbmQgdGhpbmtpbmcgb3V0IGxvdWQ6CgoqKkRpdmluZyBpbnRvIENvbm5lY3Rpb24gVHJhY2tpbmcgd2l0aCBYRFAgYW5kIFNLQioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gSSBzZWUgdGhhdCBgYnBmX3hkcF9jdF9hbGxvY2AgYW5kIGBicGZfc2tiX2N0X2FsbG9jYCBhcmUgYm90aCBjYWxsaW5nIHRoYXQgaW50ZXJuYWwgZnVuY3Rpb24sIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyBhIHNoYXJlZCBhbGxvY2F0aW9uIHBhdGh3YXkgZm9yIGNvbm50cmFjayBlbnRyaWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSYjMzk7cmUgaW4gYW4gWERQIGNvbnRleHQgb3IgYW4gU0tCIGNvbnRleHQuIFRoYXQgbGlrZWx5IG1lYW5zIHNvbWUgY29tbW9uIGNvcmUgbG9naWMuCgpOb3csIHdoZXJlIGFyZSB3ZSAqbG9va2luZyB1cCogdGhlc2UgYWxsb2NhdGVkIGVudHJpZXM/IE15IG5leHQgbW92ZSBpcyB0byBjaGVjayBvdXQgYF9fYnBmX25mX2N0X2xvb2t1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgYWN0dWFsbHkgcmV0cmlldmluZyB0aG9zZSBjb25udHJhY2sgZW50cmllcyBhZnRlciB0aGV5JiMzOTtyZSBhbGxvY2F0ZWQuIFRoZSBsb29rdXAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJldHJpZXZhbCBvY2N1cnMsIHNvIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGxpZmVjeWNsZS4gR290dGEgc2VlIGhvdyB0aGUgYWxsb2NhdGlvbiBhbmQgbG9va3VwIGNvcnJlbGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2JwZl9uZl9jdF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTg9X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xOTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxOTQ6c3RhdGljIHN0cnVjdCBuZl9jb25uICpfX2JwZl9uZl9jdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM1Nz1icGZfeGRwX2N0X2xvb2t1cChzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zNjQtXHRjYWxsZXJfbmV0ID0gZGV2X25ldChjdHgtXHUwMDNlcnhxLVx1MDAzZWRldik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozNjU6XHRuZmN0ID0gX19icGZfbmZfY3RfbG9va3VwKGNhbGxlcl9uZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeik7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zNjYtXHRyZXR1cm4gYnBmX2N0X29wdHNfcmVzdWx0KG9wdHMsIG9wdHNfX3N6LCBuZmN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDIxLVx0Y2FsbGVyX25ldCA9IHNrYi1cdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQyMjpcdG5mY3QgPSBfX2JwZl9uZl9jdF9sb29rdXAoY2FsbGVyX25ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQyMy1cdHJldHVybiBicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4KCioqQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludCBBbmFseXNpcyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmb3VyIGNydWNpYWwgZnVuY3Rpb25zIHRoYXQgc2VydmUgYXMgdGhlIG1haW4gaW50ZXJhY3Rpb24gcG9pbnRzIGZvciB0aGlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gc2VlaW5nOiBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBidWlsZGluZyBibG9ja3MsIGNvdmVyaW5nIGFsbG9jYXRpb24gYW5kIGxvb2t1cCwgYW5kIGRpZmZlcmVudGlhdGVkIGJ5IFhEUCBhbmQgU0tCIGNvbnRleHQuIFRoYXQgc2VlbXMgbG9naWNhbC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0cnVjdHVyZSBpcyBpbW1lZGlhdGVseSBjbGVhci4KCk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHV0aWxpemUgdGhpcyBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGRldGVybWluZSB3aGljaCBmbGFncyBhcmUgbmVlZGVkLCBzbyB0aGlzIGFsbCBjb21waWxlcyBjb3JyZWN0bHkuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgYW5kIHByb3Blcmx5IGludGVncmF0ZWQgd2l0aGluIHRoZSB0YXJnZXQga2VybmVsIGVudmlyb25tZW50LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcHJvcGVybHkgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja19icGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE4PWlmZXEgKCQoQ09ORklHX05GX0NPTk5UUkFDSyksbSlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxOm5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IG5mX2Nvbm50cmFja19icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE4LSNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFx1MDAzZVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTUzOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgbmZfY29ubnRyYWNrX2tmdW5jX3NldCA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NDQ6aW50IHJlZ2lzdGVyX25mX2Nvbm50cmFja19icGYodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU0NS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNTU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTU5OnZvaWQgY2xlYW51cF9uZl9jb25udHJhY2tfYnBmKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NjAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0zNi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6Mzc6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0zOC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcdTAwM2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjQ0OT12b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX3N0YXJ0KHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjQ1MC17XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjQ1MTpcdGNsZWFudXBfbmZfY29ubnRyYWNrX2JwZigpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI0NTItXHRjb25udHJhY2tfZ2Nfd29yay5leGl0aW5nID0gdHJ1ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjYyNT1pbnQgbmZfY29ubnRyYWNrX2luaXRfc3RhcnQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjY4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNjg3Olx0cmV0ID0gcmVnaXN0ZXJfbmZfY29ubnRyYWNrX2JwZigpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2ODgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0yNzM4PWludCBuZl9jb25udHJhY2tfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY2LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jOjI3Njc6LyogY3RuZXRsaW5rIGNvZGUgc2hhcmVkIGJ5IGJvdGggY3RuZXRsaW5rIGFuZCBuZl9jb25udHJhY2tfYnBmICovXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjc2OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2JwZi5jOjExOiNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXHUwMDNlXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYy0xMi0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMTgtXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTk6I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcdTAwM2Vcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQ29ublRyYWNrIEJQRiBDb2RlKioKCk9rYXksIHNvIHRoZSBjb2RlIEkmIzM5O20gbG9va2luZyBhdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25udHJhY2sgQlBGIGludGVncmF0aW9uLCBvbmx5IGdldHMgY29tcGlsZWQgaWYgYm90aCBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGFyZSBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGxvb2sgZm9yIGFueSBvdGhlciBoaWRkZW4gb25lcy4mIzM0OwoKYENPTkZJR19ORl9DT05OVFJBQ0tgLCBJIHJlY2FsbCwgaXMgZGVmaW5lZCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Ag4oCTIHByZXR0eSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgbmV0ZmlsdGVyIHN0dWZmLiBBbmQgYENPTkZJR19ERUJVR19JTkZPX0JURmAsIHRoYXQmIzM5O3MgZ29pbmcgdG8gYmUgbmVzdGxlZCBhd2F5IGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9idmlvdXMgZW5vdWdoLCBnaXZlbiB0aGF0IEJURiBzdHVmZi4KCkFoLCBhbmQgSSBhbG1vc3QgZm9yZ290LiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgc28gYEJQRl9TWVNDQUxMYCBpcyAqZGVmaW5pdGVseSogZ29pbmcgdG8gYmUgYSBoYXJkIHJlcXVpcmVtZW50LiBObyBCUEYgd2l0aG91dCB0aGUgc3lzY2FsbC4gR29vZC4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlLWNoZWNrLCBsZXQmIzM5O3MgcG9wIG9wZW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jYCBpdHNlbGYuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW1wbGljaXQgZGVwZW5kZW5jaWVzIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgbWlnaHQgYmUgYXQgcGxheSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gSXQmIzM5O3MgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQ29ubmVjdGlvbiBUcmFja2luZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgZnVuY3Rpb25hbCBidWcgd2l0aGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSBmdW5jdGlvbnMsIG9mIGNvdXJzZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIG5vdGUgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQg4oCTIHZpYSBCUEYga2Z1bmNzLCBzcGVjaWZpY2FsbHkgYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0kgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2Uga2Z1bmNzLCBhbmQgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zLCBhcmUgcHJvcGVybHkgYWNjb3VudGVkIGZvciBpbiBgRm9jdXNTeW1ib2xzYCBzbyB0aGUgaW5zdHJ1bWVudGF0aW9uIGlzIGNvcnJlY3QmIzM0Oy4KCldhaXQsIGFyZW4mIzM5O3QgdGhvc2UgYF9fYnBmX25mX2N0XypgIGZ1bmN0aW9ucyBzdGF0aWM/IEkgaGF2ZSB0byBiZSBzdXJlIHRoZXkmIzM5O3JlIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbWFwLiBCdXQgdGhlbiBhZ2FpbiwgdGhleSBfYXJlXyBjYWxsZWQgYnkgdGhlIGtmdW5jcywgc28gdGhleSBzaG91bGQgYmUgcmVhY2hhYmxlLiAqV2FpdCBhIHNlY29uZCwgbWF5YmUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGFjdHVhbGx5IHN0YXRpYyEqCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX25mX2N0X2FsbG9jX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MTE3PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxMTg6X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTExOS1cdFx0XHR1MzIgdHVwbGVfbGVuLCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0zMjk9YnBmX3hkcF9jdF9hbGxvYyhzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozMzU6XHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkoZGV2X25ldChjdHgtXHUwMDNlcnhxLVx1MDAzZWRldiksIGJwZl90dXBsZSwgdHVwbGVfX3N6LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM2LVx0XHRcdFx0ICAgICAgIG9wdHMsIG9wdHNfX3N6LCAxMCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9Mzg1PWJwZl9za2JfY3RfYWxsb2Moc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzkyLVx0bmV0ID0gc2tiLVx1MDAzZWRldiA/IGRldl9uZXQoc2tiLVx1MDAzZWRldikgOiBzb2NrX25ldChza2ItXHUwMDNlc2spO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzkzOlx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KG5ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6LCAxMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTQtXHRyZXR1cm4gKHN0cnVjdCBuZl9jb25uX19faW5pdCAqKWJwZl9jdF9vcHRzX3Jlc3VsdChvcHRzLCBvcHRzX19zeiwgbmZjdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDA5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludHMgaW4gQlBGKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggQlBGLiBJIHNlZSB0aGF0IGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQgSSBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbmFycm93cyBkb3duIG15IGZvY3VzLgoKU28sIHRoZSBpbnRlcmVzdGluZyBlbnRyeSBwb2ludHMgZm9yIGFsbG9jYXRpb24gYW5kIGxvb2t1cCBhcmUgY2xlYXJseSBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IGF0IHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlLCBhbmQgd2hldGhlciB0aGVzZSBhcmUgZXhwb3J0ZWQgZGlyZWN0bHkgb3IgYXMga2Z1bmNzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIHRoZSBleHBvcnQgdGFibGUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBjb25maXJtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBtZWNoYW5pc20gaXMgYmVpbmcgdXNlZCBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoZXNlIGFyZSBjYWxsYWJsZSBhbmQgd2hlcmUgdGhleSBhcmUgY2FsbGVkIGZyb20sIHdoYXQgbGltaXRhdGlvbnMgbWlnaHQgdGhlcmUgYmUgb24gdGhlaXIgdXNhZ2UsIGFuZCB3aGV0aGVyIHRoZXkgbWlnaHQgYmUgc3ViamVjdCB0byBjaGFuZ2Ugb3ZlciB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfeGRwX2N0X2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzExPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMxMi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMxMzovKiBicGZfeGRwX2N0X2FsbG9jIC0gQWxsb2NhdGUgYSBuZXcgQ1QgZW50cnlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMxNC0gKlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOD1fX2JwZl9rZnVuYyBzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MzI5OmJwZl94ZHBfY3RfYWxsb2Moc3RydWN0IHhkcF9tZCAqeGRwX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMzAtXHRcdCB1MzIgdHVwbGVfX3N6LCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDMwLSAqIEBuZmN0XHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubl9fX2luaXQgb2JqZWN0LCBvYnRhaW5lZFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NDMxOiAqXHRcdCAgIHVzaW5nIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQzMi0gKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00NTk9X19icGZfa2Z1bmMgdm9pZCBicGZfY3RfcmVsZWFzZShzdHJ1Y3QgbmZfY29ubiAqbmZjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00NzAtICogQG5mY3RcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQ3MTogKiAgICAgICAgICAgICAgICAgYnBmX3hkcF9jdF9hbGxvYyBvciBicGZfc2tiX2N0X2FsbG9jLlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDcyLSAqIEB0aW1lb3V0ICAgICAgLSBUaW1lb3V0IGluIG1zZWNzLlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTQ4OT1fX2JwZl9rZnVuYyBpbnQgYnBmX2N0X2NoYW5nZV90aW1lb3V0KHN0cnVjdCBuZl9jb25uICpuZmN0LCB1MzIgdGltZW91dClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDAtICogQG5mY3RcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjUwMTogKlx0XHQgICBicGZfeGRwX2N0X2FsbG9jIG9yIGJwZl9za2JfY3RfYWxsb2MuXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDItICogQHN0YXR1cyAgICAgICAtIE5ldyBzdGF0dXMgdmFsdWUuXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NTI2PUJURl9LRlVOQ1NfU1RBUlQobmZfY3Rfa2Z1bmNfc2V0KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTI3OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfeGRwX2N0X2FsbG9jLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfbG9va3VwLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjgxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgS2VybmVsIEZ1bmN0aW9uYWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVzZSBhcmUgaW5kZWVkIGtlcm5lbCBmdW5jdGlvbnMsIG9yIGtmdW5jcyBhcyB3ZSYjMzk7cmUgY2FsbGluZyB0aGVtLiBUaGVyZWZvcmUsIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IG5lZWRzIHRvIGVuY29tcGFzczogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLgoKTW92aW5nIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbXVzdCBjb250YWluOiBgTkZfQ09OTlRSQUNLYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfU1lTQ0FMTGAuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBjcml0aWNhbCBjb25maWdzLiBgREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5LCBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2Z1bmNzLiBBbmQgYE5GX0NPTk5UUkFDS2AgaXMgY2xlYXJseSBlc3NlbnRpYWwgZm9yIHRoZSBmaWxlIHRvIGV2ZW4gY29tcGlsZSBwcm9wZXJseS4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVtZW50cyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xOD1pZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLG0pXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5Om5mX2Nvbm50cmFjay0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSAmIzQzOz0gbmZfY29ubnRyYWNrX2JwZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIwLWVsc2UgaWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSx5KVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBuZl9jb25udHJhY2tfYnBmLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBCVEYgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgTkZfQ09OTlRSQUNLYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgKGJ1aWx0LWluKSwgdGhlbiBgREVCVUdfSU5GT19CVEZgIGlzIHRoZSBjb3JyZWN0IG9wdGlvbi4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgYSBsb2FkYWJsZSBtb2R1bGUsIHRoZW4gYERFQlVHX0lORk9fQlRGX01PRFVMRVNgIHdvdWxkIGJlIG5lY2Vzc2FyeS4gSG93ZXZlciwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBidWlsZHMgZXZlcnl0aGluZyBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwsIG15IGFzc3VtcHRpb24gaXMgdGhhdCBgREVCVUdfSU5GT19CVEZgIGlzIHRoZSByaWdodCBjaG9pY2UuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIFN5emthbGxlciBkb2VzbiYjMzk7dCB1c2UgbW9kdWxlcyBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBhIGJ1aWx0LWluIGtlcm5lbCBjb25maWcuIFRodXMsIGBORl9DT05OVFJBQ0tgIGFuZCBgREVCVUdfSU5GT19CVEZgIHNob3VsZCBiZSBlbm91Z2gsIGFuZCBJIGRvbiYjMzk7dCBuZWVkIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYC4KCk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBCUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBERUJVR19JTkZPX0JURmAsIG9yIGlmIGl0JiMzOTtzIGFscmVhZHkgaW1wbGljaXRseSBlbmFibGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcmVzZWFyY2ggdGhhdCBzcGVjaWZpYyBkZXBlbmRlbmN5IGFuZCBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTctXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXG5saWIvS2NvbmZpZy5kZWJ1Zy0zOTktXHRib29sIFwmIzM0O0dlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTQyNy1cbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xubGliL0tjb25maWcuZGVidWctNDI5LVx0Ym9vbCBcJiMzNDtHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4ODkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBvZiBERUJVR19JTkZPX0JURioqCgpSaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYSBmZXcgY2F0ZWdvcmllcyB3ZSBtaWdodCBmaW5kLiBJJiMzOTtsbCBsaWtlbHkgc2VlIGRlcGVuZGVuY2llcyBvbiB0aGUgdG9vbGNoYWluIOKAkyB0aGluZ3MgbGlrZSB0aGUgY29tcGlsZXIgKEdDQywgQ2xhbmcpIGFuZCBhc3NlbWJsZXIsIGxpa2VseSB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgQlRGIGdlbmVyYXRpb24gYW5kIGhhbmRsaW5nLiBUaGVuLCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBrZXJuZWwgaXRzZWxmLCBzcGVjaWZpY2FsbHkgb24ga2VybmVsIGluZnJhc3RydWN0dXJlIHJlbGF0ZWQgdG8gQlRGIGhhbmRsaW5nLCBzdWNoIGFzIHRoZSBCVEYgbG9hZGVyIGFuZCB2ZXJpZmllci4gVGhlcmUgY291bGQgZXZlbiBiZSBkZXBlbmRlbmNpZXMgb24gZGVidWcgaW5mb3JtYXRpb24gZm9ybWF0cyAoRFdBUkYsIGV0Yy4pIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyBsZXZlcmFnaW5nIG9yIHJlbHlpbmcgdXBvbiwgcG90ZW50aWFsbHkgdG8gbGluayBiYWNrIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCB0aGUgQlRGIGlzIHJlZmVyZW5jaW5nLiBJIGFsc28gYW50aWNpcGF0ZSBkZXBlbmRlbmNpZXMgb24gYW55IGJ1aWxkIHN5c3RlbSBjb21wb25lbnRzIG5lY2Vzc2FyeSB0byBpbnRlZ3JhdGUgQlRGIGdlbmVyYXRpb24gaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHNvIHRvb2xzIGxpa2UgYHBhaG9sZWAgb3Igb3RoZXIgdXRpbGl0aWVzIHRoYXQgd29yayB3aXRoIERXQVJGLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGFueSBhc3BlY3RzIG9mIEJURiBnZW5lcmF0aW9uIGFyZSBjb25kaXRpb25hbCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0b28uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBhY3R1YWxseSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTg6XHRjb25maWcgREVCVUdfSU5GT19CVEZcbiAzOTk6XHRcdGJvb2wgXCYjMzQ7R2VuZXJhdGUgQlRGIHR5cGUgaW5mb3JtYXRpb25cJiMzNDtcbiA0MDA6XHRcdGRlcGVuZHMgb24gIURFQlVHX0lORk9fU1BMSVQgXHUwMDI2XHUwMDI2ICFERUJVR19JTkZPX1JFRFVDRURcbiA0MDE6XHRcdGRlcGVuZHMgb24gIUdDQ19QTFVHSU5fUkFORFNUUlVDVCB8fCBDT01QSUxFX1RFU1RcbiA0MDI6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiA0MDM6XHRcdGRlcGVuZHMgb24gUEFIT0xFX1ZFUlNJT04gXHUwMDNlPSAxMjJcbiA0MDQ6XHRcdCMgcGFob2xlIHVzZXMgZWxmdXRpbHMsIHdoaWNoIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgSGV4YWdvbiByZWxvY2F0aW9uc1xuIDQwNTpcdFx0ZGVwZW5kcyBvbiAhSEVYQUdPTlxuIDQwNjpcdFx0aGVscFxuIDQwNzpcdFx0ICBHZW5lcmF0ZSBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBEV0FSRiBkZWJ1ZyBpbmZvLlxuIDQwODpcdFx0ICBUdXJuaW5nIHRoaXMgb24gcmVxdWlyZXMgcGFob2xlIHYxLjIyIG9yIGxhdGVyLCB3aGljaCB3aWxsIGNvbnZlcnRcbiA0MDk6XHRcdCAgRFdBUkYgdHlwZSBpbmZvIGludG8gZXF1aXZhbGVudCBkZWR1cGxpY2F0ZWQgQlRGIHR5cGUgaW5mby5cbiA0MTA6XHRcbiA0MTE6XHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXG4gNDEyOlx0XHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcdTAwM2U9IDEyM1xuIDQxMzpcdFx0ZGVwZW5kcyBvbiBDQ19JU19DTEFOR1xuIDQxNDpcdFx0aGVscFxuIDQxNTpcdFx0ICBEZWNpZGUgd2hldGhlciBwYWhvbGUgZW1pdHMgYnRmX3RhZyBhdHRyaWJ1dGVzIChidGZfdHlwZV90YWcgYW5kXG4gNDE2Olx0XHQgIGJ0Zl9kZWNsX3RhZykgb3Igbm90LiBDdXJyZW50bHkgb25seSBjbGFuZyBjb21waWxlciBpbXBsZW1lbnRzXG4gNDE3Olx0XHQgIHRoZXNlIGF0dHJpYnV0ZXMsIHNvIG1ha2UgdGhlIGNvbmZpZyBkZXBlbmQgb24gQ0NfSVNfQ0xBTkcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTc2CgkJCQkJCQlvdXRwdXQ6IDEzNwoJCQkJCQkJdGhvdWdodHM6IDUwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBOZXRmaWx0ZXIgQ29ubnRyYWNrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBmdW5jdGlvbmFsaXR5LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRlc3RpbmcgYW5kIGFuYWx5c2lzLiBGaXJzdCwgYERFQlVHX0lORk9fQlRGYCBpcyBvYnZpb3VzbHkgbGlua2VkIHRvIGBCUEZfU1lTQ0FMTGAsIHNvIEkmIzM5O2xsIGJlIGluY2x1ZGluZyBib3RoIG9mIHRob3NlIGFzIGRlcGVuZGVuY2llcy4gT24gdG9wIG9mIHRoYXQsIGBORl9DT05OVFJBQ0tgIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhvc2UgdGhyZWUgY29uZmlncy4KCk5vdywgbGV0JiMzOTtzIG1hcCB0aGUgY2hhbmdlcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSwgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIEJQRiBrZnVuY3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gQmVjYXVzZSB0aGVzZSBhcmUga2Z1bmNzLCB0aGV5JiMzOTtyZSBkZWZpbml0aXZlbHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoaWNoIG1ha2VzIHRoZW0gaWRlYWwgZm9yIHRlc3RpbmcuCgpUaGUgcGF0Y2gmIzM5O3MgY3J1eCBpcyB0aGUgVE9DVE9VIGJ1ZyBmaXggdXNpbmcgYFJFQURfT05DRWAgb24gdGhlIGBvcHRzYCBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSSYjMzk7bGwgZmxhZyB0aGF0IGFzIGEgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyB0YXJnZXQuCgpMZXQgbWUgZG91YmxlLWNoZWNrIG15IGBGb2N1c1N5bWJvbHNgLiBUaGV5IHNob3VsZCBiZTogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBJJiMzOTttIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhhdCwgZXZlbiB0aG91Z2ggaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBzdGF0aWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGlubGluZWQgYnkgdGhlIGtmdW5jcywgc28gZm9jdXNpbmcgb24gdGhlIGtmdW5jcyBpcyB0aGUgYmVzdCBhcHByb2FjaCBmb3IgY292ZXJhZ2UuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZnVuY3MgYXJlIGV4cG9ydGVkLiBgYnBmX3hkcF9jdF9hbGxvY2AgaXMgZXhwb3J0ZWQsIGxvY2F0ZWQgd2l0aGluIGBCVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClgLgoKU28sIGhlcmUmIzM5O3MgdGhlIHBsYW4uIEkmIzM5O2xsIHNldDoKCiogICAqKldvcnRoRnV6emluZzogdHJ1ZSoqCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LCAmIzM0O2JwZl9za2JfY3RfYWxsb2MmIzM0OywgJiMzNDticGZfeGRwX2N0X2xvb2t1cCYjMzQ7LCAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LCAmIzM0O0JQRl9TWVNDQUxMJiMzNDtdYAoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuJiMzNDsKClRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgdGhlIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfY3RfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVE9DVE9VIGJ1ZyBpbiBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzIGJ5IHVzaW5nIFJFQURfT05DRS4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3hkcF9jdF9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfc2tiX2N0X2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfY3RfbG9va3VwJiMzNDssCiAgICAmIzM0O2JwZl9za2JfY3RfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVE9DVE9VIGJ1ZyBpbiBCUEYgbmV0ZmlsdGVyIGNvbm50cmFjayBoZWxwZXJzIGJ5IHVzaW5nIFJFQURfT05DRS4gVGhlIG1vZGlmaWVkIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjAzLjI4NTAwOTI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDMzNTQ2Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3NrYl9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3hkcF9jdF9sb29rdXBcIixcbiAgICBcImJwZl9za2JfY3RfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MjowMy4yODUwMTQ5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwOTA3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDQyYTE0Y2ZiNDE1OWMyZjJiYjYyNGU4MWE5Njk3ZjhkOGFkNWUzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMDo0MjowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXFxuaW5kZXggZjk4ZDFkNGI0MmMzZC4uYzMzOTVjYjk4YzAwZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXFxuQEAgLTEyMiw0MiArMTIyLDU2IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XFxuK1xcdHUxNiBjdF96b25lX2lkO1xcbitcXHRzMzIgbmV0bnNfaWQ7XFxuK1xcdHU4IGN0X3pvbmVfZGlyID0gMDtcXG4rXFx0dTggcmVzZXJ2ZWRbM10gPSB7fTtcXG4rXFx0dTggbDRwcm90bztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaIHx8IG9wdHNfbGVuID09IDEyKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRuZXRuc19pZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VuZXRuc19pZCk7XFxuK1xcdGw0cHJvdG8gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlbDRwcm90byk7XFxuK1xcdGN0X3pvbmVfaWQgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlY3Rfem9uZV9pZCk7XFxuIFxcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xcbi1cXHRcXHRpZiAob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMF0gfHwgb3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMl0pXFxuK1xcdFxcdGN0X3pvbmVfZGlyID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyKTtcXG4rXFx0XFx0cmVzZXJ2ZWRbMF0gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMF0pO1xcbitcXHRcXHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZFsxXSk7XFxuK1xcdFxcdHJlc2VydmVkWzJdID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkWzJdKTtcXG4rXFx0XFx0aWYgKHJlc2VydmVkWzBdIHx8IHJlc2VydmVkWzFdIHx8IHJlc2VydmVkWzJdKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWN0X3pvbmVfaWQpXFxuK1xcdFxcdGlmIChjdF96b25lX2lkKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KG9wdHMtXFx1MDAzZW5ldG5zX2lkIFxcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXFxuK1xcdGlmICh1bmxpa2VseShuZXRuc19pZCBcXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuLVxcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cXHUwMDNlbDRwcm90byxcXG4rXFx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxcbiBcXHRcXHRcXHRcXHQgICAgSVBfQ1RfRElSX09SSUdJTkFMLCBcXHUwMDI2b3R1cGxlKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXFx1MDAzZWw0cHJvdG8sXFxuK1xcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcXG4gXFx0XFx0XFx0XFx0ICAgIElQX0NUX0RJUl9SRVBMWSwgXFx1MDAyNnJ0dXBsZSk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiBcXG4tXFx0aWYgKG9wdHMtXFx1MDAzZW5ldG5zX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG9wdHMtXFx1MDAzZW5ldG5zX2lkKTtcXG4rXFx0aWYgKG5ldG5zX2lkIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bmV0ID0gZ2V0X25ldF9uc19ieV9pZChuZXQsIG5ldG5zX2lkKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFuZXQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XFxuLVxcdFxcdGlmIChvcHRzLVxcdTAwM2VjdF96b25lX2RpciA9PSAwKVxcbi1cXHRcXHRcXHRvcHRzLVxcdTAwM2VjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XFxuLVxcdFxcdG5mX2N0X3pvbmVfaW5pdChcXHUwMDI2Y3Rfem9uZSxcXG4tXFx0XFx0XFx0XFx0b3B0cy1cXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIsIDApO1xcbitcXHRcXHRpZiAoY3Rfem9uZV9kaXIgPT0gMCkge1xcbitcXHRcXHRcXHRjdF96b25lX2RpciA9IE5GX0NUX0RFRkFVTFRfWk9ORV9ESVI7XFxuK1xcdFxcdFxcdG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID0gY3Rfem9uZV9kaXI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLCBjdF96b25lX2lkLCBjdF96b25lX2RpciwgMCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0X3pvbmUgPSBuZl9jdF96b25lX2RmbHQ7XFxuIFxcdH1cXG5AQCAtMTcxLDcgKzE4NSw3IEBAIF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuIFxcdF9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7XFxuIFxcbiBvdXQ6XFxuLVxcdGlmIChvcHRzLVxcdTAwM2VuZXRuc19pZCBcXHUwMDNlPSAwKVxcbitcXHRpZiAobmV0bnNfaWQgXFx1MDAzZT0gMClcXG4gXFx0XFx0cHV0X25ldChuZXQpO1xcbiBcXG4gXFx0cmV0dXJuIGN0O1xcbkBAIC0xODYsNDYgKzIwMCw2MCBAQCBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKl9fYnBmX25mX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuIFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSBjdF96b25lO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XFxuK1xcdHUxNiBjdF96b25lX2lkO1xcbitcXHRzMzIgbmV0bnNfaWQ7XFxuK1xcdHU4IGN0X3pvbmVfZGlyID0gMDtcXG4rXFx0dTggcmVzZXJ2ZWRbM10gPSB7fTtcXG4rXFx0dTggbDRwcm90bztcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmICghb3B0cyB8fCAhYnBmX3R1cGxlKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFxuK1xcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZW5ldG5zX2lkKTtcXG4rXFx0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VsNHByb3RvKTtcXG4rXFx0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VjdF96b25lX2lkKTtcXG4gXFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XFxuLVxcdFxcdGlmIChvcHRzLVxcdTAwM2VyZXNlcnZlZFswXSB8fCBvcHRzLVxcdTAwM2VyZXNlcnZlZFsxXSB8fCBvcHRzLVxcdTAwM2VyZXNlcnZlZFsyXSlcXG4rXFx0XFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIpO1xcbitcXHRcXHRyZXNlcnZlZFswXSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VyZXNlcnZlZFswXSk7XFxuK1xcdFxcdHJlc2VydmVkWzFdID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkWzFdKTtcXG4rXFx0XFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cXHUwMDNlcmVzZXJ2ZWRbMl0pO1xcbitcXHRcXHRpZiAocmVzZXJ2ZWRbMF0gfHwgcmVzZXJ2ZWRbMV0gfHwgcmVzZXJ2ZWRbMl0pXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAob3B0cy1cXHUwMDNlY3Rfem9uZV9pZClcXG4rXFx0XFx0aWYgKGN0X3pvbmVfaWQpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9XFxuLVxcdGlmICh1bmxpa2VseShvcHRzLVxcdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVENQIFxcdTAwMjZcXHUwMDI2IG9wdHMtXFx1MDAzZWw0cHJvdG8gIT0gSVBQUk9UT19VRFApKVxcbitcXHRpZiAodW5saWtlbHkobDRwcm90byAhPSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBsNHByb3RvICE9IElQUFJPVE9fVURQKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9UTyk7XFxuLVxcdGlmICh1bmxpa2VseShvcHRzLVxcdTAwM2VuZXRuc19pZCBcXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxcbitcXHRpZiAodW5saWtlbHkobmV0bnNfaWQgXFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbi1cXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXFx1MDAzZWw0cHJvdG8sXFxuK1xcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcXG4gXFx0XFx0XFx0XFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXFx1MDAyNnR1cGxlKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcbi1cXHRpZiAob3B0cy1cXHUwMDNlbmV0bnNfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cXHUwMDNlbmV0bnNfaWQpO1xcbitcXHRpZiAobmV0bnNfaWQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgbmV0bnNfaWQpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIW5ldCkpXFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ORVQpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1opIHtcXG4tXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID09IDApXFxuLVxcdFxcdFxcdG9wdHMtXFx1MDAzZWN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcXG4tXFx0XFx0bmZfY3Rfem9uZV9pbml0KFxcdTAwMjZjdF96b25lLFxcbi1cXHRcXHRcXHRcXHRvcHRzLVxcdTAwM2VjdF96b25lX2lkLCBvcHRzLVxcdTAwM2VjdF96b25lX2RpciwgMCk7XFxuK1xcdFxcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XFxuK1xcdFxcdFxcdGN0X3pvbmVfZGlyID0gTkZfQ1RfREVGQVVMVF9aT05FX0RJUjtcXG4rXFx0XFx0XFx0b3B0cy1cXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRuZl9jdF96b25lX2luaXQoXFx1MDAyNmN0X3pvbmUsIGN0X3pvbmVfaWQsIGN0X3pvbmVfZGlyLCAwKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcXG4gXFx0fVxcbiBcXG4gXFx0aGFzaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIFxcdTAwMjZjdF96b25lLCBcXHUwMDI2dHVwbGUpO1xcbi1cXHRpZiAob3B0cy1cXHUwMDNlbmV0bnNfaWQgXFx1MDAzZT0gMClcXG4rXFx0aWYgKG5ldG5zX2lkIFxcdTAwM2U9IDApXFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0aWYgKCFoYXNoKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDMuNjM2NzIwMzE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5MDgxODI2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3hkcF9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3NrYl9jdF9hbGxvY1wiLFxuICAgIFwiYnBmX3hkcF9jdF9sb29rdXBcIixcbiAgICBcImJwZl9za2JfY3RfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBUT0NUT1UgYnVnIGluIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgYnkgdXNpbmcgUkVBRF9PTkNFLiBUaGUgbW9kaWZpZWQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBCUEYga2Z1bmNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNDJhMTRjZmI0MTU5YzJmMmJiNjI0ZTgxYTk2OTdmOGQ4YWQ1ZTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMjA6NDI6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG5pbmRleCBmOThkMWQ0YjQyYzNkLi5jMzM5NWNiOThjMDBlIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXG5AQCAtMTIyLDQyICsxMjIsNTYgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbitcdHUxNiBjdF96b25lX2lkO1xuK1x0czMyIG5ldG5zX2lkO1xuK1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuK1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbitcdHU4IGw0cHJvdG87XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuK1x0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVx1MDAzZWw0cHJvdG8pO1xuK1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbitcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4rXHRcdHJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0pO1xuK1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbitcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4rXHRcdGlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfaWQpXG4rXHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuK1x0aWYgKHVubGlrZWx5KG5ldG5zX2lkIFx1MDAzYyBCUEZfRl9DVVJSRU5UX05FVE5TKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4tXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIG9wdHMtXHUwMDNlbDRwcm90byxcbitcdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgbDRwcm90byxcbiBcdFx0XHRcdCAgICBJUF9DVF9ESVJfT1JJR0lOQUwsIFx1MDAyNm90dXBsZSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFxuLVx0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBvcHRzLVx1MDAzZWw0cHJvdG8sXG4rXHRlcnIgPSBicGZfbmZfY3RfdHVwbGVfcGFyc2UoYnBmX3R1cGxlLCB0dXBsZV9sZW4sIGw0cHJvdG8sXG4gXHRcdFx0XHQgICAgSVBfQ1RfRElSX1JFUExZLCBcdTAwMjZydHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4rXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghbmV0KSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcbiBcdH1cbiBcbiBcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2RpciA9PSAwKVxuLVx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuLVx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSxcbi1cdFx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cdTAwM2VjdF96b25lX2RpciwgMCk7XG4rXHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4rXHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuK1x0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcbitcdFx0fVxuK1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbkBAIC0xNzEsNyArMTg1LDcgQEAgX19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcbiBcdF9fbmZfY3Rfc2V0X3RpbWVvdXQoY3QsIHRpbWVvdXQgKiBIWik7XG4gXG4gb3V0OlxuLVx0aWYgKG9wdHMtXHUwMDNlbmV0bnNfaWQgXHUwMDNlPSAwKVxuK1x0aWYgKG5ldG5zX2lkIFx1MDAzZT0gMClcbiBcdFx0cHV0X25ldChuZXQpO1xuIFxuIFx0cmV0dXJuIGN0O1xuQEAgLTE4Niw0NiArMjAwLDYwIEBAIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqX19icGZfbmZfY3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgY3Rfem9uZTtcbiBcdHN0cnVjdCBuZl9jb25uICpjdDtcbitcdHUxNiBjdF96b25lX2lkO1xuK1x0czMyIG5ldG5zX2lkO1xuK1x0dTggY3Rfem9uZV9kaXIgPSAwO1xuK1x0dTggcmVzZXJ2ZWRbM10gPSB7fTtcbitcdHU4IGw0cHJvdG87XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFvcHRzIHx8ICFicGZfdHVwbGUpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0aWYgKCEob3B0c19sZW4gPT0gTkZfQlBGX0NUX09QVFNfU1ogfHwgb3B0c19sZW4gPT0gMTIpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbitcbitcdG5ldG5zX2lkID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlbmV0bnNfaWQpO1xuK1x0bDRwcm90byA9IFJFQURfT05DRShvcHRzLVx1MDAzZWw0cHJvdG8pO1xuK1x0Y3Rfem9uZV9pZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZWN0X3pvbmVfaWQpO1xuIFx0aWYgKG9wdHNfbGVuID09IE5GX0JQRl9DVF9PUFRTX1NaKSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZXJlc2VydmVkWzBdIHx8IG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMV0gfHwgb3B0cy1cdTAwM2VyZXNlcnZlZFsyXSlcbitcdFx0Y3Rfem9uZV9kaXIgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VjdF96b25lX2Rpcik7XG4rXHRcdHJlc2VydmVkWzBdID0gUkVBRF9PTkNFKG9wdHMtXHUwMDNlcmVzZXJ2ZWRbMF0pO1xuK1x0XHRyZXNlcnZlZFsxXSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkWzFdKTtcbitcdFx0cmVzZXJ2ZWRbMl0gPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VyZXNlcnZlZFsyXSk7XG4rXHRcdGlmIChyZXNlcnZlZFswXSB8fCByZXNlcnZlZFsxXSB8fCByZXNlcnZlZFsyXSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChvcHRzLVx1MDAzZWN0X3pvbmVfaWQpXG4rXHRcdGlmIChjdF96b25lX2lkKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuLVx0aWYgKHVubGlrZWx5KG9wdHMtXHUwMDNlbDRwcm90byAhPSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgb3B0cy1cdTAwM2VsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbitcdGlmICh1bmxpa2VseShsNHByb3RvICE9IElQUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBsNHByb3RvICE9IElQUFJPVE9fVURQKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9UTyk7XG4tXHRpZiAodW5saWtlbHkob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2MgQlBGX0ZfQ1VSUkVOVF9ORVROUykpXG4rXHRpZiAodW5saWtlbHkobmV0bnNfaWQgXHUwMDNjIEJQRl9GX0NVUlJFTlRfTkVUTlMpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbi1cdGVyciA9IGJwZl9uZl9jdF90dXBsZV9wYXJzZShicGZfdHVwbGUsIHR1cGxlX2xlbiwgb3B0cy1cdTAwM2VsNHByb3RvLFxuK1x0ZXJyID0gYnBmX25mX2N0X3R1cGxlX3BhcnNlKGJwZl90dXBsZSwgdHVwbGVfbGVuLCBsNHByb3RvLFxuIFx0XHRcdFx0ICAgIElQX0NUX0RJUl9PUklHSU5BTCwgXHUwMDI2dHVwbGUpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcbi1cdGlmIChvcHRzLVx1MDAzZW5ldG5zX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRuZXQgPSBnZXRfbmV0X25zX2J5X2lkKG5ldCwgb3B0cy1cdTAwM2VuZXRuc19pZCk7XG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKSB7XG4rXHRcdG5ldCA9IGdldF9uZXRfbnNfYnlfaWQobmV0LCBuZXRuc19pZCk7XG4gXHRcdGlmICh1bmxpa2VseSghbmV0KSlcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTkVUKTtcbiBcdH1cbiBcbiBcdGlmIChvcHRzX2xlbiA9PSBORl9CUEZfQ1RfT1BUU19TWikge1xuLVx0XHRpZiAob3B0cy1cdTAwM2VjdF96b25lX2RpciA9PSAwKVxuLVx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuLVx0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSxcbi1cdFx0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9pZCwgb3B0cy1cdTAwM2VjdF96b25lX2RpciwgMCk7XG4rXHRcdGlmIChjdF96b25lX2RpciA9PSAwKSB7XG4rXHRcdFx0Y3Rfem9uZV9kaXIgPSBORl9DVF9ERUZBVUxUX1pPTkVfRElSO1xuK1x0XHRcdG9wdHMtXHUwMDNlY3Rfem9uZV9kaXIgPSBjdF96b25lX2RpcjtcbitcdFx0fVxuK1x0XHRuZl9jdF96b25lX2luaXQoXHUwMDI2Y3Rfem9uZSwgY3Rfem9uZV9pZCwgY3Rfem9uZV9kaXIsIDApO1xuIFx0fSBlbHNlIHtcbiBcdFx0Y3Rfem9uZSA9IG5mX2N0X3pvbmVfZGZsdDtcbiBcdH1cbiBcbiBcdGhhc2ggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCBcdTAwMjZjdF96b25lLCBcdTAwMjZ0dXBsZSk7XG4tXHRpZiAob3B0cy1cdTAwM2VuZXRuc19pZCBcdTAwM2U9IDApXG4rXHRpZiAobmV0bnNfaWQgXHUwMDNlPSAwKVxuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhhc2gpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDMuNjM2NzIyMDU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNDQ4NzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBOZXRmaWx0ZXIgQ29ubnRyYWNrIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AuIEl0J3MgYSBzb2xpZCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgcG90ZW50aWFsIFRpbWUtb2YtQ2hlY2sgdG8gVGltZS1vZi1Vc2UgKFRPQ1RPVSkgdnVsbmVyYWJpbGl0aWVzLiBUaGV5J3JlIHVzaW5nIGBSRUFEX09OQ0VgIG9uIHRoZSBgb3B0c2AgZmllbGRzIGluIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBTbWFydC4gSXQgcHJldmVudHMgdGhlIEJQRiBwcm9ncmFtIGZyb20gc25lYWtpbmcgaW4gY29uY3VycmVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBgb3B0c2Agc3RydWN0IGFmdGVyIGl0cyBpbml0aWFsIGNoZWNrLCBidXQgYmVmb3JlIHRoZSBhY3R1YWwgdXNlLiBDbGFzc2ljIHJhY2UgY29uZGl0aW9uIG1pdGlnYXRpb24uXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudD8gSXTigJlzIGZ1bmN0aW9uYWxseSBzb3VuZC4gV2UncmUgYWRkcmVzc2luZyBhIGtub3duIGlzc3VlIHdpdGhpbiB0aGUgQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVyLiBEZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGNvbmZpcm0gdGhlIGNoYW5nZS5cblxuTm93LCBsZXQgbWUgcGlucG9pbnQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gUmlnaHQsIHRoZXNlIGFyZSBCUEYgaGVscGVycyBvciBrZXJuZWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgZXhwb3NlZCB0byB0aGUgQlBGIHNpZGUuIEknbGwgbmF2aWdhdGUgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jYCB0byBzZWUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IHRoZXkgYXJlIGV4cG9zZWQuIEdvdHRhIHRyYWNlIGhvdyB0aGUgQlBGIHByb2dyYW1zIGdldCBhY2Nlc3MgdG8gdGhlc2UgZ3V5cyB0byBmdWxseSBncmFzcCB0aGUgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIHZlY3RvciB0aGlzIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MDkuNjQxMjEyNjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzgxNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX25mX2N0X2FsbG9jX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTExNz1zdGF0aWMgc3RydWN0IG5mX2Nvbm4gKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjExODpfX2JwZl9uZl9jdF9hbGxvY19lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTExOS1cXHRcXHRcXHR1MzIgdHVwbGVfbGVuLCBzdHJ1Y3QgYnBmX2N0X29wdHMgKm9wdHMsIHUzMiBvcHRzX2xlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOT1icGZfeGRwX2N0X2FsbG9jKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMzNTpcXHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkoZGV2X25ldChjdHgtXFx1MDAzZXJ4cS1cXHUwMDNlZGV2KSwgYnBmX3R1cGxlLCB0dXBsZV9fc3osXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzM2LVxcdFxcdFxcdFxcdCAgICAgICBvcHRzLCBvcHRzX19zeiwgMTApO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9Mzg1PWJwZl9za2JfY3RfYWxsb2Moc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTItXFx0bmV0ID0gc2tiLVxcdTAwM2VkZXYgPyBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KSA6IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM5MzpcXHRuZmN0ID0gX19icGZfbmZfY3RfYWxsb2NfZW50cnkobmV0LCBicGZfdHVwbGUsIHR1cGxlX19zeiwgb3B0cywgb3B0c19fc3osIDEwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zOTQtXFx0cmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKilicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MjowOS42ODM2MDA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM1MjcwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JraW5nL2VCUEYsIGFuZCB0aGlua2luZyBvdXQgbG91ZDpcblxuKipEaXZpbmcgaW50byBDb25uZWN0aW9uIFRyYWNraW5nIHdpdGggWERQIGFuZCBTS0IqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UncmUgaGFuZGxpbmcgY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEkgc2VlIHRoYXQgYGJwZl94ZHBfY3RfYWxsb2NgIGFuZCBgYnBmX3NrYl9jdF9hbGxvY2AgYXJlIGJvdGggY2FsbGluZyB0aGF0IGludGVybmFsIGZ1bmN0aW9uLCBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFzIGl0IGluZGljYXRlcyBhIHNoYXJlZCBhbGxvY2F0aW9uIHBhdGh3YXkgZm9yIGNvbm50cmFjayBlbnRyaWVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSdyZSBpbiBhbiBYRFAgY29udGV4dCBvciBhbiBTS0IgY29udGV4dC4gVGhhdCBsaWtlbHkgbWVhbnMgc29tZSBjb21tb24gY29yZSBsb2dpYy5cblxuTm93LCB3aGVyZSBhcmUgd2UgKmxvb2tpbmcgdXAqIHRoZXNlIGFsbG9jYXRlZCBlbnRyaWVzPyBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgb3V0IGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgYWN0dWFsbHkgcmV0cmlldmluZyB0aG9zZSBjb25udHJhY2sgZW50cmllcyBhZnRlciB0aGV5J3JlIGFsbG9jYXRlZC4gVGhlIGxvb2t1cCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmV0cmlldmFsIG9jY3Vycywgc28gdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGlmZWN5Y2xlLiBHb3R0YSBzZWUgaG93IHRoZSBhbGxvY2F0aW9uIGFuZCBsb29rdXAgY29ycmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjk2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6MTMuMzk3MTMwNTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjQxNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYnBmX25mX2N0X2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTg9X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE5My1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxOTQ6c3RhdGljIHN0cnVjdCBuZl9jb25uICpfX2JwZl9uZl9jdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE5NS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9MzU3PWJwZl94ZHBfY3RfbG9va3VwKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzY0LVxcdGNhbGxlcl9uZXQgPSBkZXZfbmV0KGN0eC1cXHUwMDNlcnhxLVxcdTAwM2VkZXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjM2NTpcXHRuZmN0ID0gX19icGZfbmZfY3RfbG9va3VwKGNhbGxlcl9uZXQsIGJwZl90dXBsZSwgdHVwbGVfX3N6LCBvcHRzLCBvcHRzX19zeik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzY2LVxcdHJldHVybiBicGZfY3Rfb3B0c19yZXN1bHQob3B0cywgb3B0c19fc3osIG5mY3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM9NDE0PWJwZl9za2JfY3RfbG9va3VwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNDIxLVxcdGNhbGxlcl9uZXQgPSBza2ItXFx1MDAzZWRldiA/IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpIDogc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NDIyOlxcdG5mY3QgPSBfX2JwZl9uZl9jdF9sb29rdXAoY2FsbGVyX25ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MjMtXFx0cmV0dXJuIGJwZl9jdF9vcHRzX3Jlc3VsdChvcHRzLCBvcHRzX19zeiwgbmZjdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjEzLjQzOTc4MDA0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjE4ODc4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdGhpcyBjb25uZWN0aW9uIHRyYWNraW5nIGZ1bmN0aW9uYWxpdHkuXG5cbioqQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZvdXIgY3J1Y2lhbCBmdW5jdGlvbnMgdGhhdCBzZXJ2ZSBhcyB0aGUgbWFpbiBpbnRlcmFjdGlvbiBwb2ludHMgZm9yIHRoaXMgY29ubmVjdGlvbiB0cmFja2luZyBpbXBsZW1lbnRhdGlvbi4gSSdtIHNlZWluZzogYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBjb3ZlcmluZyBhbGxvY2F0aW9uIGFuZCBsb29rdXAsIGFuZCBkaWZmZXJlbnRpYXRlZCBieSBYRFAgYW5kIFNLQiBjb250ZXh0LiBUaGF0IHNlZW1zIGxvZ2ljYWwuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBzdHJ1Y3R1cmUgaXMgaW1tZWRpYXRlbHkgY2xlYXIuXG5cbk5vdywgYSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHZlcmlmeSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBhbmQgc3VjY2Vzc2Z1bGx5IHV0aWxpemUgdGhpcyBjb2RlLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIGZsYWdzIGFyZSBuZWVkZWQsIHNvIHRoaXMgYWxsIGNvbXBpbGVzIGNvcnJlY3RseS4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSBhbmQgcHJvcGVybHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHRhcmdldCBrZXJuZWwgZW52aXJvbm1lbnQuIExldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHByb3Blcmx5IHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjQ4LjY1ODY2MjY4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTcxMzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg9aWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTE4LSNpbmNsdWRlIFxcdTAwM2NuZXQveGRwLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz01Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IG5mX2Nvbm50cmFja19rZnVuY19zZXQgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NDMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTQ0OmludCByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtNTQ1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTU1OC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1NTk6dm9pZCBjbGVhbnVwX25mX2Nvbm50cmFja19icGYodm9pZClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01NjAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTM2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzozNzojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTM4LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmhcXHUwMDNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjQ0OT12b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX3N0YXJ0KHZvaWQpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI0NTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNDUxOlxcdGNsZWFudXBfbmZfY29ubnRyYWNrX2JwZigpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNDUyLVxcdGNvbm50cmFja19nY193b3JrLmV4aXRpbmcgPSB0cnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTI2MjU9aW50IG5mX2Nvbm50cmFja19pbml0X3N0YXJ0KHZvaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMjY4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM6MjY4NzpcXHRyZXQgPSByZWdpc3Rlcl9uZl9jb25udHJhY2tfYnBmKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jLTI2ODgtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmM9MjczOD1pbnQgbmZfY29ubnRyYWNrX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoyNzY3Oi8qIGN0bmV0bGluayBjb2RlIHNoYXJlZCBieSBib3RoIGN0bmV0bGluayBhbmQgbmZfY29ubnRyYWNrX2JwZiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0yNzY4LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9icGYuYzoxMTojaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmhcXHUwMDNlXFxubmV0L25ldGZpbHRlci9uZl9uYXRfYnBmLmMtMTItI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaFxcdTAwM2VcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0xOC1cXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmM6MTk6I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5oXFx1MDAzZVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0Mjo0OC43MTAzODExNDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzczNDUzNzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgQ29ublRyYWNrIEJQRiBDb2RlKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgY29ubnRyYWNrIEJQRiBpbnRlZ3JhdGlvbiwgb25seSBnZXRzIGNvbXBpbGVkIGlmIGJvdGggYENPTkZJR19ORl9DT05OVFJBQ0tgIGFuZCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBhcmUgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgZmlyc3QgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3MgdmVyaWZ5IHRob3NlIGRlcGVuZGVuY2llcyBhbmQgbG9vayBmb3IgYW55IG90aGVyIGhpZGRlbiBvbmVzLlwiXG5cbmBDT05GSUdfTkZfQ09OTlRSQUNLYCwgSSByZWNhbGwsIGlzIGRlZmluZWQgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyBwcmV0dHkgc3RhbmRhcmQgbG9jYXRpb24gZm9yIG5ldGZpbHRlciBzdHVmZi4gQW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLCB0aGF0J3MgZ29pbmcgdG8gYmUgbmVzdGxlZCBhd2F5IGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9idmlvdXMgZW5vdWdoLCBnaXZlbiB0aGF0IEJURiBzdHVmZi5cblxuQWgsIGFuZCBJIGFsbW9zdCBmb3Jnb3QuIFdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIHNvIGBCUEZfU1lTQ0FMTGAgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudC4gTm8gQlBGIHdpdGhvdXQgdGhlIHN5c2NhbGwuIEdvb2QuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2ssIGxldCdzIHBvcCBvcGVuIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY2AgaXRzZWxmLiBUaGVyZSBtaWdodCBiZSBzb21lIGltcGxpY2l0IGRlcGVuZGVuY2llcyBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGNvbmRpdGlvbnMgbWlnaHQgYmUgYXQgcGxheSBpbiB0aGF0IHNvdXJjZSBmaWxlIGl0c2VsZi4gSXQncyBhbHdheXMgdGhlIGRldmlsIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQyOjUzLjQ4MzgzNzc4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0ZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcdGJvb2wgICdDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXFx0Ym9vbCBcXFwiU3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCdcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cXHR0cmlzdGF0ZSBcXFwiSC4zMjMgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIklSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cXHR0cmlzdGF0ZVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXFx0dHJpc3RhdGUgXFxcIlNOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXFx0dHJpc3RhdGUgXFxcIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cXHR0cmlzdGF0ZSBcXFwiU0FORSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cXHR0cmlzdGF0ZSBcXFwiU0lQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cXHR0cmlzdGF0ZSBcXFwiVEZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0Mjo1My41Mjk3MDc3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4ODU0NTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBDb25uZWN0aW9uIFRyYWNraW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZ1bmN0aW9uYWwgYnVnIHdpdGhpbiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGFuZCBgX19icGZfbmZfY3RfbG9va3VwYC4gSSByZWNvZ25pemUgdGhlc2UgZnVuY3Rpb25zLCBvZiBjb3Vyc2UuIEl0J3MgaW1wb3J0YW50IHRvIG5vdGUgaG93IHRoZXkncmUgZXhwb3NlZCDigJMgdmlhIEJQRiBrZnVuY3MsIHNwZWNpZmljYWxseSBgYnBmX3hkcF9jdF9hbGxvY2AsIGBicGZfc2tiX2N0X2FsbG9jYCwgYGJwZl94ZHBfY3RfbG9va3VwYCwgYW5kIGBicGZfc2tiX2N0X2xvb2t1cGAuIFRoYXQncyB0aGUga2V5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGtmdW5jcywgYW5kIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucywgYXJlIHByb3Blcmx5IGFjY291bnRlZCBmb3IgaW4gYEZvY3VzU3ltYm9sc2Agc28gdGhlIGluc3RydW1lbnRhdGlvbiBpcyBjb3JyZWN0XCIuXG5cbldhaXQsIGFyZW4ndCB0aG9zZSBgX19icGZfbmZfY3RfKmAgZnVuY3Rpb25zIHN0YXRpYz8gSSBoYXZlIHRvIGJlIHN1cmUgdGhleSdyZSBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIG1hcC4gQnV0IHRoZW4gYWdhaW4sIHRoZXkgX2FyZV8gY2FsbGVkIGJ5IHRoZSBrZnVuY3MsIHNvIHRoZXkgc2hvdWxkIGJlIHJlYWNoYWJsZS4gKldhaXQgYSBzZWNvbmQsIG1heWJlIEknbSBtaXNyZW1lbWJlcmluZy4gTGV0IG1lIGRvdWJsZSBjaGVjayBpZiBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGFjdHVhbGx5IHN0YXRpYyEqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjQsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6NTkuMjE4MjU2MTAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgzOTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2JwZl9uZl9jdF9hbGxvY19lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0xMTc9c3RhdGljIHN0cnVjdCBuZl9jb25uICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzoxMTg6X19icGZfbmZfY3RfYWxsb2NfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0xMTktXFx0XFx0XFx0dTMyIHR1cGxlX2xlbiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz0zMjk9YnBmX3hkcF9jdF9hbGxvYyhzdHJ1Y3QgeGRwX21kICp4ZHBfY3R4LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKmJwZl90dXBsZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozMzU6XFx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KGRldl9uZXQoY3R4LVxcdTAwM2VyeHEtXFx1MDAzZWRldiksIGJwZl90dXBsZSwgdHVwbGVfX3N6LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzNi1cXHRcXHRcXHRcXHQgICAgICAgb3B0cywgb3B0c19fc3osIDEwKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTM4NT1icGZfc2tiX2N0X2FsbG9jKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzkyLVxcdG5ldCA9IHNrYi1cXHUwMDNlZGV2ID8gZGV2X25ldChza2ItXFx1MDAzZWRldikgOiBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzozOTM6XFx0bmZjdCA9IF9fYnBmX25mX2N0X2FsbG9jX2VudHJ5KG5ldCwgYnBmX3R1cGxlLCB0dXBsZV9fc3osIG9wdHMsIG9wdHNfX3N6LCAxMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzk0LVxcdHJldHVybiAoc3RydWN0IG5mX2Nvbm5fX19pbml0ICopYnBmX2N0X29wdHNfcmVzdWx0KG9wdHMsIG9wdHNfX3N6LCBuZmN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDI6NTkuMjc1MTAwNDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0OTc4NjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgQ29ubmVjdGlvbiBUcmFja2luZyBFbnRyeSBQb2ludHMgaW4gQlBGKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyBjb25uZWN0aW9uIHRyYWNraW5nIGludGVyYWN0cyB3aXRoIEJQRi4gSSBzZWUgdGhhdCBgX19icGZfbmZfY3RfYWxsb2NfZW50cnlgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBhbmQgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQgSSBtaWdodCBpbnRlcmFjdCB3aXRoLiBUaGF0J3MgZ29vZCB0byBrbm93LCBuYXJyb3dzIGRvd24gbXkgZm9jdXMuXG5cblNvLCB0aGUgaW50ZXJlc3RpbmcgZW50cnkgcG9pbnRzIGZvciBhbGxvY2F0aW9uIGFuZCBsb29rdXAgYXJlIGNsZWFybHkgYGJwZl94ZHBfY3RfYWxsb2NgLCBgYnBmX3NrYl9jdF9hbGxvY2AsIGBicGZfeGRwX2N0X2xvb2t1cGAsIGFuZCBgYnBmX3NrYl9jdF9sb29rdXBgLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdCBhdCB0aGUgdXNlcnNwYWNlIGludGVyZmFjZSwgYW5kIHdoZXRoZXIgdGhlc2UgYXJlIGV4cG9ydGVkIGRpcmVjdGx5IG9yIGFzIGtmdW5jcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgdGhlIGV4cG9ydCB0YWJsZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0uIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHdoaWNoIG1lY2hhbmlzbSBpcyBiZWluZyB1c2VkIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhlc2UgYXJlIGNhbGxhYmxlIGFuZCB3aGVyZSB0aGV5IGFyZSBjYWxsZWQgZnJvbSwgd2hhdCBsaW1pdGF0aW9ucyBtaWdodCB0aGVyZSBiZSBvbiB0aGVpciB1c2FnZSwgYW5kIHdoZXRoZXIgdGhleSBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZSBvdmVyIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDA5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MDYuMDI0ODg5NTM0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ5MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMxMT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmMtMzEyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMxMzovKiBicGZfeGRwX2N0X2FsbG9jIC0gQWxsb2NhdGUgYSBuZXcgQ1QgZW50cnlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy0zMTQtICpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTMyOD1fX2JwZl9rZnVuYyBzdHJ1Y3QgbmZfY29ubl9fX2luaXQgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjMyOTpicGZfeGRwX2N0X2FsbG9jKHN0cnVjdCB4ZHBfbWQgKnhkcF9jdHgsIHN0cnVjdCBicGZfc29ja190dXBsZSAqYnBmX3R1cGxlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTMzMC1cXHRcXHQgdTMyIHR1cGxlX19zeiwgc3RydWN0IGJwZl9jdF9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3opXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00MTQ9YnBmX3NrYl9jdF9sb29rdXAoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICpicGZfdHVwbGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MzAtICogQG5mY3RcXHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubl9fX2luaXQgb2JqZWN0LCBvYnRhaW5lZFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jOjQzMTogKlxcdFxcdCAgIHVzaW5nIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00MzItICovXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00NTk9X19icGZfa2Z1bmMgdm9pZCBicGZfY3RfcmVsZWFzZShzdHJ1Y3QgbmZfY29ubiAqbmZjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTQ3MC0gKiBAbmZjdFxcdCAtIFBvaW50ZXIgdG8gcmVmZXJlbmNlZCBuZl9jb25uIG9iamVjdCwgb2J0YWluZWQgdXNpbmdcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo0NzE6ICogICAgICAgICAgICAgICAgIGJwZl94ZHBfY3RfYWxsb2Mgb3IgYnBmX3NrYl9jdF9hbGxvYy5cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy00NzItICogQHRpbWVvdXQgICAgICAtIFRpbWVvdXQgaW4gbXNlY3MuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYz00ODk9X19icGZfa2Z1bmMgaW50IGJwZl9jdF9jaGFuZ2VfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqbmZjdCwgdTMyIHRpbWVvdXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MDAtICogQG5mY3RcXHQgLSBQb2ludGVyIHRvIHJlZmVyZW5jZWQgbmZfY29ubiBvYmplY3QsIG9idGFpbmVkIHVzaW5nXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYnBmLmM6NTAxOiAqXFx0XFx0ICAgYnBmX3hkcF9jdF9hbGxvYyBvciBicGZfc2tiX2N0X2FsbG9jLlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jLTUwMi0gKiBAc3RhdHVzICAgICAgIC0gTmV3IHN0YXR1cyB2YWx1ZS5cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2JwZi5jPTUyNj1CVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYzo1Mjc6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfYWxsb2MsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19icGYuYy01MjgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl94ZHBfY3RfbG9va3VwLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjA2LjA2NjM4OTY2NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzE5OTc2MzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgS2VybmVsIEZ1bmN0aW9uYWxpdHkgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBjbGVhcmx5IGluZGljYXRlcyB0aGF0IHRoZXNlIGFyZSBpbmRlZWQga2VybmVsIGZ1bmN0aW9ucywgb3Iga2Z1bmNzIGFzIHdlJ3JlIGNhbGxpbmcgdGhlbS4gVGhlcmVmb3JlLCB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBuZWVkcyB0byBlbmNvbXBhc3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC5cblxuTW92aW5nIG9udG8gdGhlIGNvbmZpZ3VyYXRpb25zLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgbXVzdCBjb250YWluOiBgTkZfQ09OTlRSQUNLYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfU1lTQ0FMTGAuXG5cbk5vdywgYmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBjcml0aWNhbCBjb25maWdzLiBgREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgbmVjZXNzYXJ5LCBnaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBrZnVuY3MuIEFuZCBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGVzc2VudGlhbCBmb3IgdGhlIGZpbGUgdG8gZXZlbiBjb21waWxlIHByb3Blcmx5LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjEwLjc4NjM2Nzk2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIwMzQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX2JwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTg9aWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLKSxtKVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk6bmZfY29ubnRyYWNrLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjAtZWxzZSBpZmVxICgkKENPTkZJR19ORl9DT05OVFJBQ0spLHkpXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTpuZl9jb25udHJhY2stJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IG5mX2Nvbm50cmFja19icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MTAuODI4NDA4NTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTg2Mzk0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFN5emthbGxlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciBzeXprYWxsZXIsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgQlRGIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgY29ubmVjdGlvbiB0cmFja2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYE5GX0NPTk5UUkFDS2AgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIChidWlsdC1pbiksIHRoZW4gYERFQlVHX0lORk9fQlRGYCBpcyB0aGUgY29ycmVjdCBvcHRpb24uIElmIGBORl9DT05OVFJBQ0tgIGlzIGEgbG9hZGFibGUgbW9kdWxlLCB0aGVuIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYCB3b3VsZCBiZSBuZWNlc3NhcnkuIEhvd2V2ZXIsIHNpbmNlIHN5emthbGxlciB0eXBpY2FsbHkgYnVpbGRzIGV2ZXJ5dGhpbmcgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLCBteSBhc3N1bXB0aW9uIGlzIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyB0aGUgcmlnaHQgY2hvaWNlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aG91Z2guIFN5emthbGxlciBkb2Vzbid0IHVzZSBtb2R1bGVzIGJ5IGRlZmF1bHQsIHNvIGl0J3MgYSBidWlsdC1pbiBrZXJuZWwgY29uZmlnLiBUaHVzLCBgTkZfQ09OTlRSQUNLYCBhbmQgYERFQlVHX0lORk9fQlRGYCBzaG91bGQgYmUgZW5vdWdoLCBhbmQgSSBkb24ndCBuZWVkIGBERUJVR19JTkZPX0JURl9NT0RVTEVTYC5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYEJQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYERFQlVHX0lORk9fQlRGYCwgb3IgaWYgaXQncyBhbHJlYWR5IGltcGxpY2l0bHkgZW5hYmxlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIHJlc2VhcmNoIHRoYXQgc3BlY2lmaWMgZGVwZW5kZW5jeSBhbmQgY29uZmlybSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDM6MTUuODQ3MDUwNzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzM3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19JTkZPX0JURlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zNzg9Y29uZmlnIERFQlVHX0lORk9fU1BMSVRcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTM5Ny1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozOTg6Y29uZmlnIERFQlVHX0lORk9fQlRGXFxubGliL0tjb25maWcuZGVidWctMzk5LVxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbi0tXFxubGliL0tjb25maWcuZGVidWc9NDE5PWNvbmZpZyBQQUhPTEVfSEFTX0xBTkdfRVhDTFVERVxcbi0tXFxubGliL0tjb25maWcuZGVidWctNDI3LVxcbmxpYi9LY29uZmlnLmRlYnVnOjQyODpjb25maWcgREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmxpYi9LY29uZmlnLmRlYnVnLTQyOS1cXHRib29sIFxcXCJHZW5lcmF0ZSBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmb3Iga2VybmVsIG1vZHVsZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIwOjQzOjE1Ljg5MTc5ODI2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2OTE2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgb2YgREVCVUdfSU5GT19CVEYqKlxuXG5SaWdodCwgc28gd2UgbmVlZCB0byBkaXNzZWN0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBjYXRlZ29yaWVzIHdlIG1pZ2h0IGZpbmQuIEknbGwgbGlrZWx5IHNlZSBkZXBlbmRlbmNpZXMgb24gdGhlIHRvb2xjaGFpbiDigJMgdGhpbmdzIGxpa2UgdGhlIGNvbXBpbGVyIChHQ0MsIENsYW5nKSBhbmQgYXNzZW1ibGVyLCBsaWtlbHkgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IEJURiBnZW5lcmF0aW9uIGFuZCBoYW5kbGluZy4gVGhlbiwgSSdkIGV4cGVjdCB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBrZXJuZWwgaXRzZWxmLCBzcGVjaWZpY2FsbHkgb24ga2VybmVsIGluZnJhc3RydWN0dXJlIHJlbGF0ZWQgdG8gQlRGIGhhbmRsaW5nLCBzdWNoIGFzIHRoZSBCVEYgbG9hZGVyIGFuZCB2ZXJpZmllci4gVGhlcmUgY291bGQgZXZlbiBiZSBkZXBlbmRlbmNpZXMgb24gZGVidWcgaW5mb3JtYXRpb24gZm9ybWF0cyAoRFdBUkYsIGV0Yy4pIHRoYXQgYERFQlVHX0lORk9fQlRGYCBpcyBsZXZlcmFnaW5nIG9yIHJlbHlpbmcgdXBvbiwgcG90ZW50aWFsbHkgdG8gbGluayBiYWNrIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCB0aGUgQlRGIGlzIHJlZmVyZW5jaW5nLiBJIGFsc28gYW50aWNpcGF0ZSBkZXBlbmRlbmNpZXMgb24gYW55IGJ1aWxkIHN5c3RlbSBjb21wb25lbnRzIG5lY2Vzc2FyeSB0byBpbnRlZ3JhdGUgQlRGIGdlbmVyYXRpb24gaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIHNvIHRvb2xzIGxpa2UgYHBhaG9sZWAgb3Igb3RoZXIgdXRpbGl0aWVzIHRoYXQgd29yayB3aXRoIERXQVJGLiBJJ20ga2VlbiB0byBzZWUgaWYgYW55IGFzcGVjdHMgb2YgQlRGIGdlbmVyYXRpb24gYXJlIGNvbmRpdGlvbmFsIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRvby4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gYWN0dWFsbHkgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MzoyMC4yMjg3MTc4NjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM5ODpcXHRjb25maWcgREVCVUdfSU5GT19CVEZcXG4gMzk5OlxcdFxcdGJvb2wgXFxcIkdlbmVyYXRlIEJURiB0eXBlIGluZm9ybWF0aW9uXFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiAhREVCVUdfSU5GT19TUExJVCBcXHUwMDI2XFx1MDAyNiAhREVCVUdfSU5GT19SRURVQ0VEXFxuIDQwMTpcXHRcXHRkZXBlbmRzIG9uICFHQ0NfUExVR0lOX1JBTkRTVFJVQ1QgfHwgQ09NUElMRV9URVNUXFxuIDQwMjpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDQwMzpcXHRcXHRkZXBlbmRzIG9uIFBBSE9MRV9WRVJTSU9OIFxcdTAwM2U9IDEyMlxcbiA0MDQ6XFx0XFx0IyBwYWhvbGUgdXNlcyBlbGZ1dGlscywgd2hpY2ggZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBIZXhhZ29uIHJlbG9jYXRpb25zXFxuIDQwNTpcXHRcXHRkZXBlbmRzIG9uICFIRVhBR09OXFxuIDQwNjpcXHRcXHRoZWxwXFxuIDQwNzpcXHRcXHQgIEdlbmVyYXRlIGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIERXQVJGIGRlYnVnIGluZm8uXFxuIDQwODpcXHRcXHQgIFR1cm5pbmcgdGhpcyBvbiByZXF1aXJlcyBwYWhvbGUgdjEuMjIgb3IgbGF0ZXIsIHdoaWNoIHdpbGwgY29udmVydFxcbiA0MDk6XFx0XFx0ICBEV0FSRiB0eXBlIGluZm8gaW50byBlcXVpdmFsZW50IGRlZHVwbGljYXRlZCBCVEYgdHlwZSBpbmZvLlxcbiA0MTA6XFx0XFxuIDQxMTpcXHRjb25maWcgUEFIT0xFX0hBU19CVEZfVEFHXFxuIDQxMjpcXHRcXHRkZWZfYm9vbCBQQUhPTEVfVkVSU0lPTiBcXHUwMDNlPSAxMjNcXG4gNDEzOlxcdFxcdGRlcGVuZHMgb24gQ0NfSVNfQ0xBTkdcXG4gNDE0OlxcdFxcdGhlbHBcXG4gNDE1OlxcdFxcdCAgRGVjaWRlIHdoZXRoZXIgcGFob2xlIGVtaXRzIGJ0Zl90YWcgYXR0cmlidXRlcyAoYnRmX3R5cGVfdGFnIGFuZFxcbiA0MTY6XFx0XFx0ICBidGZfZGVjbF90YWcpIG9yIG5vdC4gQ3VycmVudGx5IG9ubHkgY2xhbmcgY29tcGlsZXIgaW1wbGVtZW50c1xcbiA0MTc6XFx0XFx0ICB0aGVzZSBhdHRyaWJ1dGVzLCBzbyBtYWtlIHRoZSBjb25maWcgZGVwZW5kIG9uIENDX0lTX0NMQU5HLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMDo0MzoyMC4yMjg4ODcxODFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0MDgxNDI2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgTmV0ZmlsdGVyIENvbm50cmFjayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIEJQRiBuZXRmaWx0ZXIgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHksIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMuIEZpcnN0LCBgREVCVUdfSU5GT19CVEZgIGlzIG9idmlvdXNseSBsaW5rZWQgdG8gYEJQRl9TWVNDQUxMYCwgc28gSSdsbCBiZSBpbmNsdWRpbmcgYm90aCBvZiB0aG9zZSBhcyBkZXBlbmRlbmNpZXMuIE9uIHRvcCBvZiB0aGF0LCBgTkZfQ09OTlRSQUNLYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG1ha2Ugc3VyZSB0byBlbmFibGUgdGhvc2UgdGhyZWUgY29uZmlncy5cblxuTm93LCBsZXQncyBtYXAgdGhlIGNoYW5nZXMuIEl0J3MgbW9kaWZ5aW5nIGBfX2JwZl9uZl9jdF9hbGxvY19lbnRyeWAgYW5kIGBfX2JwZl9uZl9jdF9sb29rdXBgLiBJIHJlY29nbml6ZSB0aGVzZSwgdGhleSBhcmUgY2FsbGVkIGJ5IHRoZSBjb3JlIEJQRiBrZnVuY3M6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gQmVjYXVzZSB0aGVzZSBhcmUga2Z1bmNzLCB0aGV5J3JlIGRlZmluaXRpdmVseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgd2hpY2ggbWFrZXMgdGhlbSBpZGVhbCBmb3IgdGVzdGluZy5cblxuVGhlIHBhdGNoJ3MgY3J1eCBpcyB0aGUgVE9DVE9VIGJ1ZyBmaXggdXNpbmcgYFJFQURfT05DRWAgb24gdGhlIGBvcHRzYCBzdHJ1Y3QgZmllbGRzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZy4gSSdsbCBmbGFnIHRoYXQgYXMgYSBcIldvcnRoRnV6emluZ1wiIHRhcmdldC5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayBteSBgRm9jdXNTeW1ib2xzYC4gVGhleSBzaG91bGQgYmU6IGBicGZfeGRwX2N0X2FsbG9jYCwgYGJwZl9za2JfY3RfYWxsb2NgLCBgYnBmX3hkcF9jdF9sb29rdXBgLCBhbmQgYGJwZl9za2JfY3RfbG9va3VwYC4gSSdtIGdvaW5nIHRvIHN0aWNrIHdpdGggdGhhdCwgZXZlbiB0aG91Z2ggaXQncyBtb2RpZnlpbmcgdGhlIHN0YXRpYyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBieSB0aGUga2Z1bmNzLCBzbyBmb2N1c2luZyBvbiB0aGUga2Z1bmNzIGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBjb3ZlcmFnZS5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZSByZWxldmFudCBrZnVuY3MgYXJlIGV4cG9ydGVkLiBgYnBmX3hkcF9jdF9hbGxvY2AgaXMgZXhwb3J0ZWQsIGxvY2F0ZWQgd2l0aGluIGBCVEZfS0ZVTkNTX1NUQVJUKG5mX2N0X2tmdW5jX3NldClgLlxuXG5TbywgaGVyZSdzIHRoZSBwbGFuLiBJJ2xsIHNldDpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiYnBmX3hkcF9jdF9hbGxvY1wiLCBcImJwZl9za2JfY3RfYWxsb2NcIiwgXCJicGZfeGRwX2N0X2xvb2t1cFwiLCBcImJwZl9za2JfY3RfbG9va3VwXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiTkZfQ09OTlRSQUNLXCIsIFwiREVCVUdfSU5GT19CVEZcIiwgXCJCUEZfU1lTQ0FMTFwiXWBcbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgQlBGIGtmdW5jcy5cIlxuXG5UaGlzIHNlZW1zIGxpa2UgdGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIGZvciB0ZXN0aW5nIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzYsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjA6NDQ6MjIuNjM3MDMyNjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTUxMTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfc2tiX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfeGRwX2N0X2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9jdF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfeGRwX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfc2tiX2N0X2FsbG9jXCIsXG4gICAgXCJicGZfeGRwX2N0X2xvb2t1cFwiLFxuICAgIFwiYnBmX3NrYl9jdF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFRPQ1RPVSBidWcgaW4gQlBGIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyBieSB1c2luZyBSRUFEX09OQ0UuIFRoZSBtb2RpZmllZCBsb2dpYyBpcyByZWFjaGFibGUgdmlhIEJQRiBrZnVuY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj97n2[1] Phase: Succeeded StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 20:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2] Phase: Succeeded StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 20:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 20:44:33 +0000 UTC FinishedAt: 2026-07-31 20:44:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj97n2/series-workflowj97n2-convert-artifact-2769559846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 20:44:44 +0000 UTC FinishedAt: 2026-07-31 21:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 20:44:44 +0000 UTC FinishedAt: 2026-07-31 21:10: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:*b03de570-cc5d-4e04-905c-01557beb6d06,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-workflowj97n2/series-workflowj97n2-convert-artifact-2769559846/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": "f59cc523-66ee-4a62-bc7f-0240cfdf3e10", "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-workflowj97n2/series-workflowj97n2-build-action-3604627900/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 20:44:44 +0000 UTC FinishedAt: 2026-07-31 21:10:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b03de570-cc5d-4e04-905c-01557beb6d06,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-workflowj97n2/series-workflowj97n2-convert-artifact-2769559846/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": "f59cc523-66ee-4a62-bc7f-0240cfdf3e10", "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-workflowj97n2/series-workflowj97n2-build-action-3604627900/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 21:10:15 +0000 UTC FinishedAt: 2026-07-31 21:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 21:10:15 +0000 UTC FinishedAt: 2026-07-31 21:10:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 21:10:15 +0000 UTC FinishedAt: 2026-07-31 21:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 21:10:15 +0000 UTC FinishedAt: 2026-07-31 21:10:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj97n2/series-workflowj97n2-convert-artifact-748612217/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 21:10:55 +0000 UTC FinishedAt: 2026-07-31 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 21:10:55 +0000 UTC FinishedAt: 2026-07-31 21:12:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f59cc523-66ee-4a62-bc7f-0240cfdf3e10,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-workflowj97n2/series-workflowj97n2-build-action-3604627900/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-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 21:13:08 +0000 UTC FinishedAt: 2026-07-31 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 21:13:08 +0000 UTC FinishedAt: 2026-07-31 21:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 21:13:08 +0000 UTC FinishedAt: 2026-07-31 21:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 21:13:08 +0000 UTC FinishedAt: 2026-07-31 21:40:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b03de570-cc5d-4e04-905c-01557beb6d06,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-workflowj97n2/series-workflowj97n2-convert-artifact-748612217/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": "7a972d9d-d2b9-4108-97f5-39dbe2ca1ea3", "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-workflowj97n2/series-workflowj97n2-build-action-4026182741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 21:13:08 +0000 UTC FinishedAt: 2026-07-31 21:40:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b03de570-cc5d-4e04-905c-01557beb6d06,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-workflowj97n2/series-workflowj97n2-convert-artifact-748612217/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": "7a972d9d-d2b9-4108-97f5-39dbe2ca1ea3", "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-workflowj97n2/series-workflowj97n2-build-action-4026182741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 21:40:36 +0000 UTC FinishedAt: 2026-07-31 21:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 21:40:36 +0000 UTC FinishedAt: 2026-07-31 21:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 21:40:36 +0000 UTC FinishedAt: 2026-07-31 21:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 21:40:36 +0000 UTC FinishedAt: 2026-07-31 21:42:47 +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:*7a972d9d-d2b9-4108-97f5-39dbe2ca1ea3,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-workflowj97n2/series-workflowj97n2-build-action-4026182741/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-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"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:*f59cc523-66ee-4a62-bc7f-0240cfdf3e10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a972d9d-d2b9-4108-97f5-39dbe2ca1ea3,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-workflowj97n2/series-workflowj97n2-build-action-3604627900/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-workflowj97n2/series-workflowj97n2-build-action-4026182741/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 21:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 21:43:03 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"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-workflowj97n2/series-workflowj97n2-convert-artifact-4123530478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 21:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 21:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 21:42:57 +0000 UTC FinishedAt: 2026-07-31 21:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 21:43:07 +0000 UTC FinishedAt: 2026-07-31 22:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj97n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_xdp_ct_alloc","bpf_skb_ct_alloc","bpf_xdp_ct_lookup","bpf_skb_ct_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","DEBUG_INFO_BTF","BPF_SYSCALL"],"series_id":"8f9b4ff6-2640-42f1-a66f-3d915e35a98a","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 21:43:07 +0000 UTC FinishedAt: 2026-07-31 22:31:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f59cc523-66ee-4a62-bc7f-0240cfdf3e10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7a972d9d-d2b9-4108-97f5-39dbe2ca1ea3,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-workflowj97n2/series-workflowj97n2-build-action-3604627900/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-workflowj97n2/series-workflowj97n2-build-action-4026182741/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-workflowj97n2/series-workflowj97n2-convert-artifact-4123530478/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,}