Name: series-workflows4fmz Phase: Succeeded StartedAt: 2026-07-07 04:40:54 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[0] Phase: Succeeded StartedAt: 2026-07-07 04:40:54 +0000 UTC FinishedAt: 2026-07-07 04:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 04:40:54 +0000 UTC FinishedAt: 2026-07-07 04:59:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9e05e91a9a847ed57926414bd7c2c5e54d6c56c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_RED", "NET_SCH_HTB", "NET_SCH_CAKE", "NET_SCH_FQ_CODEL", "NET_SCH_BPF", "NET_CLS_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9e05e91a9a847ed57926414bd7c2c5e54d6c56c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_RED", "NET_SCH_HTB", "NET_SCH_CAKE", "NET_SCH_FQ_CODEL", "NET_SCH_BPF", "NET_CLS_BPF" ], "series_id": "0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcf_qevent_handle", "bpf_redirect", "bpf_redirect_peer", "bpf_redirect_neigh", "htb_classify", "fq_codel_classify", "cake_classify" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2RmNjRlZGFkZGEyYzA1NTJhOWYxZTM4ZjY5NTljMGFhOTVjYjgwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXG5pbmRleCAzYmQwOGQ3ZjM5YzE4Yy4uNWY1Y2IzNjQzOWZlMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9wa3RfY2xzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxuQEAgLTE1Niw4ICYjNDM7MTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdHJldHVybiBUQ19BQ1RfVU5TUEVDO1xuIH1cbi1cbiAjZW5kaWZcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMsIGJvb2wgY29tcGF0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdHAsIHJlcywgY29tcGF0X21vZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzO1x0ICogVXNlIEJQRiB2aWEgdGN4IG9yIG1pcnJlZCByZWRpcmVjdCBpbnN0ZWFkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQgPT0gVENfQUNUX1JFRElSRUNUKSlcbiYjNDM7XHRcdHJldCA9IFRDX0FDVF9TSE9UO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBfX2Nsc19zZXRfY2xhc3ModW5zaWduZWQgbG9uZyAqY2xwLCB1bnNpZ25lZCBsb25nIGNsKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTI1NTIsMTEgJiM0MzsyNTUyLDEzIEBAIGludCBza2JfZG9fcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fFxuJiM0MztcdFx0ICAgICAoZmxhZ3MgXHUwMDI2ICh+KEJQRl9GX0lOR1JFU1MpIHwgQlBGX0ZfUkVESVJFQ1RfSU5URVJOQUwpKSkpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbiYjNDM7XHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuIFx0cmktXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdHJpLVx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XG4gXG5AQCAtMjU3MywxMSAmIzQzOzI1NzUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWJwZl9uZXRfY3R4X2dldCgpIHx8IGZsYWdzKSlcbiBcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuIFxuJiM0MztcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX1BFRVI7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1OTUsMTEgJiM0MzsyNTk4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsXG4gXHQgICBpbnQsIHBsZW4sIHU2NCwgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuJiM0MztcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG4gXG4tXHRpZiAodW5saWtlbHkoKHBsZW4gXHUwMDI2XHUwMDI2IHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHwgZmxhZ3MpKVxuJiM0MztcdGlmICh1bmxpa2VseSgocGxlbiBcdTAwMjZcdTAwMjYgcGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKSB8fFxuJiM0MztcdFx0ICAgICAhYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gXG4mIzQzO1x0cmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiBcdHJpLVx1MDAzZWZsYWdzID0gQlBGX0ZfTkVJR0ggfCAocGxlbiA/IEJQRl9GX05FWFRIT1AgOiAwKTtcbiBcdHJpLVx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbmluZGV4IGZmZWVhNmRiODMzNzQ3Li5mZWU0NTI0YWRjOThlZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC00MDQ1LDcgJiM0Mzs0MDQ1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVcbiBcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHFlLVx1MDAzZWZpbHRlcl9jaGFpbik7XG4gXG4tXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xuJiM0MztcdHN3aXRjaCAodGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNmNsX3JlcywgZmFsc2UpKSB7XG4gXHRjYXNlIFRDX0FDVF9TSE9UOlxuIFx0XHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xuIFx0XHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbkBAIC00MDU3LDEwICYjNDM7NDA1Nyw2IEBAIHN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1XG4gXHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuIFx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4gXHRcdHJldHVybiBOVUxMO1xuLVx0Y2FzZSBUQ19BQ1RfUkVESVJFQ1Q6XG4tXHRcdHNrYl9kb19yZWRpcmVjdChza2IpO1xuLVx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4tXHRcdHJldHVybiBOVUxMO1xuIFx0Y2FzZSBUQ19BQ1RfQ09OU1VNRUQ6XG4gXHRcdCpyZXQgPSBfX05FVF9YTUlUX1NUT0xFTjtcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggYTNjMTg1NTA1YWZjZTQuLjk0ZWI0N2FjNTRlZTY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtMTczMCw3ICYjNDM7MTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxuIFx0XHRnb3RvIGhhc2g7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4mIzQzO1x0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5pbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtMzEyLDcgJiM0MzszMTIsNyBAQCBzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG5pbmRleCAyNzA4ODc2MGVmZjQ0My4uNGY2NzhkNGZmMTBlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcbkBAIC0zNjQsNyAmIzQzOzM2NCw3IEBAIHN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdGlmICghZmwpXG4gXHRcdHJldHVybiBORVRfWE1JVF9TVUNDRVNTO1xuIFxuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5pbmRleCBjYjhjZjQzN2NlODcwOC4uMjVmY2Y0MDc5ZmVjZTEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRpZiAoVENfSF9NQUooc2tiLVx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXHUwMDNlaGFuZGxlKSB7XG4gXHRcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0XHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4mIzQzO1x0XHRlcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKGVycikge1xuIFx0XHRjYXNlIFRDX0FDVF9TVE9MRU46XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXG5pbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1xuQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBmcV9jb2RlbF9oYXNoKHEsIHNrYikgJiM0MzsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbmluZGV4IDcyZjQ4ZmE0MDEwYmViLi4wNjllMWZhY2Q0MTMwZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC05Niw3ICYjNDM7OTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZxX3BpZV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0cmV0dXJuIGZxX3BpZV9oYXNoKHEsIHNrYikgJiM0MzsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuaW5kZXggN2U1MzcyOTViOGI2NzguLmU4N2Y1MDIxYTE5OTU4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5AQCAtMTE0Myw3ICYjNDM7MTE0Myw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbiBcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuLVx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuJiM0MztcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdH1cbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuJiM0MztcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuaW5kZXggYTQ2N2RkMTIyMzY5NzAuLjY2ZGYzMDkzOWFhNWMxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuQEAgLTM2LDcgJiM0MzszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0aW50IGVycjtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRzd2l0Y2ggKGVycikge1xuIFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmNcbmluZGV4IGU0ZGQ1NmE4OTA3MjViLi43OTQzN2M1ODdlN2VkMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3ByaW8uY1xuQEAgLTM5LDcgJiM0MzszOSw3IEBAIHByaW9fY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSkgIT0gc2NoLVx1MDAzZWhhbmRsZSkge1xuIFx0XHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdFx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdFx0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3FmcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5AQCAtNzA5LDcgJiM0Mzs3MDksNyBAQCBzdGF0aWMgc3RydWN0IHFmcV9jbGFzcyAqcWZxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmYi5jIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xuaW5kZXggYjFkNDY1MDk0Mjc2OTIuLmVkMzk4NjkxOTljMDg0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZmIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0aW50IHJlc3VsdDtcbiBcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuaW5kZXggNzU4Yjg4ZjIxODY1MjcuLjc3Njc1ZjlhNGM0NmU3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBzZnFfaGFzaChxLCBza2IpICYjNDM7IDE7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuaW5kZXggYWRiMjUxNDZlODhjY2YuLmVhNzA0NGYzMGFkYzNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuQEAgLTgyLDYgJiM0Mzs4Miw3IEBAIENPTkZJR19ORVRfU0NIX0JQRj15XG4gQ09ORklHX05FVF9TQ0hfRlE9eVxuIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX0hUQj15XG4mIzQzO0NPTkZJR19ORVRfU0NIX1JFRD15XG4gQ09ORklHX05FVF9TQ0hFRD15XG4gQ09ORklHX05FVERFVlNJTT15XG4gQ09ORklHX05FVEZJTFRFUj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcbkBAIC0wLDAgJiM0MzsxLDExMyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdGNfcWV2ZW50LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBOU19UWFx0XHRcJiMzNDt0Y19xZXZlbnRfdHhcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19SWFx0XHRcJiMzNDt0Y19xZXZlbnRfcnhcJiMzNDtcbiYjNDM7I2RlZmluZSBJUF9UWFx0XHRcJiMzNDsxMC4yNTUuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBfUlhcdFx0XCYjMzQ7MTAuMjU1LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFBJTl9QQVRIXHRcJiMzNDsvc3lzL2ZzL2JwZi90Y19xZXZlbnRfcmVkaXJlY3RcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJsYXN0X3VkcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGRzdCA9IHt9O1xuJiM0MztcdGNoYXIgYnVmWzE0MDBdID0ge307XG4mIzQzO1x0aW50IGZkLCBpO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7dWRwIHNvY2tldFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XG4mIzQzO1x0aW5ldF9wdG9uKEFGX0lORVQsIElQX1JYLCBcdTAwMjZkc3Quc2luX2FkZHIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1c2ggZmFyIG1vcmUgdGhhbiB0aGUgUkVEIHF1ZXVlIGNhbiBob2xkLiBPbmNlIHFhdmcgY3Jvc3NlcyBxdGhfbWluXG4mIzQzO1x0ICogZXZlcnkgZnVydGhlciBwYWNrZXQgaGl0cyB0aGUgY29uZ2VzdGlvbl9kcm9wIC8gZWFybHlfZHJvcCBxZXZlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTAwMDA7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VuZHRvKGZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmRzdCwgc2l6ZW9mKGRzdCkpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3U2NCAqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzXCYjMzQ7LCBOU19UWCk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIE5TX1JYKTtcbiYjNDM7XHR1bmxpbmsoUElOX1BBVEgpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fcGluKHByb2csIFBJTl9QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3BpbiBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0U1lTKHVucGluLCAgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19UWCk7XG4mIzQzO1x0U1lTKGRlbF90eCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19SWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlc1wmIzM0OywgTlNfVFgsIE5TX1JYKTtcbiYjNDM7XHRTWVMoZGVsX3J4LCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDBcJiMzNDssIE5TX1RYLCBJUF9UWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgdmV0aDAgdXBcJiMzNDssIE5TX1RYKTtcbiYjNDM7XHRTWVMoZGVsX3J4LCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDFcJiMzNDssIE5TX1JYLCBJUF9SWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgdmV0aDEgdXBcJiMzNDssIE5TX1JYKTtcbiYjNDM7XG4mIzQzO1x0dG9rID0gb3Blbl9uZXRucyhOU19UWCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHRvaywgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGRlbF9yeDtcbiYjNDM7XG4mIzQzO1x0U1lTKGNsb3NlX25zLCBcJiMzNDt0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHJvb3QgaGFuZGxlIDE6IGh0YiBkZWZhdWx0IDFcJiMzNDspO1xuJiM0MztcdFNZUyhjbG9zZV9ucywgXCYjMzQ7dGMgY2xhc3MgYWRkIGRldiB2ZXRoMCBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaHRiIHJhdGUgMW1iaXQgY2VpbCAxbWJpdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChzeXN0ZW0oXCYjMzQ7dGMgcWRpc2MgYWRkIGRldiB2ZXRoMCBwYXJlbnQgMToxIGhhbmRsZSAxMTogcmVkIFwmIzM0O1xuJiM0MztcdFx0ICAgXCYjMzQ7bGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCBcJiMzNDtcbiYjNDM7XHRcdCAgIFwmIzM0O2J1cnN0IDYgcWV2ZW50IGVhcmx5X2Ryb3AgYmxvY2sgMTAgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OykpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gY2xvc2VfbnM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3lzdGVtKFwmIzM0O3RjIGZpbHRlciBhZGQgYmxvY2sgMTAgYnBmIGRhIG9iamVjdC1waW5uZWQgXCYjMzQ7XG4mIzQzO1x0XHQgICBQSU5fUEFUSCBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OykpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gY2xvc2VfbnM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibGFzdF91ZHAoKTtcbiYjNDM7XHRBU1NFUlRfR1QoKmNvdW50ZXIsIDAsIFwmIzM0O3FldmVudCBjbGFzc2lmaWVyIHJhblwmIzM0Oyk7XG4mIzQzO2Nsb3NlX25zOlxuJiM0MztcdGNsb3NlX25ldG5zKHRvayk7XG4mIzQzO2RlbF9yeDpcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCAlc1wmIzM0OywgTlNfUlgpO1xuJiM0MztkZWxfdHg6XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIE5TX1RYKTtcbiYjNDM7dW5waW46XG4mIzQzO1x0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfdGNfcWV2ZW50ICpza2VsO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF90Y19xZXZlbnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7b3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3JlZGlyZWN0X3ZlcmRpY3RcJiMzNDspKVxuJiM0MztcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF92ZXJkaWN0LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2V2ZXJkaWN0X2NhbGxzKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtyZWRpcmVjdF9oZWxwZXJcJiMzNDspKVxuJiM0MztcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF9oZWxwZXIsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWhlbHBlcl9jYWxscyk7XG4mIzQzO1xuJiM0MztcdHRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNTI5YzExMWY0YWE0MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmNcbkBAIC0wLDAgJiM0MzsxLDIzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0X2lmaW5kZXggPSAxO1xuJiM0MztfX3U2NCB2ZXJkaWN0X2NhbGxzID0gMDtcbiYjNDM7X191NjQgaGVscGVyX2NhbGxzID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7aW50IHFldmVudF9yZWRpcmVjdF92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZlcmRpY3RfY2FsbHMsIDEpO1xuJiM0MztcdHJldHVybiBUQ1hfUkVESVJFQ1Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7aW50IHFldmVudF9yZWRpcmVjdF9oZWxwZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGVscGVyX2NhbGxzLCAxKTtcbiYjNDM7XHRyZXR1cm4gYnBmX3JlZGlyZWN0KHJlZGlyZWN0X2lmaW5kZXgsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZGY2NGVkYWRkYTJjMDU1MmE5ZjFlMzhmNjk1OWMwYWE5NWNiODBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwNDo1Mzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaCBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaAppbmRleCAzYmQwOGQ3ZjM5YzE4Yy4uNWY1Y2IzNjQzOWZlMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9wa3RfY2xzLmgKQEAgLTE1Niw4ICYjNDM7MTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCXJldHVybiBUQ19BQ1RfVU5TUEVDOwogfQotCiAjZW5kaWYKJiM0MztzdGF0aWMgaW5saW5lIGludCB0Y2ZfY2xhc3NpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzLCBib29sIGNvbXBhdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRwLCByZXMsIGNvbXBhdF9tb2RlKTsKJiM0MzsKJiM0MzsJLyogVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucyBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOwkgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocmV0ID09IFRDX0FDVF9SRURJUkVDVCkpCiYjNDM7CQlyZXQgPSBUQ19BQ1RfU0hPVDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbHNfc2V0X2NsYXNzKHVuc2lnbmVkIGxvbmcgKmNscCwgdW5zaWduZWQgbG9uZyBjbCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggYjQ0NmFhOGJlNWMzNzUuLjExYmIwZDIzNjgyMmFmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMjU1MiwxMSAmIzQzOzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpCiYjNDM7CWlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7ICh+KEJQRl9GX0lOR1JFU1MpIHwgQlBGX0ZfUkVESVJFQ1RfSU5URVJOQUwpKSkpCiAJCXJldHVybiBUQ19BQ1RfU0hPVDsKIAomIzQzOwlyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpOwogCXJpLSZndDtmbGFncyA9IGZsYWdzOwogCXJpLSZndDt0Z3RfaW5kZXggPSBpZmluZGV4OwogCkBAIC0yNTczLDExICYjNDM7MjU3NSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHsKIAogQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseShmbGFncykpCiYjNDM7CWlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKQogCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiAKJiM0MzsJcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKIAlyaS0mZ3Q7ZmxhZ3MgPSBCUEZfRl9QRUVSOwogCXJpLSZndDt0Z3RfaW5kZXggPSBpZmluZGV4OwogCkBAIC0yNTk1LDExICYjNDM7MjU5OCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wZWVyX3Byb3RvID0gewogQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsCiAJICAgaW50LCBwbGVuLCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseSgocGxlbiAmYW1wOyZhbXA7IHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpIHx8IGZsYWdzKSkKJiM0MzsJaWYgKHVubGlrZWx5KChwbGVuICZhbXA7JmFtcDsgcGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkgfHwKJiM0MzsJCSAgICAgIWJwZl9uZXRfY3R4X2dldCgpIHx8IGZsYWdzKSkKIAkJcmV0dXJuIFRDX0FDVF9TSE9UOwogCiYjNDM7CXJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7CiAJcmktJmd0O2ZsYWdzID0gQlBGX0ZfTkVJR0ggfCAocGxlbiA/IEJQRl9GX05FWFRIT1AgOiAwKTsKIAlyaS0mZ3Q7dGd0X2luZGV4ID0gaWZpbmRleDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggZmZlZWE2ZGI4MzM3NDcuLmZlZTQ1MjRhZGM5OGVmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTQwNDUsNyAmIzQzOzQwNDUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydQogCiAJZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocWUtJmd0O2ZpbHRlcl9jaGFpbik7CiAKLQlzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO2NsX3JlcywgZmFsc2UpKSB7CiYjNDM7CXN3aXRjaCAodGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7Y2xfcmVzLCBmYWxzZSkpIHsKIAljYXNlIFRDX0FDVF9TSE9UOgogCQlxZGlzY19xc3RhdHNfZHJvcChzY2gpOwogCQlfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTsKQEAgLTQwNTcsMTAgJiM0Mzs0MDU3LDYgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnUKIAkJX19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7CiAJCSpyZXQgPSBfX05FVF9YTUlUX1NUT0xFTjsKIAkJcmV0dXJuIE5VTEw7Ci0JY2FzZSBUQ19BQ1RfUkVESVJFQ1Q6Ci0JCXNrYl9kb19yZWRpcmVjdChza2IpOwotCQkqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47Ci0JCXJldHVybiBOVUxMOwogCWNhc2UgVENfQUNUX0NPTlNVTUVEOgogCQkqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuYwppbmRleCBhM2MxODU1MDVhZmNlNC4uOTRlYjQ3YWM1NGVlNjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2FrZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jCkBAIC0xNzMwLDcgJiM0MzsxNzMwLDcgQEAgc3RhdGljIHUzMiBjYWtlX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgY2FrZV90aW5fZGF0YSAqKnQsCiAJCWdvdG8gaGFzaDsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwogCiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtMzEyLDcgJiM0MzszMTIsNyBAQCBzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7ZmlsdGVyX2xpc3QpOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKIAlpZiAocmVzdWx0ICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAkJc3dpdGNoIChyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKaW5kZXggMjcwODg3NjBlZmY0NDMuLjRmNjc4ZDRmZjEwZWM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwpAQCAtMzY0LDcgJiM0MzszNjQsNyBAQCBzdGF0aWMgaW50IGR1YWxwaTJfc2tiX2NsYXNzaWZ5KHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsCiAJaWYgKCFmbCkKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAKLQlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuYwppbmRleCBjYjhjZjQzN2NlODcwOC4uMjVmY2Y0MDc5ZmVjZTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuYwpAQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwogCWlmIChUQ19IX01BSihza2ItJmd0O3ByaW9yaXR5KSAhPSBzY2gtJmd0O2hhbmRsZSkgewogCQlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwkJZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYwppbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMKQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCXJldHVybiBmcV9jb2RlbF9oYXNoKHEsIHNrYikgJiM0MzsgMTsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKaW5kZXggNzJmNDhmYTQwMTBiZWIuLjA2OWUxZmFjZDQxMzBkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKQEAgLTk2LDcgJiM0Mzs5Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfcGllX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQlyZXR1cm4gZnFfcGllX2hhc2gocSwgc2tiKSAmIzQzOyAxOwogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7Ci0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDdlNTM3Mjk1YjhiNjc4Li5lODdmNTAyMWExOTk1OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTExNDMsNyAmIzQzOzExNDMsNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJaGVhZCA9ICZhbXA7cS0mZ3Q7cm9vdDsKIAl0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7cm9vdC5maWx0ZXJfbGlzdCk7Ci0Jd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKJiM0MzsJd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAkJc3dpdGNoIChyZXN1bHQpIHsKIAkJY2FzZSBUQ19BQ1RfUVVFVUVEOgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAl9CiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKLQl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewomIzQzOwl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewogCQljYXNlIFRDX0FDVF9RVUVVRUQ6CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCBhNDY3ZGQxMjIzNjk3MC4uNjZkZjMwOTM5YWE1YzEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtMzYsNyAmIzQzOzM2LDcgQEAgbXVsdGlxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJaW50IGVycjsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwllcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlzd2l0Y2ggKGVycikgewogCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtMzksNyAmIzQzOzM5LDcgQEAgcHJpb19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwogCWlmIChUQ19IX01BSihza2ItJmd0O3ByaW9yaXR5KSAhPSBzY2gtJmd0O2hhbmRsZSkgewogCQlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwkJZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jCmluZGV4IGNiNTY3ODdlMWQyNThjLi42ZjNiNzI3M2NiMTYwZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9xZnEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3FmcS5jCkBAIC03MDksNyAmIzQzOzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKIAlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiYjNDM7CXJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZmIuYyBiL25ldC9zY2hlZC9zY2hfc2ZiLmMKaW5kZXggYjFkNDY1MDk0Mjc2OTIuLmVkMzk4NjkxOTljMDg0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZiLmMKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLAogCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlczsKIAlpbnQgcmVzdWx0OwogCi0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiYjNDM7CXJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggNzU4Yjg4ZjIxODY1MjcuLjc3Njc1ZjlhNGM0NmU3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCXJldHVybiBzZnFfaGFzaChxLCBza2IpICYjNDM7IDE7CiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKLQlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwppbmRleCBhZGIyNTE0NmU4OGNjZi4uZWE3MDQ0ZjMwYWRjM2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwpAQCAtODIsNiAmIzQzOzgyLDcgQEAgQ09ORklHX05FVF9TQ0hfQlBGPXkKIENPTkZJR19ORVRfU0NIX0ZRPXkKIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eQogQ09ORklHX05FVF9TQ0hfSFRCPXkKJiM0MztDT05GSUdfTkVUX1NDSF9SRUQ9eQogQ09ORklHX05FVF9TQ0hFRD15CiBDT05GSUdfTkVUREVWU0lNPXkKIENPTkZJR19ORVRGSUxURVI9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjdlMWQxNzU2N2FiZGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuYwpAQCAtMCwwICYjNDM7MSwxMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdGNfcWV2ZW50LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBOU19UWAkJJiMzNDt0Y19xZXZlbnRfdHgmIzM0OwomIzQzOyNkZWZpbmUgTlNfUlgJCSYjMzQ7dGNfcWV2ZW50X3J4JiMzNDsKJiM0MzsjZGVmaW5lIElQX1RYCQkmIzM0OzEwLjI1NS4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBfUlgJCSYjMzQ7MTAuMjU1LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBQSU5fUEFUSAkmIzM0Oy9zeXMvZnMvYnBmL3RjX3FldmVudF9yZWRpcmVjdCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYmxhc3RfdWRwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307CiYjNDM7CWNoYXIgYnVmWzE0MDBdID0ge307CiYjNDM7CWludCBmZCwgaTsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O3VkcCBzb2NrZXQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZHN0LnNpbl9wb3J0ID0gaHRvbnMoMTIzNDUpOwomIzQzOwlpbmV0X3B0b24oQUZfSU5FVCwgSVBfUlgsICZhbXA7ZHN0LnNpbl9hZGRyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVzaCBmYXIgbW9yZSB0aGFuIHRoZSBSRUQgcXVldWUgY2FuIGhvbGQuIE9uY2UgcWF2ZyBjcm9zc2VzIHF0aF9taW4KJiM0MzsJICogZXZlcnkgZnVydGhlciBwYWNrZXQgaGl0cyB0aGUgY29uZ2VzdGlvbl9kcm9wIC8gZWFybHlfZHJvcCBxZXZlbnQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTAwMDA7IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VuZHRvKGZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQsCiYjNDM7CQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7ZHN0LCBzaXplb2YoZHN0KSk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3FldmVudF9yZWRpcmVjdChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTY0ICpjb3VudGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgTlNfVFgpOwomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIE5TX1JYKTsKJiM0MzsJdW5saW5rKFBJTl9QQVRIKTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtwaW4gcHJvZyYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJU1lTKHVucGluLCAgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVFgpOwomIzQzOwlTWVMoZGVsX3R4LCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19SWCk7CiYjNDM7CVNZUyhkZWxfcngsICYjMzQ7aXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlcyYjMzQ7LCBOU19UWCwgTlNfUlgpOwomIzQzOwlTWVMoZGVsX3J4LCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMCYjMzQ7LCBOU19UWCwgSVBfVFgpOwomIzQzOwlTWVMoZGVsX3J4LCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0IHZldGgwIHVwJiMzNDssIE5TX1RYKTsKJiM0MzsJU1lTKGRlbF9yeCwgJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDEmIzM0OywgTlNfUlgsIElQX1JYKTsKJiM0MzsJU1lTKGRlbF9yeCwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7LCBOU19SWCk7CiYjNDM7CiYjNDM7CXRvayA9IG9wZW5fbmV0bnMoTlNfVFgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIodG9rLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGRlbF9yeDsKJiM0MzsKJiM0MzsJU1lTKGNsb3NlX25zLCAmIzM0O3RjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMSYjMzQ7KTsKJiM0MzsJU1lTKGNsb3NlX25zLCAmIzM0O3RjIGNsYXNzIGFkZCBkZXYgdmV0aDAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDFtYml0IGNlaWwgMW1iaXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzeXN0ZW0oJiMzNDt0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOjEgaGFuZGxlIDExOiByZWQgJiMzNDsKJiM0MzsJCSAgICYjMzQ7bGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCAmIzM0OwomIzQzOwkJICAgJiMzNDtidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDImZ3Q7L2Rldi9udWxsJiMzNDspKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIGNsb3NlX25zOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzeXN0ZW0oJiMzNDt0YyBmaWx0ZXIgYWRkIGJsb2NrIDEwIGJwZiBkYSBvYmplY3QtcGlubmVkICYjMzQ7CiYjNDM7CQkgICBQSU5fUEFUSCAmIzM0OyAyJmd0Oy9kZXYvbnVsbCYjMzQ7KSkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBjbG9zZV9uczsKJiM0MzsJfQomIzQzOwomIzQzOwlibGFzdF91ZHAoKTsKJiM0MzsJQVNTRVJUX0dUKCpjb3VudGVyLCAwLCAmIzM0O3FldmVudCBjbGFzc2lmaWVyIHJhbiYjMzQ7KTsKJiM0MztjbG9zZV9uczoKJiM0MzsJY2xvc2VfbmV0bnModG9rKTsKJiM0MztkZWxfcng6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgTlNfUlgpOwomIzQzO2RlbF90eDoKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBOU19UWCk7CiYjNDM7dW5waW46CiYjNDM7CWJwZl9wcm9ncmFtX191bnBpbihwcm9nLCBQSU5fUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF90Y19xZXZlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfdGNfcWV2ZW50X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVkaXJlY3RfdmVyZGljdCYjMzQ7KSkKJiM0MzsJCXJ1bl9xZXZlbnRfcmVkaXJlY3Qoc2tlbC0mZ3Q7cHJvZ3MucWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3QsCiYjNDM7CQkJCSAgICAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7dmVyZGljdF9jYWxscyk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVkaXJlY3RfaGVscGVyJiMzNDspKQomIzQzOwkJcnVuX3FldmVudF9yZWRpcmVjdChza2VsLSZndDtwcm9ncy5xZXZlbnRfcmVkaXJlY3RfaGVscGVyLAomIzQzOwkJCQkgICAgJmFtcDtza2VsLSZndDtic3MtJmd0O2hlbHBlcl9jYWxscyk7CiYjNDM7CiYjNDM7CXRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MjljMTExZjRhYTQyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMKQEAgLTAsMCAmIzQzOzEsMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlZGlyZWN0X2lmaW5kZXggPSAxOwomIzQzO19fdTY0IHZlcmRpY3RfY2FsbHMgPSAwOwomIzQzO19fdTY0IGhlbHBlcl9jYWxscyA9IDA7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztpbnQgcWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDt2ZXJkaWN0X2NhbGxzLCAxKTsKJiM0MzsJcmV0dXJuIFRDWF9SRURJUkVDVDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hlbHBlcl9jYWxscywgMSk7CiYjNDM7CXJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNjaGVkdWxlciBDbGFzc2lmaWNhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIGBUQ19BQ1RfUkVESVJFQ1RgIHdpdGhpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLiBUaGUga2V5IGlkZWEgaGVyZSBpcyB0byByZXBsYWNlIGRpcmVjdCB1c2Ugb2YgYHRjZl9jbGFzc2lmeWAgd2l0aCBhIHdyYXBwZXIsIGB0Y2ZfY2xhc3NpZnlfcWRpc2NgLiBUaGlzIG5ldyBmdW5jdGlvbiB0cmFuc2Zvcm1zIGBUQ19BQ1RfUkVESVJFQ1RgIGludG8gYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIGJlY2F1c2UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVkaXJlY3QgYWN0aW9ucyBhcmVuJiMzOTt0IHByb3Blcmx5IHN1cHBvcnRlZCB3aXRoaW4gdGhlc2UgZmlsdGVyIGNoYWlucywgbGVhZGluZyB0byBwb3RlbnRpYWwgaXNzdWVzLgoKVGhlIHBhdGNoIGFsc28gdGlnaHRlbnMgdXAgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBTcGVjaWZpY2FsbHksIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBub3cgaW5jb3Jwb3JhdGUgYSBudWxsIGNoZWNrIHVzaW5nIGAhYnBmX25ldF9jdHhfZ2V0KClgLCBhbmQgcmV0dXJuIGBUQ19BQ1RfU0hPVGAgaWYgdGhlIGNoZWNrIGZhaWxzLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQsIEkmIzM5O2Qgc2F5LCB0byBtYWtlIHN1cmUgQlBGIHByb2dyYW1zIGFyZW4mIzM5O3QgYXR0ZW1wdGluZyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLgoKVGhpcyBoYXMgYnJvYWQgaW1wbGljYXRpb25zLCBhZmZlY3RpbmcgbWFueSBvZiB0aGUgY29yZSBxZGlzY3MuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGBjYWtlYCwgYGRycmAsIGBkdWFscGkyYCwgYGV0c2AsIGBmcV9jb2RlbGAsIGBmcV9waWVgLCBgaGZzY2AsIGBodGJgLCBgbXVsdGlxYCwgYHByaW9gLCBgcWZxYCwgYHNmYmAsIGFuZCBgc2ZxYC4gVGhleSYjMzk7cmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGluc3RlYWQgb2YgYHRjZl9jbGFzc2lmeWAuIEFuZCBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyBiZWluZyBtb2RpZmllZCBhcyB3ZWxsLCB0byB1dGlsaXplIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYFRDX0FDVF9SRURJUkVDVGAgY2FzZSBpbiBgdGNmX3FldmVudF9oYW5kbGVgIGZ1cnRoZXIgY29uZmlybXMgdGhlIGludGVudCB0byBwcmV2ZW50IHRoZSBwcm9ibGVtYXRpYyBhY3Rpb24uCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgcWRpc2MgY2xhc3NpZmljYXRpb24gbG9naWMgYW5kIEJQRiByZWRpcmVjdCBoZWxwZXJzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24gd2lsbCBiZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCAoc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSksIGFuZCB0aGUgQlBGIGhlbHBlcnMgbWVudGlvbmVkLgoKYHRjZl9jbGFzc2lmeV9xZGlzY2AgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3BrdF9jbHMuaGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBTaW5jZSB0aGVzZSBhcmUgQlBGIGhlbHBlcnMsIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIEFuZCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBoYW5kbGVzIHRoaXMgdG9vLgoKSSBzaG91bGQgbGlzdCBgdGNmX3FldmVudF9oYW5kbGVgIGFuZCB0aG9zZSBCUEYgcmVkaXJlY3QgaGVscGVycy4gQnV0IHdhaXQsIGBicGZfcmVkaXJlY3RgIGlzIGEgbWFjcm8/IExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4gT2theSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIEJQRiBjYWxsOiBgQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9DQUxMXzJcXChicGZfcmVkaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjUxOT1pbnQgc2tiX2RvX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU1Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTM6QlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI1Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU3NS1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NzY6QlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIGBicGZfcmVkaXJlY3RgIE5hbWluZyBDb252ZW50aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBub3RpY2luZyB0aGF0IHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBnZW5lcmF0ZWQgYnkgdGhhdCBgQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIC4uLilgIG1hY3JvIGlzbiYjMzk7dCBhbHdheXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGBicGZfcmVkaXJlY3RgLiBJdCBzZWVtcyB0byBiZSBwbGF5aW5nIGFyb3VuZCB3aXRoIG5hbWVzLCBzb21ldGltZXMgcmVzdWx0aW5nIGluIHNvbWV0aGluZyBsaWtlIGBfX19fYnBmX3JlZGlyZWN0YCBvciBldmVuIGBicGZfcmVkaXJlY3RfX19fZm10YC4gVGhhdCYjMzk7cyBhIGxpdHRsZSBwZWN1bGlhciwgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgd2hhdCB0aGUgdW5kZXJseWluZyBsb2dpYyBpcy4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24gaXRzZWxmLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0byB3aGVyZSBgQlBGX0NBTExfMmAgaXMgZGVmaW5lZCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvc3NpYmx5IHRoZSBzb3VyY2Ugb2YgdGhlIG5hbWluZyBvYmZ1c2NhdGlvbikgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBpbiBvcmRlciB0byBmdWxseSBncmFzcCB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgaGVhZGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI1OiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEZfQ0FMTF94KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgQlBGX0NBTExfeGAuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoYXQg4oCTIEkga25vdyBgQlBGX0NBTExgIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiBleHRlbmRlZCBCUEYsIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGwgbWVjaGFuaXNtLCBhbmQgdGhlIGBfeGAgbGlrZWx5IGRlbm90ZXMgYSBmYW1pbHkgb3IgYSB2YXJpYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyB2YXJpYW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBXaGF0IGlzIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIGlzc3VlIG9yIHRhc2sgYXQgaGFuZD8gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgc2VhcmNoIHRlcm1zIGFuZCBtZW50YWxseSByZXZpZXcgZG9jdW1lbnRhdGlvbiwgdGhpbmtpbmcgYWJvdXQga2V5IHNlY3Rpb25zIGluIHRoZSBCUEYgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBleHBsb3JhdGlvbiBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMX3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYwOS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjEwOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTEtXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEZWNvZGluZyBUaGlzIFNuaXBwZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgY29kZSBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3RydWN0dXJlOiBpdCBzZWVtcyB0byBiZSBkZWZpbmluZyB0d28gZW50aXRpZXMgcmVsYXRlZCB0byBhIHZhcmlhYmxlIG9yIGtleSBjYWxsZWQgJiMzNDtuYW1lJiMzNDsuIEkgc2VlIGBfX19fIyNuYW1lYCBhbmQganVzdCBgbmFtZWAuIFRoZSBsZWFkaW5nIGNoYXJhY3RlcnMgYXJlIGRlZmluaXRlbHkgdW51c3VhbC4gVGhleSBpbW1lZGlhdGVseSBzdWdnZXN0IHNvbWUga2luZCBvZiBzcGVjaWFsIGhhbmRsaW5nLCBwb3RlbnRpYWxseSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgbmFtaW5nIGNvbnZlbnRpb25zLCBvciBhIHNjb3BpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci4KClRoZSBmYWN0IHRoYXQgYm90aCB2ZXJzaW9ucyBleGlzdCBsaWtlbHkgbWVhbnMgdGhlcmUmIzM5O3MgYSBkaXN0aW5jdGlvbiBpbiBob3cgJiMzNDtuYW1lJiMzNDsgaXMgYmVpbmcgdHJlYXRlZC4gSSBzdXNwZWN0IHRoYXQgYF9fX18jI25hbWVgIG1pZ2h0IHJlcHJlc2VudCBhIG1vcmUgZnVuZGFtZW50YWwsIGludGVybmFsLCBvciBwZXJoYXBzIGdsb2JhbGx5IHNjb3BlZCB2ZXJzaW9uIG9mICYjMzQ7bmFtZSYjMzQ7IGNvbXBhcmVkIHRvIHRoZSBzaW1wbGUgYG5hbWVgIGRlZmluaXRpb24uIFBlcmhhcHMgdGhlIHVuZGVyc2NvcmVzIGRlbm90ZSBhbiBpbnRlcm5hbCBhdHRyaWJ1dGUsIGEgaGlkZGVuIHZhcmlhYmxlLCBvciBhIHVuaXF1ZSBpZGVudGlmaWVyIHVzZWQgdG8gYXZvaWQgbmFtaW5nIGNvbmZsaWN0cy4gVGhlIGRvdWJsZSBoYXNoIG1pZ2h0IGluZGljYXRlIGEgbWFjcm8gZXhwYW5zaW9uLCBidXQgSSB3b3VsZCBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGEgdGVtcGxhdGluZyBzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgdGhlIHRleHQgZG9lcyBub3Qgc3VwcGx5IG1vcmUgY29udGV4dCBpcyBwcm9ibGVtYXRpYyBhbmQgSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBvciBlbnZpcm9ubWVudCB0byB3b3JrIG91dCB0aGUgZnVsbCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTE6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTI6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2MTM6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2MTQ6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2MTU6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2MTY6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE3Olx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2MTg6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE5Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIwOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjIxOlx0XG4gNjIyOlx0I2RlZmluZSBfX05PQVRUUlxuIDYyMzpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUmVkaXJlY3QgYW5kIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgcmVkaXJlY3QgZnVuY3Rpb25zOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBBbHNvLCB0aGF0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyByZWxldmFudC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVxdWlyZWQgZm9yIHRoaXMuCgpGcm9tIHRoZSBwYXRjaCwgSSBjYW4gc2VlIG1vZGlmaWNhdGlvbnMgaW4gc2V2ZXJhbCB0cmFmZmljIGNvbnRyb2wgKFRDKSBzY2hlZHVsZXIgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2Nha2UuY2AsIGBzY2hfZHJyLmNgLCBgc2NoX2R1YWxwaTIuY2AsIGBzY2hfZXRzLmNgLCBgc2NoX2ZxX2NvZGVsLmNgLCBgc2NoX2ZxX3BpZS5jYCwgYHNjaF9oZnNjLmNgLCBgc2NoX2h0Yi5jYCwgYHNjaF9tdWx0aXEuY2AsIGBzY2hfcHJpby5jYCwgYHNjaF9xZnEuY2AsIGBzY2hfc2ZiLmNgLCBhbmQgYHNjaF9zZnEuY2AuIEFkZGl0aW9uYWxseSwgYG5ldC9zY2hlZC9jbHNfYXBpLmNgIGFuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBhbHNvIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtsbCBuZWVkIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9EUlJgLCBgTkVUX1NDSF9EVUFMUEkyYCwgYE5FVF9TQ0hfRVRTYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSF9GUV9QSUVgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfTVVMVElRYCwgYE5FVF9TQ0hfUFJJT2AsIGBORVRfU0NIX1FGUWAsIGBORVRfU0NIX1NGQmAsIGFuZCBgTkVUX1NDSF9TRlFgIGVuYWJsZWQuIFdlIGFsc28gc2VlIHRoYXQgYE5FVF9TQ0hfUkVEYCBoYXMgYmVlbiBhZGRlZCB0byBzZWxmdGVzdHMsIHNvIHdlJiMzOTtsbCBub3RlIHRoYXQuIEltcG9ydGFudGx5LCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfU0NIRURgIGVuYWJsZWQgYXMgd2VsbC4KCk5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYywgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24sIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfcWV2ZW50X2hhbmRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9NjMyPWludCB0Y2ZfcWV2ZW50X3ZhbGlkYXRlX2NoYW5nZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBubGF0dHIgKmJsb2NrX2luZGV4X2F0dHIsXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjMzLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzUtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpO1xuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD02NTY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6NjU3OnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz00MDM1PUVYUE9SVF9TWU1CT0wodGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2UpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy00MDM2LVxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MDM4LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUsIGludCAqcmV0KVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDA2Ni19XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQwNjc6RVhQT1JUX1NZTUJPTCh0Y2ZfcWV2ZW50X2hhbmRsZSk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYz03MD1zdGF0aWMgaW50IHJlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAwLVx0XHRcdFx0ICAgcS1cdTAwM2VzdGF0cy5wcm9iX21hcmsgJiM0MzsgMSk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcdFx0XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX21hcmssIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xMDItXHRcdFx0aWYgKCFza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXHRcdFx0XHQgICBxLVx1MDAzZXN0YXRzLmZvcmNlZF9tYXJrICYjNDM7IDEpO1xubmV0L3NjaGVkL3NjaF9yZWQuYzoxMjU6XHRcdFx0c2tiID0gdGNmX3FldmVudF9oYW5kbGUoXHUwMDI2cS1cdTAwM2VxZV9tYXJrLCBzY2gsIHNrYiwgdG9fZnJlZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVx0XHRcdGlmICghc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTUwLWNvbmdlc3Rpb25fZHJvcDpcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlx0c2tiID0gdGNmX3FldmVudF9oYW5kbGUoXHUwMDI2cS1cdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTUyLVx0aWYgKCFza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBOZXR3b3JrIFNjaGVkdWxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIHRoYXQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpcyBkZWZpbml0ZWx5IGtleSwgYW5kIGl0JiMzOTtzIHVzZWQgaW4gYG5ldC9zY2hlZC9zY2hfcmVkLmNgLiBUaGUgc2VsZnRlc3QgaXMgYWRkaW5nIGBDT05GSUdfTkVUX1NDSF9SRUQ9eWAsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCB0ZXN0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRob3NlIEJQRiBoZWxwZXJzOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoZXkmIzM5O3JlIEJQRiBoZWxwZXJzLCBzbyB3ZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NDSEVEYCB0byBiZSBpbiB0aGUgY29uZmlnLiBUaGUgcGF0Y2ggaW1wYWN0cyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCB0b28sIHdoaWNoIGlzIGNhbGxlZCBieSAqbG9hZHMqIG9mIHFkaXNjcy4KCk9yaWdpbmFsbHksIEkgd2FzIHRoaW5raW5nIG9mIGxpc3Rpbmcgb3V0IGEgdG9uIG9mIGBORVRfU0NIXypgIGNvbmZpZ3M6IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9EUlJgLCBgTkVUX1NDSF9EVUFMUEkyYCwgYE5FVF9TQ0hfRVRTYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSF9GUV9QSUVgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9TQ0hfTVVMVElRYCwgYE5FVF9TQ0hfUFJJT2AsIGBORVRfU0NIX1FGUWAsIGBORVRfU0NIX1NGQmAsIGFuZCBgTkVUX1NDSF9TRlFgLiBCdXQgdGhhdCYjMzk7cyBwcm9iYWJseSBvdmVya2lsbC4gV2UgY2FuIGp1c3QgZm9jdXMgb24gdGhlIGNvcmUgb25lcyB0aGF0IGFyZSBpbnZvbHZlZCwgbGlrZSBgTkVUX1NDSF9SRURgIGFuZCBgTkVUX1NDSF9IVEJgLCBwbHVzIGVpdGhlciBgTkVUX0NMU19CUEZgIG9yIGBORVRfU0NIX0JQRmAgc2luY2UgdGhpcyBpcyByZWxhdGVkIHRvIEJQRiBmaWx0ZXJzLiBUaGUgc2VsZnRlc3QgYWxyZWFkeSBzZXRzIGBDT05GSUdfTkVUX1NDSF9SRUQ9eWAsIGBDT05GSUdfTkVUX1NDSF9CUEY9eWAsIGFuZCBgQ09ORklHX05FVF9TQ0hfSFRCPXlgLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3MgdG8gYmUgY29uc2lkZXJlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBwZWVrIGF0IGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGluIGBpbmNsdWRlL25ldC9wa3RfY2xzLmhgLiBJdCYjMzk7cyB1c2VkIGJ5IGBjYWtlX2NsYXNzaWZ5YCwgYGRycl9jbGFzc2lmeWAsIGBkdWFscGkyX3NrYl9jbGFzc2lmeWAsIGBldHNfY2xhc3NpZnlgLCBgZnFfY29kZWxfY2xhc3NpZnlgLCBgZnFfcGllX2NsYXNzaWZ5YCwgYGhmc2NfY2xhc3NpZnlgLCBgaHRiX2NsYXNzaWZ5YCwgYG11bHRpcV9jbGFzc2lmeWAsIGBwcmlvX2NsYXNzaWZ5YCwgYHFmcV9jbGFzc2lmeWAsIGBzZmJfY2xhc3NpZnlgLCBhbmQgYHNmcV9jbGFzc2lmeWAuCgpTbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBsaXN0aW5nIHNvbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIGlubGluZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBmb3IgZm9jdXMgbGlrZSBgaHRiX2NsYXNzaWZ5YCwgYGZxX2NvZGVsX2NsYXNzaWZ5YCwgYW5kIGBjYWtlX2NsYXNzaWZ5YC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgYnBmX3JlZGlyZWN0YCBpcyBhY3R1YWxseSBhIHN5bWJvbC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIHZpYSBgQlBGX0NBTExfMmAsIHdoaWNoIGRvZXMgaW5kZWVkIGNyZWF0ZSBib3RoIGBicGZfcmVkaXJlY3RgIGFuZCBgX19fX2JwZl9yZWRpcmVjdGAuIFRoYXQmIzM5O3MgZ29vZDsgaXQmIzM5O3MgYSB2YWxpZCBzeW1ib2wgdG8gY29uc2lkZXIuIEFsc28sIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgaXMgZXhwb3J0ZWQuCgpTbyBteSBmaW5hbCBjb25maWcgbGlzdCB3aWxsIGJlOiBgTkVUX1NDSF9SRURgLCBgTkVUX1NDSF9IVEJgLCBgTkVUX1NDSF9CUEZgLCBhbmQgYE5FVF9DTFNfQlBGYC4gSSYjMzk7bGwgYWxzbyBhZGQgYE5FVF9TQ0hfQ0FLRWAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCBhcyB0aGV5IGFyZSBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGluIHJlYWwgd29ybGQgc2NlbmFyaW9zLgoKVWx0aW1hdGVseSwgdGhlIHJlYXNvbiBmb3IgdGhpcyBhbmFseXNpcyBpcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIGhhbmRsZSBgVENfQUNUX1JFRElSRUNUYCBpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjaGFuZ2luZyBpdCB0byBgVENfQUNUX1NIT1RgLiBBbHNvLCB0aGUgcGF0Y2ggdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycy4gVGhpcyBpbXBhY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHkgd2hpY2ggY291bGQgYmUgZXhwb3NlZC4KCkxldCYjMzk7cyByZWZpbmUgdGhvc2UgZm9jdXMgc3ltYm9sczogYHRjZl9xZXZlbnRfaGFuZGxlYCwgYGJwZl9yZWRpcmVjdGAsIGBicGZfcmVkaXJlY3RfcGVlcmAsIGBicGZfcmVkaXJlY3RfbmVpZ2hgLCBgaHRiX2NsYXNzaWZ5YCwgYW5kIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEFuZCBhZ2FpbiwgSSYjMzk7bGwgdmVyaWZ5IGBicGZfcmVkaXJlY3RgIGlzIGEgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmVkaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkwNSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q9MzE9S2VybmVsIEJQRlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzItLS0tLS0tLS0tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6MzM6YnBmX3JlZGlyZWN0X21hcCgpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0zNC1eXl5eXl5eXl5eXl5eXl5eXl5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0zNi1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjM3OiAgICAgbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXksIHU2NCBmbGFncylcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM4LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0PTEwMj1UaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX0NQVU1BUGBgIGNhbGxlZFxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTE1Mi1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjE1MzogICAgICAgIHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNmNwdV9tYXAsIGNwdV9kZXN0LCAwKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTE1NC0gICAgfVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTU9QlBGX01BUF9UWVBFX0RFVk1BUCBhbmQgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTItYGBCUEZfTUFQX1RZUEVfREVWTUFQYGAgYW5kIGBgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIYGAgYXJlIEJQRiBtYXBzIHByaW1hcmlseVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTM6dXNlZCBhcyBiYWNrZW5kIG1hcHMgZm9yIHRoZSBYRFAgQlBGIGhlbHBlciBjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xNC1gYEJQRl9NQVBfVFlQRV9ERVZNQVBgYCBpcyBiYWNrZWQgYnkgYW4gYXJyYXkgdGhhdCB1c2VzIHRoZSBrZXkgYXNcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0zMD1LZXJuZWwgQlBGXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0zMS0tLS0tLS0tLS0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDozMjpicGZfcmVkaXJlY3RfbWFwKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTMzLV5eXl5eXl5eXl5eXl5eXl5eXlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTM1LVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MzY6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0zNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0xNzM9aW5ncmVzcyBgYGlmaW5kZXhgYCBhcyB0aGUgYGBrZXlgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xODEtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDoxODI6ICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZmb3J3YXJkX21hcCwgaW5kZXgsIDApO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTgzLSAgICB9XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q9MTg2PWFsbCB0aGUgaW50ZXJmYWNlcyBpbiB0aGUgYGB0eF9wb3J0YGAgZGV2bWFwLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5Mi0gICAge1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTkzOiAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2dHhfcG9ydCwgMCwgQlBGX0ZfQlJPQURDQVNUIHwgQlBGX0ZfRVhDTFVERV9JTkdSRVNTKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5NC0gICAgfVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTExPVRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMjpjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsgYW5kICYjMzk7Y3B1bWFwJiMzOTsuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMy1UaGlzIG1hcCB0eXBlIHJlZGlyZWN0cyByYXcgWERQIGZyYW1lcyB0byBgQUZfWERQYF8gc29ja2V0cyAoWFNLcyksIGEgbmV3IHR5cGUgb2Zcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD01OT1LZXJuZWwgQlBGXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02MC0tLS0tLS0tLS0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2MTpicGZfcmVkaXJlY3RfbWFwKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYyLV5eXl5eXl5eXl5eXl5eXl5eXlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTY0LVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6NjU6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzg9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBjYWxsZWRcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNTYtXHRcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnhza3NfbWFwLCBcdTAwMjZpbmRleCkpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNTc6XHRcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE1OC1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTE4PXJlZGlyZWN0IGluZ3Jlc3MgZnJhbWVzIHRvIG90aGVyIFhEUCBlbmFibGVkIG5ldGRldnMsIHVzaW5nIHRoZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MTk6YnBmX3JlZGlyZWN0X21hcCgpIGZ1bmN0aW9uLiBBRl9YRFAgc29ja2V0cyBlbmFibGUgdGhlIHBvc3NpYmlsaXR5IGZvclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjAtWERQIHByb2dyYW1zIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBhIG1lbW9yeSBidWZmZXIgaW4gYSB1c2VyLXNwYWNlXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjIzPU9uIFhEUCBzaWRlIHRoZXJlIGlzIGEgQlBGIG1hcCB0eXBlIEJQRl9NQVBfVFlQRV9YU0tNQVAgKFhTS01BUCkgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjI0OmlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBicGZfcmVkaXJlY3RfbWFwKCkgdG8gcGFzcyB0aGUgaW5ncmVzc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI1LWZyYW1lIHRvIGEgc29ja2V0LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTI4MD1yb3VuZC1yb2JpbiBleGFtcGxlIG9mIGRpc3RyaWJ1dGluZyBwYWNrZXRzIGlzIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTMwMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjMwMjogICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIHJyLCBYRFBfRFJPUCk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0zMDMtICAgfVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTU2Mj1UaGUgWERQIGNvZGUgc2FtcGxlIGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNTcyLSAgICAgICBpZiAoYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ4c2tzX21hcCwgXHUwMDI2aW5kZXgpKVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6NTczOiAgICAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTU3NC1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdD05MT1jYW4gb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0YWRhdGEgdXNlZCBmb3IgYnVpbGRpbmcgYGBza2JzYGAuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Mi1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0OjkzOmJwZl9yZWRpcmVjdF9tYXBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk0LT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3Q6OTY6YGBicGZfcmVkaXJlY3RfbWFwYGAgY2FuIHJlZGlyZWN0IHRoZSBmcmFtZSB0byBhIGRpZmZlcmVudCBkZXZpY2UuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Ny1Tb21lIGRldmljZXMgKGxpa2UgdmlydHVhbCBldGhlcm5ldCBsaW5rcykgc3VwcG9ydCBydW5uaW5nIGEgc2Vjb25kIFhEUFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9NzgxPXN0cnVjdCBicGZfbmhfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc4OC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Nzg5Oi8qIGZsYWdzIGZvciBicGZfcmVkaXJlY3RfaW5mbyBrZXJuX2ZsYWdzICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5MC0jZGVmaW5lIEJQRl9SSV9GX1JGX05PX0RJUkVDVFx0QklUKDApXHQvKiBubyBuYXBpX2RpcmVjdCBvbiByZXR1cm5fZnJhbWUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5NS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Nzk2OnN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyB7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5Ny1cdHU2NCB0Z3RfaW5kZXg7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MDc9c3RydWN0IGJwZl9uZXRfY29udGV4dCB7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjgwODpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyByaTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODA5LVx0c3RydWN0IGxpc3RfaGVhZCBjcHVfbWFwX2ZsdXNoX2xpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX25ldF9jb250ZXh0ICpicGZfbmV0X2N0eF9nZXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTgzNi1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6ODM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpicGZfbmV0X2N0eF9nZXRfcmkodm9pZClcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODM4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyMzY9c3RhdGljIGlubGluZSBib29sIHhkcF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzcte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjM4Olx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjM5LVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNDQte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjQ1Olx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjQ2LVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX3JldHVybl9mcmFtZV9ub19kaXJlY3Qodm9pZClcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI1MS17XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyNTI6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNTMtXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xODA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4MTEte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxODEyOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xODEzLVx0Y29uc3QgdTY0IGFjdGlvbl9tYXNrID0gWERQX0FCT1JURUQgfCBYRFBfRFJPUCB8IFhEUF9QQVNTIHwgWERQX1RYO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfYXJwLmg9NDQ9c3RhdGljIGlubGluZSBib29sIGRldl9pc19tYWNfaGVhZGVyX3htaXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oLTU2LVx0LyogUFBQIGFkZHMgaXRzIGwyIGhlYWRlciBhdXRvbWF0aWNhbGx5IGluIHBwcF9zdGFydF94bWl0KCkuXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oOjU3Olx0ICogVGhpcyBtYWtlcyBpdCBsb29rIGxpa2UgYW4gbDMgZGV2aWNlIHRvIF9fYnBmX3JlZGlyZWN0KCkgYW5kIHRjZl9taXJyZWRfaW5pdCgpLlxuaW5jbHVkZS9saW51eC9pZl9hcnAuaC01OC1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD02MTg9c3RhdGljIGlubGluZSB2b2lkIHNrYl9icGZfc2V0X3JlZGlyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpza19yZWRpcixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI1LVxuaW5jbHVkZS9saW51eC9za21zZy5oOjYyNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpza2JfYnBmX3JlZGlyZWN0X2ZldGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjMyLVxuaW5jbHVkZS9saW51eC9za21zZy5oOjYzMzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za21zZy5oLTYzNC17XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjIxLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyMjogKiBcdFx0SW4gY29tcGFyaXNvbiB3aXRoICoqYnBmX3JlZGlyZWN0KipcXCAoKSBoZWxwZXIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjIyMy0gKiBcdFx0KipicGZfY2xvbmVfcmVkaXJlY3QqKlxcICgpIGhhcyB0aGUgYXNzb2NpYXRlZCBjb3N0IG9mXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjIyNC0gKiBcdFx0ZHVwbGljYXRpbmcgdGhlIHBhY2tldCBidWZmZXIsIGJ1dCB0aGlzIGNhbiBiZSBleGVjdXRlZCBvdXQgb2ZcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyMjI1OiAqIFx0XHR0aGUgZUJQRiBwcm9ncmFtLiBDb252ZXJzZWx5LCAqKmJwZl9yZWRpcmVjdCoqXFwgKCkgaXMgbW9yZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjYtICogXHRcdGVmZmljaWVudCwgYnV0IGl0IGlzIGhhbmRsZWQgdGhyb3VnaCBhbiBhY3Rpb24gY29kZSB3aGVyZSB0aGVcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQzOS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NDA6ICogbG9uZyBicGZfcmVkaXJlY3QodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNDQxLSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1NC0gKiBcdFx0VGhlIHNhbWUgZWZmZWN0IGNhbiBhbHNvIGJlIGF0dGFpbmVkIHdpdGggdGhlIG1vcmUgZ2VuZXJpY1xuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NTU6ICogXHRcdCoqYnBmX3JlZGlyZWN0X21hcCoqXFwgKCksIHdoaWNoIHVzZXMgYSBCUEYgbWFwIHRvIHN0b3JlIHRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI0NTYtICogXHRcdHJlZGlyZWN0IHRhcmdldCBpbnN0ZWFkIG9mIHByb3ZpZGluZyBpdCBkaXJlY3RseSB0byB0aGUgaGVscGVyLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDUxLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA1MjogKiBsb25nIGJwZl9yZWRpcmVjdF9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGtleSwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMwNTMtICogXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDcwLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA3MTogKiBcdFx0U2VlIGFsc28gKipicGZfcmVkaXJlY3QqKlxcICgpLCB3aGljaCBvbmx5IHN1cHBvcnRzIHJlZGlyZWN0aW5nXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzA3Mi0gKiBcdFx0dG8gYW4gaWZpbmRleCwgYnV0IGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBtYXAgdG8gZG8gc28uXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM1MjMtICpcdFx0XHRhbmQgKnBhcmFtcyotXHUwMDNlc21hYyB3aWxsIG5vdCBiZSBzZXQgYXMgb3V0cHV0LiBBIGNvbW1vblxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjM1MjQ6ICpcdFx0XHR1c2UgY2FzZSBpcyB0byBjYWxsICoqYnBmX3JlZGlyZWN0X25laWdoKipcXCAoKSBhZnRlclxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM1MjUtICpcdFx0XHRkb2luZyAqKmJwZl9maWJfbG9va3VwKipcXCAoKS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDQ4NC0gKlx0XHR3aWxsIGNhdXNlICpza2IqIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgc3BlY2lmaWVkIHNvY2tldC5cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NDg1OiAqXHRcdFN1YnNlcXVlbnQgcmVkaXJlY3Rpb24gb2YgKnNrYiogdmlhICAqKmJwZl9yZWRpcmVjdCoqXFwgKCksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDQ4Ni0gKlx0XHQqKmJwZl9jbG9uZV9yZWRpcmVjdCoqXFwgKCkgb3Igb3RoZXIgbWV0aG9kcyBvdXRzaWRlIG9mIEJQRiBtYXlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAyNy0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMjg6ICogbG9uZyBicGZfcmVkaXJlY3RfbmVpZ2godTMyIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKnBhcmFtcywgaW50IHBsZW4sIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDI5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMS0gKiBcdFx0YW5kIGZpbGwgaW4gTDIgYWRkcmVzc2VzIGZyb20gbmVpZ2hib3Jpbmcgc3Vic3lzdGVtLiBUaGlzIGhlbHBlclxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMzI6ICogXHRcdGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcICgpLCBleGNlcHQgdGhhdCBpdFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwMzMtICogXHRcdHBvcHVsYXRlcyBMMiBhZGRyZXNzZXMgYXMgd2VsbCwgbWVhbmluZywgaW50ZXJuYWxseSwgdGhlIGhlbHBlclxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc3LSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTA3ODogKiBsb25nIGJwZl9yZWRpcmVjdF9wZWVyKHUzMiBpZmluZGV4LCB1NjQgZmxhZ3MpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3OS0gKiBcdERlc2NyaXB0aW9uXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA4MC0gKiBcdFx0UmVkaXJlY3QgdGhlIHBhY2tldCB0byBhbm90aGVyIG5ldCBkZXZpY2Ugb2YgaW5kZXggKmlmaW5kZXgqLlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwODE6ICogXHRcdFRoaXMgaGVscGVyIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcICgpLCBleGNlcHRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDgyLSAqIFx0XHR0aGF0IHRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIHRvIHRoZSAqaWZpbmRleComIzM5OyBwZWVyIGRldmljZSBhbmRcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyNi0gKlx0XHRCUEZfU0tCX1RTVEFNUF9ERUxJVkVSWV9NT05PIGlzIHRoZSBvbmx5IHRzdGFtcCB0aGF0XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYyNzogKlx0XHR3aWxsIGJlIGtlcHQgZHVyaW5nIGJwZl9yZWRpcmVjdF8qKCkuICBBIG5vbiB6ZXJvXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyOC0gKlx0XHQqdHN0YW1wKiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgQlBGX1NLQl9UU1RBTVBfREVMSVZFUllfTU9OT1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01NjM3LSAqXHRcdG1vbm8gZGVsaXZlcnkgdGltZSB0byBfX3NrX2J1ZmYtXHUwMDNldHN0YW1wIGFuZCB0aGVuXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYzODogKlx0XHRicGZfcmVkaXJlY3RfKigpIHRvIHRoZSBlZ3Jlc3Mgb2YgYW4gaWZhY2UuICBGb3IgZXhhbXBsZSxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01NjM5LSAqXHRcdGNoYW5naW5nIHRoZSAocmN2KSB0aW1lc3RhbXAgaW4gX19za19idWZmLVx1MDAzZXRzdGFtcCBhdFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjU2NDA6ICpcdFx0aW5ncmVzcyB0byBhIG1vbm8gZGVsaXZlcnkgdGltZSBhbmQgdGhlbiBicGZfcmVkaXJlY3RfKigpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTY0MS0gKlx0XHR0byBzY2hfZnFAcGh5LWRldi5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NjMzMj1lbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MzM2Oi8qIEZsYWdzIGZvciBicGZfcmVkaXJlY3QgYW5kIGJwZl9yZWRpcmVjdF9tYXAgaGVscGVycyAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYzMzctZW51bSB7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy05LSAqIFRoZSAmIzM5O2NwdW1hcCYjMzk7IGlzIHByaW1hcmlseSB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwOiAqIGNhbGwgYnBmX3JlZGlyZWN0X21hcCgpIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsuXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTExLSAqXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy01LS8qIERldm1hcHMgcHJpbWFyeSB1c2UgaXMgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXIgY2FsbFxua2VybmVsL2JwZi9kZXZtYXAuYzo2OiAqIGJwZl9yZWRpcmVjdF9tYXAoKS4gQmVjYXVzZSBYRFAgaXMgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIHBlcmZvcm1hbmNlIHdlXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTctICogc3BlbnQgc29tZSBlZmZvcnQgdG8gZW5zdXJlIHRoZSBkYXRhcGF0aCB3aXRoIHJlZGlyZWN0IG1hcHMgZG9lcyBub3QgdXNlXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0xODY9c3RhdGljIHZvaWQgZGV2X21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDQtXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIwNTpcdC8qIGJwZl9yZWRpcmVjdF9pbmZvLVx1MDAzZW1hcCBpcyBhc3NpZ25lZCBpbiBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKClcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA2LVx0ICogZHVyaW5nIE5BUEkgY2FsbGJhY2sgYW5kIGNsZWFyZWQgYWZ0ZXIgdGhlIFhEUCByZWRpcmVjdC4gVGhlcmUgaXMgbm9cbmtlcm5lbC9icGYvZGV2bWFwLmM6MjA3Olx0ICogZXhwbGljaXQgUkNVIHJlYWQgc2VjdGlvbiB3aGljaCBwcm90ZWN0cyBicGZfcmVkaXJlY3RfaW5mby1cdTAwM2VtYXAgYnV0XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTIwOC1cdCAqIGxvY2FsX2JoX2Rpc2FibGUoKSBhbHNvIG1hcmtzIHRoZSBiZWdpbm5pbmcgYW4gUkNVIHNlY3Rpb24uIFRoaXNcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA5LVx0ICogbWFrZXMgdGhlIGNvbXBsZXRlIHNvZnRpcnEgY2FsbGJhY2sgUkNVIHByb3RlY3RlZC4gVGh1cyBhZnRlclxua2VybmVsL2JwZi9kZXZtYXAuYzoyMTA6XHQgKiBmb2xsb3dpbmcgc3luY2hyb25pemVfcmN1KCkgdGhlcmUgbm8gYnBmX3JlZGlyZWN0X2luZm8tXHUwMDNlbWFwID09IG1hcFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMTEtXHQgKiBhc3NpZ25tZW50LlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNzM9c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0yNzgtXHRzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzID0geGRwLVx1MDAzZWZyYW1lcztcbm5ldC9icGYvdGVzdF9ydW4uYzoyNzk6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTI4MC1cdHN0cnVjdCB4ZHBfcGFnZV9oZWFkICpoZWFkO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDE9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjE2MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIxNjI6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTIxNjMtXHRcdFx0XHQgdTMyIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxODgtXG5uZXQvY29yZS9maWx0ZXIuYzoyMTg5OnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfY29tbW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMTkwLVx0XHRcdFx0IHUzMiBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjAyLVxubmV0L2NvcmUvZmlsdGVyLmM6MjIwMzpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMjA0LVx0XHRcdCAgdTMyIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIyMDYtXHRpZiAoZGV2X2lzX21hY19oZWFkZXJfeG1pdChkZXYpKVxubmV0L2NvcmUvZmlsdGVyLmM6MjIwNzpcdFx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0X2NvbW1vbihza2IsIGRldiwgZmxhZ3MpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjIwOC1cdGVsc2Vcbm5ldC9jb3JlL2ZpbHRlci5jOjIyMDk6XHRcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc2tiLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTAtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIyMTM9c3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY2LVxubmV0L2NvcmUvZmlsdGVyLmM6MjI2NzpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY4LVx0XHRcdFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMDgtI2Vsc2Vcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMDk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjMxMC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMzE4PXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjM3NS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzNzY6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjM3Ny1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDE5LSNlbHNlXG5uZXQvY29yZS9maWx0ZXIuYzoyNDIwOnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjEtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX25oX3BhcmFtcyAqbmgpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjQyNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjI0Mjg6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS1cdFx0XHRcdHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDQzLVx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ0Olx0XHRyZXR1cm4gX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc2tiLCBkZXYsIG5oKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDUtXHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ2Olx0XHRyZXR1cm4gX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc2tiLCBkZXYsIG5oKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDctb3V0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI0NjA9QlBGX0NBTExfMyhicGZfY2xvbmVfcmVkaXJlY3QsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI0OTYtXG5uZXQvY29yZS9maWx0ZXIuYzoyNDk3Olx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0KGNsb25lLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI1MTk9aW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZmlsdGVyLmMtMjUyMC17XG5uZXQvY29yZS9maWx0ZXIuYzoyNTIxOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjUyMi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU0NC1cdHJldHVybiBmbGFncyBcdTAwMjYgQlBGX0ZfTkVJR0ggP1xubmV0L2NvcmUvZmlsdGVyLmM6MjU0NTpcdCAgICAgICBfX2JwZl9yZWRpcmVjdF9uZWlnaChza2IsIGRldiwgZmxhZ3MgXHUwMDI2IEJQRl9GX05FWFRIT1AgP1xubmV0L2NvcmUvZmlsdGVyLmMtMjU0Ni1cdFx0XHRcdCAgICBcdTAwMjZyaS1cdTAwM2VuaCA6IE5VTEwpIDpcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NDc6XHQgICAgICAgX19icGZfcmVkaXJlY3Qoc2tiLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NDgtb3V0X2Ryb3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU1Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTM6QlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xubmV0L2NvcmUvZmlsdGVyLmM6MjU1NTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG5uZXQvY29yZS9maWx0ZXIuYy0yNTU2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1NjctXG5uZXQvY29yZS9maWx0ZXIuYzoyNTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjU2OTpcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdCxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzAtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc3LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Nzg6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjU3OS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNTg5LVxubmV0L2NvcmUvZmlsdGVyLmM6MjU5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wZWVyX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjU5MTpcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdF9wZWVyLFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5Mi1cdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTctXG5uZXQvY29yZS9maWx0ZXIuYzoyNTk4OkJQRl9DQUxMXzQoYnBmX3JlZGlyZWN0X25laWdoLCB1MzIsIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKiwgcGFyYW1zLFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5OS1cdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI2MDAte1xubmV0L2NvcmUvZmlsdGVyLmM6MjYwMTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG5uZXQvY29yZS9maWx0ZXIuYy0yNjAyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI2MTctXG5uZXQvY29yZS9maWx0ZXIuYzoyNjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjYxOTpcdC5mdW5jXHRcdD0gYnBmX3JlZGlyZWN0X25laWdoLFxubmV0L2NvcmUvZmlsdGVyLmMtMjYyMC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfbWV0YV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NDAxLSAqXG5uZXQvY29yZS9maWx0ZXIuYzo0NDAyOiAqIDEuIFRoZSBicGZfcmVkaXJlY3QoKSBhbmQgYnBmX3JlZGlyZWN0X21hcCgpIGhlbHBlcnMgd2lsbCBsb29rdXAgdGhlIHRhcmdldFxubmV0L2NvcmUvZmlsdGVyLmMtNDQwMy0gKiAgICBvZiB0aGUgcmVkaXJlY3QgYW5kIHN0b3JlIGl0IChhbG9uZyB3aXRoIHNvbWUgb3RoZXIgbWV0YWRhdGEpIGluIGEgcGVyLUNQVVxubmV0L2NvcmUvZmlsdGVyLmM6NDQwNDogKiAgICBzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8uXG5uZXQvY29yZS9maWx0ZXIuYy00NDA1LSAqXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQwNy0gKiAgICBjYWxsIHhkcF9kb19yZWRpcmVjdCgpIHdoaWNoIHdpbGwgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiBzdHJ1Y3Rcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MDg6ICogICAgYnBmX3JlZGlyZWN0X2luZm8gdG8gYWN0dWFsbHkgZW5xdWV1ZSB0aGUgZnJhbWUgaW50byBhIG1hcCB0eXBlLXNwZWNpZmljXG5uZXQvY29yZS9maWx0ZXIuYy00NDA5LSAqICAgIGJ1bGsgcXVldWUgc3RydWN0dXJlLlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NzQ9dTMyIHhkcF9tYXN0ZXJfcmVkaXJlY3Qoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS9maWx0ZXIuYy00NDc1LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NzY6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NDc3LVx0c3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciwgKnNsYXZlO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0OTY9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX21hc3Rlcl9yZWRpcmVjdCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NDk3LVxubmV0L2NvcmUvZmlsdGVyLmM6NDQ5ODpzdGF0aWMgaW5saW5lIGludCBfX3hkcF9kb19yZWRpcmVjdF94c2soc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0OTktXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludFxubmV0L2NvcmUvZmlsdGVyLmM6NDUyMzpfX3hkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNDUyNC1cdFx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NTk1LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1OTY6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NTk3LVx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cdTAwM2VtYXBfdHlwZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDYxMC17XG5uZXQvY29yZS9maWx0ZXIuYzo0NjExOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDYxMi1cdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXHUwMDNlbWFwX3R5cGU7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ2Mjcte1xubmV0L2NvcmUvZmlsdGVyLmM6NDYyODpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MjktXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ2Nzk9aW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY4Mi17XG5uZXQvY29yZS9maWx0ZXIuYzo0NjgzOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDY4NC1cdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXHUwMDNlbWFwX3R5cGU7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDcxNz1CUEZfQ0FMTF8yKGJwZl94ZHBfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MTgte1xubmV0L2NvcmUvZmlsdGVyLmM6NDcxOTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUxMC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3Q6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTExOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUxMi1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfbmVpZ2g6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTEzOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X25laWdoX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUxNC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfcGVlcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XHRcdHJldHVybiBcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04ODQ3PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg1OC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3Q6XG5uZXQvY29yZS9maWx0ZXIuYzo4ODU5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODg2MC1cdGNhc2UgQlBGX0ZVTkNfY2xvbmVfcmVkaXJlY3Q6XG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jPTM5PXN0YXRpYyBpbnQgcnVuX2x3dF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9sd3RfcHJvZyAqbHd0LFxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy00NC1cbm5ldC9jb3JlL2x3dF9icGYuYzo0NTpcdC8qIERpc2FibGluZyBCSCBpcyBuZWVkZWQgdG8gcHJvdGVjdCBwZXItQ1BVIGJwZl9yZWRpcmVjdF9pbmZvIGJldHdlZW5cbm5ldC9jb3JlL2x3dF9icGYuYy00Ni1cdCAqIEJQRiBwcm9nIGFuZCBza2JfZG9fcmVkaXJlY3QoKS5cbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTcxMi1cdFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xubmV0L2NvcmUvc2ttc2cuYzo3MTM6XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtNzE0LVx0XHRkbyB7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04MzM9c3RhdGljIHZvaWQgX19za19wc29ja196YXBfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODM3LVx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpICE9IE5VTEwpIHtcbm5ldC9jb3JlL3NrbXNnLmM6ODM4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTgzOS1cdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk2Mi1cbm5ldC9jb3JlL3NrbXNnLmM6OTYzOlx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk2NC1cdC8qIFRoaXMgZXJyb3IgaXMgYSBidWdneSBCUEYgcHJvZ3JhbSwgaXQgcmV0dXJuZWQgYSByZWRpcmVjdFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTY3LVx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcbm5ldC9jb3JlL3NrbXNnLmM6OTY4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk2OS1cdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05NzctXHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xubmV0L2NvcmUvc2ttc2cuYzo5Nzg6XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTc5LVx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbi0tXG5uZXQvY29yZS9za21zZy5jLTk4NC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbm5ldC9jb3JlL3NrbXNnLmM6OTg1Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk4Ni1cdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ4LW91dF9mcmVlOlxubmV0L2NvcmUvc2ttc2cuYzoxMDQ5Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwNTAtXHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3NT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwOTItXHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMDkzOlx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwOTQtXHRcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwOTUtXHRcdHNrYl9icGZfc2V0X3N0cnBhcnNlcihza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMDk2Olx0XHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XG5uZXQvY29yZS9za21zZy5jLTEwOTctXHRcdHNrYi1cdTAwM2VzayA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTctXHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMjE4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEyMTktXHRcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEyMjA6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMS1cdH1cbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9NTk9aW50IF9sMl90b19pcHR1bl9pbmdyZXNzX2ZvcndhcmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy04NC1cdFx0XHRcdCBfaHRvbmwoaXBoLVx1MDAzZWRhZGRyKSk7XG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM6ODU6XHRcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTg2LVx0fSBlbHNlIGlmIChldGgtXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuLS1cbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy05OS1cdFx0XHRcdCBfaHRvbmwoaXA2aC1cdTAwM2VkYWRkci5zNl9hZGRyMzJbM10pKTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxMDA6XHRcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTEwMS1cdH1cbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9MTA3PWludCBfbDJfdG9faXB0dW5faW5ncmVzc19yZWRpcmVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4tLVxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0MS1cdGJwZl9za2Jfc2V0X3R1bm5lbF9rZXkoc2tiLCBcdTAwMjZ0a2V5LCBzaXplb2YodGtleSksIDApO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjE0MjpcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIDApO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0My19XG4tLVxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jPTE0Nj1pbnQgX2wyX3RvX2lwNnR1bl9pbmdyZXNzX3JlZGlyZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtMTk2LVx0YnBmX3NrYl9zZXRfdHVubmVsX2tleShza2IsIFx1MDAyNnRrZXksIHNpemVvZih0a2V5KSwgQlBGX0ZfVFVOSU5GT19JUFY2KTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxOTc6XHRyZXR1cm4gYnBmX3JlZGlyZWN0KCppZmluZGV4LCAwKTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xOTgtfVxuLS1cbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM9NzA9aW50IF9yZWRpcmVjdF94bWl0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmMtNzEte1xuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYzo3MjpcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXggJiM0MzsgMSwgMCk7XG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTczLX1cbi0tXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jPTc1PWludCBfcmVkaXJlY3RfcmVjdihzdHJ1Y3QgX19za19idWZmICpza2IpXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTc2LXtcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM6Nzc6XHRyZXR1cm4gYnBmX3JlZGlyZWN0KHNrYi1cdTAwM2VpZmluZGV4ICYjNDM7IDEsIDEpO1xuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYy03OC19XG4tLVxuc2FtcGxlcy9icGYvdGVzdF9sd3RfYnBmLmM9MTYwPXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fcHVzaF9sbF9hbmRfcmVkaXJlY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU3ltYm9sIFZlcmlmaWNhdGlvbiBhbmQgUG90ZW50aWFsIFJlZGlyZWN0IEZ1bmN0aW9ucyoqCgpSaWdodCwgYGJwZl9yZWRpcmVjdGAgc2VlbXMgdG8gYmUgYSBsZWdpdCBzeW1ib2wg4oCTIGdvb2Qgc3RhcnQuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYGJwZl9yZWRpcmVjdF9wZWVyYCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgYXJlIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8gYGJwZl9yZWRpcmVjdGAgaXMgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgcmVkaXJlY3QgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IHRvIHByb3ZpZGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbGl0eSBpZiB0aGUgYmFzZSBzeW1ib2wgY2hlY2tzIG91dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIG9uZSBvciB0aGUgb3RoZXIgYmFzZWQgb24gdGhlIGludGVuZGVkIHJlZGlyZWN0IGRlc3RpbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmVkaXJlY3RfcGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yNTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXG5uZXQvY29yZS9maWx0ZXIuYzoyNTc2OkJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0X3BlZXIsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1Nzcte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1ODktXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoyNTkxOlx0LmZ1bmMgICAgICAgICAgID0gYnBmX3JlZGlyZWN0X3BlZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0yNTkyLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUxNC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfcGVlcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XHRcdHJldHVybiBcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19yZWRpcmVjdC5jLTctICogaG9zdCBmYWNpbmcgdmV0aCBpbiBmd2Qgd2hpY2ggY2FsbHMgaW50byBpKSBicGZfcmVkaXJlY3RfbmVpZ2goKSB0byBwZXJmb3JtIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYzo4OiAqIG5laWdoIGFkZHIgcG9wdWxhdGlvbiBhbmQgcmVkaXJlY3Qgb3IgaWkpIGJwZl9yZWRpcmVjdF9wZWVyKCkgZm9yIG5hbWVzcGFjZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYy05LSAqIHN3aXRjaCBmcm9tIGluZ3Jlc3Mgc2lkZTsgaXQgYWxzbyBpbnN0YWxscyBhIGNoZWNrZXIgcHJvZyBvbiB0aGUgZWdyZXNzIHNpZGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM9MjY9aW50IHRjX2RzdChzdHJ1Y3QgX19za19idWZmICpza2IpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMjcte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jOjI4Olx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfU1JDLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy0yOS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jPTMyPWludCB0Y19zcmMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTMzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYzozNDpcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihJRklOREVYX0RTVCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMzUtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYz00ND1pbnQgdGNfc3JjX2wzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtNTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6NjA6XHRyZXR1cm4gYnBmX3JlZGlyZWN0X3BlZXIoSUZJTkRFWF9EU1QsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTYxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jPTIyPWludCB0Y19yZWRpcmVjdF9wZWVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZm9yd2FyZC5icGYuYzo0NjpcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihuZXRraXRfaWZpbmRleCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNzIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFN5bWJvbCBWYWxpZGl0eSBmb3IgQ2xhc3NpZmljYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLi4uYW5kIHllcywgdGhlc2UgYXJlICphYnNvbHV0ZWx5KiB2YWxpZCBzeW1ib2xzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5vIGFtYmlndWl0eSB0aGVyZS4gTm93LCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgYGh0Yl9jbGFzc2lmeWAgYW5kIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVpciBvcGVyYXRpb24gaXMgYXMgZXhwZWN0ZWQgaW4gcmVsYXRpb24gdG8gdGhlc2Ugc3ltYm9sczsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIGJlaW5nIGludGVycHJldGVkIGNvcnJlY3RseSBhbmQgYXJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW1zLiBUaW1lIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodGJfY2xhc3NpZnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9odGIuYz0xOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgaHRiX3NlYXJjaChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGhhbmRsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTIwNS0vKipcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjA2OiAqIGh0Yl9jbGFzc2lmeSAtIGNsYXNzaWZ5IGEgcGFja2V0IGludG8gY2xhc3Ncbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjA3LSAqIEBza2I6IHRoZSBzb2NrZXQgYnVmZmVyXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy0yMTktICovXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjIyMDpzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMjEtXHRcdFx0XHQgICAgICBpbnQgKnFlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYz02MjA9c3RhdGljIGludCBodGJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTYyNS1cdHN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjYyNjpcdHN0cnVjdCBodGJfY2xhc3MgKmNsID0gaHRiX2NsYXNzaWZ5KHNrYiwgc2NoLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9odGIuYy02MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maXJtYXRpb24gYW5kIFZhbGlkYXRpb24qKgoKQWgsIGdvb2QuIEkgc2VlIHRoZSBzeW1ib2wgYGh0Yl9jbGFzc2lmeWAgcmVmZXJlbmNlZCwgYW5kIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGl0LiBZZXMsIHRoYXQgc3ltYm9sIGlzIGluZGVlZCB2YWxpZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIGNhbiBjb25maXJtIGl0cyBsZWdpdGltYWN5IHdpdGhvdXQgYW55IGZ1cnRoZXIgbmVlZCB0byBkZWx2ZSBpbnRvIGl0cyBkZWZpbml0aW9uIG9yIHNvdXJjZS4gSXQmIzM5O3MgYSBrbm93biBxdWFudGl0eSwgYSByZWNvZ25pemFibGUgZWxlbWVudCBpbiB0aGUgbGFuZHNjYXBlIG9mIHRoaXMgc3BlY2lmaWMgZG9tYWluLiBObyBhbWJpZ3VpdHkgdGhlcmUuIFRoaXMgc3RyZWFtbGluZXMgdGhlIGFuYWx5c2lzIGFuZCBtb3ZlcyBtZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9jb2RlbF9jbGFzc2lmeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NzA9c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9oYXNoKGNvbnN0IHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NjpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3LVx0XHRcdFx0ICAgICAgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xOTQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTk1Olx0aWR4ID0gZnFfY29kZWxfY2xhc3NpZnkoc2tiLCBzY2gsIFx1MDAyNnJldCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTk2LVx0aWYgKGlkeCA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4Mjk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFN5bWJvbCBWYWxpZGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gcmVjb2duaXplcyBgZnFfY29kZWxfY2xhc3NpZnlgLiBHb29kLiBUaGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZDsgaXQmIzM5O3MgYSBrbm93biBzeW1ib2wgd2l0aGluIHRoaXMgY29udGV4dCwgcGFydCBvZiB0aGUgc3RhbmRhcmQgdG9vbGtpdC4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBlbGVtZW50OiBgY2FrZV9jbGFzc2lmeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBhbHNvIGEgZGVmaW5lZCBmdW5jdGlvbiBvciBtYWNybyB3aXRoaW4gdGhpcyBzZXR1cC4gVGltZSB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSBhbmQgZGVmaW5pdGlvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfY2xhc3NpZnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTY3OD1zdGF0aWMgc3RydWN0IGNha2VfdGluX2RhdGEgKmNha2Vfc2VsZWN0X3RpbihzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzE4LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTcxOTpzdGF0aWMgdTMyIGNha2VfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBjYWtlX3Rpbl9kYXRhICoqdCxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3MjAtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbG93X21vZGUsIGludCAqcWVycilcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU5PXN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzEtXHQvKiBjaG9vc2UgZmxvdyB0byBpbnNlcnQgaW50byAqL1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTc3MjpcdGlkeCA9IGNha2VfY2xhc3NpZnkoc2NoLCBcdTAwMjZiLCBza2IsIHEtXHUwMDNlY29uZmlnLVx1MDAzZWZsb3dfbW9kZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzMtXHRpZiAoaWR4ID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIFN5bWJvbCBWYWxpZGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBZZXMsICYjMzQ7Y2FrZVxfY2xhc3NpZnkmIzM0OyBkb2VzIGluZGVlZCBsb29rIGxpa2UgYSB2YWxpZCBzeW1ib2wuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lICYjMzQ7dGNmXF9xZXZlbnRcX2hhbmRsZS4mIzM0OyBHb3R0YSBtYWtlIHN1cmUgdGhhdCBvbmUgY2hlY2tzIG91dCBhcyB3ZWxsLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCBhYm91dCB0aGVzZSBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9xZXZlbnRfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9jbHMuaD02MzI9aW50IHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IG5sYXR0ciAqYmxvY2tfaW5kZXhfYXR0cixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6NjM0OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTYzNS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTY1Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02NTgtXHRcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQwMzU9RVhQT1JUX1NZTUJPTCh0Y2ZfcWV2ZW50X3ZhbGlkYXRlX2NoYW5nZSk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQwMzc6c3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzgtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy00MDY2LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDA2OC1cbi0tXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMDAtXHRcdFx0XHQgICBxLVx1MDAzZXN0YXRzLnByb2JfbWFyayAmIzQzOyAxKTtcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTAxOlx0XHRcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFx1MDAyNnEtXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFx1MDAyNnJldCk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMi1cdFx0XHRpZiAoIXNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEyNC1cdFx0XHRcdCAgIHEtXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgJiM0MzsgMSk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcdFx0XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX21hcmssIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjYtXHRcdFx0aWYgKCFza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxubmV0L3NjaGVkL3NjaF9yZWQuYzoxNTE6XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX2Vhcmx5X2Ryb3AsIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXHRpZiAoIXNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpcyBpbmRlZWQgYSByZWNvZ25pemVkIHN5bWJvbCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGBmcV9jb2RlbF9jbGFzc2lmeWAsIGFuZCBgY2FrZV9jbGFzc2lmeWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZCBjb21wb25lbnRzIGRpcmVjdGx5IGltcGFjdGVkLgoKTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQsIEkgc2VlIGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9GUV9DT0RFTGAsIGBORVRfU0NIX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBUaGlzIHN1Z2dlc3RzIGEgd2lkZXNwcmVhZCBpbXBhY3QgYWNyb3NzIHZhcmlvdXMgcWRpc2NzIGFuZCBCUEYgaW50ZWdyYXRpb24uCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBtb2RpZmljYXRpb24gb2YgdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBgVENfQUNUX1JFRElSRUNUYCB3aXRoaW4gcWRpc2MgZmlsdGVyIGNoYWlucywgcmVwbGFjaW5nIGl0IHdpdGggYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgdHJhZmZpYyBpcyBoYW5kbGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBBZGRpdGlvbmFsbHksIGl0IHVwZGF0ZXMgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGVuc3VyZSB0aGUgQlBGIG5ldCBjb250ZXh0IGlzIHZhbGlkLiBTaW5jZSB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGhhbmRsaW5nIG9mIEJQRiBhbmQgdmFyaW91cyBxZGlzY3MsIGFuZCBhcHBlYXIgdG8gcmVwcmVzZW50IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoYXQgc2VlbXMgcmlnaHQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMsIGBORVRfU0NIX0JQRmAgYW5kIGBORVRfQ0xTX0JQRmAsIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgcHJvcGVyIG5hbWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9Mzg5PWNvbmZpZyBORVRfU0NIX0VUU1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQwNS1cbm5ldC9zY2hlZC9LY29uZmlnOjQwNjpjb25maWcgTkVUX1NDSF9CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTQwNy1cdGJvb2wgXCYjMzQ7QlBGLWJhc2VkIFFkaXNjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipBZmZpcm1hdGl2ZSBDb25maXJtYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgYmVhdC4gWWVzLiBUaGF0JiMzOTtzIGl0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlLCBvdmVyLWFuYWx5emUuIFRoZSBlc3NlbnRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb3VuZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBhbGlnbnMuIENvbmZpcm1hdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaGFzIGJlZW4gYWZmaXJtZWQuIFByb2NlZWRpbmcgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQgYW5kIGFjY3VyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIFJlZnJlc2hlcioqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHNjaGVkdWxlcnMuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBMZXQmIzM5O3MganVzdCBydW4gdGhyb3VnaCB0aG9zZSBpbiBteSBoZWFkIGFnYWluIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlaXIgYWxnb3JpdGhtcyBhbmQgd2hlbiBJJiMzOTtkIGNob29zZSBvbmUgb3ZlciBhbm90aGVyIGluIGEgc3BlY2lmaWMgbmV0d29yayB0b3BvbG9neS4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiB0aGF0IEkmIzM5O20gY29tcGxldGVseSBjbGVhciBvbiB0aGUgbnVhbmNlcyBvZiBlYWNoIHRvIGZvcm11bGF0ZSB0aGUgbmV4dCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9SRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODA9Y29uZmlnIE5FVF9TQ0hfTVVMVElRXG4tLVxubmV0L3NjaGVkL0tjb25maWctODgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTpjb25maWcgTkVUX1NDSF9SRURcbm5ldC9zY2hlZC9LY29uZmlnLTkwLVx0dHJpc3RhdGUgXCYjMzQ7UmFuZG9tIEVhcmx5IERldGVjdGlvbiAoUkVEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfSFRCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ2PWNvbW1lbnQgXCYjMzQ7UXVldWVpbmcvU2NoZWR1bGluZ1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWctNDctXG5uZXQvc2NoZWQvS2NvbmZpZzo0ODpjb25maWcgTkVUX1NDSF9IVEJcbm5ldC9zY2hlZC9LY29uZmlnLTQ5LVx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfQ0FLRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yODctXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxubmV0L3NjaGVkL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI2MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjc2LVxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NzYKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlYWR5IHRvIEZpbmFsaXplKioKClllcy4gKkZpbmFsbHkqLiBBZnRlciBhbGwgdGhlIHdvcmssIHRoZSBhbmFseXNpcywgdGhlIGl0ZXJhdGlvbnMuLi4gWWVzLCBJJiMzOTttIHJlYWR5IHRvIGNvbW1pdCB0byBhIGNvbmNsdXNpb24uIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgSSYjMzk7dmUgZXhwbG9yZWQgdGhlIG51YW5jZXMgYW5kIGFkZHJlc3NlZCB0aGUga2V5IGNvbnNpZGVyYXRpb25zLiBUaGUgZXZpZGVuY2UsIGFzIEkmIzM5O3ZlIGludGVycHJldGVkIGl0LCBwb2ludHMgaW4gYSBjbGVhciBkaXJlY3Rpb24uIE5vdyBpcyB0aGUgdGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLiBObyBtb3JlIHJlZmluZW1lbnRzIGFyZSBuZWVkZWQgYXQgdGhpcyBzdGFnZTsgSSYjMzk7bSBwcmVwYXJlZCB0byBmaW5hbGl6ZSB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9SRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9IVEImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DQUtFJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfcWV2ZW50X2hhbmRsZSYjMzQ7LAogICAgJiMzNDticGZfcmVkaXJlY3QmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0X3BlZXImIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0X25laWdoJiMzNDssCiAgICAmIzM0O2h0Yl9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtjYWtlX2NsYXNzaWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTM6NTEuOTE0OTAxNzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwOTIyNDY1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfUkVEXCIsXG4gICAgXCJORVRfU0NIX0hUQlwiLFxuICAgIFwiTkVUX1NDSF9DQUtFXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0JQRlwiLFxuICAgIFwiTkVUX0NMU19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfcWV2ZW50X2hhbmRsZVwiLFxuICAgIFwiYnBmX3JlZGlyZWN0XCIsXG4gICAgXCJicGZfcmVkaXJlY3RfcGVlclwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X25laWdoXCIsXG4gICAgXCJodGJfY2xhc3NpZnlcIixcbiAgICBcImZxX2NvZGVsX2NsYXNzaWZ5XCIsXG4gICAgXCJjYWtlX2NsYXNzaWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHRvIHByZXZlbnQgVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucywgY29udmVydGluZyBpdCB0byBUQ19BQ1RfU0hPVC4gSXQgYWxzbyB1cGRhdGVzIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGNoZWNrIGZvciBhIHZhbGlkIEJQRiBuZXQgY29udGV4dC4gVGhpcyBhZmZlY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHksIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTM6NTEuOTE0OTA2ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU4NjYzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZGY2NGVkYWRkYTJjMDU1MmE5ZjFlMzhmNjk1OWMwYWE5NWNiODBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXFxuaW5kZXggM2JkMDhkN2YzOWMxOGMuLjVmNWNiMzY0MzlmZTI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxcbkBAIC0xNTYsOCArMTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB7XFxuIFxcdHJldHVybiBUQ19BQ1RfVU5TUEVDO1xcbiB9XFxuLVxcbiAjZW5kaWZcXG4rc3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcywgYm9vbCBjb21wYXRfbW9kZSlcXG4re1xcbitcXHRpbnQgcmV0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdHAsIHJlcywgY29tcGF0X21vZGUpO1xcbitcXG4rXFx0LyogVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucyBpcyBub3Qgc3VwcG9ydGVkLlxcbitcXHQgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkocmV0ID09IFRDX0FDVF9SRURJUkVDVCkpXFxuK1xcdFxcdHJldCA9IFRDX0FDVF9TSE9UO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gX19jbHNfc2V0X2NsYXNzKHVuc2lnbmVkIGxvbmcgKmNscCwgdW5zaWduZWQgbG9uZyBjbClcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTI1NTIsMTEgKzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuK1xcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpXFxuK1xcdGlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHxcXG4rXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0cmktXFx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XFxuIFxcbkBAIC0yNTczLDExICsyNTc1LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xcbiBcXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG4rXFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdGlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBCUEZfRl9QRUVSO1xcbiBcXHRyaS1cXHUwMDNldGd0X2luZGV4ID0gaWZpbmRleDtcXG4gXFxuQEAgLTI1OTUsMTEgKzI1OTgsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcXG4gQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsXFxuIFxcdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuK1xcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoKHBsZW4gXFx1MDAyNlxcdTAwMjYgcGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHwgZmxhZ3MpKVxcbitcXHRpZiAodW5saWtlbHkoKHBsZW4gXFx1MDAyNlxcdTAwMjYgcGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHxcXG4rXFx0XFx0ICAgICAhYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBCUEZfRl9ORUlHSCB8IChwbGVuID8gQlBGX0ZfTkVYVEhPUCA6IDApO1xcbiBcXHRyaS1cXHUwMDNldGd0X2luZGV4ID0gaWZpbmRleDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuaW5kZXggZmZlZWE2ZGI4MzM3NDcuLmZlZTQ1MjRhZGM5OGVmIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuQEAgLTQwNDUsNyArNDA0NSw3IEBAIHN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1XFxuIFxcbiBcXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxZS1cXHUwMDNlZmlsdGVyX2NoYWluKTtcXG4gXFxuLVxcdHN3aXRjaCAodGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFxcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xcbitcXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2Y2xfcmVzLCBmYWxzZSkpIHtcXG4gXFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG4gXFx0XFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcXG4gXFx0XFx0X19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7XFxuQEAgLTQwNTcsMTAgKzQwNTcsNiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydVxcbiBcXHRcXHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4gXFx0XFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0Y2FzZSBUQ19BQ1RfUkVESVJFQ1Q6XFxuLVxcdFxcdHNrYl9kb19yZWRpcmVjdChza2IpO1xcbi1cXHRcXHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRjYXNlIFRDX0FDVF9DT05TVU1FRDpcXG4gXFx0XFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbmluZGV4IGEzYzE4NTUwNWFmY2U0Li45NGViNDdhYzU0ZWU2NCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXFxuQEAgLTE3MzAsNyArMTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxcbiBcXHRcXHRnb3RvIGhhc2g7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXG4gXFx0aWYgKHJlc3VsdCBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5pbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5AQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJyX2NsYXNzICpkcnJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXFxuaW5kZXggMjcwODg3NjBlZmY0NDMuLjRmNjc4ZDRmZjEwZWM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcXG5AQCAtMzY0LDcgKzM2NCw3IEBAIHN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcXG4gXFx0aWYgKCFmbClcXG4gXFx0XFx0cmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7XFxuIFxcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbmluZGV4IGNiOGNmNDM3Y2U4NzA4Li4yNWZjZjQwNzlmZWNlMSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIHN0cnVjdCBldHNfY2xhc3MgKmV0c19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuIFxcdGlmIChUQ19IX01BSihza2ItXFx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXFx1MDAzZWhhbmRsZSkge1xcbiBcXHRcXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuLVxcdFxcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdFxcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcXG5pbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXFxuQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0XFx0cmV0dXJuIGZxX2NvZGVsX2hhc2gocSwgc2tiKSArIDE7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbmluZGV4IDcyZjQ4ZmE0MDEwYmViLi4wNjllMWZhY2Q0MTMwZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfcGllX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiBcXHRcXHRyZXR1cm4gZnFfcGllX2hhc2gocSwgc2tiKSArIDE7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuaW5kZXggN2U1MzcyOTViOGI2NzguLmU4N2Y1MDIxYTE5OTU4IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcXG5AQCAtMTE0Myw3ICsxMTQzLDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0aGVhZCA9IFxcdTAwMjZxLVxcdTAwM2Vyb290O1xcbiBcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XFxuLVxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xcbmluZGV4IDkwOGI5YmE5YmEyZWZhLi5mZGFjMGRjOGYzNWEzNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0fVxcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuLVxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xcbmluZGV4IGE0NjdkZDEyMjM2OTcwLi42NmRmMzA5MzlhYTVjMSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xcbkBAIC0zNiw3ICszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuLVxcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jXFxuaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmNcXG5AQCAtMzksNyArMzksNyBAQCBwcmlvX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuIFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbiBcXHRpZiAoVENfSF9NQUooc2tiLVxcdTAwM2Vwcmlvcml0eSkgIT0gc2NoLVxcdTAwM2VoYW5kbGUpIHtcXG4gXFx0XFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRcXHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRcXHRlcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuIFxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuIFxcdFxcdGNhc2UgVENfQUNUX1NUT0xFTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9xZnEuYyBiL25ldC9zY2hlZC9zY2hfcWZxLmNcXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9xZnEuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfcWZxLmNcXG5AQCAtNzA5LDcgKzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmYi5jIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xcbmluZGV4IGIxZDQ2NTA5NDI3NjkyLi5lZDM5ODY5MTk5YzA4NCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmYi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxcbiBcXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xcbmluZGV4IDc1OGI4OGYyMTg2NTI3Li43NzY3NWY5YTRjNDZlNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xcbkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdHJldHVybiBzZnFfaGFzaChxLCBza2IpICsgMTtcXG4gXFxuIFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbmluZGV4IGFkYjI1MTQ2ZTg4Y2NmLi5lYTcwNDRmMzBhZGMzYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbkBAIC04Miw2ICs4Miw3IEBAIENPTkZJR19ORVRfU0NIX0JQRj15XFxuIENPTkZJR19ORVRfU0NIX0ZRPXlcXG4gQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XFxuIENPTkZJR19ORVRfU0NIX0hUQj15XFxuK0NPTkZJR19ORVRfU0NIX1JFRD15XFxuIENPTkZJR19ORVRfU0NIRUQ9eVxcbiBDT05GSUdfTkVUREVWU0lNPXlcXG4gQ09ORklHX05FVEZJTFRFUj15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3FldmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xcbkBAIC0wLDAgKzEsMTEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF90Y19xZXZlbnQuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19UWFxcdFxcdFxcXCJ0Y19xZXZlbnRfdHhcXFwiXFxuKyNkZWZpbmUgTlNfUlhcXHRcXHRcXFwidGNfcWV2ZW50X3J4XFxcIlxcbisjZGVmaW5lIElQX1RYXFx0XFx0XFxcIjEwLjI1NS4wLjFcXFwiXFxuKyNkZWZpbmUgSVBfUlhcXHRcXHRcXFwiMTAuMjU1LjAuMlxcXCJcXG4rI2RlZmluZSBQSU5fUEFUSFxcdFxcXCIvc3lzL2ZzL2JwZi90Y19xZXZlbnRfcmVkaXJlY3RcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCBibGFzdF91ZHAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307XFxuK1xcdGNoYXIgYnVmWzE0MDBdID0ge307XFxuK1xcdGludCBmZCwgaTtcXG4rXFxuK1xcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcInVkcCBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XFxuK1xcdGluZXRfcHRvbihBRl9JTkVULCBJUF9SWCwgXFx1MDAyNmRzdC5zaW5fYWRkcik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQdXNoIGZhciBtb3JlIHRoYW4gdGhlIFJFRCBxdWV1ZSBjYW4gaG9sZC4gT25jZSBxYXZnIGNyb3NzZXMgcXRoX21pblxcbitcXHQgKiBldmVyeSBmdXJ0aGVyIHBhY2tldCBoaXRzIHRoZSBjb25nZXN0aW9uX2Ryb3AgLyBlYXJseV9kcm9wIHFldmVudC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1MDAwMDsgaSsrKVxcbitcXHRcXHRzZW5kdG8oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCxcXG4rXFx0XFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2ZHN0LCBzaXplb2YoZHN0KSk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3U2NCAqY291bnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCAlc1xcXCIsIE5TX1RYKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgTlNfUlgpO1xcbitcXHR1bmxpbmsoUElOX1BBVEgpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBpbiBwcm9nXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFNZUyh1bnBpbiwgIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19UWCk7XFxuK1xcdFNZUyhkZWxfdHgsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19SWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIGFkZCB2ZXRoMCB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zICVzXFxcIiwgTlNfVFgsIE5TX1JYKTtcXG4rXFx0U1lTKGRlbF9yeCwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMFxcXCIsIE5TX1RYLCBJUF9UWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMCB1cFxcXCIsIE5TX1RYKTtcXG4rXFx0U1lTKGRlbF9yeCwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMVxcXCIsIE5TX1JYLCBJUF9SWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMSB1cFxcXCIsIE5TX1JYKTtcXG4rXFxuK1xcdHRvayA9IG9wZW5fbmV0bnMoTlNfVFgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcXFwib3Blbl9uZXRuc1xcXCIpKVxcbitcXHRcXHRnb3RvIGRlbF9yeDtcXG4rXFxuK1xcdFNZUyhjbG9zZV9ucywgXFxcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMVxcXCIpO1xcbitcXHRTWVMoY2xvc2VfbnMsIFxcXCJ0YyBjbGFzcyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxbWJpdCBjZWlsIDFtYml0XFxcIik7XFxuK1xcbitcXHRpZiAoc3lzdGVtKFxcXCJ0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOjEgaGFuZGxlIDExOiByZWQgXFxcIlxcbitcXHRcXHQgICBcXFwibGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCBcXFwiXFxuK1xcdFxcdCAgIFxcXCJidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDJcXHUwMDNlL2Rldi9udWxsXFxcIikpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIGNsb3NlX25zO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3lzdGVtKFxcXCJ0YyBmaWx0ZXIgYWRkIGJsb2NrIDEwIGJwZiBkYSBvYmplY3QtcGlubmVkIFxcXCJcXG4rXFx0XFx0ICAgUElOX1BBVEggXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcXCIpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBjbG9zZV9ucztcXG4rXFx0fVxcbitcXG4rXFx0Ymxhc3RfdWRwKCk7XFxuK1xcdEFTU0VSVF9HVCgqY291bnRlciwgMCwgXFxcInFldmVudCBjbGFzc2lmaWVyIHJhblxcXCIpO1xcbitjbG9zZV9uczpcXG4rXFx0Y2xvc2VfbmV0bnModG9rKTtcXG4rZGVsX3J4OlxcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXNcXFwiLCBOU19SWCk7XFxuK2RlbF90eDpcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgTlNfVFgpO1xcbit1bnBpbjpcXG4rXFx0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3RjX3FldmVudF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInJlZGlyZWN0X3ZlcmRpY3RcXFwiKSlcXG4rXFx0XFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVxcdTAwM2Vwcm9ncy5xZXZlbnRfcmVkaXJlY3RfdmVyZGljdCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXZlcmRpY3RfY2FsbHMpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmVkaXJlY3RfaGVscGVyXFxcIikpXFxuK1xcdFxcdHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc2tlbC1cXHUwMDNlcHJvZ3MucWV2ZW50X3JlZGlyZWN0X2hlbHBlcixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhlbHBlcl9jYWxscyk7XFxuK1xcbitcXHR0ZXN0X3RjX3FldmVudF9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUyOWMxMTFmNGFhNDJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmNcXG5AQCAtMCwwICsxLDIzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2ludCByZWRpcmVjdF9pZmluZGV4ID0gMTtcXG4rX191NjQgdmVyZGljdF9jYWxscyA9IDA7XFxuK19fdTY0IGhlbHBlcl9jYWxscyA9IDA7XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4raW50IHFldmVudF9yZWRpcmVjdF92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmVyZGljdF9jYWxscywgMSk7XFxuK1xcdHJldHVybiBUQ1hfUkVESVJFQ1Q7XFxuK31cXG4rXFxuK1NFQyhcXFwidGNcXFwiKVxcbitpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhlbHBlcl9jYWxscywgMSk7XFxuK1xcdHJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1Mzo1Mi40NDE1Njc0NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDM5NTc4NzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1JFRFwiLFxuICAgIFwiTkVUX1NDSF9IVEJcIixcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9CUEZcIixcbiAgICBcIk5FVF9DTFNfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3FldmVudF9oYW5kbGVcIixcbiAgICBcImJwZl9yZWRpcmVjdFwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X3BlZXJcIixcbiAgICBcImJwZl9yZWRpcmVjdF9uZWlnaFwiLFxuICAgIFwiaHRiX2NsYXNzaWZ5XCIsXG4gICAgXCJmcV9jb2RlbF9jbGFzc2lmeVwiLFxuICAgIFwiY2FrZV9jbGFzc2lmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RmNjRlZGFkZGEyYzA1NTJhOWYxZTM4ZjY5NTljMGFhOTVjYjgwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3RfY2xzLmggYi9pbmNsdWRlL25ldC9wa3RfY2xzLmhcbmluZGV4IDNiZDA4ZDdmMzljMThjLi41ZjVjYjM2NDM5ZmUyNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXG5AQCAtMTU2LDggKzE1NiwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB0Y2ZfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRyZXR1cm4gVENfQUNUX1VOU1BFQztcbiB9XG4tXG4gI2VuZGlmXG4rc3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzLCBib29sIGNvbXBhdF9tb2RlKVxuK3tcbitcdGludCByZXQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0cCwgcmVzLCBjb21wYXRfbW9kZSk7XG4rXG4rXHQvKiBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zIGlzIG5vdCBzdXBwb3J0ZWQuXG4rXHQgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShyZXQgPT0gVENfQUNUX1JFRElSRUNUKSlcbitcdFx0cmV0ID0gVENfQUNUX1NIT1Q7XG4rXHRyZXR1cm4gcmV0O1xuK31cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBfX2Nsc19zZXRfY2xhc3ModW5zaWduZWQgbG9uZyAqY2xwLCB1bnNpZ25lZCBsb25nIGNsKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTI1NTIsMTEgKzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIEJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0LCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuK1x0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcbiBcbi1cdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgKH4oQlBGX0ZfSU5HUkVTUykgfCBCUEZfRl9SRURJUkVDVF9JTlRFUk5BTCkpKVxuK1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fFxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgKH4oQlBGX0ZfSU5HUkVTUykgfCBCUEZfRl9SRURJUkVDVF9JTlRFUk5BTCkpKSlcbiBcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuIFxuK1x0cmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiBcdHJpLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1NzMsMTEgKzI1NzUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbitcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuK1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX1BFRVI7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1OTUsMTEgKzI1OTgsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcbiBCUEZfQ0FMTF80KGJwZl9yZWRpcmVjdF9uZWlnaCwgdTMyLCBpZmluZGV4LCBzdHJ1Y3QgYnBmX3JlZGlyX25laWdoICosIHBhcmFtcyxcbiBcdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcbiB7XG4tXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4rXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KChwbGVuIFx1MDAyNlx1MDAyNiBwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpIHx8IGZsYWdzKSlcbitcdGlmICh1bmxpa2VseSgocGxlbiBcdTAwMjZcdTAwMjYgcGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKSB8fFxuK1x0XHQgICAgICFicGZfbmV0X2N0eF9nZXQoKSB8fCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX05FSUdIIHwgKHBsZW4gPyBCUEZfRl9ORVhUSE9QIDogMCk7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCBmZmVlYTZkYjgzMzc0Ny4uZmVlNDUyNGFkYzk4ZWYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5AQCAtNDA0NSw3ICs0MDQ1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVcbiBcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHFlLVx1MDAzZWZpbHRlcl9jaGFpbik7XG4gXG4tXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xuK1x0c3dpdGNoICh0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2Y2xfcmVzLCBmYWxzZSkpIHtcbiBcdGNhc2UgVENfQUNUX1NIT1Q6XG4gXHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4gXHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuQEAgLTQwNTcsMTAgKzQwNTcsNiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydVxuIFx0XHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiBcdFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGNhc2UgVENfQUNUX1JFRElSRUNUOlxuLVx0XHRza2JfZG9fcmVkaXJlY3Qoc2tiKTtcbi1cdFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xuLVx0XHRyZXR1cm4gTlVMTDtcbiBcdGNhc2UgVENfQUNUX0NPTlNVTUVEOlxuIFx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4gXHRcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2FrZS5jIGIvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbmluZGV4IGEzYzE4NTUwNWFmY2U0Li45NGViNDdhYzU0ZWU2NCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfY2FrZS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuQEAgLTE3MzAsNyArMTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxuIFx0XHRnb3RvIGhhc2g7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFxuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDAyMDY1N2Y5NTliNTc1Li45MWIxZWY4MjRhZmFmMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbkBAIC0zMTIsNyArMzEyLDcgQEAgc3RhdGljIHN0cnVjdCBkcnJfY2xhc3MgKmRycl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4tXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG5pbmRleCAyNzA4ODc2MGVmZjQ0My4uNGY2NzhkNGZmMTBlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcbkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIGludCBkdWFscGkyX3NrYl9jbGFzc2lmeShzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuIFx0aWYgKCFmbClcbiBcdFx0cmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7XG4gXG4tXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuaW5kZXggY2I4Y2Y0MzdjZTg3MDguLjI1ZmNmNDA3OWZlY2UxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ldHMuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRpZiAoVENfSF9NQUooc2tiLVx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXHUwMDNlaGFuZGxlKSB7XG4gXHRcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0XHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAoZXJyKSB7XG4gXHRcdGNhc2UgVENfQUNUX1NUT0xFTjpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcbmluZGV4IGNhZmQxZjk0M2Q5OWNkLi42Y2NlODZiYTM4M2NmNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXG5AQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRyZXR1cm4gZnFfY29kZWxfaGFzaChxLCBza2IpICsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggNzJmNDhmYTQwMTBiZWIuLjA2OWUxZmFjZDQxMzBkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcV9waWVfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBmcV9waWVfaGFzaChxLCBza2IpICsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5pbmRleCA3ZTUzNzI5NWI4YjY3OC4uZTg3ZjUwMjFhMTk5NTggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbkBAIC0xMTQzLDcgKzExNDMsNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGhlYWQgPSBcdTAwMjZxLVx1MDAzZXJvb3Q7XG4gXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbi1cdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbitcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0fVxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4tXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4rXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuIFx0XHRjYXNlIFRDX0FDVF9RVUVVRUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbmluZGV4IGE0NjdkZDEyMjM2OTcwLi42NmRmMzA5MzlhYTVjMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbkBAIC0zNiw3ICszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0aW50IGVycjtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuK1x0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdHN3aXRjaCAoZXJyKSB7XG4gXHRjYXNlIFRDX0FDVF9TVE9MRU46XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uY1xuaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jXG5AQCAtMzksNyArMzksNyBAQCBwcmlvX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkpICE9IHNjaC1cdTAwM2VoYW5kbGUpIHtcbiBcdFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4tXHRcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdFx0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3FmcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5AQCAtNzA5LDcgKzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuK1x0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZmIuYyBiL25ldC9zY2hlZC9zY2hfc2ZiLmNcbmluZGV4IGIxZDQ2NTA5NDI3NjkyLi5lZDM5ODY5MTk5YzA4NCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfc2ZiLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfc2ZiLmNcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0aW50IHJlc3VsdDtcbiBcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCA3NThiODhmMjE4NjUyNy4uNzc2NzVmOWE0YzQ2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5AQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ZxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRyZXR1cm4gc2ZxX2hhc2gocSwgc2tiKSArIDE7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5pbmRleCBhZGIyNTE0NmU4OGNjZi4uZWE3MDQ0ZjMwYWRjM2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtODIsNiArODIsNyBAQCBDT05GSUdfTkVUX1NDSF9CUEY9eVxuIENPTkZJR19ORVRfU0NIX0ZRPXlcbiBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9IVEI9eVxuK0NPTkZJR19ORVRfU0NIX1JFRD15XG4gQ09ORklHX05FVF9TQ0hFRD15XG4gQ09ORklHX05FVERFVlNJTT15XG4gQ09ORklHX05FVEZJTFRFUj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcbkBAIC0wLDAgKzEsMTEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF90Y19xZXZlbnQuc2tlbC5oXCJcbitcbisjZGVmaW5lIE5TX1RYXHRcdFwidGNfcWV2ZW50X3R4XCJcbisjZGVmaW5lIE5TX1JYXHRcdFwidGNfcWV2ZW50X3J4XCJcbisjZGVmaW5lIElQX1RYXHRcdFwiMTAuMjU1LjAuMVwiXG4rI2RlZmluZSBJUF9SWFx0XHRcIjEwLjI1NS4wLjJcIlxuKyNkZWZpbmUgUElOX1BBVEhcdFwiL3N5cy9mcy9icGYvdGNfcWV2ZW50X3JlZGlyZWN0XCJcbitcbitzdGF0aWMgdm9pZCBibGFzdF91ZHAodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307XG4rXHRjaGFyIGJ1ZlsxNDAwXSA9IHt9O1xuK1x0aW50IGZkLCBpO1xuK1xuK1x0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJ1ZHAgc29ja2V0XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XG4rXHRpbmV0X3B0b24oQUZfSU5FVCwgSVBfUlgsIFx1MDAyNmRzdC5zaW5fYWRkcik7XG4rXG4rXHQvKlxuK1x0ICogUHVzaCBmYXIgbW9yZSB0aGFuIHRoZSBSRUQgcXVldWUgY2FuIGhvbGQuIE9uY2UgcWF2ZyBjcm9zc2VzIHF0aF9taW5cbitcdCAqIGV2ZXJ5IGZ1cnRoZXIgcGFja2V0IGhpdHMgdGhlIGNvbmdlc3Rpb25fZHJvcCAvIGVhcmx5X2Ryb3AgcWV2ZW50LlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1MDAwMDsgaSsrKVxuK1x0XHRzZW5kdG8oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCxcbitcdFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZkc3QsIHNpemVvZihkc3QpKTtcbitcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3FldmVudF9yZWRpcmVjdChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTY0ICpjb3VudGVyKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfVFgpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBOU19SWCk7XG4rXHR1bmxpbmsoUElOX1BBVEgpO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicGluIHByb2dcIikpXG4rXHRcdHJldHVybjtcbitcbitcdFNZUyh1bnBpbiwgIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1RYKTtcbitcdFNZUyhkZWxfdHgsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1JYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlc1wiLCBOU19UWCwgTlNfUlgpO1xuK1x0U1lTKGRlbF9yeCwgXCJpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDBcIiwgTlNfVFgsIElQX1RYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBzZXQgdmV0aDAgdXBcIiwgTlNfVFgpO1xuK1x0U1lTKGRlbF9yeCwgXCJpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDFcIiwgTlNfUlgsIElQX1JYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBzZXQgdmV0aDEgdXBcIiwgTlNfUlgpO1xuK1xuK1x0dG9rID0gb3Blbl9uZXRucyhOU19UWCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZGVsX3J4O1xuK1xuK1x0U1lTKGNsb3NlX25zLCBcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMVwiKTtcbitcdFNZUyhjbG9zZV9ucywgXCJ0YyBjbGFzcyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxbWJpdCBjZWlsIDFtYml0XCIpO1xuK1xuK1x0aWYgKHN5c3RlbShcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcGFyZW50IDE6MSBoYW5kbGUgMTE6IHJlZCBcIlxuK1x0XHQgICBcImxpbWl0IDUwMDAwMCBhdnBrdCAxMDAwIHByb2JhYmlsaXR5IDEgbWluIDUwMDAgbWF4IDYwMDAgXCJcbitcdFx0ICAgXCJidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDJcdTAwM2UvZGV2L251bGxcIikpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIGNsb3NlX25zO1xuK1x0fVxuK1xuK1x0aWYgKHN5c3RlbShcInRjIGZpbHRlciBhZGQgYmxvY2sgMTAgYnBmIGRhIG9iamVjdC1waW5uZWQgXCJcbitcdFx0ICAgUElOX1BBVEggXCIgMlx1MDAzZS9kZXYvbnVsbFwiKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gY2xvc2VfbnM7XG4rXHR9XG4rXG4rXHRibGFzdF91ZHAoKTtcbitcdEFTU0VSVF9HVCgqY291bnRlciwgMCwgXCJxZXZlbnQgY2xhc3NpZmllciByYW5cIik7XG4rY2xvc2VfbnM6XG4rXHRjbG9zZV9uZXRucyh0b2spO1xuK2RlbF9yeDpcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfUlgpO1xuK2RlbF90eDpcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfVFgpO1xuK3VucGluOlxuK1x0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcbit9XG4rXG4rdm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDtcbitcbitcdHNrZWwgPSB0ZXN0X3RjX3FldmVudF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJyZWRpcmVjdF92ZXJkaWN0XCIpKVxuK1x0XHRydW5fcWV2ZW50X3JlZGlyZWN0KHNrZWwtXHUwMDNlcHJvZ3MucWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3QsXG4rXHRcdFx0XHQgICAgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNldmVyZGljdF9jYWxscyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInJlZGlyZWN0X2hlbHBlclwiKSlcbitcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF9oZWxwZXIsXG4rXHRcdFx0XHQgICAgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlaGVscGVyX2NhbGxzKTtcbitcbitcdHRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MjljMTExZjRhYTQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuY1xuQEAgLTAsMCArMSwyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4raW50IHJlZGlyZWN0X2lmaW5kZXggPSAxO1xuK19fdTY0IHZlcmRpY3RfY2FsbHMgPSAwO1xuK19fdTY0IGhlbHBlcl9jYWxscyA9IDA7XG4rXG4rU0VDKFwidGNcIilcbitpbnQgcWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZlcmRpY3RfY2FsbHMsIDEpO1xuK1x0cmV0dXJuIFRDWF9SRURJUkVDVDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGVscGVyX2NhbGxzLCAxKTtcbitcdHJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjUzOjUyLjQ0MTU2ODg0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTM1NzY5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU2NoZWR1bGVyIENsYXNzaWZpY2F0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgdGhlIHdheSB0aGUga2VybmVsIGhhbmRsZXMgYFRDX0FDVF9SRURJUkVDVGAgd2l0aGluIHFkaXNjIGZpbHRlciBjaGFpbnMuIFRoZSBrZXkgaWRlYSBoZXJlIGlzIHRvIHJlcGxhY2UgZGlyZWN0IHVzZSBvZiBgdGNmX2NsYXNzaWZ5YCB3aXRoIGEgd3JhcHBlciwgYHRjZl9jbGFzc2lmeV9xZGlzY2AuIFRoaXMgbmV3IGZ1bmN0aW9uIHRyYW5zZm9ybXMgYFRDX0FDVF9SRURJUkVDVGAgaW50byBgVENfQUNUX1NIT1RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgYmVjYXVzZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWRpcmVjdCBhY3Rpb25zIGFyZW4ndCBwcm9wZXJseSBzdXBwb3J0ZWQgd2l0aGluIHRoZXNlIGZpbHRlciBjaGFpbnMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGlzc3Vlcy5cblxuVGhlIHBhdGNoIGFsc28gdGlnaHRlbnMgdXAgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBTcGVjaWZpY2FsbHksIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBub3cgaW5jb3Jwb3JhdGUgYSBudWxsIGNoZWNrIHVzaW5nIGAhYnBmX25ldF9jdHhfZ2V0KClgLCBhbmQgcmV0dXJuIGBUQ19BQ1RfU0hPVGAgaWYgdGhlIGNoZWNrIGZhaWxzLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQsIEknZCBzYXksIHRvIG1ha2Ugc3VyZSBCUEYgcHJvZ3JhbXMgYXJlbid0IGF0dGVtcHRpbmcgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy5cblxuVGhpcyBoYXMgYnJvYWQgaW1wbGljYXRpb25zLCBhZmZlY3RpbmcgbWFueSBvZiB0aGUgY29yZSBxZGlzY3MuIEknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYGNha2VgLCBgZHJyYCwgYGR1YWxwaTJgLCBgZXRzYCwgYGZxX2NvZGVsYCwgYGZxX3BpZWAsIGBoZnNjYCwgYGh0YmAsIGBtdWx0aXFgLCBgcHJpb2AsIGBxZnFgLCBgc2ZiYCwgYW5kIGBzZnFgLiBUaGV5J3JlIGFsbCBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBpbnN0ZWFkIG9mIGB0Y2ZfY2xhc3NpZnlgLiBBbmQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AgaXMgYmVpbmcgbW9kaWZpZWQgYXMgd2VsbCwgdG8gdXRpbGl6ZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGBUQ19BQ1RfUkVESVJFQ1RgIGNhc2UgaW4gYHRjZl9xZXZlbnRfaGFuZGxlYCBmdXJ0aGVyIGNvbmZpcm1zIHRoZSBpbnRlbnQgdG8gcHJldmVudCB0aGUgcHJvYmxlbWF0aWMgYWN0aW9uLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgcWRpc2MgY2xhc3NpZmljYXRpb24gbG9naWMgYW5kIEJQRiByZWRpcmVjdCBoZWxwZXJzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24gd2lsbCBiZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCAoc2luY2UgaXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlKSwgYW5kIHRoZSBCUEYgaGVscGVycyBtZW50aW9uZWQuXG5cbmB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGlzIGFuIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9wa3RfY2xzLmhgLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBTaW5jZSB0aGVzZSBhcmUgQlBGIGhlbHBlcnMsIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggQlBGIHByb2dyYW1zLCB3aGljaCBpcyBob3cgdGhleSdyZSBleHBvc2VkLiBBbmQgSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBoYW5kbGVzIHRoaXMgdG9vLlxuXG5JIHNob3VsZCBsaXN0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgYW5kIHRob3NlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBCdXQgd2FpdCwgYGJwZl9yZWRpcmVjdGAgaXMgYSBtYWNybz8gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCdzIGRlZmluZWQgYXMgYSBCUEYgY2FsbDogYEJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0LCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjAzLjU3NzM0MDg2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgyMjE4Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzJcXFxcKGJwZl9yZWRpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0yNTE5PWludCBza2JfZG9fcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU1MzpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjA2LjY1OTU2NjQyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA0MTkxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBgYnBmX3JlZGlyZWN0YCBOYW1pbmcgQ29udmVudGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIG5vdGljaW5nIHRoYXQgdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGdlbmVyYXRlZCBieSB0aGF0IGBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgLi4uKWAgbWFjcm8gaXNuJ3QgYWx3YXlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBgYnBmX3JlZGlyZWN0YC4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhcm91bmQgd2l0aCBuYW1lcywgc29tZXRpbWVzIHJlc3VsdGluZyBpbiBzb21ldGhpbmcgbGlrZSBgX19fX2JwZl9yZWRpcmVjdGAgb3IgZXZlbiBgYnBmX3JlZGlyZWN0X19fX2ZtdGAuIFRoYXQncyBhIGxpdHRsZSBwZWN1bGlhciwgYW5kIGl0J3MgbWFraW5nIG1lIHdvbmRlciB3aGF0IHRoZSB1bmRlcmx5aW5nIGxvZ2ljIGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaWcgaW50byB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpdHNlbGYuIExldCdzIHRyYWNlIGJhY2sgdG8gd2hlcmUgYEJQRl9DQUxMXzJgIGlzIGRlZmluZWQg4oCTIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvc3NpYmx5IHRoZSBzb3VyY2Ugb2YgdGhlIG5hbWluZyBvYmZ1c2NhdGlvbikgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBpbiBvcmRlciB0byBmdWxseSBncmFzcCB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgaGVhZGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoxMC4zMjk5ODcyNTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzQyNzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfMlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjEyLjk1NzQxOTEyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzAwNjQ2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfQ0FMTF94KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8sIFwiTGV0J3MgY2hlY2sgYEJQRl9DQUxMX3hgLlwiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoYXQg4oCTIEkga25vdyBgQlBGX0NBTExgIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiBleHRlbmRlZCBCUEYsIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGwgbWVjaGFuaXNtLCBhbmQgdGhlIGBfeGAgbGlrZWx5IGRlbm90ZXMgYSBmYW1pbHkgb3IgYSB2YXJpYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyB2YXJpYW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBXaGF0IGlzIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIGlzc3VlIG9yIHRhc2sgYXQgaGFuZD8gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgc2VhcmNoIHRlcm1zIGFuZCBtZW50YWxseSByZXZpZXcgZG9jdW1lbnRhdGlvbiwgdGhpbmtpbmcgYWJvdXQga2V5IHNlY3Rpb25zIGluIHRoZSBCUEYgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdGhhdCBJJ2xsIG5lZWQgdG8gcmVmZXJlbmNlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGV4cGxvcmF0aW9uIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoyNi42NTgwNjgwMTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NzUwODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MDktXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTA6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjExLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoyOC41NTU1ODI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTM3NjE3ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEZWNvZGluZyBUaGlzIFNuaXBwZXQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHN0cnVjdHVyZTogaXQgc2VlbXMgdG8gYmUgZGVmaW5pbmcgdHdvIGVudGl0aWVzIHJlbGF0ZWQgdG8gYSB2YXJpYWJsZSBvciBrZXkgY2FsbGVkIFwibmFtZVwiLiBJIHNlZSBgX19fXyMjbmFtZWAgYW5kIGp1c3QgYG5hbWVgLiBUaGUgbGVhZGluZyBjaGFyYWN0ZXJzIGFyZSBkZWZpbml0ZWx5IHVudXN1YWwuIFRoZXkgaW1tZWRpYXRlbHkgc3VnZ2VzdCBzb21lIGtpbmQgb2Ygc3BlY2lhbCBoYW5kbGluZywgcG90ZW50aWFsbHkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIG5hbWluZyBjb252ZW50aW9ucywgb3IgYSBzY29waW5nIG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuVGhlIGZhY3QgdGhhdCBib3RoIHZlcnNpb25zIGV4aXN0IGxpa2VseSBtZWFucyB0aGVyZSdzIGEgZGlzdGluY3Rpb24gaW4gaG93IFwibmFtZVwiIGlzIGJlaW5nIHRyZWF0ZWQuIEkgc3VzcGVjdCB0aGF0IGBfX19fIyNuYW1lYCBtaWdodCByZXByZXNlbnQgYSBtb3JlIGZ1bmRhbWVudGFsLCBpbnRlcm5hbCwgb3IgcGVyaGFwcyBnbG9iYWxseSBzY29wZWQgdmVyc2lvbiBvZiBcIm5hbWVcIiBjb21wYXJlZCB0byB0aGUgc2ltcGxlIGBuYW1lYCBkZWZpbml0aW9uLiBQZXJoYXBzIHRoZSB1bmRlcnNjb3JlcyBkZW5vdGUgYW4gaW50ZXJuYWwgYXR0cmlidXRlLCBhIGhpZGRlbiB2YXJpYWJsZSwgb3IgYSB1bmlxdWUgaWRlbnRpZmllciB1c2VkIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuIFRoZSBkb3VibGUgaGFzaCBtaWdodCBpbmRpY2F0ZSBhIG1hY3JvIGV4cGFuc2lvbiwgYnV0IEkgd291bGQgbmVlZCBtb3JlIGNvbnRleHQgdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhIHRlbXBsYXRpbmcgc3lzdGVtLiBUaGUgZmFjdCB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90IHN1cHBseSBtb3JlIGNvbnRleHQgaXMgcHJvYmxlbWF0aWMgYW5kIEkgd2lsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgb3IgZW52aXJvbm1lbnQgdG8gd29yayBvdXQgdGhlIGZ1bGwgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTQ6NTAuNDkzMjAyMzYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEyOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTM6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNDpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE1OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTY6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxNzpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE4OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTk6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMDpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMTpcXHRcXG4gNjIyOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjIzOlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDo1MC40OTMzNDM2NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NTk4ODI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBSZWRpcmVjdCBhbmQgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYgcmVkaXJlY3QgZnVuY3Rpb25zOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBBbHNvLCB0aGF0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyByZWxldmFudC4gTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGxpa2VseSByZXF1aXJlZCBmb3IgdGhpcy5cblxuRnJvbSB0aGUgcGF0Y2gsIEkgY2FuIHNlZSBtb2RpZmljYXRpb25zIGluIHNldmVyYWwgdHJhZmZpYyBjb250cm9sIChUQykgc2NoZWR1bGVyIGZpbGVzOiBgbmV0L3NjaGVkL3NjaF9jYWtlLmNgLCBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcV9jb2RlbC5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGZzYy5jYCwgYHNjaF9odGIuY2AsIGBzY2hfbXVsdGlxLmNgLCBgc2NoX3ByaW8uY2AsIGBzY2hfcWZxLmNgLCBgc2NoX3NmYi5jYCwgYW5kIGBzY2hfc2ZxLmNgLiBBZGRpdGlvbmFsbHksIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBhbmQgYG5ldC9jb3JlL2ZpbHRlci5jYCBhcmUgYWxzbyBpbnZvbHZlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBgTkVUX1NDSF9DQUtFYCwgYE5FVF9TQ0hfRFJSYCwgYE5FVF9TQ0hfRFVBTFBJMmAsIGBORVRfU0NIX0VUU2AsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hfRlFfUElFYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX01VTFRJUWAsIGBORVRfU0NIX1BSSU9gLCBgTkVUX1NDSF9RRlFgLCBgTkVUX1NDSF9TRkJgLCBhbmQgYE5FVF9TQ0hfU0ZRYCBlbmFibGVkLiBXZSBhbHNvIHNlZSB0aGF0IGBORVRfU0NIX1JFRGAgaGFzIGJlZW4gYWRkZWQgdG8gc2VsZnRlc3RzLCBzbyB3ZSdsbCBub3RlIHRoYXQuIEltcG9ydGFudGx5LCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9TQ0hFRGAgZW5hYmxlZCBhcyB3ZWxsLlxuXG5Ob3csIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMsIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZSBgdGNmX3FldmVudF9oYW5kbGVgIGZ1bmN0aW9uLCBzaW5jZSB0aGF0IHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NToyNi40NTMyMzA2NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAyNDc2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3FldmVudF9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTYzMj1pbnQgdGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2Uoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgbmxhdHRyICpibG9ja19pbmRleF9hdHRyLFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9NjU2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDAzNT1FWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDAzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjYtfVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMC1cXHRcXHRcXHRcXHQgICBxLVxcdTAwM2VzdGF0cy5wcm9iX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAyLVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXFx0XFx0XFx0XFx0ICAgcS1cXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlxcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFxcdTAwMjZxLVxcdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXFx0aWYgKCFza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU1OjI4Ljk3MzQ4NjM4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODc2ODMyMjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTmV0d29yayBTY2hlZHVsZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcywgdGhhdCBgdGNmX3FldmVudF9oYW5kbGVgIGlzIGRlZmluaXRlbHkga2V5LCBhbmQgaXQncyB1c2VkIGluIGBuZXQvc2NoZWQvc2NoX3JlZC5jYC4gVGhlIHNlbGZ0ZXN0IGlzIGFkZGluZyBgQ09ORklHX05FVF9TQ0hfUkVEPXlgLCB3aGljaCBtYWtlcyBpdCBhIGNydWNpYWwgdGVzdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhvc2UgQlBGIGhlbHBlcnM6IGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhleSdyZSBCUEYgaGVscGVycywgc28gd2UnbGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NDSEVEYCB0byBiZSBpbiB0aGUgY29uZmlnLiBUaGUgcGF0Y2ggaW1wYWN0cyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCB0b28sIHdoaWNoIGlzIGNhbGxlZCBieSAqbG9hZHMqIG9mIHFkaXNjcy5cblxuT3JpZ2luYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgbGlzdGluZyBvdXQgYSB0b24gb2YgYE5FVF9TQ0hfKmAgY29uZmlnczogYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGBORVRfU0NIX0RSUmAsIGBORVRfU0NIX0RVQUxQSTJgLCBgTkVUX1NDSF9FVFNgLCBgTkVUX1NDSF9GUV9DT0RFTGAsIGBORVRfU0NIX0ZRX1BJRWAsIGBORVRfU0NIX0hGU0NgLCBgTkVUX1NDSF9NVUxUSVFgLCBgTkVUX1NDSF9QUklPYCwgYE5FVF9TQ0hfUUZRYCwgYE5FVF9TQ0hfU0ZCYCwgYW5kIGBORVRfU0NIX1NGUWAuIEJ1dCB0aGF0J3MgcHJvYmFibHkgb3ZlcmtpbGwuIFdlIGNhbiBqdXN0IGZvY3VzIG9uIHRoZSBjb3JlIG9uZXMgdGhhdCBhcmUgaW52b2x2ZWQsIGxpa2UgYE5FVF9TQ0hfUkVEYCBhbmQgYE5FVF9TQ0hfSFRCYCwgcGx1cyBlaXRoZXIgYE5FVF9DTFNfQlBGYCBvciBgTkVUX1NDSF9CUEZgIHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBCUEYgZmlsdGVycy4gVGhlIHNlbGZ0ZXN0IGFscmVhZHkgc2V0cyBgQ09ORklHX05FVF9TQ0hfUkVEPXlgLCBgQ09ORklHX05FVF9TQ0hfQlBGPXlgLCBhbmQgYENPTkZJR19ORVRfU0NIX0hUQj15YC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWdzIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIGxldCdzIHBlZWsgYXQgYHRjZl9jbGFzc2lmeV9xZGlzY2AgaW4gYGluY2x1ZGUvbmV0L3BrdF9jbHMuaGAuIEl0J3MgdXNlZCBieSBgY2FrZV9jbGFzc2lmeWAsIGBkcnJfY2xhc3NpZnlgLCBgZHVhbHBpMl9za2JfY2xhc3NpZnlgLCBgZXRzX2NsYXNzaWZ5YCwgYGZxX2NvZGVsX2NsYXNzaWZ5YCwgYGZxX3BpZV9jbGFzc2lmeWAsIGBoZnNjX2NsYXNzaWZ5YCwgYGh0Yl9jbGFzc2lmeWAsIGBtdWx0aXFfY2xhc3NpZnlgLCBgcHJpb19jbGFzc2lmeWAsIGBxZnFfY2xhc3NpZnlgLCBgc2ZiX2NsYXNzaWZ5YCwgYW5kIGBzZnFfY2xhc3NpZnlgLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAuIEknbSBhbHNvIGNvbnNpZGVyaW5nIGxpc3Rpbmcgc29tZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGUgaW5saW5lIGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGZvciBmb2N1cyBsaWtlIGBodGJfY2xhc3NpZnlgLCBgZnFfY29kZWxfY2xhc3NpZnlgLCBhbmQgYGNha2VfY2xhc3NpZnlgLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBgYnBmX3JlZGlyZWN0YCBpcyBhY3R1YWxseSBhIHN5bWJvbC4gWWVwLCBpdCdzIGRlZmluZWQgdmlhIGBCUEZfQ0FMTF8yYCwgd2hpY2ggZG9lcyBpbmRlZWQgY3JlYXRlIGJvdGggYGJwZl9yZWRpcmVjdGAgYW5kIGBfX19fYnBmX3JlZGlyZWN0YC4gVGhhdCdzIGdvb2Q7IGl0J3MgYSB2YWxpZCBzeW1ib2wgdG8gY29uc2lkZXIuIEFsc28sIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgaXMgZXhwb3J0ZWQuXG5cblNvIG15IGZpbmFsIGNvbmZpZyBsaXN0IHdpbGwgYmU6IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBJJ2xsIGFsc28gYWRkIGBORVRfU0NIX0NBS0VgIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAgYXMgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgdXNlZCBpbiByZWFsIHdvcmxkIHNjZW5hcmlvcy5cblxuVWx0aW1hdGVseSwgdGhlIHJlYXNvbiBmb3IgdGhpcyBhbmFseXNpcyBpcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIGhhbmRsZSBgVENfQUNUX1JFRElSRUNUYCBpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjaGFuZ2luZyBpdCB0byBgVENfQUNUX1NIT1RgLiBBbHNvLCB0aGUgcGF0Y2ggdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycy4gVGhpcyBpbXBhY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHkgd2hpY2ggY291bGQgYmUgZXhwb3NlZC5cblxuTGV0J3MgcmVmaW5lIHRob3NlIGZvY3VzIHN5bWJvbHM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGFuZCBgZnFfY29kZWxfY2xhc3NpZnlgLiBBbmQgYWdhaW4sIEknbGwgdmVyaWZ5IGBicGZfcmVkaXJlY3RgIGlzIGEgc3ltYm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1Njo1Ny43NDE4MTIwNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDg1MTM5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZGlyZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgOTA1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdD0zMT1LZXJuZWwgQlBGXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzItLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjMzOmJwZl9yZWRpcmVjdF9tYXAoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM0LV5eXl5eXl5eXl5eXl5eXl5eXlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzYtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6Mzc6ICAgICBsb25nIGJwZl9yZWRpcmVjdF9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSwgdTY0IGZsYWdzKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q9MTAyPVRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGAgY2FsbGVkXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0xNTItXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6MTUzOiAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNmNwdV9tYXAsIGNwdV9kZXN0LCAwKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0xNTQtICAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTU9QlBGX01BUF9UWVBFX0RFVk1BUCBhbmQgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xMi1gYEJQRl9NQVBfVFlQRV9ERVZNQVBgYCBhbmQgYGBCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0hgYCBhcmUgQlBGIG1hcHMgcHJpbWFyaWx5XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTM6dXNlZCBhcyBiYWNrZW5kIG1hcHMgZm9yIHRoZSBYRFAgQlBGIGhlbHBlciBjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTQtYGBCUEZfTUFQX1RZUEVfREVWTUFQYGAgaXMgYmFja2VkIGJ5IGFuIGFycmF5IHRoYXQgdXNlcyB0aGUga2V5IGFzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0zMD1LZXJuZWwgQlBGXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzEtLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0OjMyOmJwZl9yZWRpcmVjdF9tYXAoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTMzLV5eXl5eXl5eXl5eXl5eXl5eXlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzUtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MzY6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0xNzM9aW5ncmVzcyBgYGlmaW5kZXhgYCBhcyB0aGUgYGBrZXlgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE4MS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDoxODI6ICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2Zm9yd2FyZF9tYXAsIGluZGV4LCAwKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xODMtICAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTE4Nj1hbGwgdGhlIGludGVyZmFjZXMgaW4gdGhlIGBgdHhfcG9ydGBgIGRldm1hcC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5Mi0gICAge1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0OjE5MzogICAgICAgIHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ0eF9wb3J0LCAwLCBCUEZfRl9CUk9BRENBU1QgfCBCUEZfRl9FWENMVURFX0lOR1JFU1MpO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5NC0gICAgfVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9MTE9VGhlIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGlzIHVzZWQgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXJcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMjpjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICdkZXZtYXAnIGFuZCAnY3B1bWFwJy5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMy1UaGlzIG1hcCB0eXBlIHJlZGlyZWN0cyByYXcgWERQIGZyYW1lcyB0byBgQUZfWERQYF8gc29ja2V0cyAoWFNLcyksIGEgbmV3IHR5cGUgb2ZcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTU5PUtlcm5lbCBCUEZcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02MC0tLS0tLS0tLS0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6NjE6YnBmX3JlZGlyZWN0X21hcCgpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjItXl5eXl5eXl5eXl5eXl5eXl5eXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02NC1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2NTogICAgbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXksIHU2NCBmbGFncylcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTEzOD1UaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGNhbGxlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTU2LVxcdFxcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ4c2tzX21hcCwgXFx1MDAyNmluZGV4KSlcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNTc6XFx0XFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhza3NfbWFwLCBpbmRleCwgMCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTU4LVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTE4PXJlZGlyZWN0IGluZ3Jlc3MgZnJhbWVzIHRvIG90aGVyIFhEUCBlbmFibGVkIG5ldGRldnMsIHVzaW5nIHRoZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjE5OmJwZl9yZWRpcmVjdF9tYXAoKSBmdW5jdGlvbi4gQUZfWERQIHNvY2tldHMgZW5hYmxlIHRoZSBwb3NzaWJpbGl0eSBmb3JcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMC1YRFAgcHJvZ3JhbXMgdG8gcmVkaXJlY3QgZnJhbWVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBpbiBhIHVzZXItc3BhY2VcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTIyMz1PbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjQ6aXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI1LWZyYW1lIHRvIGEgc29ja2V0Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjgwPXJvdW5kLXJvYmluIGV4YW1wbGUgb2YgZGlzdHJpYnV0aW5nIHBhY2tldHMgaXMgc2hvd24gYmVsb3c6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0zMDEtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MzAyOiAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrc19tYXAsIHJyLCBYRFBfRFJPUCk7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMzAzLSAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTU2Mj1UaGUgWERQIGNvZGUgc2FtcGxlIGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC01NzItICAgICAgIGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ4c2tzX21hcCwgXFx1MDAyNmluZGV4KSlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo1NzM6ICAgICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC01NzQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdD05MT1jYW4gb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0YWRhdGEgdXNlZCBmb3IgYnVpbGRpbmcgYGBza2JzYGAuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3QtOTItXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3Q6OTM6YnBmX3JlZGlyZWN0X21hcFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk0LT09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdDo5NjpgYGJwZl9yZWRpcmVjdF9tYXBgYCBjYW4gcmVkaXJlY3QgdGhlIGZyYW1lIHRvIGEgZGlmZmVyZW50IGRldmljZS5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Ny1Tb21lIGRldmljZXMgKGxpa2UgdmlydHVhbCBldGhlcm5ldCBsaW5rcykgc3VwcG9ydCBydW5uaW5nIGEgc2Vjb25kIFhEUFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD03ODE9c3RydWN0IGJwZl9uaF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC03ODgtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo3ODk6LyogZmxhZ3MgZm9yIGJwZl9yZWRpcmVjdF9pbmZvIGtlcm5fZmxhZ3MgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5MC0jZGVmaW5lIEJQRl9SSV9GX1JGX05PX0RJUkVDVFxcdEJJVCgwKVxcdC8qIG5vIG5hcGlfZGlyZWN0IG9uIHJldHVybl9mcmFtZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC03OTUtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo3OTY6c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5Ny1cXHR1NjQgdGd0X2luZGV4O1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MDc9c3RydWN0IGJwZl9uZXRfY29udGV4dCB7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo4MDg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvIHJpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODA5LVxcdHN0cnVjdCBsaXN0X2hlYWQgY3B1X21hcF9mbHVzaF9saXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX25ldF9jb250ZXh0ICpicGZfbmV0X2N0eF9nZXQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODM2LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6ODM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpicGZfbmV0X2N0eF9nZXRfcmkodm9pZClcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTgzOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyMzY9c3RhdGljIGlubGluZSBib29sIHhkcF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjM3LXtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyMzg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIzOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjQ0LXtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyNDU6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX3JldHVybl9mcmFtZV9ub19kaXJlY3Qodm9pZClcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNTEte1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTI1MjpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjUzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xODA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTgxMS17XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxODEyOlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4MTMtXFx0Y29uc3QgdTY0IGFjdGlvbl9tYXNrID0gWERQX0FCT1JURUQgfCBYRFBfRFJPUCB8IFhEUF9QQVNTIHwgWERQX1RYO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl9hcnAuaD00ND1zdGF0aWMgaW5saW5lIGJvb2wgZGV2X2lzX21hY19oZWFkZXJfeG1pdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl9hcnAuaC01Ni1cXHQvKiBQUFAgYWRkcyBpdHMgbDIgaGVhZGVyIGF1dG9tYXRpY2FsbHkgaW4gcHBwX3N0YXJ0X3htaXQoKS5cXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oOjU3OlxcdCAqIFRoaXMgbWFrZXMgaXQgbG9vayBsaWtlIGFuIGwzIGRldmljZSB0byBfX2JwZl9yZWRpcmVjdCgpIGFuZCB0Y2ZfbWlycmVkX2luaXQoKS5cXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oLTU4LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTYxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9zZXRfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrX3JlZGlyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTYyNS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NjI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrYl9icGZfcmVkaXJlY3RfZmV0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MzItXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjYzMzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MzQte1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjEtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyMjogKiBcXHRcXHRJbiBjb21wYXJpc29uIHdpdGggKipicGZfcmVkaXJlY3QqKlxcXFwgKCkgaGVscGVyLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjIzLSAqIFxcdFxcdCoqYnBmX2Nsb25lX3JlZGlyZWN0KipcXFxcICgpIGhhcyB0aGUgYXNzb2NpYXRlZCBjb3N0IG9mXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjQtICogXFx0XFx0ZHVwbGljYXRpbmcgdGhlIHBhY2tldCBidWZmZXIsIGJ1dCB0aGlzIGNhbiBiZSBleGVjdXRlZCBvdXQgb2ZcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyNTogKiBcXHRcXHR0aGUgZUJQRiBwcm9ncmFtLiBDb252ZXJzZWx5LCAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSBpcyBtb3JlXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjYtICogXFx0XFx0ZWZmaWNpZW50LCBidXQgaXQgaXMgaGFuZGxlZCB0aHJvdWdoIGFuIGFjdGlvbiBjb2RlIHdoZXJlIHRoZVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI0MzktICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjQ0MDogKiBsb25nIGJwZl9yZWRpcmVjdCh1MzIgaWZpbmRleCwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNDQxLSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1NC0gKiBcXHRcXHRUaGUgc2FtZSBlZmZlY3QgY2FuIGFsc28gYmUgYXR0YWluZWQgd2l0aCB0aGUgbW9yZSBnZW5lcmljXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NTU6ICogXFx0XFx0KipicGZfcmVkaXJlY3RfbWFwKipcXFxcICgpLCB3aGljaCB1c2VzIGEgQlBGIG1hcCB0byBzdG9yZSB0aGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1Ni0gKiBcXHRcXHRyZWRpcmVjdCB0YXJnZXQgaW5zdGVhZCBvZiBwcm92aWRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGhlbHBlci5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDUxLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjMwNTI6ICogbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBrZXksIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzA1My0gKiBcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMwNzAtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA3MTogKiBcXHRcXHRTZWUgYWxzbyAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSwgd2hpY2ggb25seSBzdXBwb3J0cyByZWRpcmVjdGluZ1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDcyLSAqIFxcdFxcdHRvIGFuIGlmaW5kZXgsIGJ1dCBkb2Vzbid0IHJlcXVpcmUgYSBtYXAgdG8gZG8gc28uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzUyMy0gKlxcdFxcdFxcdGFuZCAqcGFyYW1zKi1cXHUwMDNlc21hYyB3aWxsIG5vdCBiZSBzZXQgYXMgb3V0cHV0LiBBIGNvbW1vblxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozNTI0OiAqXFx0XFx0XFx0dXNlIGNhc2UgaXMgdG8gY2FsbCAqKmJwZl9yZWRpcmVjdF9uZWlnaCoqXFxcXCAoKSBhZnRlclxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zNTI1LSAqXFx0XFx0XFx0ZG9pbmcgKipicGZfZmliX2xvb2t1cCoqXFxcXCAoKS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NDg0LSAqXFx0XFx0d2lsbCBjYXVzZSAqc2tiKiB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIHNwZWNpZmllZCBzb2NrZXQuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ0ODU6ICpcXHRcXHRTdWJzZXF1ZW50IHJlZGlyZWN0aW9uIG9mICpza2IqIHZpYSAgKipicGZfcmVkaXJlY3QqKlxcXFwgKCksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ0ODYtICpcXHRcXHQqKmJwZl9jbG9uZV9yZWRpcmVjdCoqXFxcXCAoKSBvciBvdGhlciBtZXRob2RzIG91dHNpZGUgb2YgQlBGIG1heVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwMjctICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTAyODogKiBsb25nIGJwZl9yZWRpcmVjdF9uZWlnaCh1MzIgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqcGFyYW1zLCBpbnQgcGxlbiwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDI5LSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMS0gKiBcXHRcXHRhbmQgZmlsbCBpbiBMMiBhZGRyZXNzZXMgZnJvbSBuZWlnaGJvcmluZyBzdWJzeXN0ZW0uIFRoaXMgaGVscGVyXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMzI6ICogXFx0XFx0aXMgc29tZXdoYXQgc2ltaWxhciB0byAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSwgZXhjZXB0IHRoYXQgaXRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMy0gKiBcXHRcXHRwb3B1bGF0ZXMgTDIgYWRkcmVzc2VzIGFzIHdlbGwsIG1lYW5pbmcsIGludGVybmFsbHksIHRoZSBoZWxwZXJcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc3LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwNzg6ICogbG9uZyBicGZfcmVkaXJlY3RfcGVlcih1MzIgaWZpbmRleCwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFxcdERlc2NyaXB0aW9uXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwODAtICogXFx0XFx0UmVkaXJlY3QgdGhlIHBhY2tldCB0byBhbm90aGVyIG5ldCBkZXZpY2Ugb2YgaW5kZXggKmlmaW5kZXgqLlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDgxOiAqIFxcdFxcdFRoaXMgaGVscGVyIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcXFwgKCksIGV4Y2VwdFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDgyLSAqIFxcdFxcdHRoYXQgdGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgdG8gdGhlICppZmluZGV4KicgcGVlciBkZXZpY2UgYW5kXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyNi0gKlxcdFxcdEJQRl9TS0JfVFNUQU1QX0RFTElWRVJZX01PTk8gaXMgdGhlIG9ubHkgdHN0YW1wIHRoYXRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYyNzogKlxcdFxcdHdpbGwgYmUga2VwdCBkdXJpbmcgYnBmX3JlZGlyZWN0XyooKS4gIEEgbm9uIHplcm9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyOC0gKlxcdFxcdCp0c3RhbXAqIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBCUEZfU0tCX1RTVEFNUF9ERUxJVkVSWV9NT05PXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYzNy0gKlxcdFxcdG1vbm8gZGVsaXZlcnkgdGltZSB0byBfX3NrX2J1ZmYtXFx1MDAzZXRzdGFtcCBhbmQgdGhlblxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1NjM4OiAqXFx0XFx0YnBmX3JlZGlyZWN0XyooKSB0byB0aGUgZWdyZXNzIG9mIGFuIGlmYWNlLiAgRm9yIGV4YW1wbGUsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTU2MzktICpcXHRcXHRjaGFuZ2luZyB0aGUgKHJjdikgdGltZXN0YW1wIGluIF9fc2tfYnVmZi1cXHUwMDNldHN0YW1wIGF0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjU2NDA6ICpcXHRcXHRpbmdyZXNzIHRvIGEgbW9ubyBkZWxpdmVyeSB0aW1lIGFuZCB0aGVuIGJwZl9yZWRpcmVjdF8qKClcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTY0MS0gKlxcdFxcdHRvIHNjaF9mcUBwaHktZGV2Llxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTYzMzI9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjMzNjovKiBGbGFncyBmb3IgYnBmX3JlZGlyZWN0IGFuZCBicGZfcmVkaXJlY3RfbWFwIGhlbHBlcnMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNy1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtOS0gKiBUaGUgJ2NwdW1hcCcgaXMgcHJpbWFyaWx5IHVzZWQgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXJcXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwOiAqIGNhbGwgYnBmX3JlZGlyZWN0X21hcCgpIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9uLCBsaWtlICdkZXZtYXAnLlxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTEtICpcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNS0vKiBEZXZtYXBzIHByaW1hcnkgdXNlIGlzIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyIGNhbGxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjY6ICogYnBmX3JlZGlyZWN0X21hcCgpLiBCZWNhdXNlIFhEUCBpcyBtb3N0bHkgY29uY2VybmVkIHdpdGggcGVyZm9ybWFuY2Ugd2VcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTctICogc3BlbnQgc29tZSBlZmZvcnQgdG8gZW5zdXJlIHRoZSBkYXRhcGF0aCB3aXRoIHJlZGlyZWN0IG1hcHMgZG9lcyBub3QgdXNlXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE4Nj1zdGF0aWMgdm9pZCBkZXZfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA0LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MjA1OlxcdC8qIGJwZl9yZWRpcmVjdF9pbmZvLVxcdTAwM2VtYXAgaXMgYXNzaWduZWQgaW4gX19icGZfeGRwX3JlZGlyZWN0X21hcCgpXFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDYtXFx0ICogZHVyaW5nIE5BUEkgY2FsbGJhY2sgYW5kIGNsZWFyZWQgYWZ0ZXIgdGhlIFhEUCByZWRpcmVjdC4gVGhlcmUgaXMgbm9cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIwNzpcXHQgKiBleHBsaWNpdCBSQ1UgcmVhZCBzZWN0aW9uIHdoaWNoIHByb3RlY3RzIGJwZl9yZWRpcmVjdF9pbmZvLVxcdTAwM2VtYXAgYnV0XFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDgtXFx0ICogbG9jYWxfYmhfZGlzYWJsZSgpIGFsc28gbWFya3MgdGhlIGJlZ2lubmluZyBhbiBSQ1Ugc2VjdGlvbi4gVGhpc1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA5LVxcdCAqIG1ha2VzIHRoZSBjb21wbGV0ZSBzb2Z0aXJxIGNhbGxiYWNrIFJDVSBwcm90ZWN0ZWQuIFRodXMgYWZ0ZXJcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIxMDpcXHQgKiBmb2xsb3dpbmcgc3luY2hyb25pemVfcmN1KCkgdGhlcmUgbm8gYnBmX3JlZGlyZWN0X2luZm8tXFx1MDAzZW1hcCA9PSBtYXBcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTIxMS1cXHQgKiBhc3NpZ25tZW50Llxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI3Mz1zdGF0aWMgaW50IHhkcF90ZXN0X3J1bl9iYXRjaChzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSAqeGRwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjc4LVxcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMgPSB4ZHAtXFx1MDAzZWZyYW1lcztcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjc5OlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTI4MC1cXHRzdHJ1Y3QgeGRwX3BhZ2VfaGVhZCAqaGVhZDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDE9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTYxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNjI6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTYzLVxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIxODk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTkwLVxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjAyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIyMDM6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMDQtXFx0XFx0XFx0ICB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjA2LVxcdGlmIChkZXZfaXNfbWFjX2hlYWRlcl94bWl0KGRldikpXFxubmV0L2NvcmUvZmlsdGVyLmM6MjIwNzpcXHRcXHRyZXR1cm4gX19icGZfcmVkaXJlY3RfY29tbW9uKHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjIwOC1cXHRlbHNlXFxubmV0L2NvcmUvZmlsdGVyLmM6MjIwOTpcXHRcXHRyZXR1cm4gX19icGZfcmVkaXJlY3Rfbm9fbWFjKHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxMC19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMjEzPXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIyNjc6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyNjgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMwOC0jZWxzZVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMDk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMTAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjMxOD1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM3NS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMzc2OnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMzc3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MTktI2Vsc2VcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDIwOnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yNDIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjctXFxubmV0L2NvcmUvZmlsdGVyLmM6MjQyODpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX25oX3BhcmFtcyAqbmgpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDQzLVxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ0OlxcdFxcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChza2IsIGRldiwgbmgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDUtXFx0ZWxzZSBpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ2OlxcdFxcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9uZWlnaF92Nihza2IsIGRldiwgbmgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDctb3V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQ2MD1CUEZfQ0FMTF8zKGJwZl9jbG9uZV9yZWRpcmVjdCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDk2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI0OTc6XFx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0KGNsb25lLCBkZXYsIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNDk4LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTI1MTk9aW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1MjAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1MjE6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI1MjItXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTQ0LVxcdHJldHVybiBmbGFncyBcXHUwMDI2IEJQRl9GX05FSUdIID9cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTQ1OlxcdCAgICAgICBfX2JwZl9yZWRpcmVjdF9uZWlnaChza2IsIGRldiwgZmxhZ3MgXFx1MDAyNiBCUEZfRl9ORVhUSE9QID9cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTQ2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cmktXFx1MDAzZW5oIDogTlVMTCkgOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NDc6XFx0ICAgICAgIF9fYnBmX3JlZGlyZWN0KHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjU0OC1vdXRfZHJvcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU1MzpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTU6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTU2LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU2Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Njk6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3JlZGlyZWN0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzAtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NzY6QlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1Nzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Nzg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc5LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU4OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MjU5MTpcXHQuZnVuYyAgICAgICAgICAgPSBicGZfcmVkaXJlY3RfcGVlcixcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTkyLVxcdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTk4OkJQRl9DQUxMXzQoYnBmX3JlZGlyZWN0X25laWdoLCB1MzIsIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKiwgcGFyYW1zLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTktXFx0ICAgaW50LCBwbGVuLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI2MDAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI2MDE6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNjAyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjYxNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI2MTk6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9yZWRpcmVjdF9uZWlnaCxcXG5uZXQvY29yZS9maWx0ZXIuYy0yNjIwLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfbWV0YV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MDEtICpcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDAyOiAqIDEuIFRoZSBicGZfcmVkaXJlY3QoKSBhbmQgYnBmX3JlZGlyZWN0X21hcCgpIGhlbHBlcnMgd2lsbCBsb29rdXAgdGhlIHRhcmdldFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MDMtICogICAgb2YgdGhlIHJlZGlyZWN0IGFuZCBzdG9yZSBpdCAoYWxvbmcgd2l0aCBzb21lIG90aGVyIG1ldGFkYXRhKSBpbiBhIHBlci1DUFVcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDA0OiAqICAgIHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mby5cXG5uZXQvY29yZS9maWx0ZXIuYy00NDA1LSAqXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NDA3LSAqICAgIGNhbGwgeGRwX2RvX3JlZGlyZWN0KCkgd2hpY2ggd2lsbCB1c2UgdGhlIGluZm9ybWF0aW9uIGluIHN0cnVjdFxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MDg6ICogICAgYnBmX3JlZGlyZWN0X2luZm8gdG8gYWN0dWFsbHkgZW5xdWV1ZSB0aGUgZnJhbWUgaW50byBhIG1hcCB0eXBlLXNwZWNpZmljXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQwOS0gKiAgICBidWxrIHF1ZXVlIHN0cnVjdHVyZS5cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NzQ9dTMyIHhkcF9tYXN0ZXJfcmVkaXJlY3Qoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ3NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ3NjpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ3Ny1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyLCAqc2xhdmU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9tYXN0ZXJfcmVkaXJlY3QpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0OTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ5ODpzdGF0aWMgaW5saW5lIGludCBfX3hkcF9kb19yZWRpcmVjdF94c2soc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSxcXG5uZXQvY29yZS9maWx0ZXIuYy00NDk5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTIyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50XFxubmV0L2NvcmUvZmlsdGVyLmM6NDUyMzpfX3hkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MjQtXFx0XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1OTUte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1OTY6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1OTctXFx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cXHUwMDNlbWFwX3R5cGU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NjEwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo0NjExOlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NjEyLVxcdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXFx1MDAzZW1hcF90eXBlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDYyNy17XFxubmV0L2NvcmUvZmlsdGVyLmM6NDYyODpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDYyOS1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY3OT1pbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODIte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ2ODM6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODQtXFx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cXHUwMDNlbWFwX3R5cGU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzE3PUJQRl9DQUxMXzIoYnBmX3hkcF9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MTgte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3MTk6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTAtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTExOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTItXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9uZWlnaDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTEzOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3JlZGlyZWN0X25laWdoX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTQtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9wZWVyOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTE2LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODg0Nz1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg1OC1cXHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODg2MC1cXHRjYXNlIEJQRl9GVU5DX2Nsb25lX3JlZGlyZWN0Olxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jPTM5PXN0YXRpYyBpbnQgcnVuX2x3dF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9sd3RfcHJvZyAqbHd0LFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQ0LVxcbm5ldC9jb3JlL2x3dF9icGYuYzo0NTpcXHQvKiBEaXNhYmxpbmcgQkggaXMgbmVlZGVkIHRvIHByb3RlY3QgcGVyLUNQVSBicGZfcmVkaXJlY3RfaW5mbyBiZXR3ZWVuXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQ2LVxcdCAqIEJQRiBwcm9nIGFuZCBza2JfZG9fcmVkaXJlY3QoKS5cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03MTItXFx0XFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6NzEzOlxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTcxNC1cXHRcXHRkbyB7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTgzMz1zdGF0aWMgdm9pZCBfX3NrX3Bzb2NrX3phcF9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTgzNy1cXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSAhPSBOVUxMKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo4Mzg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODM5LVxcdFxcdHNvY2tfZHJvcChwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk1OD1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTk2Mi1cXG5uZXQvY29yZS9za21zZy5jOjk2MzpcXHRza19vdGhlciA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTk2NC1cXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTY3LVxcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo5Njg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTY5LVxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTc3LVxcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo5Nzg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTc5LVxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTg0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG5uZXQvY29yZS9za21zZy5jOjk4NTpcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy05ODYtXFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNDgtb3V0X2ZyZWU6XFxubmV0L2NvcmUvc2ttc2cuYzoxMDQ5OlxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNTAtXFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMDc1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDkyLVxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTA5MzpcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk0LVxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk1LVxcdFxcdHNrYl9icGZfc2V0X3N0cnBhcnNlcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTA5NjpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk3LVxcdFxcdHNrYi1cXHUwMDNlc2sgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIxNy1cXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEyMTg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIxOS1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIyMDpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjIxLVxcdH1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYz01OT1pbnQgX2wyX3RvX2lwdHVuX2luZ3Jlc3NfZm9yd2FyZChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtODQtXFx0XFx0XFx0XFx0IF9odG9ubChpcGgtXFx1MDAzZWRhZGRyKSk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjg1OlxcdFxcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy04Ni1cXHR9IGVsc2UgaWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbi0tXFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTk5LVxcdFxcdFxcdFxcdCBfaHRvbmwoaXA2aC1cXHUwMDNlZGFkZHIuczZfYWRkcjMyWzNdKSk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjEwMDpcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0KCppZmluZGV4LCBCUEZfRl9JTkdSRVNTKTtcXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtMTAxLVxcdH1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYz0xMDc9aW50IF9sMl90b19pcHR1bl9pbmdyZXNzX3JlZGlyZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xNDEtXFx0YnBmX3NrYl9zZXRfdHVubmVsX2tleShza2IsIFxcdTAwMjZ0a2V5LCBzaXplb2YodGtleSksIDApO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxNDI6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdCgqaWZpbmRleCwgMCk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0My19XFxuLS1cXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9MTQ2PWludCBfbDJfdG9faXA2dHVuX2luZ3Jlc3NfcmVkaXJlY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE5Ni1cXHRicGZfc2tiX3NldF90dW5uZWxfa2V5KHNrYiwgXFx1MDAyNnRrZXksIHNpemVvZih0a2V5KSwgQlBGX0ZfVFVOSU5GT19JUFY2KTtcXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM6MTk3OlxcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIDApO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xOTgtfVxcbi0tXFxuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYz03MD1pbnQgX3JlZGlyZWN0X3htaXQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmMtNzEte1xcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM6NzI6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXFx1MDAzZWlmaW5kZXggKyAxLCAwKTtcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTczLX1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM9NzU9aW50IF9yZWRpcmVjdF9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTc2LXtcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jOjc3OlxcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVxcdTAwM2VpZmluZGV4ICsgMSwgMSk7XFxuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYy03OC19XFxuLS1cXG5zYW1wbGVzL2JwZi90ZXN0X2x3dF9icGYuYz0xNjA9c3RhdGljIGlubGluZSBpbnQgX19kb19wdXNoX2xsX2FuZF9yZWRpcmVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTY6NTkuODkwMzMwMjYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0ODY5NjIzNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlN5bWJvbCBWZXJpZmljYXRpb24gYW5kIFBvdGVudGlhbCBSZWRpcmVjdCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgYGJwZl9yZWRpcmVjdGAgc2VlbXMgdG8gYmUgYSBsZWdpdCBzeW1ib2wg4oCTIGdvb2Qgc3RhcnQuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYGJwZl9yZWRpcmVjdF9wZWVyYCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgYXJlIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8gYGJwZl9yZWRpcmVjdGAgaXMgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgcmVkaXJlY3QgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgdGhleSdyZSBsaWtlbHkgdG8gcHJvdmlkZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsaXR5IGlmIHRoZSBiYXNlIHN5bWJvbCBjaGVja3Mgb3V0LiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIG9uZSBvciB0aGUgb3RoZXIgYmFzZWQgb24gdGhlIGludGVuZGVkIHJlZGlyZWN0IGRlc3RpbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjI0Ljc1OTk1NjI2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjg0MTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVkaXJlY3RfcGVlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3Ny0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3OS0gKiBcXHREZXNjcmlwdGlvblxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTg5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1OTA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkxOlxcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdF9wZWVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTItXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTQtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9wZWVyOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTE2LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTA3ODogKiBsb25nIGJwZl9yZWRpcmVjdF9wZWVyKHUzMiBpZmluZGV4LCB1NjQgZmxhZ3MpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzktICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3JlZGlyZWN0LmMtNy0gKiBob3N0IGZhY2luZyB2ZXRoIGluIGZ3ZCB3aGljaCBjYWxscyBpbnRvIGkpIGJwZl9yZWRpcmVjdF9uZWlnaCgpIHRvIHBlcmZvcm0gdGhlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYzo4OiAqIG5laWdoIGFkZHIgcG9wdWxhdGlvbiBhbmQgcmVkaXJlY3Qgb3IgaWkpIGJwZl9yZWRpcmVjdF9wZWVyKCkgZm9yIG5hbWVzcGFjZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3JlZGlyZWN0LmMtOS0gKiBzd2l0Y2ggZnJvbSBpbmdyZXNzIHNpZGU7IGl0IGFsc28gaW5zdGFsbHMgYSBjaGVja2VyIHByb2cgb24gdGhlIGVncmVzcyBzaWRlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM9MjY9aW50IHRjX2RzdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTI3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6Mjg6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfU1JDLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMjktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jPTMyPWludCB0Y19zcmMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy0zMy17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jOjM0OlxcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihJRklOREVYX0RTVCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTM1LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYz00ND1pbnQgdGNfc3JjX2wzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy01OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6NjA6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfRFNULCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtNjEtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZm9yd2FyZC5icGYuYz0yMj1pbnQgdGNfcmVkaXJlY3RfcGVlcihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2ZvcndhcmQuYnBmLmM6NDY6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKG5ldGtpdF9pZmluZGV4LCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTc6MjYuNjc2ODAzOTgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzcwMjAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgU3ltYm9sIFZhbGlkaXR5IGZvciBDbGFzc2lmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uYW5kIHllcywgdGhlc2UgYXJlICphYnNvbHV0ZWx5KiB2YWxpZCBzeW1ib2xzIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTm8gYW1iaWd1aXR5IHRoZXJlLiBOb3csIHRoZSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGFyZSBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBodGJfY2xhc3NpZnlgIGFuZCBgZnFfY29kZWxfY2xhc3NpZnlgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlaXIgb3BlcmF0aW9uIGlzIGFzIGV4cGVjdGVkIGluIHJlbGF0aW9uIHRvIHRoZXNlIHN5bWJvbHM7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBiZWluZyBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYW5kIGFyZSBjb250cmlidXRpbmcgdG8gdGhlIGludGVuZGVkIGJlaGF2aW91ciBvZiB0aGUgc3lzdGVtcy4gVGltZSB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozMS44MTM4MjY2OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQxMzQ5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHRiX2NsYXNzaWZ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfaHRiLmM9MTk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh0Yl9zZWFyY2goc3RydWN0IFFkaXNjICpzY2gsIHUzMiBoYW5kbGUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTIwNS0vKipcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjIwNjogKiBodGJfY2xhc3NpZnkgLSBjbGFzc2lmeSBhIHBhY2tldCBpbnRvIGNsYXNzXFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMDctICogQHNrYjogdGhlIHNvY2tldCBidWZmZXJcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjE5LSAqL1xcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjIwOnN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMjEtXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz02MjA9c3RhdGljIGludCBodGJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNjI1LVxcdHN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9odGIuYzo2MjY6XFx0c3RydWN0IGh0Yl9jbGFzcyAqY2wgPSBodGJfY2xhc3NpZnkoc2tiLCBzY2gsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNjI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozMy42NDc5Njg1MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMDcxODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25maXJtYXRpb24gYW5kIFZhbGlkYXRpb24qKlxuXG5BaCwgZ29vZC4gSSBzZWUgdGhlIHN5bWJvbCBgaHRiX2NsYXNzaWZ5YCByZWZlcmVuY2VkLCBhbmQgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgaXQuIFllcywgdGhhdCBzeW1ib2wgaXMgaW5kZWVkIHZhbGlkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgY2FuIGNvbmZpcm0gaXRzIGxlZ2l0aW1hY3kgd2l0aG91dCBhbnkgZnVydGhlciBuZWVkIHRvIGRlbHZlIGludG8gaXRzIGRlZmluaXRpb24gb3Igc291cmNlLiBJdCdzIGEga25vd24gcXVhbnRpdHksIGEgcmVjb2duaXphYmxlIGVsZW1lbnQgaW4gdGhlIGxhbmRzY2FwZSBvZiB0aGlzIHNwZWNpZmljIGRvbWFpbi4gTm8gYW1iaWd1aXR5IHRoZXJlLiBUaGlzIHN0cmVhbWxpbmVzIHRoZSBhbmFseXNpcyBhbmQgbW92ZXMgbWUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozNi43NTg2ODkwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM4MzMxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnFfY29kZWxfY2xhc3NpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTcwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfaGFzaChjb25zdCBzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzctXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTk0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxOTU6XFx0aWR4ID0gZnFfY29kZWxfY2xhc3NpZnkoc2tiLCBzY2gsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xOTYtXFx0aWYgKGlkeCA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjM4LjQ5MjUyNjE2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQyODA2NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBTeW1ib2wgVmFsaWRpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHN5c3RlbSByZWNvZ25pemVzIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEdvb2QuIFRoYXQncyB3aGF0IEkgZXhwZWN0ZWQ7IGl0J3MgYSBrbm93biBzeW1ib2wgd2l0aGluIHRoaXMgY29udGV4dCwgcGFydCBvZiB0aGUgc3RhbmRhcmQgdG9vbGtpdC4gTm93LCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBuZXh0IGVsZW1lbnQ6IGBjYWtlX2NsYXNzaWZ5YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0J3MgYWxzbyBhIGRlZmluZWQgZnVuY3Rpb24gb3IgbWFjcm8gd2l0aGluIHRoaXMgc2V0dXAuIFRpbWUgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYW5kIGRlZmluaXRpb24uIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5NCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjQxLjgzNTMzNTAyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNTczNjQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2NsYXNzaWZ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE2Nzg9c3RhdGljIHN0cnVjdCBjYWtlX3Rpbl9kYXRhICpjYWtlX3NlbGVjdF90aW4oc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzE4LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE3MTk6c3RhdGljIHUzMiBjYWtlX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgY2FrZV90aW5fZGF0YSAqKnQsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTcyMC1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsb3dfbW9kZSwgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc1OT1zdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzEtXFx0LyogY2hvb3NlIGZsb3cgdG8gaW5zZXJ0IGludG8gKi9cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNzcyOlxcdGlkeCA9IGNha2VfY2xhc3NpZnkoc2NoLCBcXHUwMDI2Yiwgc2tiLCBxLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsb3dfbW9kZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTc3My1cXHRpZiAoaWR4ID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTc6NDMuNjYxMDc2MTczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjkxMjkxODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFN5bWJvbCBWYWxpZGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gWWVzLCBcImNha2VcXF9jbGFzc2lmeVwiIGRvZXMgaW5kZWVkIGxvb2sgbGlrZSBhIHZhbGlkIHN5bWJvbC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBcInRjZlxcX3FldmVudFxcX2hhbmRsZS5cIiBHb3R0YSBtYWtlIHN1cmUgdGhhdCBvbmUgY2hlY2tzIG91dCBhcyB3ZWxsLiBJdCdzIGltcG9ydGFudCB0byBiZSBtZXRob2RpY2FsIGFib3V0IHRoZXNlIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MzEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODowMC45NTIzNjk3NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzYzMjg3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3FldmVudF9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTYzMj1pbnQgdGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2Uoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgbmxhdHRyICpibG9ja19pbmRleF9hdHRyLFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9NjU2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDAzNT1FWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDAzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjYtfVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMC1cXHRcXHRcXHRcXHQgICBxLVxcdTAwM2VzdGF0cy5wcm9iX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAyLVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXFx0XFx0XFx0XFx0ICAgcS1cXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlxcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFxcdTAwMjZxLVxcdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXFx0aWYgKCFza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjAzLjI4ODcwMzI0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTkzNjUyMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgdGNmX3FldmVudF9oYW5kbGVgIGlzIGluZGVlZCBhIHJlY29nbml6ZWQgc3ltYm9sLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJ3ZlIGFsc28gaWRlbnRpZmllZCB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGBmcV9jb2RlbF9jbGFzc2lmeWAsIGFuZCBgY2FrZV9jbGFzc2lmeWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZCBjb21wb25lbnRzIGRpcmVjdGx5IGltcGFjdGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCwgSSBzZWUgYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hfQlBGYCwgYW5kIGBORVRfQ0xTX0JQRmAuIFRoaXMgc3VnZ2VzdHMgYSB3aWRlc3ByZWFkIGltcGFjdCBhY3Jvc3MgdmFyaW91cyBxZGlzY3MgYW5kIEJQRiBpbnRlZ3JhdGlvbi5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBgVENfQUNUX1JFRElSRUNUYCB3aXRoaW4gcWRpc2MgZmlsdGVyIGNoYWlucywgcmVwbGFjaW5nIGl0IHdpdGggYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgdHJhZmZpYyBpcyBoYW5kbGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBBZGRpdGlvbmFsbHksIGl0IHVwZGF0ZXMgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGVuc3VyZSB0aGUgQlBGIG5ldCBjb250ZXh0IGlzIHZhbGlkLiBTaW5jZSB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGhhbmRsaW5nIG9mIEJQRiBhbmQgdmFyaW91cyBxZGlzY3MsIGFuZCBhcHBlYXIgdG8gcmVwcmVzZW50IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoYXQgc2VlbXMgcmlnaHQuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBuYW1lcywgYE5FVF9TQ0hfQlBGYCBhbmQgYE5FVF9DTFNfQlBGYCwgdG8gZW5zdXJlIHRoZXkgYXJlIHRoZSBwcm9wZXIgbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjA5Ljg4MjM1ODM1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwNzU2MzQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9Mzg5PWNvbmZpZyBORVRfU0NIX0VUU1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjQwNjpjb25maWcgTkVUX1NDSF9CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy00MDctXFx0Ym9vbCBcXFwiQlBGLWJhc2VkIFFkaXNjXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoxMi4yODk5MjczNjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMjkxNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjE2LjE5Mjg0NjMwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDQ2MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoxOC42NTczMTgzOTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjE0ODYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUXVpY2sgTmV0d29yayBTY2hlZHVsZXIgUmVmcmVzaGVyKipcblxuUmlnaHQsIHRoYXQncyBzZXR0bGVkLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHNjaGVkdWxlcnMuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAuIExldCdzIGp1c3QgcnVuIHRocm91Z2ggdGhvc2UgaW4gbXkgaGVhZCBhZ2FpbiB0byBtYWtlIHN1cmUgSSdtIHNvbGlkIG9uIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlaXIgYWxnb3JpdGhtcyBhbmQgd2hlbiBJJ2QgY2hvb3NlIG9uZSBvdmVyIGFub3RoZXIgaW4gYSBzcGVjaWZpYyBuZXR3b3JrIHRvcG9sb2d5LiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgSSdtIGNvbXBsZXRlbHkgY2xlYXIgb24gdGhlIG51YW5jZXMgb2YgZWFjaCB0byBmb3JtdWxhdGUgdGhlIG5leHQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoyMi40NDM0NzA4MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU5NzQ3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfUkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgwPWNvbmZpZyBORVRfU0NIX01VTFRJUVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODgtXFxubmV0L3NjaGVkL0tjb25maWc6ODk6Y29uZmlnIE5FVF9TQ0hfUkVEXFxubmV0L3NjaGVkL0tjb25maWctOTAtXFx0dHJpc3RhdGUgXFxcIlJhbmRvbSBFYXJseSBEZXRlY3Rpb24gKFJFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjI0LjQ1OTQ1MDM5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0NTI1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipBZmZpcm1hdGl2ZSBDb25maXJtYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCdzIGl0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlLCBvdmVyLWFuYWx5emUuIFRoZSBlc3NlbnRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb3VuZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBhbGlnbnMuIENvbmZpcm1hdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaGFzIGJlZW4gYWZmaXJtZWQuIFByb2NlZWRpbmcgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQgYW5kIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTg6MjcuNzgzOTc3NzI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1NTYyNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX0hUQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz00Nj1jb21tZW50IFxcXCJRdWV1ZWluZy9TY2hlZHVsaW5nXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnLTQ3LVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4OmNvbmZpZyBORVRfU0NIX0hUQlxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5LVxcdHRyaXN0YXRlIFxcXCJIaWVyYXJjaGljYWwgVG9rZW4gQnVja2V0IChIVEIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoyOS41OTk1NDYwMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NDk2NDExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjMzLjQ5NDUxMjY2MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzUzNDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9DQUtFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTI3Nz1jb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjg3LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI4ODpjb25maWcgTkVUX1NDSF9DQUtFXFxubmV0L3NjaGVkL0tjb25maWctMjg5LVxcdHRyaXN0YXRlIFxcXCJDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWQgKENBS0UpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODozNS4zNTgwNTIyNDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MzM4NzYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkFmZmlybWF0aXZlIENvbmZpcm1hdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgYmVhdC4gWWVzLiBUaGF0J3MgaXQuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUsIG92ZXItYW5hbHl6ZS4gVGhlIGVzc2VudGlhbCB1bmRlcnN0YW5kaW5nIGlzIHNvdW5kLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGFsaWducy4gQ29uZmlybWF0aW9uIGlzIHRoZSBrZXkgaGVyZS4gVGhlIHBhdGggZm9yd2FyZCBoYXMgYmVlbiBhZmZpcm1lZC4gUHJvY2VlZGluZyB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjYyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODo1Ni4xOTE5MzEwNDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODE1MzkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjU3Ljk3MzQ3NDM3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk0MjQ4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqUmVhZHkgdG8gRmluYWxpemUqKlxuXG5ZZXMuICpGaW5hbGx5Ki4gQWZ0ZXIgYWxsIHRoZSB3b3JrLCB0aGUgYW5hbHlzaXMsIHRoZSBpdGVyYXRpb25zLi4uIFllcywgSSdtIHJlYWR5IHRvIGNvbW1pdCB0byBhIGNvbmNsdXNpb24uIEknbSBzYXRpc2ZpZWQgdGhhdCBJJ3ZlIGV4cGxvcmVkIHRoZSBudWFuY2VzIGFuZCBhZGRyZXNzZWQgdGhlIGtleSBjb25zaWRlcmF0aW9ucy4gVGhlIGV2aWRlbmNlLCBhcyBJJ3ZlIGludGVycHJldGVkIGl0LCBwb2ludHMgaW4gYSBjbGVhciBkaXJlY3Rpb24uIE5vdyBpcyB0aGUgdGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLiBObyBtb3JlIHJlZmluZW1lbnRzIGFyZSBuZWVkZWQgYXQgdGhpcyBzdGFnZTsgSSdtIHByZXBhcmVkIHRvIGZpbmFsaXplIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDc2LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU5OjAyLjc2NzcyNDU4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjI3MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1JFRFwiLFxuICAgIFwiTkVUX1NDSF9IVEJcIixcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9CUEZcIixcbiAgICBcIk5FVF9DTFNfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3FldmVudF9oYW5kbGVcIixcbiAgICBcImJwZl9yZWRpcmVjdFwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X3BlZXJcIixcbiAgICBcImJwZl9yZWRpcmVjdF9uZWlnaFwiLFxuICAgIFwiaHRiX2NsYXNzaWZ5XCIsXG4gICAgXCJmcV9jb2RlbF9jbGFzc2lmeVwiLFxuICAgIFwiY2FrZV9jbGFzc2lmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9SRURcIixcbiAgICBcIk5FVF9TQ0hfSFRCXCIsXG4gICAgXCJORVRfU0NIX0NBS0VcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9xZXZlbnRfaGFuZGxlXCIsXG4gICAgXCJicGZfcmVkaXJlY3RcIixcbiAgICBcImJwZl9yZWRpcmVjdF9wZWVyXCIsXG4gICAgXCJicGZfcmVkaXJlY3RfbmVpZ2hcIixcbiAgICBcImh0Yl9jbGFzc2lmeVwiLFxuICAgIFwiZnFfY29kZWxfY2xhc3NpZnlcIixcbiAgICBcImNha2VfY2xhc3NpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 04:40:54 +0000 UTC FinishedAt: 2026-07-07 04:59:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9e05e91a9a847ed57926414bd7c2c5e54d6c56c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_RED", "NET_SCH_HTB", "NET_SCH_CAKE", "NET_SCH_FQ_CODEL", "NET_SCH_BPF", "NET_CLS_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "9e05e91a9a847ed57926414bd7c2c5e54d6c56c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_RED", "NET_SCH_HTB", "NET_SCH_CAKE", "NET_SCH_FQ_CODEL", "NET_SCH_BPF", "NET_CLS_BPF" ], "series_id": "0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcf_qevent_handle", "bpf_redirect", "bpf_redirect_peer", "bpf_redirect_neigh", "htb_classify", "fq_codel_classify", "cake_classify" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2RmNjRlZGFkZGEyYzA1NTJhOWYxZTM4ZjY5NTljMGFhOTVjYjgwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXG5pbmRleCAzYmQwOGQ3ZjM5YzE4Yy4uNWY1Y2IzNjQzOWZlMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9wa3RfY2xzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxuQEAgLTE1Niw4ICYjNDM7MTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdHJldHVybiBUQ19BQ1RfVU5TUEVDO1xuIH1cbi1cbiAjZW5kaWZcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMsIGJvb2wgY29tcGF0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdHAsIHJlcywgY29tcGF0X21vZGUpO1xuJiM0MztcbiYjNDM7XHQvKiBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zIGlzIG5vdCBzdXBwb3J0ZWQuXG4mIzQzO1x0ICogVXNlIEJQRiB2aWEgdGN4IG9yIG1pcnJlZCByZWRpcmVjdCBpbnN0ZWFkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQgPT0gVENfQUNUX1JFRElSRUNUKSlcbiYjNDM7XHRcdHJldCA9IFRDX0FDVF9TSE9UO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBfX2Nsc19zZXRfY2xhc3ModW5zaWduZWQgbG9uZyAqY2xwLCB1bnNpZ25lZCBsb25nIGNsKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTI1NTIsMTEgJiM0MzsyNTUyLDEzIEBAIGludCBza2JfZG9fcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fFxuJiM0MztcdFx0ICAgICAoZmxhZ3MgXHUwMDI2ICh+KEJQRl9GX0lOR1JFU1MpIHwgQlBGX0ZfUkVESVJFQ1RfSU5URVJOQUwpKSkpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbiYjNDM7XHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuIFx0cmktXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdHJpLVx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XG4gXG5AQCAtMjU3MywxMSAmIzQzOzI1NzUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGZsYWdzKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoIWJwZl9uZXRfY3R4X2dldCgpIHx8IGZsYWdzKSlcbiBcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuIFxuJiM0MztcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX1BFRVI7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1OTUsMTEgJiM0MzsyNTk4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XG4gQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsXG4gXHQgICBpbnQsIHBsZW4sIHU2NCwgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuJiM0MztcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG4gXG4tXHRpZiAodW5saWtlbHkoKHBsZW4gXHUwMDI2XHUwMDI2IHBsZW4gXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHwgZmxhZ3MpKVxuJiM0MztcdGlmICh1bmxpa2VseSgocGxlbiBcdTAwMjZcdTAwMjYgcGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKSB8fFxuJiM0MztcdFx0ICAgICAhYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxuIFx0XHRyZXR1cm4gVENfQUNUX1NIT1Q7XG4gXG4mIzQzO1x0cmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiBcdHJpLVx1MDAzZWZsYWdzID0gQlBGX0ZfTkVJR0ggfCAocGxlbiA/IEJQRl9GX05FWFRIT1AgOiAwKTtcbiBcdHJpLVx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbmluZGV4IGZmZWVhNmRiODMzNzQ3Li5mZWU0NTI0YWRjOThlZiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmNcbkBAIC00MDQ1LDcgJiM0Mzs0MDQ1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVcbiBcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHFlLVx1MDAzZWZpbHRlcl9jaGFpbik7XG4gXG4tXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xuJiM0MztcdHN3aXRjaCAodGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNmNsX3JlcywgZmFsc2UpKSB7XG4gXHRjYXNlIFRDX0FDVF9TSE9UOlxuIFx0XHRxZGlzY19xc3RhdHNfZHJvcChzY2gpO1xuIFx0XHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbkBAIC00MDU3LDEwICYjNDM7NDA1Nyw2IEBAIHN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1XG4gXHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuIFx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4gXHRcdHJldHVybiBOVUxMO1xuLVx0Y2FzZSBUQ19BQ1RfUkVESVJFQ1Q6XG4tXHRcdHNrYl9kb19yZWRpcmVjdChza2IpO1xuLVx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4tXHRcdHJldHVybiBOVUxMO1xuIFx0Y2FzZSBUQ19BQ1RfQ09OU1VNRUQ6XG4gXHRcdCpyZXQgPSBfX05FVF9YTUlUX1NUT0xFTjtcbiBcdFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuaW5kZXggYTNjMTg1NTA1YWZjZTQuLjk0ZWI0N2FjNTRlZTY0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXG5AQCAtMTczMCw3ICYjNDM7MTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxuIFx0XHRnb3RvIGhhc2g7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4mIzQzO1x0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5pbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Ryci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2Ryci5jXG5AQCAtMzEyLDcgJiM0MzszMTIsNyBAQCBzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG5pbmRleCAyNzA4ODc2MGVmZjQ0My4uNGY2NzhkNGZmMTBlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcbkBAIC0zNjQsNyAmIzQzOzM2NCw3IEBAIHN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcbiBcdGlmICghZmwpXG4gXHRcdHJldHVybiBORVRfWE1JVF9TVUNDRVNTO1xuIFxuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZXRzLmMgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5pbmRleCBjYjhjZjQzN2NlODcwOC4uMjVmY2Y0MDc5ZmVjZTEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2V0cy5jXG5AQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRpZiAoVENfSF9NQUooc2tiLVx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXHUwMDNlaGFuZGxlKSB7XG4gXHRcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0XHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4mIzQzO1x0XHRlcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKGVycikge1xuIFx0XHRjYXNlIFRDX0FDVF9TVE9MRU46XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXG5pbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1xuQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBmcV9jb2RlbF9oYXNoKHEsIHNrYikgJiM0MzsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbmluZGV4IDcyZjQ4ZmE0MDEwYmViLi4wNjllMWZhY2Q0MTMwZCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmNcbkBAIC05Niw3ICYjNDM7OTYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZxX3BpZV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdFx0cmV0dXJuIGZxX3BpZV9oYXNoKHEsIHNrYikgJiM0MzsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuaW5kZXggN2U1MzcyOTViOGI2NzguLmU4N2Y1MDIxYTE5OTU4IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5AQCAtMTE0Myw3ICYjNDM7MTE0Myw3IEBAIGhmc2NfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aGVhZCA9IFx1MDAyNnEtXHUwMDNlcm9vdDtcbiBcdHRjZiA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZXJvb3QuZmlsdGVyX2xpc3QpO1xuLVx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuJiM0MztcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcdH1cbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0d2hpbGUgKHRjZiBcdTAwMjZcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXHUwMDI2cmVzLCBmYWxzZSkpIFx1MDAzZT0gMCkge1xuJiM0MztcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuaW5kZXggYTQ2N2RkMTIyMzY5NzAuLjY2ZGYzMDkzOWFhNWMxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xuQEAgLTM2LDcgJiM0MzszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0aW50IGVycjtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRzd2l0Y2ggKGVycikge1xuIFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmNcbmluZGV4IGU0ZGQ1NmE4OTA3MjViLi43OTQzN2M1ODdlN2VkMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3ByaW8uY1xuQEAgLTM5LDcgJiM0MzszOSw3IEBAIHByaW9fY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsIGludCAqcWVycilcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0aWYgKFRDX0hfTUFKKHNrYi1cdTAwM2Vwcmlvcml0eSkgIT0gc2NoLVx1MDAzZWhhbmRsZSkge1xuIFx0XHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdFx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuJiM0MztcdFx0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3FmcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5AQCAtNzA5LDcgJiM0Mzs3MDksNyBAQCBzdGF0aWMgc3RydWN0IHFmcV9jbGFzcyAqcWZxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVx1MDAzZWZpbHRlcl9saXN0KTtcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmYi5jIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xuaW5kZXggYjFkNDY1MDk0Mjc2OTIuLmVkMzk4NjkxOTljMDg0IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZmIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0aW50IHJlc3VsdDtcbiBcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuaW5kZXggNzU4Yjg4ZjIxODY1MjcuLjc3Njc1ZjlhNGM0NmU3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xuQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBzZnFfaGFzaChxLCBza2IpICYjNDM7IDE7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiYjNDM7XHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuaW5kZXggYWRiMjUxNDZlODhjY2YuLmVhNzA0NGYzMGFkYzNiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xuQEAgLTgyLDYgJiM0Mzs4Miw3IEBAIENPTkZJR19ORVRfU0NIX0JQRj15XG4gQ09ORklHX05FVF9TQ0hfRlE9eVxuIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX0hUQj15XG4mIzQzO0NPTkZJR19ORVRfU0NIX1JFRD15XG4gQ09ORklHX05FVF9TQ0hFRD15XG4gQ09ORklHX05FVERFVlNJTT15XG4gQ09ORklHX05FVEZJTFRFUj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcbkBAIC0wLDAgJiM0MzsxLDExMyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXRpbmV0L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfdGNfcWV2ZW50LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBOU19UWFx0XHRcJiMzNDt0Y19xZXZlbnRfdHhcJiMzNDtcbiYjNDM7I2RlZmluZSBOU19SWFx0XHRcJiMzNDt0Y19xZXZlbnRfcnhcJiMzNDtcbiYjNDM7I2RlZmluZSBJUF9UWFx0XHRcJiMzNDsxMC4yNTUuMC4xXCYjMzQ7XG4mIzQzOyNkZWZpbmUgSVBfUlhcdFx0XCYjMzQ7MTAuMjU1LjAuMlwmIzM0O1xuJiM0MzsjZGVmaW5lIFBJTl9QQVRIXHRcJiMzNDsvc3lzL2ZzL2JwZi90Y19xZXZlbnRfcmVkaXJlY3RcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJsYXN0X3VkcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIGRzdCA9IHt9O1xuJiM0MztcdGNoYXIgYnVmWzE0MDBdID0ge307XG4mIzQzO1x0aW50IGZkLCBpO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCYjMzQ7dWRwIHNvY2tldFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XG4mIzQzO1x0aW5ldF9wdG9uKEFGX0lORVQsIElQX1JYLCBcdTAwMjZkc3Quc2luX2FkZHIpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFB1c2ggZmFyIG1vcmUgdGhhbiB0aGUgUkVEIHF1ZXVlIGNhbiBob2xkLiBPbmNlIHFhdmcgY3Jvc3NlcyBxdGhfbWluXG4mIzQzO1x0ICogZXZlcnkgZnVydGhlciBwYWNrZXQgaGl0cyB0aGUgY29uZ2VzdGlvbl9kcm9wIC8gZWFybHlfZHJvcCBxZXZlbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNTAwMDA7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0c2VuZHRvKGZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0XHQgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmRzdCwgc2l6ZW9mKGRzdCkpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3U2NCAqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsICVzXCYjMzQ7LCBOU19UWCk7XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIE5TX1JYKTtcbiYjNDM7XHR1bmxpbmsoUElOX1BBVEgpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ3JhbV9fcGluKHByb2csIFBJTl9QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3BpbiBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0U1lTKHVucGluLCAgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19UWCk7XG4mIzQzO1x0U1lTKGRlbF90eCwgXCYjMzQ7aXAgbmV0bnMgYWRkICVzXCYjMzQ7LCBOU19SWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlc1wmIzM0OywgTlNfVFgsIE5TX1JYKTtcbiYjNDM7XHRTWVMoZGVsX3J4LCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDBcJiMzNDssIE5TX1RYLCBJUF9UWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgdmV0aDAgdXBcJiMzNDssIE5TX1RYKTtcbiYjNDM7XHRTWVMoZGVsX3J4LCBcJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDFcJiMzNDssIE5TX1JYLCBJUF9SWCk7XG4mIzQzO1x0U1lTKGRlbF9yeCwgXCYjMzQ7aXAgLW4gJXMgbGluayBzZXQgdmV0aDEgdXBcJiMzNDssIE5TX1JYKTtcbiYjNDM7XG4mIzQzO1x0dG9rID0gb3Blbl9uZXRucyhOU19UWCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHRvaywgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGRlbF9yeDtcbiYjNDM7XG4mIzQzO1x0U1lTKGNsb3NlX25zLCBcJiMzNDt0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHJvb3QgaGFuZGxlIDE6IGh0YiBkZWZhdWx0IDFcJiMzNDspO1xuJiM0MztcdFNZUyhjbG9zZV9ucywgXCYjMzQ7dGMgY2xhc3MgYWRkIGRldiB2ZXRoMCBwYXJlbnQgMTogY2xhc3NpZCAxOjEgaHRiIHJhdGUgMW1iaXQgY2VpbCAxbWJpdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChzeXN0ZW0oXCYjMzQ7dGMgcWRpc2MgYWRkIGRldiB2ZXRoMCBwYXJlbnQgMToxIGhhbmRsZSAxMTogcmVkIFwmIzM0O1xuJiM0MztcdFx0ICAgXCYjMzQ7bGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCBcJiMzNDtcbiYjNDM7XHRcdCAgIFwmIzM0O2J1cnN0IDYgcWV2ZW50IGVhcmx5X2Ryb3AgYmxvY2sgMTAgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OykpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gY2xvc2VfbnM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3lzdGVtKFwmIzM0O3RjIGZpbHRlciBhZGQgYmxvY2sgMTAgYnBmIGRhIG9iamVjdC1waW5uZWQgXCYjMzQ7XG4mIzQzO1x0XHQgICBQSU5fUEFUSCBcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFwmIzM0OykpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gY2xvc2VfbnM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibGFzdF91ZHAoKTtcbiYjNDM7XHRBU1NFUlRfR1QoKmNvdW50ZXIsIDAsIFwmIzM0O3FldmVudCBjbGFzc2lmaWVyIHJhblwmIzM0Oyk7XG4mIzQzO2Nsb3NlX25zOlxuJiM0MztcdGNsb3NlX25ldG5zKHRvayk7XG4mIzQzO2RlbF9yeDpcbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O2lwIG5ldG5zIGRlbCAlc1wmIzM0OywgTlNfUlgpO1xuJiM0MztkZWxfdHg6XG4mIzQzO1x0U1lTX05PRkFJTChcJiMzNDtpcCBuZXRucyBkZWwgJXNcJiMzNDssIE5TX1RYKTtcbiYjNDM7dW5waW46XG4mIzQzO1x0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3RfdGNfcWV2ZW50ICpza2VsO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdGVzdF90Y19xZXZlbnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7b3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3JlZGlyZWN0X3ZlcmRpY3RcJiMzNDspKVxuJiM0MztcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF92ZXJkaWN0LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2V2ZXJkaWN0X2NhbGxzKTtcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtyZWRpcmVjdF9oZWxwZXJcJiMzNDspKVxuJiM0MztcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF9oZWxwZXIsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWhlbHBlcl9jYWxscyk7XG4mIzQzO1xuJiM0MztcdHRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNTI5YzExMWY0YWE0MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmNcbkBAIC0wLDAgJiM0MzsxLDIzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7aW50IHJlZGlyZWN0X2lmaW5kZXggPSAxO1xuJiM0MztfX3U2NCB2ZXJkaWN0X2NhbGxzID0gMDtcbiYjNDM7X191NjQgaGVscGVyX2NhbGxzID0gMDtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7aW50IHFldmVudF9yZWRpcmVjdF92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZlcmRpY3RfY2FsbHMsIDEpO1xuJiM0MztcdHJldHVybiBUQ1hfUkVESVJFQ1Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7aW50IHFldmVudF9yZWRpcmVjdF9oZWxwZXIoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGVscGVyX2NhbGxzLCAxKTtcbiYjNDM7XHRyZXR1cm4gYnBmX3JlZGlyZWN0KHJlZGlyZWN0X2lmaW5kZXgsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZGY2NGVkYWRkYTJjMDU1MmE5ZjFlMzhmNjk1OWMwYWE5NWNiODBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAwNDo1Mzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaCBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaAppbmRleCAzYmQwOGQ3ZjM5YzE4Yy4uNWY1Y2IzNjQzOWZlMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9wa3RfY2xzLmgKQEAgLTE1Niw4ICYjNDM7MTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCXJldHVybiBUQ19BQ1RfVU5TUEVDOwogfQotCiAjZW5kaWYKJiM0MztzdGF0aWMgaW5saW5lIGludCB0Y2ZfY2xhc3NpZnlfcWRpc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzLCBib29sIGNvbXBhdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRwLCByZXMsIGNvbXBhdF9tb2RlKTsKJiM0MzsKJiM0MzsJLyogVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucyBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOwkgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuCiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkocmV0ID09IFRDX0FDVF9SRURJUkVDVCkpCiYjNDM7CQlyZXQgPSBUQ19BQ1RfU0hPVDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jbHNfc2V0X2NsYXNzKHVuc2lnbmVkIGxvbmcgKmNscCwgdW5zaWduZWQgbG9uZyBjbCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggYjQ0NmFhOGJlNWMzNzUuLjExYmIwZDIzNjgyMmFmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMjU1MiwxMSAmIzQzOzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpCiYjNDM7CWlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwKJiM0MzsJCSAgICAgKGZsYWdzICZhbXA7ICh+KEJQRl9GX0lOR1JFU1MpIHwgQlBGX0ZfUkVESVJFQ1RfSU5URVJOQUwpKSkpCiAJCXJldHVybiBUQ19BQ1RfU0hPVDsKIAomIzQzOwlyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpOwogCXJpLSZndDtmbGFncyA9IGZsYWdzOwogCXJpLSZndDt0Z3RfaW5kZXggPSBpZmluZGV4OwogCkBAIC0yNTczLDExICYjNDM7MjU3NSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHsKIAogQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseShmbGFncykpCiYjNDM7CWlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKQogCQlyZXR1cm4gVENfQUNUX1NIT1Q7CiAKJiM0MzsJcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKIAlyaS0mZ3Q7ZmxhZ3MgPSBCUEZfRl9QRUVSOwogCXJpLSZndDt0Z3RfaW5kZXggPSBpZmluZGV4OwogCkBAIC0yNTk1LDExICYjNDM7MjU5OCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wZWVyX3Byb3RvID0gewogQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsCiAJICAgaW50LCBwbGVuLCB1NjQsIGZsYWdzKQogewotCXN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTsKJiM0MzsJc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTsKIAotCWlmICh1bmxpa2VseSgocGxlbiAmYW1wOyZhbXA7IHBsZW4gJmx0OyBzaXplb2YoKnBhcmFtcykpIHx8IGZsYWdzKSkKJiM0MzsJaWYgKHVubGlrZWx5KChwbGVuICZhbXA7JmFtcDsgcGxlbiAmbHQ7IHNpemVvZigqcGFyYW1zKSkgfHwKJiM0MzsJCSAgICAgIWJwZl9uZXRfY3R4X2dldCgpIHx8IGZsYWdzKSkKIAkJcmV0dXJuIFRDX0FDVF9TSE9UOwogCiYjNDM7CXJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7CiAJcmktJmd0O2ZsYWdzID0gQlBGX0ZfTkVJR0ggfCAocGxlbiA/IEJQRl9GX05FWFRIT1AgOiAwKTsKIAlyaS0mZ3Q7dGd0X2luZGV4ID0gaWZpbmRleDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggZmZlZWE2ZGI4MzM3NDcuLmZlZTQ1MjRhZGM5OGVmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTQwNDUsNyAmIzQzOzQwNDUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydQogCiAJZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocWUtJmd0O2ZpbHRlcl9jaGFpbik7CiAKLQlzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO2NsX3JlcywgZmFsc2UpKSB7CiYjNDM7CXN3aXRjaCAodGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7Y2xfcmVzLCBmYWxzZSkpIHsKIAljYXNlIFRDX0FDVF9TSE9UOgogCQlxZGlzY19xc3RhdHNfZHJvcChzY2gpOwogCQlfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTsKQEAgLTQwNTcsMTAgJiM0Mzs0MDU3LDYgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnUKIAkJX19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7CiAJCSpyZXQgPSBfX05FVF9YTUlUX1NUT0xFTjsKIAkJcmV0dXJuIE5VTEw7Ci0JY2FzZSBUQ19BQ1RfUkVESVJFQ1Q6Ci0JCXNrYl9kb19yZWRpcmVjdChza2IpOwotCQkqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47Ci0JCXJldHVybiBOVUxMOwogCWNhc2UgVENfQUNUX0NPTlNVTUVEOgogCQkqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuYwppbmRleCBhM2MxODU1MDVhZmNlNC4uOTRlYjQ3YWM1NGVlNjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2FrZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jCkBAIC0xNzMwLDcgJiM0MzsxNzMwLDcgQEAgc3RhdGljIHUzMiBjYWtlX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgY2FrZV90aW5fZGF0YSAqKnQsCiAJCWdvdG8gaGFzaDsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwogCiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2Ryci5jIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwppbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtMzEyLDcgJiM0MzszMTIsNyBAQCBzdGF0aWMgc3RydWN0IGRycl9jbGFzcyAqZHJyX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7ZmlsdGVyX2xpc3QpOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKIAlpZiAocmVzdWx0ICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAkJc3dpdGNoIChyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmMKaW5kZXggMjcwODg3NjBlZmY0NDMuLjRmNjc4ZDRmZjEwZWM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYwpAQCAtMzY0LDcgJiM0MzszNjQsNyBAQCBzdGF0aWMgaW50IGR1YWxwaTJfc2tiX2NsYXNzaWZ5KHN0cnVjdCBkdWFscGkyX3NjaGVkX2RhdGEgKnEsCiAJaWYgKCFmbCkKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAKLQlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuYwppbmRleCBjYjhjZjQzN2NlODcwOC4uMjVmY2Y0MDc5ZmVjZTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9ldHMuYwpAQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwogCWlmIChUQ19IX01BSihza2ItJmd0O3ByaW9yaXR5KSAhPSBzY2gtJmd0O2hhbmRsZSkgewogCQlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwkJZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYwppbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMKQEAgLTkxLDcgJiM0Mzs5MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCXJldHVybiBmcV9jb2RlbF9oYXNoKHEsIHNrYikgJiM0MzsgMTsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCXJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuYyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKaW5kZXggNzJmNDhmYTQwMTBiZWIuLjA2OWUxZmFjZDQxMzBkIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfZnFfcGllLmMKQEAgLTk2LDcgJiM0Mzs5Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfcGllX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLAogCQlyZXR1cm4gZnFfcGllX2hhc2gocSwgc2tiKSAmIzQzOyAxOwogCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7Ci0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDdlNTM3Mjk1YjhiNjc4Li5lODdmNTAyMWExOTk1OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTExNDMsNyAmIzQzOzExNDMsNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJKnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7CiAJaGVhZCA9ICZhbXA7cS0mZ3Q7cm9vdDsKIAl0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS0mZ3Q7cm9vdC5maWx0ZXJfbGlzdCk7Ci0Jd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKJiM0MzsJd2hpbGUgKHRjZiAmYW1wOyZhbXA7IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsICZhbXA7cmVzLCBmYWxzZSkpICZndDs9IDApIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAkJc3dpdGNoIChyZXN1bHQpIHsKIAkJY2FzZSBUQ19BQ1RfUVVFVUVEOgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9odGIuYyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAl9CiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKLQl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewomIzQzOwl3aGlsZSAodGNmICZhbXA7JmFtcDsgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgJmFtcDtyZXMsIGZhbHNlKSkgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewogCQljYXNlIFRDX0FDVF9RVUVVRUQ6CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwppbmRleCBhNDY3ZGQxMjIzNjk3MC4uNjZkZjMwOTM5YWE1YzEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtMzYsNyAmIzQzOzM2LDcgQEAgbXVsdGlxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpCiAJaW50IGVycjsKIAogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwotCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwllcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlzd2l0Y2ggKGVycikgewogCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3ByaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3ByaW8uYwpAQCAtMzksNyAmIzQzOzM5LDcgQEAgcHJpb19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKQogCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOwogCWlmIChUQ19IX01BSihza2ItJmd0O3ByaW9yaXR5KSAhPSBzY2gtJmd0O2hhbmRsZSkgewogCQlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JCWVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwomIzQzOwkJZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAoZXJyKSB7CiAJCWNhc2UgVENfQUNUX1NUT0xFTjoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jCmluZGV4IGNiNTY3ODdlMWQyNThjLi42ZjNiNzI3M2NiMTYwZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9xZnEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3FmcS5jCkBAIC03MDksNyAmIzQzOzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKIAlmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLSZndDtmaWx0ZXJfbGlzdCk7Ci0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiYjNDM7CXJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZmIuYyBiL25ldC9zY2hlZC9zY2hfc2ZiLmMKaW5kZXggYjFkNDY1MDk0Mjc2OTIuLmVkMzk4NjkxOTljMDg0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZiLmMKQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLAogCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlczsKIAlpbnQgcmVzdWx0OwogCi0JcmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiYjNDM7CXJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCAmYW1wO3JlcywgZmFsc2UpOwogCWlmIChyZXN1bHQgJmd0Oz0gMCkgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCQlzd2l0Y2ggKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggNzU4Yjg4ZjIxODY1MjcuLjc3Njc1ZjlhNGM0NmU3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTE3MSw3ICYjNDM7MTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsCiAJCXJldHVybiBzZnFfaGFzaChxLCBza2IpICYjNDM7IDE7CiAKIAkqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUzsKLQlyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgJmFtcDtyZXMsIGZhbHNlKTsKJiM0MzsJcmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsICZhbXA7cmVzLCBmYWxzZSk7CiAJaWYgKHJlc3VsdCAmZ3Q7PSAwKSB7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCiAJCXN3aXRjaCAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwppbmRleCBhZGIyNTE0NmU4OGNjZi4uZWE3MDQ0ZjMwYWRjM2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZwpAQCAtODIsNiAmIzQzOzgyLDcgQEAgQ09ORklHX05FVF9TQ0hfQlBGPXkKIENPTkZJR19ORVRfU0NIX0ZRPXkKIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eQogQ09ORklHX05FVF9TQ0hfSFRCPXkKJiM0MztDT05GSUdfTkVUX1NDSF9SRUQ9eQogQ09ORklHX05FVF9TQ0hFRD15CiBDT05GSUdfTkVUREVWU0lNPXkKIENPTkZJR19ORVRGSUxURVI9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjdlMWQxNzU2N2FiZGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuYwpAQCAtMCwwICYjNDM7MSwxMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc29ja2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldGluZXQvaW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfdGNfcWV2ZW50LnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBOU19UWAkJJiMzNDt0Y19xZXZlbnRfdHgmIzM0OwomIzQzOyNkZWZpbmUgTlNfUlgJCSYjMzQ7dGNfcWV2ZW50X3J4JiMzNDsKJiM0MzsjZGVmaW5lIElQX1RYCQkmIzM0OzEwLjI1NS4wLjEmIzM0OwomIzQzOyNkZWZpbmUgSVBfUlgJCSYjMzQ7MTAuMjU1LjAuMiYjMzQ7CiYjNDM7I2RlZmluZSBQSU5fUEFUSAkmIzM0Oy9zeXMvZnMvYnBmL3RjX3FldmVudF9yZWRpcmVjdCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYmxhc3RfdWRwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307CiYjNDM7CWNoYXIgYnVmWzE0MDBdID0ge307CiYjNDM7CWludCBmZCwgaTsKJiM0MzsKJiM0MzsJZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGZkLCAwLCAmIzM0O3VkcCBzb2NrZXQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJZHN0LnNpbl9wb3J0ID0gaHRvbnMoMTIzNDUpOwomIzQzOwlpbmV0X3B0b24oQUZfSU5FVCwgSVBfUlgsICZhbXA7ZHN0LnNpbl9hZGRyKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHVzaCBmYXIgbW9yZSB0aGFuIHRoZSBSRUQgcXVldWUgY2FuIGhvbGQuIE9uY2UgcWF2ZyBjcm9zc2VzIHF0aF9taW4KJiM0MzsJICogZXZlcnkgZnVydGhlciBwYWNrZXQgaGl0cyB0aGUgY29uZ2VzdGlvbl9kcm9wIC8gZWFybHlfZHJvcCBxZXZlbnQuCiYjNDM7CSAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNTAwMDA7IGkmIzQzOyYjNDM7KQomIzQzOwkJc2VuZHRvKGZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQsCiYjNDM7CQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7ZHN0LCBzaXplb2YoZHN0KSk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3FldmVudF9yZWRpcmVjdChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTY0ICpjb3VudGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgTlNfVFgpOwomIzQzOwlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICVzJiMzNDssIE5TX1JYKTsKJiM0MzsJdW5saW5rKFBJTl9QQVRIKTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtwaW4gcHJvZyYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJU1lTKHVucGluLCAgJiMzNDtpcCBuZXRucyBhZGQgJXMmIzM0OywgTlNfVFgpOwomIzQzOwlTWVMoZGVsX3R4LCAmIzM0O2lwIG5ldG5zIGFkZCAlcyYjMzQ7LCBOU19SWCk7CiYjNDM7CVNZUyhkZWxfcngsICYjMzQ7aXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlcyYjMzQ7LCBOU19UWCwgTlNfUlgpOwomIzQzOwlTWVMoZGVsX3J4LCAmIzM0O2lwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMCYjMzQ7LCBOU19UWCwgSVBfVFgpOwomIzQzOwlTWVMoZGVsX3J4LCAmIzM0O2lwIC1uICVzIGxpbmsgc2V0IHZldGgwIHVwJiMzNDssIE5TX1RYKTsKJiM0MzsJU1lTKGRlbF9yeCwgJiMzNDtpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDEmIzM0OywgTlNfUlgsIElQX1JYKTsKJiM0MzsJU1lTKGRlbF9yeCwgJiMzNDtpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMSB1cCYjMzQ7LCBOU19SWCk7CiYjNDM7CiYjNDM7CXRvayA9IG9wZW5fbmV0bnMoTlNfVFgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIodG9rLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGRlbF9yeDsKJiM0MzsKJiM0MzsJU1lTKGNsb3NlX25zLCAmIzM0O3RjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMSYjMzQ7KTsKJiM0MzsJU1lTKGNsb3NlX25zLCAmIzM0O3RjIGNsYXNzIGFkZCBkZXYgdmV0aDAgcGFyZW50IDE6IGNsYXNzaWQgMToxIGh0YiByYXRlIDFtYml0IGNlaWwgMW1iaXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChzeXN0ZW0oJiMzNDt0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOjEgaGFuZGxlIDExOiByZWQgJiMzNDsKJiM0MzsJCSAgICYjMzQ7bGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCAmIzM0OwomIzQzOwkJICAgJiMzNDtidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDImZ3Q7L2Rldi9udWxsJiMzNDspKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlnb3RvIGNsb3NlX25zOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzeXN0ZW0oJiMzNDt0YyBmaWx0ZXIgYWRkIGJsb2NrIDEwIGJwZiBkYSBvYmplY3QtcGlubmVkICYjMzQ7CiYjNDM7CQkgICBQSU5fUEFUSCAmIzM0OyAyJmd0Oy9kZXYvbnVsbCYjMzQ7KSkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBjbG9zZV9uczsKJiM0MzsJfQomIzQzOwomIzQzOwlibGFzdF91ZHAoKTsKJiM0MzsJQVNTRVJUX0dUKCpjb3VudGVyLCAwLCAmIzM0O3FldmVudCBjbGFzc2lmaWVyIHJhbiYjMzQ7KTsKJiM0MztjbG9zZV9uczoKJiM0MzsJY2xvc2VfbmV0bnModG9rKTsKJiM0MztkZWxfcng6CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJXMmIzM0OywgTlNfUlgpOwomIzQzO2RlbF90eDoKJiM0MzsJU1lTX05PRkFJTCgmIzM0O2lwIG5ldG5zIGRlbCAlcyYjMzQ7LCBOU19UWCk7CiYjNDM7dW5waW46CiYjNDM7CWJwZl9wcm9ncmFtX191bnBpbihwcm9nLCBQSU5fUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF90Y19xZXZlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3RfdGNfcWV2ZW50X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVkaXJlY3RfdmVyZGljdCYjMzQ7KSkKJiM0MzsJCXJ1bl9xZXZlbnRfcmVkaXJlY3Qoc2tlbC0mZ3Q7cHJvZ3MucWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3QsCiYjNDM7CQkJCSAgICAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7dmVyZGljdF9jYWxscyk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7cmVkaXJlY3RfaGVscGVyJiMzNDspKQomIzQzOwkJcnVuX3FldmVudF9yZWRpcmVjdChza2VsLSZndDtwcm9ncy5xZXZlbnRfcmVkaXJlY3RfaGVscGVyLAomIzQzOwkJCQkgICAgJmFtcDtza2VsLSZndDtic3MtJmd0O2hlbHBlcl9jYWxscyk7CiYjNDM7CiYjNDM7CXRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MjljMTExZjRhYTQyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmMKQEAgLTAsMCAmIzQzOzEsMjMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IHJlZGlyZWN0X2lmaW5kZXggPSAxOwomIzQzO19fdTY0IHZlcmRpY3RfY2FsbHMgPSAwOwomIzQzO19fdTY0IGhlbHBlcl9jYWxscyA9IDA7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztpbnQgcWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDt2ZXJkaWN0X2NhbGxzLCAxKTsKJiM0MzsJcmV0dXJuIFRDWF9SRURJUkVDVDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hlbHBlcl9jYWxscywgMSk7CiYjNDM7CXJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFNjaGVkdWxlciBDbGFzc2lmaWNhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSB3YXkgdGhlIGtlcm5lbCBoYW5kbGVzIGBUQ19BQ1RfUkVESVJFQ1RgIHdpdGhpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLiBUaGUga2V5IGlkZWEgaGVyZSBpcyB0byByZXBsYWNlIGRpcmVjdCB1c2Ugb2YgYHRjZl9jbGFzc2lmeWAgd2l0aCBhIHdyYXBwZXIsIGB0Y2ZfY2xhc3NpZnlfcWRpc2NgLiBUaGlzIG5ldyBmdW5jdGlvbiB0cmFuc2Zvcm1zIGBUQ19BQ1RfUkVESVJFQ1RgIGludG8gYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIGJlY2F1c2UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVkaXJlY3QgYWN0aW9ucyBhcmVuJiMzOTt0IHByb3Blcmx5IHN1cHBvcnRlZCB3aXRoaW4gdGhlc2UgZmlsdGVyIGNoYWlucywgbGVhZGluZyB0byBwb3RlbnRpYWwgaXNzdWVzLgoKVGhlIHBhdGNoIGFsc28gdGlnaHRlbnMgdXAgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBTcGVjaWZpY2FsbHksIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBub3cgaW5jb3Jwb3JhdGUgYSBudWxsIGNoZWNrIHVzaW5nIGAhYnBmX25ldF9jdHhfZ2V0KClgLCBhbmQgcmV0dXJuIGBUQ19BQ1RfU0hPVGAgaWYgdGhlIGNoZWNrIGZhaWxzLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQsIEkmIzM5O2Qgc2F5LCB0byBtYWtlIHN1cmUgQlBGIHByb2dyYW1zIGFyZW4mIzM5O3QgYXR0ZW1wdGluZyB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLgoKVGhpcyBoYXMgYnJvYWQgaW1wbGljYXRpb25zLCBhZmZlY3RpbmcgbWFueSBvZiB0aGUgY29yZSBxZGlzY3MuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGBjYWtlYCwgYGRycmAsIGBkdWFscGkyYCwgYGV0c2AsIGBmcV9jb2RlbGAsIGBmcV9waWVgLCBgaGZzY2AsIGBodGJgLCBgbXVsdGlxYCwgYHByaW9gLCBgcWZxYCwgYHNmYmAsIGFuZCBgc2ZxYC4gVGhleSYjMzk7cmUgYWxsIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGluc3RlYWQgb2YgYHRjZl9jbGFzc2lmeWAuIEFuZCBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyBiZWluZyBtb2RpZmllZCBhcyB3ZWxsLCB0byB1dGlsaXplIHRoaXMgbmV3IGZ1bmN0aW9uLiBUaGUgcmVtb3ZhbCBvZiB0aGUgYFRDX0FDVF9SRURJUkVDVGAgY2FzZSBpbiBgdGNmX3FldmVudF9oYW5kbGVgIGZ1cnRoZXIgY29uZmlybXMgdGhlIGludGVudCB0byBwcmV2ZW50IHRoZSBwcm9ibGVtYXRpYyBhY3Rpb24uCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgcWRpc2MgY2xhc3NpZmljYXRpb24gbG9naWMgYW5kIEJQRiByZWRpcmVjdCBoZWxwZXJzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24gd2lsbCBiZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCAoc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSksIGFuZCB0aGUgQlBGIGhlbHBlcnMgbWVudGlvbmVkLgoKYHRjZl9jbGFzc2lmeV9xZGlzY2AgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L3BrdF9jbHMuaGAsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBTaW5jZSB0aGVzZSBhcmUgQlBGIGhlbHBlcnMsIHRoZXkmIzM5O3JlIGNhbGxlZCB0aHJvdWdoIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuIEFuZCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBoYW5kbGVzIHRoaXMgdG9vLgoKSSBzaG91bGQgbGlzdCBgdGNmX3FldmVudF9oYW5kbGVgIGFuZCB0aG9zZSBCUEYgcmVkaXJlY3QgaGVscGVycy4gQnV0IHdhaXQsIGBicGZfcmVkaXJlY3RgIGlzIGEgbWFjcm8/IExldCBtZSBjaGVjayBpdHMgZGVmaW5pdGlvbi4gT2theSwgaXQmIzM5O3MgZGVmaW5lZCBhcyBhIEJQRiBjYWxsOiBgQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9DQUxMXzJcXChicGZfcmVkaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjUxOT1pbnQgc2tiX2RvX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU1Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTM6QlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI1Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU3NS1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NzY6QlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRlY29uc3RydWN0aW5nIGBicGZfcmVkaXJlY3RgIE5hbWluZyBDb252ZW50aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBub3RpY2luZyB0aGF0IHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZSBnZW5lcmF0ZWQgYnkgdGhhdCBgQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIC4uLilgIG1hY3JvIGlzbiYjMzk7dCBhbHdheXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIGBicGZfcmVkaXJlY3RgLiBJdCBzZWVtcyB0byBiZSBwbGF5aW5nIGFyb3VuZCB3aXRoIG5hbWVzLCBzb21ldGltZXMgcmVzdWx0aW5nIGluIHNvbWV0aGluZyBsaWtlIGBfX19fYnBmX3JlZGlyZWN0YCBvciBldmVuIGBicGZfcmVkaXJlY3RfX19fZm10YC4gVGhhdCYjMzk7cyBhIGxpdHRsZSBwZWN1bGlhciwgYW5kIGl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgd2hhdCB0aGUgdW5kZXJseWluZyBsb2dpYyBpcy4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZGlnIGludG8gdGhlIG1hY3JvIGRlZmluaXRpb24gaXRzZWxmLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB0byB3aGVyZSBgQlBGX0NBTExfMmAgaXMgZGVmaW5lZCDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvc3NpYmx5IHRoZSBzb3VyY2Ugb2YgdGhlIG5hbWluZyBvYmZ1c2NhdGlvbikgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBpbiBvcmRlciB0byBmdWxseSBncmFzcCB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgaGVhZGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgQlBGX0NBTExfMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI0LSNkZWZpbmUgQlBGX0NBTExfMShuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjI1OiNkZWZpbmUgQlBGX0NBTExfMihuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDIsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDMsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBCUEZfQ0FMTF94KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvLCAmIzM0O0xldCYjMzk7cyBjaGVjayBgQlBGX0NBTExfeGAuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoYXQg4oCTIEkga25vdyBgQlBGX0NBTExgIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiBleHRlbmRlZCBCUEYsIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGwgbWVjaGFuaXNtLCBhbmQgdGhlIGBfeGAgbGlrZWx5IGRlbm90ZXMgYSBmYW1pbHkgb3IgYSB2YXJpYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyB2YXJpYW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBXaGF0IGlzIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIGlzc3VlIG9yIHRhc2sgYXQgaGFuZD8gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgc2VhcmNoIHRlcm1zIGFuZCBtZW50YWxseSByZXZpZXcgZG9jdW1lbnRhdGlvbiwgdGhpbmtpbmcgYWJvdXQga2V5IHNlY3Rpb25zIGluIHRoZSBCUEYgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBleHBsb3JhdGlvbiBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmaW5lIEJQRl9DQUxMX3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0yNTk9c3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTYwOS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6NjEwOiNkZWZpbmUgQlBGX0NBTExfeCh4LCBhdHRyLCBuYW1lLCAuLi4pXHRcdFx0XHRcdCAgICAgICBcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MTEtXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEZWNvZGluZyBUaGlzIFNuaXBwZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgY29kZSBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc3RydWN0dXJlOiBpdCBzZWVtcyB0byBiZSBkZWZpbmluZyB0d28gZW50aXRpZXMgcmVsYXRlZCB0byBhIHZhcmlhYmxlIG9yIGtleSBjYWxsZWQgJiMzNDtuYW1lJiMzNDsuIEkgc2VlIGBfX19fIyNuYW1lYCBhbmQganVzdCBgbmFtZWAuIFRoZSBsZWFkaW5nIGNoYXJhY3RlcnMgYXJlIGRlZmluaXRlbHkgdW51c3VhbC4gVGhleSBpbW1lZGlhdGVseSBzdWdnZXN0IHNvbWUga2luZCBvZiBzcGVjaWFsIGhhbmRsaW5nLCBwb3RlbnRpYWxseSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgbmFtaW5nIGNvbnZlbnRpb25zLCBvciBhIHNjb3BpbmcgbWVjaGFuaXNtLiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci4KClRoZSBmYWN0IHRoYXQgYm90aCB2ZXJzaW9ucyBleGlzdCBsaWtlbHkgbWVhbnMgdGhlcmUmIzM5O3MgYSBkaXN0aW5jdGlvbiBpbiBob3cgJiMzNDtuYW1lJiMzNDsgaXMgYmVpbmcgdHJlYXRlZC4gSSBzdXNwZWN0IHRoYXQgYF9fX18jI25hbWVgIG1pZ2h0IHJlcHJlc2VudCBhIG1vcmUgZnVuZGFtZW50YWwsIGludGVybmFsLCBvciBwZXJoYXBzIGdsb2JhbGx5IHNjb3BlZCB2ZXJzaW9uIG9mICYjMzQ7bmFtZSYjMzQ7IGNvbXBhcmVkIHRvIHRoZSBzaW1wbGUgYG5hbWVgIGRlZmluaXRpb24uIFBlcmhhcHMgdGhlIHVuZGVyc2NvcmVzIGRlbm90ZSBhbiBpbnRlcm5hbCBhdHRyaWJ1dGUsIGEgaGlkZGVuIHZhcmlhYmxlLCBvciBhIHVuaXF1ZSBpZGVudGlmaWVyIHVzZWQgdG8gYXZvaWQgbmFtaW5nIGNvbmZsaWN0cy4gVGhlIGRvdWJsZSBoYXNoIG1pZ2h0IGluZGljYXRlIGEgbWFjcm8gZXhwYW5zaW9uLCBidXQgSSB3b3VsZCBuZWVkIG1vcmUgY29udGV4dCB0byBiZSBzdXJlLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGEgdGVtcGxhdGluZyBzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgdGhlIHRleHQgZG9lcyBub3Qgc3VwcGx5IG1vcmUgY29udGV4dCBpcyBwcm9ibGVtYXRpYyBhbmQgSSB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgZmlsZSBvciBlbnZpcm9ubWVudCB0byB3b3JrIG91dCB0aGUgZnVsbCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTE6XHRcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHQgICAgICAgXFxcbiA2MTI6XHRcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcbiA2MTM6XHRcdHR5cGVkZWYgdTY0ICgqYnRmXyMjbmFtZSkoX19CUEZfTUFQKHgsIF9fQlBGX0RFQ0xfQVJHUywgX19CUEZfViwgX19WQV9BUkdTX18pKTsgXFxcbiA2MTQ6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKTsgICAgXFxcbiA2MTU6XHRcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcbiA2MTY6XHRcdHtcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE3Olx0XHRcdHJldHVybiAoKGJ0Zl8jI25hbWUpX19fXyMjbmFtZSkoX19CUEZfTUFQKHgsX19CUEZfQ0FTVCxfX0JQRl9OLF9fVkFfQVJHU19fKSk7XFxcbiA2MTg6XHRcdH1cdFx0XHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjE5Olx0XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXHRcdFx0XHRcdFx0ICAgICAgIFxcXG4gNjIwOlx0XHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXG4gNjIxOlx0XG4gNjIyOlx0I2RlZmluZSBfX05PQVRUUlxuIDYyMzpcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXHRCUEZfQ0FMTF94KDAsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcbiA2MjQ6XHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVx0QlBGX0NBTExfeCgxLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgUmVkaXJlY3QgYW5kIFRyYWZmaWMgQ29udHJvbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgcmVkaXJlY3QgZnVuY3Rpb25zOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBBbHNvLCB0aGF0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyByZWxldmFudC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVxdWlyZWQgZm9yIHRoaXMuCgpGcm9tIHRoZSBwYXRjaCwgSSBjYW4gc2VlIG1vZGlmaWNhdGlvbnMgaW4gc2V2ZXJhbCB0cmFmZmljIGNvbnRyb2wgKFRDKSBzY2hlZHVsZXIgZmlsZXM6IGBuZXQvc2NoZWQvc2NoX2Nha2UuY2AsIGBzY2hfZHJyLmNgLCBgc2NoX2R1YWxwaTIuY2AsIGBzY2hfZXRzLmNgLCBgc2NoX2ZxX2NvZGVsLmNgLCBgc2NoX2ZxX3BpZS5jYCwgYHNjaF9oZnNjLmNgLCBgc2NoX2h0Yi5jYCwgYHNjaF9tdWx0aXEuY2AsIGBzY2hfcHJpby5jYCwgYHNjaF9xZnEuY2AsIGBzY2hfc2ZiLmNgLCBhbmQgYHNjaF9zZnEuY2AuIEFkZGl0aW9uYWxseSwgYG5ldC9zY2hlZC9jbHNfYXBpLmNgIGFuZCBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBhbHNvIGludm9sdmVkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtsbCBuZWVkIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9EUlJgLCBgTkVUX1NDSF9EVUFMUEkyYCwgYE5FVF9TQ0hfRVRTYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSF9GUV9QSUVgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfTVVMVElRYCwgYE5FVF9TQ0hfUFJJT2AsIGBORVRfU0NIX1FGUWAsIGBORVRfU0NIX1NGQmAsIGFuZCBgTkVUX1NDSF9TRlFgIGVuYWJsZWQuIFdlIGFsc28gc2VlIHRoYXQgYE5FVF9TQ0hfUkVEYCBoYXMgYmVlbiBhZGRlZCB0byBzZWxmdGVzdHMsIHNvIHdlJiMzOTtsbCBub3RlIHRoYXQuIEltcG9ydGFudGx5LCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBORVRfQ0xTX0FDVGAgYW5kIGBORVRfU0NIRURgIGVuYWJsZWQgYXMgd2VsbC4KCk5vdywgSSBzaG91bGQgaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYywgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24sIHNpbmNlIHRoYXQgc2VlbXMgbGlrZSBhIGNvcmUgZWxlbWVudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfcWV2ZW50X2hhbmRsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9NjMyPWludCB0Y2ZfcWV2ZW50X3ZhbGlkYXRlX2NoYW5nZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBubGF0dHIgKmJsb2NrX2luZGV4X2F0dHIsXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjMzLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzUtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpO1xuLS1cbmluY2x1ZGUvbmV0L3BrdF9jbHMuaD02NTY9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6NjU3OnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz00MDM1PUVYUE9SVF9TWU1CT0wodGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2UpO1xubmV0L3NjaGVkL2Nsc19hcGkuYy00MDM2LVxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MDM4LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKnRvX2ZyZWUsIGludCAqcmV0KVxuLS1cbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDA2Ni19XG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQwNjc6RVhQT1JUX1NZTUJPTCh0Y2ZfcWV2ZW50X2hhbmRsZSk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYz03MD1zdGF0aWMgaW50IHJlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAwLVx0XHRcdFx0ICAgcS1cdTAwM2VzdGF0cy5wcm9iX21hcmsgJiM0MzsgMSk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcdFx0XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX21hcmssIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xMDItXHRcdFx0aWYgKCFza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXHRcdFx0XHQgICBxLVx1MDAzZXN0YXRzLmZvcmNlZF9tYXJrICYjNDM7IDEpO1xubmV0L3NjaGVkL3NjaF9yZWQuYzoxMjU6XHRcdFx0c2tiID0gdGNmX3FldmVudF9oYW5kbGUoXHUwMDI2cS1cdTAwM2VxZV9tYXJrLCBzY2gsIHNrYiwgdG9fZnJlZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVx0XHRcdGlmICghc2tiKVxuLS1cbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTUwLWNvbmdlc3Rpb25fZHJvcDpcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlx0c2tiID0gdGNmX3FldmVudF9oYW5kbGUoXHUwMDI2cS1cdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTUyLVx0aWYgKCFza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjE4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoIGZvciBOZXR3b3JrIFNjaGVkdWxlciBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIHRoYXQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpcyBkZWZpbml0ZWx5IGtleSwgYW5kIGl0JiMzOTtzIHVzZWQgaW4gYG5ldC9zY2hlZC9zY2hfcmVkLmNgLiBUaGUgc2VsZnRlc3QgaXMgYWRkaW5nIGBDT05GSUdfTkVUX1NDSF9SRUQ9eWAsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCB0ZXN0LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRob3NlIEJQRiBoZWxwZXJzOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoZXkmIzM5O3JlIEJQRiBoZWxwZXJzLCBzbyB3ZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NDSEVEYCB0byBiZSBpbiB0aGUgY29uZmlnLiBUaGUgcGF0Y2ggaW1wYWN0cyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCB0b28sIHdoaWNoIGlzIGNhbGxlZCBieSAqbG9hZHMqIG9mIHFkaXNjcy4KCk9yaWdpbmFsbHksIEkgd2FzIHRoaW5raW5nIG9mIGxpc3Rpbmcgb3V0IGEgdG9uIG9mIGBORVRfU0NIXypgIGNvbmZpZ3M6IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9EUlJgLCBgTkVUX1NDSF9EVUFMUEkyYCwgYE5FVF9TQ0hfRVRTYCwgYE5FVF9TQ0hfRlFfQ09ERUxgLCBgTkVUX1NDSF9GUV9QSUVgLCBgTkVUX1NDSF9IRlNDYCwgYE5FVF9TQ0hfTVVMVElRYCwgYE5FVF9TQ0hfUFJJT2AsIGBORVRfU0NIX1FGUWAsIGBORVRfU0NIX1NGQmAsIGFuZCBgTkVUX1NDSF9TRlFgLiBCdXQgdGhhdCYjMzk7cyBwcm9iYWJseSBvdmVya2lsbC4gV2UgY2FuIGp1c3QgZm9jdXMgb24gdGhlIGNvcmUgb25lcyB0aGF0IGFyZSBpbnZvbHZlZCwgbGlrZSBgTkVUX1NDSF9SRURgIGFuZCBgTkVUX1NDSF9IVEJgLCBwbHVzIGVpdGhlciBgTkVUX0NMU19CUEZgIG9yIGBORVRfU0NIX0JQRmAgc2luY2UgdGhpcyBpcyByZWxhdGVkIHRvIEJQRiBmaWx0ZXJzLiBUaGUgc2VsZnRlc3QgYWxyZWFkeSBzZXRzIGBDT05GSUdfTkVUX1NDSF9SRUQ9eWAsIGBDT05GSUdfTkVUX1NDSF9CUEY9eWAsIGFuZCBgQ09ORklHX05FVF9TQ0hfSFRCPXlgLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3MgdG8gYmUgY29uc2lkZXJlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBwZWVrIGF0IGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGluIGBpbmNsdWRlL25ldC9wa3RfY2xzLmhgLiBJdCYjMzk7cyB1c2VkIGJ5IGBjYWtlX2NsYXNzaWZ5YCwgYGRycl9jbGFzc2lmeWAsIGBkdWFscGkyX3NrYl9jbGFzc2lmeWAsIGBldHNfY2xhc3NpZnlgLCBgZnFfY29kZWxfY2xhc3NpZnlgLCBgZnFfcGllX2NsYXNzaWZ5YCwgYGhmc2NfY2xhc3NpZnlgLCBgaHRiX2NsYXNzaWZ5YCwgYG11bHRpcV9jbGFzc2lmeWAsIGBwcmlvX2NsYXNzaWZ5YCwgYHFmcV9jbGFzc2lmeWAsIGBzZmJfY2xhc3NpZnlgLCBhbmQgYHNmcV9jbGFzc2lmeWAuCgpTbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAuIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBsaXN0aW5nIHNvbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIGlubGluZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBmb3IgZm9jdXMgbGlrZSBgaHRiX2NsYXNzaWZ5YCwgYGZxX2NvZGVsX2NsYXNzaWZ5YCwgYW5kIGBjYWtlX2NsYXNzaWZ5YC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgYnBmX3JlZGlyZWN0YCBpcyBhY3R1YWxseSBhIHN5bWJvbC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIHZpYSBgQlBGX0NBTExfMmAsIHdoaWNoIGRvZXMgaW5kZWVkIGNyZWF0ZSBib3RoIGBicGZfcmVkaXJlY3RgIGFuZCBgX19fX2JwZl9yZWRpcmVjdGAuIFRoYXQmIzM5O3MgZ29vZDsgaXQmIzM5O3MgYSB2YWxpZCBzeW1ib2wgdG8gY29uc2lkZXIuIEFsc28sIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgaXMgZXhwb3J0ZWQuCgpTbyBteSBmaW5hbCBjb25maWcgbGlzdCB3aWxsIGJlOiBgTkVUX1NDSF9SRURgLCBgTkVUX1NDSF9IVEJgLCBgTkVUX1NDSF9CUEZgLCBhbmQgYE5FVF9DTFNfQlBGYC4gSSYjMzk7bGwgYWxzbyBhZGQgYE5FVF9TQ0hfQ0FLRWAgYW5kIGBORVRfU0NIX0ZRX0NPREVMYCBhcyB0aGV5IGFyZSBtb3JlIGxpa2VseSB0byBiZSB1c2VkIGluIHJlYWwgd29ybGQgc2NlbmFyaW9zLgoKVWx0aW1hdGVseSwgdGhlIHJlYXNvbiBmb3IgdGhpcyBhbmFseXNpcyBpcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIGhhbmRsZSBgVENfQUNUX1JFRElSRUNUYCBpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjaGFuZ2luZyBpdCB0byBgVENfQUNUX1NIT1RgLiBBbHNvLCB0aGUgcGF0Y2ggdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycy4gVGhpcyBpbXBhY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHkgd2hpY2ggY291bGQgYmUgZXhwb3NlZC4KCkxldCYjMzk7cyByZWZpbmUgdGhvc2UgZm9jdXMgc3ltYm9sczogYHRjZl9xZXZlbnRfaGFuZGxlYCwgYGJwZl9yZWRpcmVjdGAsIGBicGZfcmVkaXJlY3RfcGVlcmAsIGBicGZfcmVkaXJlY3RfbmVpZ2hgLCBgaHRiX2NsYXNzaWZ5YCwgYW5kIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEFuZCBhZ2FpbiwgSSYjMzk7bGwgdmVyaWZ5IGBicGZfcmVkaXJlY3RgIGlzIGEgc3ltYm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmVkaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDkwNSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q9MzE9S2VybmVsIEJQRlxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzItLS0tLS0tLS0tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6MzM6YnBmX3JlZGlyZWN0X21hcCgpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0zNC1eXl5eXl5eXl5eXl5eXl5eXl5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0zNi1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjM3OiAgICAgbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXksIHU2NCBmbGFncylcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM4LVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0PTEwMj1UaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX0NQVU1BUGBgIGNhbGxlZFxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTE1Mi1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjE1MzogICAgICAgIHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNmNwdV9tYXAsIGNwdV9kZXN0LCAwKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTE1NC0gICAgfVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTU9QlBGX01BUF9UWVBFX0RFVk1BUCBhbmQgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTItYGBCUEZfTUFQX1RZUEVfREVWTUFQYGAgYW5kIGBgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIYGAgYXJlIEJQRiBtYXBzIHByaW1hcmlseVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTM6dXNlZCBhcyBiYWNrZW5kIG1hcHMgZm9yIHRoZSBYRFAgQlBGIGhlbHBlciBjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xNC1gYEJQRl9NQVBfVFlQRV9ERVZNQVBgYCBpcyBiYWNrZWQgYnkgYW4gYXJyYXkgdGhhdCB1c2VzIHRoZSBrZXkgYXNcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0zMD1LZXJuZWwgQlBGXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0zMS0tLS0tLS0tLS0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDozMjpicGZfcmVkaXJlY3RfbWFwKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTMzLV5eXl5eXl5eXl5eXl5eXl5eXlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTM1LVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MzY6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0zNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0xNzM9aW5ncmVzcyBgYGlmaW5kZXhgYCBhcyB0aGUgYGBrZXlgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xODEtXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDoxODI6ICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZmb3J3YXJkX21hcCwgaW5kZXgsIDApO1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTgzLSAgICB9XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q9MTg2PWFsbCB0aGUgaW50ZXJmYWNlcyBpbiB0aGUgYGB0eF9wb3J0YGAgZGV2bWFwLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5Mi0gICAge1xuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTkzOiAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2dHhfcG9ydCwgMCwgQlBGX0ZfQlJPQURDQVNUIHwgQlBGX0ZfRVhDTFVERV9JTkdSRVNTKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5NC0gICAgfVxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTExPVRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMjpjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsgYW5kICYjMzk7Y3B1bWFwJiMzOTsuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMy1UaGlzIG1hcCB0eXBlIHJlZGlyZWN0cyByYXcgWERQIGZyYW1lcyB0byBgQUZfWERQYF8gc29ja2V0cyAoWFNLcyksIGEgbmV3IHR5cGUgb2Zcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD01OT1LZXJuZWwgQlBGXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02MC0tLS0tLS0tLS0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2MTpicGZfcmVkaXJlY3RfbWFwKClcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYyLV5eXl5eXl5eXl5eXl5eXl5eXlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTY0LVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6NjU6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzg9VGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQgc2hvd3MgaG93IHRvIGRlY2xhcmUgYSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBjYWxsZWRcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNTYtXHRcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnhza3NfbWFwLCBcdTAwMjZpbmRleCkpXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNTc6XHRcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE1OC1cdFx0cmV0dXJuIFhEUF9QQVNTO1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTE4PXJlZGlyZWN0IGluZ3Jlc3MgZnJhbWVzIHRvIG90aGVyIFhEUCBlbmFibGVkIG5ldGRldnMsIHVzaW5nIHRoZVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MTk6YnBmX3JlZGlyZWN0X21hcCgpIGZ1bmN0aW9uLiBBRl9YRFAgc29ja2V0cyBlbmFibGUgdGhlIHBvc3NpYmlsaXR5IGZvclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjAtWERQIHByb2dyYW1zIHRvIHJlZGlyZWN0IGZyYW1lcyB0byBhIG1lbW9yeSBidWZmZXIgaW4gYSB1c2VyLXNwYWNlXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjIzPU9uIFhEUCBzaWRlIHRoZXJlIGlzIGEgQlBGIG1hcCB0eXBlIEJQRl9NQVBfVFlQRV9YU0tNQVAgKFhTS01BUCkgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjI0OmlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBicGZfcmVkaXJlY3RfbWFwKCkgdG8gcGFzcyB0aGUgaW5ncmVzc1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI1LWZyYW1lIHRvIGEgc29ja2V0LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTI4MD1yb3VuZC1yb2JpbiBleGFtcGxlIG9mIGRpc3RyaWJ1dGluZyBwYWNrZXRzIGlzIHNob3duIGJlbG93OlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTMwMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjMwMjogICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIHJyLCBYRFBfRFJPUCk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0zMDMtICAgfVxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTU2Mj1UaGUgWERQIGNvZGUgc2FtcGxlIGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNTcyLSAgICAgICBpZiAoYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ4c2tzX21hcCwgXHUwMDI2aW5kZXgpKVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6NTczOiAgICAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTU3NC1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdD05MT1jYW4gb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0YWRhdGEgdXNlZCBmb3IgYnVpbGRpbmcgYGBza2JzYGAuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Mi1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0OjkzOmJwZl9yZWRpcmVjdF9tYXBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk0LT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk1LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3Q6OTY6YGBicGZfcmVkaXJlY3RfbWFwYGAgY2FuIHJlZGlyZWN0IHRoZSBmcmFtZSB0byBhIGRpZmZlcmVudCBkZXZpY2UuXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Ny1Tb21lIGRldmljZXMgKGxpa2UgdmlydHVhbCBldGhlcm5ldCBsaW5rcykgc3VwcG9ydCBydW5uaW5nIGEgc2Vjb25kIFhEUFxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9NzgxPXN0cnVjdCBicGZfbmhfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc4OC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Nzg5Oi8qIGZsYWdzIGZvciBicGZfcmVkaXJlY3RfaW5mbyBrZXJuX2ZsYWdzICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5MC0jZGVmaW5lIEJQRl9SSV9GX1JGX05PX0RJUkVDVFx0QklUKDApXHQvKiBubyBuYXBpX2RpcmVjdCBvbiByZXR1cm5fZnJhbWUgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5NS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6Nzk2OnN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyB7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5Ny1cdHU2NCB0Z3RfaW5kZXg7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MDc9c3RydWN0IGJwZl9uZXRfY29udGV4dCB7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjgwODpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyByaTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODA5LVx0c3RydWN0IGxpc3RfaGVhZCBjcHVfbWFwX2ZsdXNoX2xpc3Q7XG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX25ldF9jb250ZXh0ICpicGZfbmV0X2N0eF9nZXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTgzNi1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6ODM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpicGZfbmV0X2N0eF9nZXRfcmkodm9pZClcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODM4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyMzY9c3RhdGljIGlubGluZSBib29sIHhkcF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMzcte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjM4Olx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjM5LVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNDQte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjQ1Olx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjQ2LVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX3JldHVybl9mcmFtZV9ub19kaXJlY3Qodm9pZClcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI1MS17XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyNTI6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNTMtXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xODA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4MTEte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxODEyOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xODEzLVx0Y29uc3QgdTY0IGFjdGlvbl9tYXNrID0gWERQX0FCT1JURUQgfCBYRFBfRFJPUCB8IFhEUF9QQVNTIHwgWERQX1RYO1xuLS1cbmluY2x1ZGUvbGludXgvaWZfYXJwLmg9NDQ9c3RhdGljIGlubGluZSBib29sIGRldl9pc19tYWNfaGVhZGVyX3htaXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oLTU2LVx0LyogUFBQIGFkZHMgaXRzIGwyIGhlYWRlciBhdXRvbWF0aWNhbGx5IGluIHBwcF9zdGFydF94bWl0KCkuXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oOjU3Olx0ICogVGhpcyBtYWtlcyBpdCBsb29rIGxpa2UgYW4gbDMgZGV2aWNlIHRvIF9fYnBmX3JlZGlyZWN0KCkgYW5kIHRjZl9taXJyZWRfaW5pdCgpLlxuaW5jbHVkZS9saW51eC9pZl9hcnAuaC01OC1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvc2ttc2cuaD02MTg9c3RhdGljIGlubGluZSB2b2lkIHNrYl9icGZfc2V0X3JlZGlyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpza19yZWRpcixcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI1LVxuaW5jbHVkZS9saW51eC9za21zZy5oOjYyNjpzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpza2JfYnBmX3JlZGlyZWN0X2ZldGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjMyLVxuaW5jbHVkZS9saW51eC9za21zZy5oOjYzMzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za21zZy5oLTYzNC17XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjIxLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyMjogKiBcdFx0SW4gY29tcGFyaXNvbiB3aXRoICoqYnBmX3JlZGlyZWN0KipcXCAoKSBoZWxwZXIsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjIyMy0gKiBcdFx0KipicGZfY2xvbmVfcmVkaXJlY3QqKlxcICgpIGhhcyB0aGUgYXNzb2NpYXRlZCBjb3N0IG9mXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjIyNC0gKiBcdFx0ZHVwbGljYXRpbmcgdGhlIHBhY2tldCBidWZmZXIsIGJ1dCB0aGlzIGNhbiBiZSBleGVjdXRlZCBvdXQgb2ZcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoyMjI1OiAqIFx0XHR0aGUgZUJQRiBwcm9ncmFtLiBDb252ZXJzZWx5LCAqKmJwZl9yZWRpcmVjdCoqXFwgKCkgaXMgbW9yZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjYtICogXHRcdGVmZmljaWVudCwgYnV0IGl0IGlzIGhhbmRsZWQgdGhyb3VnaCBhbiBhY3Rpb24gY29kZSB3aGVyZSB0aGVcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQzOS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NDA6ICogbG9uZyBicGZfcmVkaXJlY3QodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNDQxLSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1NC0gKiBcdFx0VGhlIHNhbWUgZWZmZWN0IGNhbiBhbHNvIGJlIGF0dGFpbmVkIHdpdGggdGhlIG1vcmUgZ2VuZXJpY1xuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NTU6ICogXHRcdCoqYnBmX3JlZGlyZWN0X21hcCoqXFwgKCksIHdoaWNoIHVzZXMgYSBCUEYgbWFwIHRvIHN0b3JlIHRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI0NTYtICogXHRcdHJlZGlyZWN0IHRhcmdldCBpbnN0ZWFkIG9mIHByb3ZpZGluZyBpdCBkaXJlY3RseSB0byB0aGUgaGVscGVyLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDUxLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA1MjogKiBsb25nIGJwZl9yZWRpcmVjdF9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGtleSwgdTY0IGZsYWdzKVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMwNTMtICogXHREZXNjcmlwdGlvblxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDcwLSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA3MTogKiBcdFx0U2VlIGFsc28gKipicGZfcmVkaXJlY3QqKlxcICgpLCB3aGljaCBvbmx5IHN1cHBvcnRzIHJlZGlyZWN0aW5nXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzA3Mi0gKiBcdFx0dG8gYW4gaWZpbmRleCwgYnV0IGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBtYXAgdG8gZG8gc28uXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM1MjMtICpcdFx0XHRhbmQgKnBhcmFtcyotXHUwMDNlc21hYyB3aWxsIG5vdCBiZSBzZXQgYXMgb3V0cHV0LiBBIGNvbW1vblxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjM1MjQ6ICpcdFx0XHR1c2UgY2FzZSBpcyB0byBjYWxsICoqYnBmX3JlZGlyZWN0X25laWdoKipcXCAoKSBhZnRlclxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTM1MjUtICpcdFx0XHRkb2luZyAqKmJwZl9maWJfbG9va3VwKipcXCAoKS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDQ4NC0gKlx0XHR3aWxsIGNhdXNlICpza2IqIHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgc3BlY2lmaWVkIHNvY2tldC5cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo0NDg1OiAqXHRcdFN1YnNlcXVlbnQgcmVkaXJlY3Rpb24gb2YgKnNrYiogdmlhICAqKmJwZl9yZWRpcmVjdCoqXFwgKCksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNDQ4Ni0gKlx0XHQqKmJwZl9jbG9uZV9yZWRpcmVjdCoqXFwgKCkgb3Igb3RoZXIgbWV0aG9kcyBvdXRzaWRlIG9mIEJQRiBtYXlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAyNy0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMjg6ICogbG9uZyBicGZfcmVkaXJlY3RfbmVpZ2godTMyIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKnBhcmFtcywgaW50IHBsZW4sIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDI5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMS0gKiBcdFx0YW5kIGZpbGwgaW4gTDIgYWRkcmVzc2VzIGZyb20gbmVpZ2hib3Jpbmcgc3Vic3lzdGVtLiBUaGlzIGhlbHBlclxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMzI6ICogXHRcdGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcICgpLCBleGNlcHQgdGhhdCBpdFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwMzMtICogXHRcdHBvcHVsYXRlcyBMMiBhZGRyZXNzZXMgYXMgd2VsbCwgbWVhbmluZywgaW50ZXJuYWxseSwgdGhlIGhlbHBlclxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc3LSAqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTA3ODogKiBsb25nIGJwZl9yZWRpcmVjdF9wZWVyKHUzMiBpZmluZGV4LCB1NjQgZmxhZ3MpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3OS0gKiBcdERlc2NyaXB0aW9uXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA4MC0gKiBcdFx0UmVkaXJlY3QgdGhlIHBhY2tldCB0byBhbm90aGVyIG5ldCBkZXZpY2Ugb2YgaW5kZXggKmlmaW5kZXgqLlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwODE6ICogXHRcdFRoaXMgaGVscGVyIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcICgpLCBleGNlcHRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDgyLSAqIFx0XHR0aGF0IHRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIHRvIHRoZSAqaWZpbmRleComIzM5OyBwZWVyIGRldmljZSBhbmRcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyNi0gKlx0XHRCUEZfU0tCX1RTVEFNUF9ERUxJVkVSWV9NT05PIGlzIHRoZSBvbmx5IHRzdGFtcCB0aGF0XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYyNzogKlx0XHR3aWxsIGJlIGtlcHQgZHVyaW5nIGJwZl9yZWRpcmVjdF8qKCkuICBBIG5vbiB6ZXJvXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyOC0gKlx0XHQqdHN0YW1wKiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgQlBGX1NLQl9UU1RBTVBfREVMSVZFUllfTU9OT1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01NjM3LSAqXHRcdG1vbm8gZGVsaXZlcnkgdGltZSB0byBfX3NrX2J1ZmYtXHUwMDNldHN0YW1wIGFuZCB0aGVuXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYzODogKlx0XHRicGZfcmVkaXJlY3RfKigpIHRvIHRoZSBlZ3Jlc3Mgb2YgYW4gaWZhY2UuICBGb3IgZXhhbXBsZSxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01NjM5LSAqXHRcdGNoYW5naW5nIHRoZSAocmN2KSB0aW1lc3RhbXAgaW4gX19za19idWZmLVx1MDAzZXRzdGFtcCBhdFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjU2NDA6ICpcdFx0aW5ncmVzcyB0byBhIG1vbm8gZGVsaXZlcnkgdGltZSBhbmQgdGhlbiBicGZfcmVkaXJlY3RfKigpXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTY0MS0gKlx0XHR0byBzY2hfZnFAcGh5LWRldi5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9NjMzMj1lbnVtIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2MzM2Oi8qIEZsYWdzIGZvciBicGZfcmVkaXJlY3QgYW5kIGJwZl9yZWRpcmVjdF9tYXAgaGVscGVycyAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTYzMzctZW51bSB7XG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy05LSAqIFRoZSAmIzM5O2NwdW1hcCYjMzk7IGlzIHByaW1hcmlseSB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwOiAqIGNhbGwgYnBmX3JlZGlyZWN0X21hcCgpIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsuXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTExLSAqXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy01LS8qIERldm1hcHMgcHJpbWFyeSB1c2UgaXMgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXIgY2FsbFxua2VybmVsL2JwZi9kZXZtYXAuYzo2OiAqIGJwZl9yZWRpcmVjdF9tYXAoKS4gQmVjYXVzZSBYRFAgaXMgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIHBlcmZvcm1hbmNlIHdlXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTctICogc3BlbnQgc29tZSBlZmZvcnQgdG8gZW5zdXJlIHRoZSBkYXRhcGF0aCB3aXRoIHJlZGlyZWN0IG1hcHMgZG9lcyBub3QgdXNlXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYz0xODY9c3RhdGljIHZvaWQgZGV2X21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4tLVxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDQtXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIwNTpcdC8qIGJwZl9yZWRpcmVjdF9pbmZvLVx1MDAzZW1hcCBpcyBhc3NpZ25lZCBpbiBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKClcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA2LVx0ICogZHVyaW5nIE5BUEkgY2FsbGJhY2sgYW5kIGNsZWFyZWQgYWZ0ZXIgdGhlIFhEUCByZWRpcmVjdC4gVGhlcmUgaXMgbm9cbmtlcm5lbC9icGYvZGV2bWFwLmM6MjA3Olx0ICogZXhwbGljaXQgUkNVIHJlYWQgc2VjdGlvbiB3aGljaCBwcm90ZWN0cyBicGZfcmVkaXJlY3RfaW5mby1cdTAwM2VtYXAgYnV0XG5rZXJuZWwvYnBmL2Rldm1hcC5jLTIwOC1cdCAqIGxvY2FsX2JoX2Rpc2FibGUoKSBhbHNvIG1hcmtzIHRoZSBiZWdpbm5pbmcgYW4gUkNVIHNlY3Rpb24uIFRoaXNcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA5LVx0ICogbWFrZXMgdGhlIGNvbXBsZXRlIHNvZnRpcnEgY2FsbGJhY2sgUkNVIHByb3RlY3RlZC4gVGh1cyBhZnRlclxua2VybmVsL2JwZi9kZXZtYXAuYzoyMTA6XHQgKiBmb2xsb3dpbmcgc3luY2hyb25pemVfcmN1KCkgdGhlcmUgbm8gYnBmX3JlZGlyZWN0X2luZm8tXHUwMDNlbWFwID09IG1hcFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMTEtXHQgKiBhc3NpZ25tZW50LlxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0yNzM9c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0yNzgtXHRzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzID0geGRwLVx1MDAzZWZyYW1lcztcbm5ldC9icGYvdGVzdF9ydW4uYzoyNzk6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTI4MC1cdHN0cnVjdCB4ZHBfcGFnZV9oZWFkICpoZWFkO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDE9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjE2MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIxNjI6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTIxNjMtXHRcdFx0XHQgdTMyIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIxODgtXG5uZXQvY29yZS9maWx0ZXIuYzoyMTg5OnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfY29tbW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMTkwLVx0XHRcdFx0IHUzMiBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjAyLVxubmV0L2NvcmUvZmlsdGVyLmM6MjIwMzpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMjA0LVx0XHRcdCAgdTMyIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIyMDYtXHRpZiAoZGV2X2lzX21hY19oZWFkZXJfeG1pdChkZXYpKVxubmV0L2NvcmUvZmlsdGVyLmM6MjIwNzpcdFx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0X2NvbW1vbihza2IsIGRldiwgZmxhZ3MpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjIwOC1cdGVsc2Vcbm5ldC9jb3JlL2ZpbHRlci5jOjIyMDk6XHRcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc2tiLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMTAtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIyMTM9c3RhdGljIGludCBicGZfb3V0X25laWdoX3Y2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY2LVxubmV0L2NvcmUvZmlsdGVyLmM6MjI2NzpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY4LVx0XHRcdFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzMDgtI2Vsc2Vcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMDk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjMxMC1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yMzE4PXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjM3NS1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzNzY6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjM3Ny1cdFx0XHRcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDE5LSNlbHNlXG5uZXQvY29yZS9maWx0ZXIuYzoyNDIwOnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjEtXHRcdFx0XHQgICBzdHJ1Y3QgYnBmX25oX3BhcmFtcyAqbmgpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjQyNy1cbm5ldC9jb3JlL2ZpbHRlci5jOjI0Mjg6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS1cdFx0XHRcdHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNDQzLVx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ0Olx0XHRyZXR1cm4gX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc2tiLCBkZXYsIG5oKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDUtXHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ2Olx0XHRyZXR1cm4gX19icGZfcmVkaXJlY3RfbmVpZ2hfdjYoc2tiLCBkZXYsIG5oKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDctb3V0OlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI0NjA9QlBGX0NBTExfMyhicGZfY2xvbmVfcmVkaXJlY3QsIHN0cnVjdCBza19idWZmICosIHNrYiwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI0OTYtXG5uZXQvY29yZS9maWx0ZXIuYzoyNDk3Olx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0KGNsb25lLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0OTgtfVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTI1MTk9aW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZmlsdGVyLmMtMjUyMC17XG5uZXQvY29yZS9maWx0ZXIuYzoyNTIxOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjUyMi1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU0NC1cdHJldHVybiBmbGFncyBcdTAwMjYgQlBGX0ZfTkVJR0ggP1xubmV0L2NvcmUvZmlsdGVyLmM6MjU0NTpcdCAgICAgICBfX2JwZl9yZWRpcmVjdF9uZWlnaChza2IsIGRldiwgZmxhZ3MgXHUwMDI2IEJQRl9GX05FWFRIT1AgP1xubmV0L2NvcmUvZmlsdGVyLmMtMjU0Ni1cdFx0XHRcdCAgICBcdTAwMjZyaS1cdTAwM2VuaCA6IE5VTEwpIDpcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NDc6XHQgICAgICAgX19icGZfcmVkaXJlY3Qoc2tiLCBkZXYsIGZsYWdzKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NDgtb3V0X2Ryb3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjU1Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTM6QlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xubmV0L2NvcmUvZmlsdGVyLmM6MjU1NTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG5uZXQvY29yZS9maWx0ZXIuYy0yNTU2LVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1NjctXG5uZXQvY29yZS9maWx0ZXIuYzoyNTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjU2OTpcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdCxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzAtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc1LVxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc3LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Nzg6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xubmV0L2NvcmUvZmlsdGVyLmMtMjU3OS1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0yNTg5LVxubmV0L2NvcmUvZmlsdGVyLmM6MjU5MDpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wZWVyX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjU5MTpcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdF9wZWVyLFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5Mi1cdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTctXG5uZXQvY29yZS9maWx0ZXIuYzoyNTk4OkJQRl9DQUxMXzQoYnBmX3JlZGlyZWN0X25laWdoLCB1MzIsIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKiwgcGFyYW1zLFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5OS1cdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI2MDAte1xubmV0L2NvcmUvZmlsdGVyLmM6MjYwMTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG5uZXQvY29yZS9maWx0ZXIuYy0yNjAyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI2MTctXG5uZXQvY29yZS9maWx0ZXIuYzoyNjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MjYxOTpcdC5mdW5jXHRcdD0gYnBmX3JlZGlyZWN0X25laWdoLFxubmV0L2NvcmUvZmlsdGVyLmMtMjYyMC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfbWV0YV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NDAxLSAqXG5uZXQvY29yZS9maWx0ZXIuYzo0NDAyOiAqIDEuIFRoZSBicGZfcmVkaXJlY3QoKSBhbmQgYnBmX3JlZGlyZWN0X21hcCgpIGhlbHBlcnMgd2lsbCBsb29rdXAgdGhlIHRhcmdldFxubmV0L2NvcmUvZmlsdGVyLmMtNDQwMy0gKiAgICBvZiB0aGUgcmVkaXJlY3QgYW5kIHN0b3JlIGl0IChhbG9uZyB3aXRoIHNvbWUgb3RoZXIgbWV0YWRhdGEpIGluIGEgcGVyLUNQVVxubmV0L2NvcmUvZmlsdGVyLmM6NDQwNDogKiAgICBzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8uXG5uZXQvY29yZS9maWx0ZXIuYy00NDA1LSAqXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDQwNy0gKiAgICBjYWxsIHhkcF9kb19yZWRpcmVjdCgpIHdoaWNoIHdpbGwgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiBzdHJ1Y3Rcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MDg6ICogICAgYnBmX3JlZGlyZWN0X2luZm8gdG8gYWN0dWFsbHkgZW5xdWV1ZSB0aGUgZnJhbWUgaW50byBhIG1hcCB0eXBlLXNwZWNpZmljXG5uZXQvY29yZS9maWx0ZXIuYy00NDA5LSAqICAgIGJ1bGsgcXVldWUgc3RydWN0dXJlLlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NzQ9dTMyIHhkcF9tYXN0ZXJfcmVkaXJlY3Qoc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQvY29yZS9maWx0ZXIuYy00NDc1LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0NzY6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NDc3LVx0c3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciwgKnNsYXZlO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ0OTY9RVhQT1JUX1NZTUJPTF9HUEwoeGRwX21hc3Rlcl9yZWRpcmVjdCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NDk3LVxubmV0L2NvcmUvZmlsdGVyLmM6NDQ5ODpzdGF0aWMgaW5saW5lIGludCBfX3hkcF9kb19yZWRpcmVjdF94c2soc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0OTktXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDUyMj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludFxubmV0L2NvcmUvZmlsdGVyLmM6NDUyMzpfX3hkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2NvcmUvZmlsdGVyLmMtNDUyNC1cdFx0XHRzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NTk1LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1OTY6XHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG5uZXQvY29yZS9maWx0ZXIuYy00NTk3LVx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cdTAwM2VtYXBfdHlwZTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDYxMC17XG5uZXQvY29yZS9maWx0ZXIuYzo0NjExOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDYxMi1cdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXHUwMDNlbWFwX3R5cGU7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ2Mjcte1xubmV0L2NvcmUvZmlsdGVyLmM6NDYyODpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2MjktXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ2Nzk9aW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY4Mi17XG5uZXQvY29yZS9maWx0ZXIuYzo0NjgzOlx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xubmV0L2NvcmUvZmlsdGVyLmMtNDY4NC1cdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXHUwMDNlbWFwX3R5cGU7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDcxNz1CUEZfQ0FMTF8yKGJwZl94ZHBfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MTgte1xubmV0L2NvcmUvZmlsdGVyLmM6NDcxOTpcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUxMC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3Q6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTExOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUxMi1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfbmVpZ2g6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTEzOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X25laWdoX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODUxNC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfcGVlcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XHRcdHJldHVybiBcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04ODQ3PWx3dF94bWl0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODg1OC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3Q6XG5uZXQvY29yZS9maWx0ZXIuYzo4ODU5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODg2MC1cdGNhc2UgQlBGX0ZVTkNfY2xvbmVfcmVkaXJlY3Q6XG4tLVxubmV0L2NvcmUvbHd0X2JwZi5jPTM5PXN0YXRpYyBpbnQgcnVuX2x3dF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9sd3RfcHJvZyAqbHd0LFxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy00NC1cbm5ldC9jb3JlL2x3dF9icGYuYzo0NTpcdC8qIERpc2FibGluZyBCSCBpcyBuZWVkZWQgdG8gcHJvdGVjdCBwZXItQ1BVIGJwZl9yZWRpcmVjdF9pbmZvIGJldHdlZW5cbm5ldC9jb3JlL2x3dF9icGYuYy00Ni1cdCAqIEJQRiBwcm9nIGFuZCBza2JfZG9fcmVkaXJlY3QoKS5cbi0tXG5uZXQvY29yZS9za21zZy5jPTY3MT1zdGF0aWMgdm9pZCBza19wc29ja19iYWNrbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvY29yZS9za21zZy5jLTcxMi1cdFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xubmV0L2NvcmUvc2ttc2cuYzo3MTM6XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtNzE0LVx0XHRkbyB7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz04MzM9c3RhdGljIHZvaWQgX19za19wc29ja196YXBfaW5ncmVzcyhzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtODM3LVx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwc29jay1cdTAwM2VpbmdyZXNzX3NrYikpICE9IE5VTEwpIHtcbm5ldC9jb3JlL3NrbXNnLmM6ODM4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTgzOS1cdFx0c29ja19kcm9wKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9OTU4PXN0YXRpYyBpbnQgc2tfcHNvY2tfc2tiX3JlZGlyZWN0KHN0cnVjdCBza19wc29jayAqZnJvbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTk2Mi1cbm5ldC9jb3JlL3NrbXNnLmM6OTYzOlx0c2tfb3RoZXIgPSBza2JfYnBmX3JlZGlyZWN0X2ZldGNoKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk2NC1cdC8qIFRoaXMgZXJyb3IgaXMgYSBidWdneSBCUEYgcHJvZ3JhbSwgaXQgcmV0dXJuZWQgYSByZWRpcmVjdFxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtOTY3LVx0aWYgKHVubGlrZWx5KCFza19vdGhlcikpIHtcbm5ldC9jb3JlL3NrbXNnLmM6OTY4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk2OS1cdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYy05NzctXHRpZiAoIXBzb2NrX290aGVyIHx8IHNvY2tfZmxhZyhza19vdGhlciwgU09DS19ERUFEKSkge1xubmV0L2NvcmUvc2ttc2cuYzo5Nzg6XHRcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrbXNnLmMtOTc5LVx0XHRzb2NrX2Ryb3AoZnJvbS1cdTAwM2Vzaywgc2tiKTtcbi0tXG5uZXQvY29yZS9za21zZy5jLTk4NC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHNvY2tfb3RoZXItXHUwMDNlaW5ncmVzc19sb2NrKTtcbm5ldC9jb3JlL3NrbXNnLmM6OTg1Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTk4Ni1cdFx0c29ja19kcm9wKGZyb20tXHUwMDNlc2ssIHNrYik7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2ttc2cuYy0xMDQ4LW91dF9mcmVlOlxubmV0L2NvcmUvc2ttc2cuYzoxMDQ5Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwNTAtXHRcdHRjcF9lYXRfc2tiKHBzb2NrLVx1MDAzZXNrLCBza2IpO1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9MTA3NT1zdGF0aWMgdm9pZCBza19wc29ja19zdHJwX3JlYWQoc3RydWN0IHN0cnBhcnNlciAqc3RycCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEwOTItXHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMDkzOlx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwOTQtXHRcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEwOTUtXHRcdHNrYl9icGZfc2V0X3N0cnBhcnNlcihza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMDk2Olx0XHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XG5uZXQvY29yZS9za21zZy5jLTEwOTctXHRcdHNrYi1cdTAwM2VzayA9IE5VTEw7XG4tLVxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9za21zZy5jLTEyMTctXHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L2NvcmUvc2ttc2cuYzoxMjE4Olx0XHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XG5uZXQvY29yZS9za21zZy5jLTEyMTktXHRcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XG5uZXQvY29yZS9za21zZy5jOjEyMjA6XHRcdHJldCA9IHNrX3Bzb2NrX21hcF92ZXJkKHJldCwgc2tiX2JwZl9yZWRpcmVjdF9mZXRjaChza2IpKTtcbm5ldC9jb3JlL3NrbXNnLmMtMTIyMS1cdH1cbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9NTk9aW50IF9sMl90b19pcHR1bl9pbmdyZXNzX2ZvcndhcmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy04NC1cdFx0XHRcdCBfaHRvbmwoaXBoLVx1MDAzZWRhZGRyKSk7XG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM6ODU6XHRcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTg2LVx0fSBlbHNlIGlmIChldGgtXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuLS1cbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy05OS1cdFx0XHRcdCBfaHRvbmwoaXA2aC1cdTAwM2VkYWRkci5zNl9hZGRyMzJbM10pKTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxMDA6XHRcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTEwMS1cdH1cbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9MTA3PWludCBfbDJfdG9faXB0dW5faW5ncmVzc19yZWRpcmVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXG4tLVxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0MS1cdGJwZl9za2Jfc2V0X3R1bm5lbF9rZXkoc2tiLCBcdTAwMjZ0a2V5LCBzaXplb2YodGtleSksIDApO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjE0MjpcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIDApO1xuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0My19XG4tLVxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jPTE0Nj1pbnQgX2wyX3RvX2lwNnR1bl9pbmdyZXNzX3JlZGlyZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtMTk2LVx0YnBmX3NrYl9zZXRfdHVubmVsX2tleShza2IsIFx1MDAyNnRrZXksIHNpemVvZih0a2V5KSwgQlBGX0ZfVFVOSU5GT19JUFY2KTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxOTc6XHRyZXR1cm4gYnBmX3JlZGlyZWN0KCppZmluZGV4LCAwKTtcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xOTgtfVxuLS1cbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM9NzA9aW50IF9yZWRpcmVjdF94bWl0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmMtNzEte1xuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYzo3MjpcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVx1MDAzZWlmaW5kZXggJiM0MzsgMSwgMCk7XG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTczLX1cbi0tXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jPTc1PWludCBfcmVkaXJlY3RfcmVjdihzdHJ1Y3QgX19za19idWZmICpza2IpXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTc2LXtcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM6Nzc6XHRyZXR1cm4gYnBmX3JlZGlyZWN0KHNrYi1cdTAwM2VpZmluZGV4ICYjNDM7IDEsIDEpO1xuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYy03OC19XG4tLVxuc2FtcGxlcy9icGYvdGVzdF9sd3RfYnBmLmM9MTYwPXN0YXRpYyBpbmxpbmUgaW50IF9fZG9fcHVzaF9sbF9hbmRfcmVkaXJlY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU3ltYm9sIFZlcmlmaWNhdGlvbiBhbmQgUG90ZW50aWFsIFJlZGlyZWN0IEZ1bmN0aW9ucyoqCgpSaWdodCwgYGJwZl9yZWRpcmVjdGAgc2VlbXMgdG8gYmUgYSBsZWdpdCBzeW1ib2wg4oCTIGdvb2Qgc3RhcnQuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYGJwZl9yZWRpcmVjdF9wZWVyYCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgYXJlIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8gYGJwZl9yZWRpcmVjdGAgaXMgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgcmVkaXJlY3QgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgdGhleSYjMzk7cmUgbGlrZWx5IHRvIHByb3ZpZGUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbGl0eSBpZiB0aGUgYmFzZSBzeW1ib2wgY2hlY2tzIG91dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIG9uZSBvciB0aGUgb3RoZXIgYmFzZWQgb24gdGhlIGludGVuZGVkIHJlZGlyZWN0IGRlc3RpbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmVkaXJlY3RfcGVlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0yNTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXG5uZXQvY29yZS9maWx0ZXIuYzoyNTc2OkJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0X3BlZXIsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTI1Nzcte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTI1ODktXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoyNTkxOlx0LmZ1bmMgICAgICAgICAgID0gYnBmX3JlZGlyZWN0X3BlZXIsXG5uZXQvY29yZS9maWx0ZXIuYy0yNTkyLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mz10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODUxNC1cdGNhc2UgQlBGX0ZVTkNfcmVkaXJlY3RfcGVlcjpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XHRcdHJldHVybiBcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTYtXHRjYXNlIEJQRl9GVU5DX2dldF9yb3V0ZV9yZWFsbTpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFx0RGVzY3JpcHRpb25cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19yZWRpcmVjdC5jLTctICogaG9zdCBmYWNpbmcgdmV0aCBpbiBmd2Qgd2hpY2ggY2FsbHMgaW50byBpKSBicGZfcmVkaXJlY3RfbmVpZ2goKSB0byBwZXJmb3JtIHRoZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYzo4OiAqIG5laWdoIGFkZHIgcG9wdWxhdGlvbiBhbmQgcmVkaXJlY3Qgb3IgaWkpIGJwZl9yZWRpcmVjdF9wZWVyKCkgZm9yIG5hbWVzcGFjZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYy05LSAqIHN3aXRjaCBmcm9tIGluZ3Jlc3Mgc2lkZTsgaXQgYWxzbyBpbnN0YWxscyBhIGNoZWNrZXIgcHJvZyBvbiB0aGUgZWdyZXNzIHNpZGVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM9MjY9aW50IHRjX2RzdChzdHJ1Y3QgX19za19idWZmICpza2IpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMjcte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jOjI4Olx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfU1JDLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy0yOS19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jPTMyPWludCB0Y19zcmMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTMzLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYzozNDpcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihJRklOREVYX0RTVCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMzUtfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYz00ND1pbnQgdGNfc3JjX2wzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtNTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6NjA6XHRyZXR1cm4gYnBmX3JlZGlyZWN0X3BlZXIoSUZJTkRFWF9EU1QsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTYxLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jPTIyPWludCB0Y19yZWRpcmVjdF9wZWVyKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZm9yd2FyZC5icGYuYzo0NjpcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihuZXRraXRfaWZpbmRleCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNzIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFN5bWJvbCBWYWxpZGl0eSBmb3IgQ2xhc3NpZmljYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLi4uYW5kIHllcywgdGhlc2UgYXJlICphYnNvbHV0ZWx5KiB2YWxpZCBzeW1ib2xzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5vIGFtYmlndWl0eSB0aGVyZS4gTm93LCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuIExldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgYGh0Yl9jbGFzc2lmeWAgYW5kIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVpciBvcGVyYXRpb24gaXMgYXMgZXhwZWN0ZWQgaW4gcmVsYXRpb24gdG8gdGhlc2Ugc3ltYm9sczsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIGJlaW5nIGludGVycHJldGVkIGNvcnJlY3RseSBhbmQgYXJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW1zLiBUaW1lIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodGJfY2xhc3NpZnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9odGIuYz0xOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgaHRiX3NlYXJjaChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGhhbmRsZSlcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTIwNS0vKipcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjA2OiAqIGh0Yl9jbGFzc2lmeSAtIGNsYXNzaWZ5IGEgcGFja2V0IGludG8gY2xhc3Ncbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjA3LSAqIEBza2I6IHRoZSBzb2NrZXQgYnVmZmVyXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYy0yMTktICovXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjIyMDpzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMjEtXHRcdFx0XHQgICAgICBpbnQgKnFlcnIpXG4tLVxubmV0L3NjaGVkL3NjaF9odGIuYz02MjA9c3RhdGljIGludCBodGJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTYyNS1cdHN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjYyNjpcdHN0cnVjdCBodGJfY2xhc3MgKmNsID0gaHRiX2NsYXNzaWZ5KHNrYiwgc2NoLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9odGIuYy02MjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODc4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maXJtYXRpb24gYW5kIFZhbGlkYXRpb24qKgoKQWgsIGdvb2QuIEkgc2VlIHRoZSBzeW1ib2wgYGh0Yl9jbGFzc2lmeWAgcmVmZXJlbmNlZCwgYW5kIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGl0LiBZZXMsIHRoYXQgc3ltYm9sIGlzIGluZGVlZCB2YWxpZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIGNhbiBjb25maXJtIGl0cyBsZWdpdGltYWN5IHdpdGhvdXQgYW55IGZ1cnRoZXIgbmVlZCB0byBkZWx2ZSBpbnRvIGl0cyBkZWZpbml0aW9uIG9yIHNvdXJjZS4gSXQmIzM5O3MgYSBrbm93biBxdWFudGl0eSwgYSByZWNvZ25pemFibGUgZWxlbWVudCBpbiB0aGUgbGFuZHNjYXBlIG9mIHRoaXMgc3BlY2lmaWMgZG9tYWluLiBObyBhbWJpZ3VpdHkgdGhlcmUuIFRoaXMgc3RyZWFtbGluZXMgdGhlIGFuYWx5c2lzIGFuZCBtb3ZlcyBtZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmcV9jb2RlbF9jbGFzc2lmeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM9NzA9c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9oYXNoKGNvbnN0IHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhICpxLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzo3NjpzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jLTc3LVx0XHRcdFx0ICAgICAgaW50ICpxZXJyKVxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYz0xODU9c3RhdGljIGludCBmcV9jb2RlbF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xOTQtXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6MTk1Olx0aWR4ID0gZnFfY29kZWxfY2xhc3NpZnkoc2tiLCBzY2gsIFx1MDAyNnJldCk7XG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTk2LVx0aWYgKGlkeCA9PSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4Mjk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFN5bWJvbCBWYWxpZGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gcmVjb2duaXplcyBgZnFfY29kZWxfY2xhc3NpZnlgLiBHb29kLiBUaGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZDsgaXQmIzM5O3MgYSBrbm93biBzeW1ib2wgd2l0aGluIHRoaXMgY29udGV4dCwgcGFydCBvZiB0aGUgc3RhbmRhcmQgdG9vbGtpdC4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBlbGVtZW50OiBgY2FrZV9jbGFzc2lmeWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCYjMzk7cyBhbHNvIGEgZGVmaW5lZCBmdW5jdGlvbiBvciBtYWNybyB3aXRoaW4gdGhpcyBzZXR1cC4gVGltZSB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSBhbmQgZGVmaW5pdGlvbi4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nha2VfY2xhc3NpZnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9jYWtlLmM9MTY3OD1zdGF0aWMgc3RydWN0IGNha2VfdGluX2RhdGEgKmNha2Vfc2VsZWN0X3RpbihzdHJ1Y3QgUWRpc2MgKnNjaCxcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzE4LVxubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTcxOTpzdGF0aWMgdTMyIGNha2VfY2xhc3NpZnkoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBjYWtlX3Rpbl9kYXRhICoqdCxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3MjAtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbG93X21vZGUsIGludCAqcWVycilcbi0tXG5uZXQvc2NoZWQvc2NoX2Nha2UuYz0xNzU5PXN0YXRpYyBzMzIgY2FrZV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuLS1cbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzEtXHQvKiBjaG9vc2UgZmxvdyB0byBpbnNlcnQgaW50byAqL1xubmV0L3NjaGVkL3NjaF9jYWtlLmM6MTc3MjpcdGlkeCA9IGNha2VfY2xhc3NpZnkoc2NoLCBcdTAwMjZiLCBza2IsIHEtXHUwMDNlY29uZmlnLVx1MDAzZWZsb3dfbW9kZSwgXHUwMDI2cmV0KTtcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzMtXHRpZiAoaWR4ID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIFN5bWJvbCBWYWxpZGl0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBZZXMsICYjMzQ7Y2FrZVxfY2xhc3NpZnkmIzM0OyBkb2VzIGluZGVlZCBsb29rIGxpa2UgYSB2YWxpZCBzeW1ib2wuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBleGFtaW5lICYjMzQ7dGNmXF9xZXZlbnRcX2hhbmRsZS4mIzM0OyBHb3R0YSBtYWtlIHN1cmUgdGhhdCBvbmUgY2hlY2tzIG91dCBhcyB3ZWxsLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgbWV0aG9kaWNhbCBhYm91dCB0aGVzZSBjaGVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9xZXZlbnRfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BrdF9jbHMuaD02MzI9aW50IHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IG5sYXR0ciAqYmxvY2tfaW5kZXhfYXR0cixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9wa3RfY2xzLmg6NjM0OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTYzNS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTY1Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02NTgtXHRcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQwMzU9RVhQT1JUX1NZTUJPTCh0Y2ZfcWV2ZW50X3ZhbGlkYXRlX2NoYW5nZSk7XG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjQwMzc6c3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzgtXHRcdFx0XHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYy00MDY2LX1cbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDA2OC1cbi0tXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMDAtXHRcdFx0XHQgICBxLVx1MDAzZXN0YXRzLnByb2JfbWFyayAmIzQzOyAxKTtcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTAxOlx0XHRcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFx1MDAyNnEtXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFx1MDAyNnJldCk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMi1cdFx0XHRpZiAoIXNrYilcbi0tXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEyNC1cdFx0XHRcdCAgIHEtXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgJiM0MzsgMSk7XG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcdFx0XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX21hcmssIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjYtXHRcdFx0aWYgKCFza2IpXG4tLVxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxubmV0L3NjaGVkL3NjaF9yZWQuYzoxNTE6XHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcdTAwMjZxLVx1MDAzZXFlX2Vhcmx5X2Ryb3AsIHNjaCwgc2tiLCB0b19mcmVlLCBcdTAwMjZyZXQpO1xubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXHRpZiAoIXNrYilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NDUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0d29yayBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpcyBpbmRlZWQgYSByZWNvZ25pemVkIHN5bWJvbCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGBmcV9jb2RlbF9jbGFzc2lmeWAsIGFuZCBgY2FrZV9jbGFzc2lmeWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZCBjb21wb25lbnRzIGRpcmVjdGx5IGltcGFjdGVkLgoKTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMgYWZmZWN0ZWQsIEkgc2VlIGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBgTkVUX1NDSF9GUV9DT0RFTGAsIGBORVRfU0NIX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBUaGlzIHN1Z2dlc3RzIGEgd2lkZXNwcmVhZCBpbXBhY3QgYWNyb3NzIHZhcmlvdXMgcWRpc2NzIGFuZCBCUEYgaW50ZWdyYXRpb24uCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBtb2RpZmljYXRpb24gb2YgdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBgVENfQUNUX1JFRElSRUNUYCB3aXRoaW4gcWRpc2MgZmlsdGVyIGNoYWlucywgcmVwbGFjaW5nIGl0IHdpdGggYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgdHJhZmZpYyBpcyBoYW5kbGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBBZGRpdGlvbmFsbHksIGl0IHVwZGF0ZXMgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGVuc3VyZSB0aGUgQlBGIG5ldCBjb250ZXh0IGlzIHZhbGlkLiBTaW5jZSB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGhhbmRsaW5nIG9mIEJQRiBhbmQgdmFyaW91cyBxZGlzY3MsIGFuZCBhcHBlYXIgdG8gcmVwcmVzZW50IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoYXQgc2VlbXMgcmlnaHQuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXMsIGBORVRfU0NIX0JQRmAgYW5kIGBORVRfQ0xTX0JQRmAsIHRvIGVuc3VyZSB0aGV5IGFyZSB0aGUgcHJvcGVyIG5hbWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9Mzg5PWNvbmZpZyBORVRfU0NIX0VUU1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTQwNS1cbm5ldC9zY2hlZC9LY29uZmlnOjQwNjpjb25maWcgTkVUX1NDSF9CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTQwNy1cdGJvb2wgXCYjMzQ7QlBGLWJhc2VkIFFkaXNjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMzQ4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipBZmZpcm1hdGl2ZSBDb25maXJtYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgYmVhdC4gWWVzLiBUaGF0JiMzOTtzIGl0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlLCBvdmVyLWFuYWx5emUuIFRoZSBlc3NlbnRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb3VuZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBhbGlnbnMuIENvbmZpcm1hdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaGFzIGJlZW4gYWZmaXJtZWQuIFByb2NlZWRpbmcgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQgYW5kIGFjY3VyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19CUEYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTU2MS1cbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcbm5ldC9zY2hlZC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O0JQRi1iYXNlZCBjbGFzc2lmaWVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA0OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlF1aWNrIE5ldHdvcmsgU2NoZWR1bGVyIFJlZnJlc2hlcioqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHNjaGVkdWxlcnMuIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0NBS0VgLCBhbmQgYE5FVF9TQ0hfRlFfQ09ERUxgLiBMZXQmIzM5O3MganVzdCBydW4gdGhyb3VnaCB0aG9zZSBpbiBteSBoZWFkIGFnYWluIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlaXIgYWxnb3JpdGhtcyBhbmQgd2hlbiBJJiMzOTtkIGNob29zZSBvbmUgb3ZlciBhbm90aGVyIGluIGEgc3BlY2lmaWMgbmV0d29yayB0b3BvbG9neS4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiB0aGF0IEkmIzM5O20gY29tcGxldGVseSBjbGVhciBvbiB0aGUgbnVhbmNlcyBvZiBlYWNoIHRvIGZvcm11bGF0ZSB0aGUgbmV4dCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1NDSF9SRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9ODA9Y29uZmlnIE5FVF9TQ0hfTVVMVElRXG4tLVxubmV0L3NjaGVkL0tjb25maWctODgtXG5uZXQvc2NoZWQvS2NvbmZpZzo4OTpjb25maWcgTkVUX1NDSF9SRURcbm5ldC9zY2hlZC9LY29uZmlnLTkwLVx0dHJpc3RhdGUgXCYjMzQ7UmFuZG9tIEVhcmx5IERldGVjdGlvbiAoUkVEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDg1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfSFRCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTQ2PWNvbW1lbnQgXCYjMzQ7UXVldWVpbmcvU2NoZWR1bGluZ1wmIzM0O1xubmV0L3NjaGVkL0tjb25maWctNDctXG5uZXQvc2NoZWQvS2NvbmZpZzo0ODpjb25maWcgTkVUX1NDSF9IVEJcbm5ldC9zY2hlZC9LY29uZmlnLTQ5LVx0dHJpc3RhdGUgXCYjMzQ7SGllcmFyY2hpY2FsIFRva2VuIEJ1Y2tldCAoSFRCKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfQ0FLRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0yNzc9Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0yODctXG5uZXQvc2NoZWQvS2NvbmZpZzoyODg6Y29uZmlnIE5FVF9TQ0hfQ0FLRVxubmV0L3NjaGVkL0tjb25maWctMjg5LVx0dHJpc3RhdGUgXCYjMzQ7Q29tbW9uIEFwcGxpY2F0aW9ucyBLZXB0IEVuaGFuY2VkIChDQUtFKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI2MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfRlFfQ09ERUwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXG4tLVxubmV0L3NjaGVkL0tjb25maWctMjc2LVxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NzYKCQkJCQkJCW91dHB1dDogMjA2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6CgoqKlJlYWR5IHRvIEZpbmFsaXplKioKClllcy4gKkZpbmFsbHkqLiBBZnRlciBhbGwgdGhlIHdvcmssIHRoZSBhbmFseXNpcywgdGhlIGl0ZXJhdGlvbnMuLi4gWWVzLCBJJiMzOTttIHJlYWR5IHRvIGNvbW1pdCB0byBhIGNvbmNsdXNpb24uIEkmIzM5O20gc2F0aXNmaWVkIHRoYXQgSSYjMzk7dmUgZXhwbG9yZWQgdGhlIG51YW5jZXMgYW5kIGFkZHJlc3NlZCB0aGUga2V5IGNvbnNpZGVyYXRpb25zLiBUaGUgZXZpZGVuY2UsIGFzIEkmIzM5O3ZlIGludGVycHJldGVkIGl0LCBwb2ludHMgaW4gYSBjbGVhciBkaXJlY3Rpb24uIE5vdyBpcyB0aGUgdGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLiBObyBtb3JlIHJlZmluZW1lbnRzIGFyZSBuZWVkZWQgYXQgdGhpcyBzdGFnZTsgSSYjMzk7bSBwcmVwYXJlZCB0byBmaW5hbGl6ZSB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9SRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9IVEImIzM0OywKICAgICYjMzQ7TkVUX1NDSF9DQUtFJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfRlFfQ09ERUwmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9CUEYmIzM0OywKICAgICYjMzQ7TkVUX0NMU19CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y2ZfcWV2ZW50X2hhbmRsZSYjMzQ7LAogICAgJiMzNDticGZfcmVkaXJlY3QmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0X3BlZXImIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0X25laWdoJiMzNDssCiAgICAmIzM0O2h0Yl9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtmcV9jb2RlbF9jbGFzc2lmeSYjMzQ7LAogICAgJiMzNDtjYWtlX2NsYXNzaWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfUkVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfSFRCJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQ0FLRSYjMzQ7LAogICAgJiMzNDtORVRfU0NIX0ZRX0NPREVMJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfQlBGJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX3FldmVudF9oYW5kbGUmIzM0OywKICAgICYjMzQ7YnBmX3JlZGlyZWN0JiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9wZWVyJiMzNDssCiAgICAmIzM0O2JwZl9yZWRpcmVjdF9uZWlnaCYjMzQ7LAogICAgJiMzNDtodGJfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7ZnFfY29kZWxfY2xhc3NpZnkmIzM0OywKICAgICYjMzQ7Y2FrZV9jbGFzc2lmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTM6NTEuOTE0OTAxNzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwOTIyNDY1ODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfUkVEXCIsXG4gICAgXCJORVRfU0NIX0hUQlwiLFxuICAgIFwiTkVUX1NDSF9DQUtFXCIsXG4gICAgXCJORVRfU0NIX0ZRX0NPREVMXCIsXG4gICAgXCJORVRfU0NIX0JQRlwiLFxuICAgIFwiTkVUX0NMU19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y2ZfcWV2ZW50X2hhbmRsZVwiLFxuICAgIFwiYnBmX3JlZGlyZWN0XCIsXG4gICAgXCJicGZfcmVkaXJlY3RfcGVlclwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X25laWdoXCIsXG4gICAgXCJodGJfY2xhc3NpZnlcIixcbiAgICBcImZxX2NvZGVsX2NsYXNzaWZ5XCIsXG4gICAgXCJjYWtlX2NsYXNzaWZ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldHdvcmsgc2NoZWR1bGVyIGNsYXNzaWZpY2F0aW9uIGxvZ2ljIHRvIHByZXZlbnQgVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucywgY29udmVydGluZyBpdCB0byBUQ19BQ1RfU0hPVC4gSXQgYWxzbyB1cGRhdGVzIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGNoZWNrIGZvciBhIHZhbGlkIEJQRiBuZXQgY29udGV4dC4gVGhpcyBhZmZlY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHksIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTM6NTEuOTE0OTA2ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU4NjYzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZGY2NGVkYWRkYTJjMDU1MmE5ZjFlMzhmNjk1OWMwYWE5NWNiODBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X2Nscy5oIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXFxuaW5kZXggM2JkMDhkN2YzOWMxOGMuLjVmNWNiMzY0MzlmZTI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxcbkBAIC0xNTYsOCArMTU2LDIwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHRjZl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB7XFxuIFxcdHJldHVybiBUQ19BQ1RfVU5TUEVDO1xcbiB9XFxuLVxcbiAjZW5kaWZcXG4rc3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcywgYm9vbCBjb21wYXRfbW9kZSlcXG4re1xcbitcXHRpbnQgcmV0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdHAsIHJlcywgY29tcGF0X21vZGUpO1xcbitcXG4rXFx0LyogVENfQUNUX1JFRElSRUNUIGZyb20gcWRpc2MgZmlsdGVyIGNoYWlucyBpcyBub3Qgc3VwcG9ydGVkLlxcbitcXHQgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkocmV0ID09IFRDX0FDVF9SRURJUkVDVCkpXFxuK1xcdFxcdHJldCA9IFRDX0FDVF9TSE9UO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcXG4gX19jbHNfc2V0X2NsYXNzKHVuc2lnbmVkIGxvbmcgKmNscCwgdW5zaWduZWQgbG9uZyBjbClcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTI1NTIsMTEgKzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3QsIHUzMiwgaWZpbmRleCwgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuK1xcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpXFxuK1xcdGlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHxcXG4rXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiAofihCUEZfRl9JTkdSRVNTKSB8IEJQRl9GX1JFRElSRUNUX0lOVEVSTkFMKSkpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG4gXFx0cmktXFx1MDAzZXRndF9pbmRleCA9IGlmaW5kZXg7XFxuIFxcbkBAIC0yNTczLDExICsyNTc1LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xcbiBcXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG4rXFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShmbGFncykpXFxuK1xcdGlmICh1bmxpa2VseSghYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBCUEZfRl9QRUVSO1xcbiBcXHRyaS1cXHUwMDNldGd0X2luZGV4ID0gaWZpbmRleDtcXG4gXFxuQEAgLTI1OTUsMTEgKzI1OTgsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcXG4gQlBGX0NBTExfNChicGZfcmVkaXJlY3RfbmVpZ2gsIHUzMiwgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqLCBwYXJhbXMsXFxuIFxcdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuK1xcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoKHBsZW4gXFx1MDAyNlxcdTAwMjYgcGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHwgZmxhZ3MpKVxcbitcXHRpZiAodW5saWtlbHkoKHBsZW4gXFx1MDAyNlxcdTAwMjYgcGxlbiBcXHUwMDNjIHNpemVvZigqcGFyYW1zKSkgfHxcXG4rXFx0XFx0ICAgICAhYnBmX25ldF9jdHhfZ2V0KCkgfHwgZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gVENfQUNUX1NIT1Q7XFxuIFxcbitcXHRyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbiBcXHRyaS1cXHUwMDNlZmxhZ3MgPSBCUEZfRl9ORUlHSCB8IChwbGVuID8gQlBGX0ZfTkVYVEhPUCA6IDApO1xcbiBcXHRyaS1cXHUwMDNldGd0X2luZGV4ID0gaWZpbmRleDtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuaW5kZXggZmZlZWE2ZGI4MzM3NDcuLmZlZTQ1MjRhZGM5OGVmIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXFxuQEAgLTQwNDUsNyArNDA0NSw3IEBAIHN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1XFxuIFxcbiBcXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxZS1cXHUwMDNlZmlsdGVyX2NoYWluKTtcXG4gXFxuLVxcdHN3aXRjaCAodGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFxcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xcbitcXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2Y2xfcmVzLCBmYWxzZSkpIHtcXG4gXFx0Y2FzZSBUQ19BQ1RfU0hPVDpcXG4gXFx0XFx0cWRpc2NfcXN0YXRzX2Ryb3Aoc2NoKTtcXG4gXFx0XFx0X19xZGlzY19kcm9wKHNrYiwgdG9fZnJlZSk7XFxuQEAgLTQwNTcsMTAgKzQwNTcsNiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydVxcbiBcXHRcXHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcXG4gXFx0XFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0Y2FzZSBUQ19BQ1RfUkVESVJFQ1Q6XFxuLVxcdFxcdHNrYl9kb19yZWRpcmVjdChza2IpO1xcbi1cXHRcXHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRjYXNlIFRDX0FDVF9DT05TVU1FRDpcXG4gXFx0XFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYWtlLmMgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbmluZGV4IGEzYzE4NTUwNWFmY2U0Li45NGViNDdhYzU0ZWU2NCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfY2FrZS5jXFxuQEAgLTE3MzAsNyArMTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxcbiBcXHRcXHRnb3RvIGhhc2g7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXG4gXFx0aWYgKHJlc3VsdCBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5pbmRleCAwMjA2NTdmOTU5YjU3NS4uOTFiMWVmODI0YWZhZjIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcXG5AQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJyX2NsYXNzICpkcnJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXFxuaW5kZXggMjcwODg3NjBlZmY0NDMuLjRmNjc4ZDRmZjEwZWM3IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcXG5AQCAtMzY0LDcgKzM2NCw3IEBAIHN0YXRpYyBpbnQgZHVhbHBpMl9za2JfY2xhc3NpZnkoc3RydWN0IGR1YWxwaTJfc2NoZWRfZGF0YSAqcSxcXG4gXFx0aWYgKCFmbClcXG4gXFx0XFx0cmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7XFxuIFxcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbmluZGV4IGNiOGNmNDM3Y2U4NzA4Li4yNWZjZjQwNzlmZWNlMSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2V0cy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xcbkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIHN0cnVjdCBldHNfY2xhc3MgKmV0c19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuIFxcdGlmIChUQ19IX01BSihza2ItXFx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXFx1MDAzZWhhbmRsZSkge1xcbiBcXHRcXHRmbCA9IHJjdV9kZXJlZmVyZW5jZV9iaChxLVxcdTAwM2VmaWx0ZXJfbGlzdCk7XFxuLVxcdFxcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdFxcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcXG5pbmRleCBjYWZkMWY5NDNkOTljZC4uNmNjZTg2YmEzODNjZjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXFxuQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0XFx0cmV0dXJuIGZxX2NvZGVsX2hhc2gocSwgc2tiKSArIDE7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbmluZGV4IDcyZjQ4ZmE0MDEwYmViLi4wNjllMWZhY2Q0MTMwZCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xcbkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfcGllX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxcbiBcXHRcXHRyZXR1cm4gZnFfcGllX2hhc2gocSwgc2tiKSArIDE7XFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4tXFx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuaW5kZXggN2U1MzcyOTViOGI2NzguLmU4N2Y1MDIxYTE5OTU4IDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcXG5AQCAtMTE0Myw3ICsxMTQzLDcgQEAgaGZzY19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0aGVhZCA9IFxcdTAwMjZxLVxcdTAwM2Vyb290O1xcbiBcXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlcm9vdC5maWx0ZXJfbGlzdCk7XFxuLVxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xcbmluZGV4IDkwOGI5YmE5YmEyZWZhLi5mZGFjMGRjOGYzNWEzNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHN0cnVjdCBodGJfY2xhc3MgKmh0Yl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4gXFx0fVxcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuLVxcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuK1xcdHdoaWxlICh0Y2YgXFx1MDAyNlxcdTAwMjYgKHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIHRjZiwgXFx1MDAyNnJlcywgZmFsc2UpKSBcXHUwMDNlPSAwKSB7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0XFx0c3dpdGNoIChyZXN1bHQpIHtcXG4gXFx0XFx0Y2FzZSBUQ19BQ1RfUVVFVUVEOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xcbmluZGV4IGE0NjdkZDEyMjM2OTcwLi42NmRmMzA5MzlhYTVjMSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX211bHRpcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuY1xcbkBAIC0zNiw3ICszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XFxuLVxcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuK1xcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcXHUwMDI2cmVzLCBmYWxzZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG4gXFx0c3dpdGNoIChlcnIpIHtcXG4gXFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jXFxuaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NFxcbi0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmNcXG5AQCAtMzksNyArMzksNyBAQCBwcmlvX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXFxuIFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbiBcXHRpZiAoVENfSF9NQUooc2tiLVxcdTAwM2Vwcmlvcml0eSkgIT0gc2NoLVxcdTAwM2VoYW5kbGUpIHtcXG4gXFx0XFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRcXHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRcXHRlcnIgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuIFxcdFxcdHN3aXRjaCAoZXJyKSB7XFxuIFxcdFxcdGNhc2UgVENfQUNUX1NUT0xFTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9xZnEuYyBiL25ldC9zY2hlZC9zY2hfcWZxLmNcXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9xZnEuY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfcWZxLmNcXG5AQCAtNzA5LDcgKzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcbiBcXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcXG4gXFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cXHUwMDNlZmlsdGVyX2xpc3QpO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmYi5jIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xcbmluZGV4IGIxZDQ2NTA5NDI3NjkyLi5lZDM5ODY5MTk5YzA4NCAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmYi5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9zZmIuY1xcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxcbiBcXHRzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xcbmluZGV4IDc1OGI4OGYyMTg2NTI3Li43NzY3NWY5YTRjNDZlNyAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jXFxuKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuY1xcbkBAIC0xNzEsNyArMTcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuIFxcdFxcdHJldHVybiBzZnFfaGFzaChxLCBza2IpICsgMTtcXG4gXFxuIFxcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xcbi1cXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbitcXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXFx1MDAyNnJlcywgZmFsc2UpO1xcbiBcXHRpZiAocmVzdWx0IFxcdTAwM2U9IDApIHtcXG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbiBcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbmluZGV4IGFkYjI1MTQ2ZTg4Y2NmLi5lYTcwNDRmMzBhZGMzYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZ1xcbkBAIC04Miw2ICs4Miw3IEBAIENPTkZJR19ORVRfU0NIX0JQRj15XFxuIENPTkZJR19ORVRfU0NIX0ZRPXlcXG4gQ09ORklHX05FVF9TQ0hfSU5HUkVTUz15XFxuIENPTkZJR19ORVRfU0NIX0hUQj15XFxuK0NPTkZJR19ORVRfU0NIX1JFRD15XFxuIENPTkZJR19ORVRfU0NIRUQ9eVxcbiBDT05GSUdfTkVUREVWU0lNPXlcXG4gQ09ORklHX05FVEZJTFRFUj15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3FldmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xcbkBAIC0wLDAgKzEsMTEzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc29ja2V0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXRpbmV0L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidGVzdF90Y19xZXZlbnQuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19UWFxcdFxcdFxcXCJ0Y19xZXZlbnRfdHhcXFwiXFxuKyNkZWZpbmUgTlNfUlhcXHRcXHRcXFwidGNfcWV2ZW50X3J4XFxcIlxcbisjZGVmaW5lIElQX1RYXFx0XFx0XFxcIjEwLjI1NS4wLjFcXFwiXFxuKyNkZWZpbmUgSVBfUlhcXHRcXHRcXFwiMTAuMjU1LjAuMlxcXCJcXG4rI2RlZmluZSBQSU5fUEFUSFxcdFxcXCIvc3lzL2ZzL2JwZi90Y19xZXZlbnRfcmVkaXJlY3RcXFwiXFxuK1xcbitzdGF0aWMgdm9pZCBibGFzdF91ZHAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307XFxuK1xcdGNoYXIgYnVmWzE0MDBdID0ge307XFxuK1xcdGludCBmZCwgaTtcXG4rXFxuK1xcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApO1xcbitcXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXFxcInVkcCBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XFxuK1xcdGluZXRfcHRvbihBRl9JTkVULCBJUF9SWCwgXFx1MDAyNmRzdC5zaW5fYWRkcik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQdXNoIGZhciBtb3JlIHRoYW4gdGhlIFJFRCBxdWV1ZSBjYW4gaG9sZC4gT25jZSBxYXZnIGNyb3NzZXMgcXRoX21pblxcbitcXHQgKiBldmVyeSBmdXJ0aGVyIHBhY2tldCBoaXRzIHRoZSBjb25nZXN0aW9uX2Ryb3AgLyBlYXJseV9kcm9wIHFldmVudC5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA1MDAwMDsgaSsrKVxcbitcXHRcXHRzZW5kdG8oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCxcXG4rXFx0XFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2ZHN0LCBzaXplb2YoZHN0KSk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBfX3U2NCAqY291bnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCAlc1xcXCIsIE5TX1RYKTtcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgTlNfUlgpO1xcbitcXHR1bmxpbmsoUElOX1BBVEgpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInBpbiBwcm9nXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFNZUyh1bnBpbiwgIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19UWCk7XFxuK1xcdFNZUyhkZWxfdHgsIFxcXCJpcCBuZXRucyBhZGQgJXNcXFwiLCBOU19SWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIGFkZCB2ZXRoMCB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zICVzXFxcIiwgTlNfVFgsIE5TX1JYKTtcXG4rXFx0U1lTKGRlbF9yeCwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMFxcXCIsIE5TX1RYLCBJUF9UWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMCB1cFxcXCIsIE5TX1RYKTtcXG4rXFx0U1lTKGRlbF9yeCwgXFxcImlwIC1uICVzIGFkZHIgYWRkICVzLzI0IGRldiB2ZXRoMVxcXCIsIE5TX1JYLCBJUF9SWCk7XFxuK1xcdFNZUyhkZWxfcngsIFxcXCJpcCAtbiAlcyBsaW5rIHNldCB2ZXRoMSB1cFxcXCIsIE5TX1JYKTtcXG4rXFxuK1xcdHRvayA9IG9wZW5fbmV0bnMoTlNfVFgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcXFwib3Blbl9uZXRuc1xcXCIpKVxcbitcXHRcXHRnb3RvIGRlbF9yeDtcXG4rXFxuK1xcdFNZUyhjbG9zZV9ucywgXFxcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMVxcXCIpO1xcbitcXHRTWVMoY2xvc2VfbnMsIFxcXCJ0YyBjbGFzcyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxbWJpdCBjZWlsIDFtYml0XFxcIik7XFxuK1xcbitcXHRpZiAoc3lzdGVtKFxcXCJ0YyBxZGlzYyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOjEgaGFuZGxlIDExOiByZWQgXFxcIlxcbitcXHRcXHQgICBcXFwibGltaXQgNTAwMDAwIGF2cGt0IDEwMDAgcHJvYmFiaWxpdHkgMSBtaW4gNTAwMCBtYXggNjAwMCBcXFwiXFxuK1xcdFxcdCAgIFxcXCJidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDJcXHUwMDNlL2Rldi9udWxsXFxcIikpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIGNsb3NlX25zO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc3lzdGVtKFxcXCJ0YyBmaWx0ZXIgYWRkIGJsb2NrIDEwIGJwZiBkYSBvYmplY3QtcGlubmVkIFxcXCJcXG4rXFx0XFx0ICAgUElOX1BBVEggXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcXCIpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBjbG9zZV9ucztcXG4rXFx0fVxcbitcXG4rXFx0Ymxhc3RfdWRwKCk7XFxuK1xcdEFTU0VSVF9HVCgqY291bnRlciwgMCwgXFxcInFldmVudCBjbGFzc2lmaWVyIHJhblxcXCIpO1xcbitjbG9zZV9uczpcXG4rXFx0Y2xvc2VfbmV0bnModG9rKTtcXG4rZGVsX3J4OlxcbitcXHRTWVNfTk9GQUlMKFxcXCJpcCBuZXRucyBkZWwgJXNcXFwiLCBOU19SWCk7XFxuK2RlbF90eDpcXG4rXFx0U1lTX05PRkFJTChcXFwiaXAgbmV0bnMgZGVsICVzXFxcIiwgTlNfVFgpO1xcbit1bnBpbjpcXG4rXFx0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3RjX3FldmVudF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInJlZGlyZWN0X3ZlcmRpY3RcXFwiKSlcXG4rXFx0XFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVxcdTAwM2Vwcm9ncy5xZXZlbnRfcmVkaXJlY3RfdmVyZGljdCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXZlcmRpY3RfY2FsbHMpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwicmVkaXJlY3RfaGVscGVyXFxcIikpXFxuK1xcdFxcdHJ1bl9xZXZlbnRfcmVkaXJlY3Qoc2tlbC1cXHUwMDNlcHJvZ3MucWV2ZW50X3JlZGlyZWN0X2hlbHBlcixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhlbHBlcl9jYWxscyk7XFxuK1xcbitcXHR0ZXN0X3RjX3FldmVudF9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTUyOWMxMTFmNGFhNDJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcWV2ZW50LmNcXG5AQCAtMCwwICsxLDIzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2ludCByZWRpcmVjdF9pZmluZGV4ID0gMTtcXG4rX191NjQgdmVyZGljdF9jYWxscyA9IDA7XFxuK19fdTY0IGhlbHBlcl9jYWxscyA9IDA7XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4raW50IHFldmVudF9yZWRpcmVjdF92ZXJkaWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmVyZGljdF9jYWxscywgMSk7XFxuK1xcdHJldHVybiBUQ1hfUkVESVJFQ1Q7XFxuK31cXG4rXFxuK1NFQyhcXFwidGNcXFwiKVxcbitpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhlbHBlcl9jYWxscywgMSk7XFxuK1xcdHJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1Mzo1Mi40NDE1Njc0NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDM5NTc4NzIyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1JFRFwiLFxuICAgIFwiTkVUX1NDSF9IVEJcIixcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9CUEZcIixcbiAgICBcIk5FVF9DTFNfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3FldmVudF9oYW5kbGVcIixcbiAgICBcImJwZl9yZWRpcmVjdFwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X3BlZXJcIixcbiAgICBcImJwZl9yZWRpcmVjdF9uZWlnaFwiLFxuICAgIFwiaHRiX2NsYXNzaWZ5XCIsXG4gICAgXCJmcV9jb2RlbF9jbGFzc2lmeVwiLFxuICAgIFwiY2FrZV9jbGFzc2lmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2RmNjRlZGFkZGEyYzA1NTJhOWYxZTM4ZjY5NTljMGFhOTVjYjgwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDQ6NTM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3RfY2xzLmggYi9pbmNsdWRlL25ldC9wa3RfY2xzLmhcbmluZGV4IDNiZDA4ZDdmMzljMThjLi41ZjVjYjM2NDM5ZmUyNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3BrdF9jbHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvcGt0X2Nscy5oXG5AQCAtMTU2LDggKzE1NiwyMCBAQCBzdGF0aWMgaW5saW5lIGludCB0Y2ZfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRyZXR1cm4gVENfQUNUX1VOU1BFQztcbiB9XG4tXG4gI2VuZGlmXG4rc3RhdGljIGlubGluZSBpbnQgdGNmX2NsYXNzaWZ5X3FkaXNjKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzLCBib29sIGNvbXBhdF9tb2RlKVxuK3tcbitcdGludCByZXQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0cCwgcmVzLCBjb21wYXRfbW9kZSk7XG4rXG4rXHQvKiBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zIGlzIG5vdCBzdXBwb3J0ZWQuXG4rXHQgKiBVc2UgQlBGIHZpYSB0Y3ggb3IgbWlycmVkIHJlZGlyZWN0IGluc3RlYWQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseShyZXQgPT0gVENfQUNUX1JFRElSRUNUKSlcbitcdFx0cmV0ID0gVENfQUNUX1NIT1Q7XG4rXHRyZXR1cm4gcmV0O1xuK31cbiBcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbiBfX2Nsc19zZXRfY2xhc3ModW5zaWduZWQgbG9uZyAqY2xwLCB1bnNpZ25lZCBsb25nIGNsKVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmNcbmluZGV4IGI0NDZhYThiZTVjMzc1Li4xMWJiMGQyMzY4MjJhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2ZpbHRlci5jXG4rKysgYi9uZXQvY29yZS9maWx0ZXIuY1xuQEAgLTI1NTIsMTEgKzI1NTIsMTMgQEAgaW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIEJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0LCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXG4ge1xuLVx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xuK1x0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcbiBcbi1cdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgKH4oQlBGX0ZfSU5HUkVTUykgfCBCUEZfRl9SRURJUkVDVF9JTlRFUk5BTCkpKVxuK1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fFxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgKH4oQlBGX0ZfSU5HUkVTUykgfCBCUEZfRl9SRURJUkVDVF9JTlRFUk5BTCkpKSlcbiBcdFx0cmV0dXJuIFRDX0FDVF9TSE9UO1xuIFxuK1x0cmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbiBcdHJpLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1NzMsMTEgKzI1NzUsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxuIHtcbi1cdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcbitcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XG4gXG4tXHRpZiAodW5saWtlbHkoZmxhZ3MpKVxuK1x0aWYgKHVubGlrZWx5KCFicGZfbmV0X2N0eF9nZXQoKSB8fCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX1BFRVI7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuQEAgLTI1OTUsMTEgKzI1OTgsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcbiBCUEZfQ0FMTF80KGJwZl9yZWRpcmVjdF9uZWlnaCwgdTMyLCBpZmluZGV4LCBzdHJ1Y3QgYnBmX3JlZGlyX25laWdoICosIHBhcmFtcyxcbiBcdCAgIGludCwgcGxlbiwgdTY0LCBmbGFncylcbiB7XG4tXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4rXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpO1xuIFxuLVx0aWYgKHVubGlrZWx5KChwbGVuIFx1MDAyNlx1MDAyNiBwbGVuIFx1MDAzYyBzaXplb2YoKnBhcmFtcykpIHx8IGZsYWdzKSlcbitcdGlmICh1bmxpa2VseSgocGxlbiBcdTAwMjZcdTAwMjYgcGxlbiBcdTAwM2Mgc2l6ZW9mKCpwYXJhbXMpKSB8fFxuK1x0XHQgICAgICFicGZfbmV0X2N0eF9nZXQoKSB8fCBmbGFncykpXG4gXHRcdHJldHVybiBUQ19BQ1RfU0hPVDtcbiBcbitcdHJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XG4gXHRyaS1cdTAwM2VmbGFncyA9IEJQRl9GX05FSUdIIHwgKHBsZW4gPyBCUEZfRl9ORVhUSE9QIDogMCk7XG4gXHRyaS1cdTAwM2V0Z3RfaW5kZXggPSBpZmluZGV4O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5pbmRleCBmZmVlYTZkYjgzMzc0Ny4uZmVlNDUyNGFkYzk4ZWYgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jXG5AQCAtNDA0NSw3ICs0MDQ1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjZl9xZXZlbnRfaGFuZGxlKHN0cnVjdCB0Y2ZfcWV2ZW50ICpxZSwgc3RydWN0IFFkaXNjICpzY2gsIHN0cnVcbiBcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHFlLVx1MDAzZWZpbHRlcl9jaGFpbik7XG4gXG4tXHRzd2l0Y2ggKHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZjbF9yZXMsIGZhbHNlKSkge1xuK1x0c3dpdGNoICh0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2Y2xfcmVzLCBmYWxzZSkpIHtcbiBcdGNhc2UgVENfQUNUX1NIT1Q6XG4gXHRcdHFkaXNjX3FzdGF0c19kcm9wKHNjaCk7XG4gXHRcdF9fcWRpc2NfZHJvcChza2IsIHRvX2ZyZWUpO1xuQEAgLTQwNTcsMTAgKzQwNTcsNiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydVxuIFx0XHRfX3FkaXNjX2Ryb3Aoc2tiLCB0b19mcmVlKTtcbiBcdFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdGNhc2UgVENfQUNUX1JFRElSRUNUOlxuLVx0XHRza2JfZG9fcmVkaXJlY3Qoc2tiKTtcbi1cdFx0KnJldCA9IF9fTkVUX1hNSVRfU1RPTEVOO1xuLVx0XHRyZXR1cm4gTlVMTDtcbiBcdGNhc2UgVENfQUNUX0NPTlNVTUVEOlxuIFx0XHQqcmV0ID0gX19ORVRfWE1JVF9TVE9MRU47XG4gXHRcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2FrZS5jIGIvbmV0L3NjaGVkL3NjaF9jYWtlLmNcbmluZGV4IGEzYzE4NTUwNWFmY2U0Li45NGViNDdhYzU0ZWU2NCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfY2FrZS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX2Nha2UuY1xuQEAgLTE3MzAsNyArMTczMCw3IEBAIHN0YXRpYyB1MzIgY2FrZV9jbGFzc2lmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IGNha2VfdGluX2RhdGEgKip0LFxuIFx0XHRnb3RvIGhhc2g7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmaWx0ZXIsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFxuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbmluZGV4IDAyMDY1N2Y5NTliNTc1Li45MWIxZWY4MjRhZmFmMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfZHJyLmNcbkBAIC0zMTIsNyArMzEyLDcgQEAgc3RhdGljIHN0cnVjdCBkcnJfY2xhc3MgKmRycl9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuIFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4tXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuYyBiL25ldC9zY2hlZC9zY2hfZHVhbHBpMi5jXG5pbmRleCAyNzA4ODc2MGVmZjQ0My4uNGY2NzhkNGZmMTBlYzcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2R1YWxwaTIuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9kdWFscGkyLmNcbkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIGludCBkdWFscGkyX3NrYl9jbGFzc2lmeShzdHJ1Y3QgZHVhbHBpMl9zY2hlZF9kYXRhICpxLFxuIFx0aWYgKCFmbClcbiBcdFx0cmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7XG4gXG4tXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2V0cy5jIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuaW5kZXggY2I4Y2Y0MzdjZTg3MDguLjI1ZmNmNDA3OWZlY2UxIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9ldHMuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9ldHMuY1xuQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgc3RydWN0IGV0c19jbGFzcyAqZXRzX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4gXHRpZiAoVENfSF9NQUooc2tiLVx1MDAzZXByaW9yaXR5KSAhPSBzY2gtXHUwMDNlaGFuZGxlKSB7XG4gXHRcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0XHRlcnIgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCBmbCwgXHUwMDI2cmVzLCBmYWxzZSk7XG4rXHRcdGVyciA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAoZXJyKSB7XG4gXHRcdGNhc2UgVENfQUNUX1NUT0xFTjpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMgYi9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmNcbmluZGV4IGNhZmQxZjk0M2Q5OWNkLi42Y2NlODZiYTM4M2NmNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jXG5AQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZxX2NvZGVsX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRyZXR1cm4gZnFfY29kZWxfaGFzaChxLCBza2IpICsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZxX3BpZS5jIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuaW5kZXggNzJmNDhmYTQwMTBiZWIuLjA2OWUxZmFjZDQxMzBkIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9waWUuY1xuQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcV9waWVfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXHRcdHJldHVybiBmcV9waWVfaGFzaChxLCBza2IpICsgMTtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmlsdGVyLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZpbHRlciwgXHUwMDI2cmVzLCBmYWxzZSk7XG4gXHRpZiAocmVzdWx0IFx1MDAzZT0gMCkge1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChyZXN1bHQpIHtcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jXG5pbmRleCA3ZTUzNzI5NWI4YjY3OC4uZTg3ZjUwMjFhMTk5NTggMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmNcbkBAIC0xMTQzLDcgKzExNDMsNyBAQCBoZnNjX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGhlYWQgPSBcdTAwMjZxLVx1MDAzZXJvb3Q7XG4gXHR0Y2YgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2Vyb290LmZpbHRlcl9saXN0KTtcbi1cdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnkoc2tiLCBOVUxMLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbitcdHdoaWxlICh0Y2YgXHUwMDI2XHUwMDI2IChyZXN1bHQgPSB0Y2ZfY2xhc3NpZnlfcWRpc2Moc2tiLCB0Y2YsIFx1MDAyNnJlcywgZmFsc2UpKSBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG4gXHRcdGNhc2UgVENfQUNUX1FVRVVFRDpcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuaW5kZXggOTA4YjliYTliYTJlZmEuLmZkYWMwZGM4ZjM1YTM3IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9odGIuY1xuKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuY1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgc3RydWN0IGh0Yl9jbGFzcyAqaHRiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0fVxuIFxuIFx0KnFlcnIgPSBORVRfWE1JVF9TVUNDRVNTIHwgX19ORVRfWE1JVF9CWVBBU1M7XG4tXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4rXHR3aGlsZSAodGNmIFx1MDAyNlx1MDAyNiAocmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgdGNmLCBcdTAwMjZyZXMsIGZhbHNlKSkgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuIFx0XHRjYXNlIFRDX0FDVF9RVUVVRUQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbmluZGV4IGE0NjdkZDEyMjM2OTcwLi42NmRmMzA5MzlhYTVjMSAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmNcbkBAIC0zNiw3ICszNiw3IEBAIG11bHRpcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgaW50ICpxZXJyKVxuIFx0aW50IGVycjtcbiBcbiBcdCpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTO1xuLVx0ZXJyID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuK1x0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdHN3aXRjaCAoZXJyKSB7XG4gXHRjYXNlIFRDX0FDVF9TVE9MRU46XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3ByaW8uY1xuaW5kZXggZTRkZDU2YTg5MDcyNWIuLjc5NDM3YzU4N2U3ZWQyIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jXG5AQCAtMzksNyArMzksNyBAQCBwcmlvX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLCBpbnQgKnFlcnIpXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGlmIChUQ19IX01BSihza2ItXHUwMDNlcHJpb3JpdHkpICE9IHNjaC1cdTAwM2VoYW5kbGUpIHtcbiBcdFx0ZmwgPSByY3VfZGVyZWZlcmVuY2VfYmgocS1cdTAwM2VmaWx0ZXJfbGlzdCk7XG4tXHRcdGVyciA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdFx0ZXJyID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcbiBcdFx0c3dpdGNoIChlcnIpIHtcbiBcdFx0Y2FzZSBUQ19BQ1RfU1RPTEVOOlxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcWZxLmMgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5pbmRleCBjYjU2Nzg3ZTFkMjU4Yy4uNmYzYjcyNzNjYjE2MGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3FmcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3FmcS5jXG5AQCAtNzA5LDcgKzcwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbiBcdGZsID0gcmN1X2RlcmVmZXJlbmNlX2JoKHEtXHUwMDNlZmlsdGVyX2xpc3QpO1xuLVx0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5KHNrYiwgTlVMTCwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuK1x0cmVzdWx0ID0gdGNmX2NsYXNzaWZ5X3FkaXNjKHNrYiwgZmwsIFx1MDAyNnJlcywgZmFsc2UpO1xuIFx0aWYgKHJlc3VsdCBcdTAwM2U9IDApIHtcbiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG4gXHRcdHN3aXRjaCAocmVzdWx0KSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZmIuYyBiL25ldC9zY2hlZC9zY2hfc2ZiLmNcbmluZGV4IGIxZDQ2NTA5NDI3NjkyLi5lZDM5ODY5MTk5YzA4NCAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfc2ZiLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfc2ZiLmNcbkBAIC0yNjAsNyArMjYwLDcgQEAgc3RhdGljIGJvb2wgc2ZiX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y2ZfcHJvdG8gKmZsLFxuIFx0c3RydWN0IHRjZl9yZXN1bHQgcmVzO1xuIFx0aW50IHJlc3VsdDtcbiBcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5pbmRleCA3NThiODhmMjE4NjUyNy4uNzc2NzVmOWE0YzQ2ZTcgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jXG4rKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jXG5AQCAtMTcxLDcgKzE3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ZxX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoLFxuIFx0XHRyZXR1cm4gc2ZxX2hhc2gocSwgc2tiKSArIDE7XG4gXG4gXHQqcWVyciA9IE5FVF9YTUlUX1NVQ0NFU1MgfCBfX05FVF9YTUlUX0JZUEFTUztcbi1cdHJlc3VsdCA9IHRjZl9jbGFzc2lmeShza2IsIE5VTEwsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbitcdHJlc3VsdCA9IHRjZl9jbGFzc2lmeV9xZGlzYyhza2IsIGZsLCBcdTAwMjZyZXMsIGZhbHNlKTtcbiBcdGlmIChyZXN1bHQgXHUwMDNlPSAwKSB7XG4gI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxuIFx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5pbmRleCBhZGIyNTE0NmU4OGNjZi4uZWE3MDQ0ZjMwYWRjM2IgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnXG5AQCAtODIsNiArODIsNyBAQCBDT05GSUdfTkVUX1NDSF9CUEY9eVxuIENPTkZJR19ORVRfU0NIX0ZRPXlcbiBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9IVEI9eVxuK0NPTkZJR19ORVRfU0NIX1JFRD15XG4gQ09ORklHX05FVF9TQ0hFRD15XG4gQ09ORklHX05FVERFVlNJTT15XG4gQ09ORklHX05FVEZJTFRFUj15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90Y19xZXZlbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42N2UxZDE3NTY3YWJkYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcWV2ZW50LmNcbkBAIC0wLDAgKzEsMTEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zb2NrZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldGluZXQvaW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FycGEvaW5ldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF90Y19xZXZlbnQuc2tlbC5oXCJcbitcbisjZGVmaW5lIE5TX1RYXHRcdFwidGNfcWV2ZW50X3R4XCJcbisjZGVmaW5lIE5TX1JYXHRcdFwidGNfcWV2ZW50X3J4XCJcbisjZGVmaW5lIElQX1RYXHRcdFwiMTAuMjU1LjAuMVwiXG4rI2RlZmluZSBJUF9SWFx0XHRcIjEwLjI1NS4wLjJcIlxuKyNkZWZpbmUgUElOX1BBVEhcdFwiL3N5cy9mcy9icGYvdGNfcWV2ZW50X3JlZGlyZWN0XCJcbitcbitzdGF0aWMgdm9pZCBibGFzdF91ZHAodm9pZClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0ID0ge307XG4rXHRjaGFyIGJ1ZlsxNDAwXSA9IHt9O1xuK1x0aW50IGZkLCBpO1xuK1xuK1x0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJ1ZHAgc29ja2V0XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRkc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRkc3Quc2luX3BvcnQgPSBodG9ucygxMjM0NSk7XG4rXHRpbmV0X3B0b24oQUZfSU5FVCwgSVBfUlgsIFx1MDAyNmRzdC5zaW5fYWRkcik7XG4rXG4rXHQvKlxuK1x0ICogUHVzaCBmYXIgbW9yZSB0aGFuIHRoZSBSRUQgcXVldWUgY2FuIGhvbGQuIE9uY2UgcWF2ZyBjcm9zc2VzIHF0aF9taW5cbitcdCAqIGV2ZXJ5IGZ1cnRoZXIgcGFja2V0IGhpdHMgdGhlIGNvbmdlc3Rpb25fZHJvcCAvIGVhcmx5X2Ryb3AgcWV2ZW50LlxuK1x0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA1MDAwMDsgaSsrKVxuK1x0XHRzZW5kdG8oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCxcbitcdFx0ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZkc3QsIHNpemVvZihkc3QpKTtcbitcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3FldmVudF9yZWRpcmVjdChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIF9fdTY0ICpjb3VudGVyKVxuK3tcbitcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuK1x0aW50IGVycjtcbitcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfVFgpO1xuK1x0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCAlc1wiLCBOU19SWCk7XG4rXHR1bmxpbmsoUElOX1BBVEgpO1xuK1xuK1x0ZXJyID0gYnBmX3Byb2dyYW1fX3Bpbihwcm9nLCBQSU5fUEFUSCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicGluIHByb2dcIikpXG4rXHRcdHJldHVybjtcbitcbitcdFNZUyh1bnBpbiwgIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1RYKTtcbitcdFNZUyhkZWxfdHgsIFwiaXAgbmV0bnMgYWRkICVzXCIsIE5TX1JYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBhZGQgdmV0aDAgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyAlc1wiLCBOU19UWCwgTlNfUlgpO1xuK1x0U1lTKGRlbF9yeCwgXCJpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDBcIiwgTlNfVFgsIElQX1RYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBzZXQgdmV0aDAgdXBcIiwgTlNfVFgpO1xuK1x0U1lTKGRlbF9yeCwgXCJpcCAtbiAlcyBhZGRyIGFkZCAlcy8yNCBkZXYgdmV0aDFcIiwgTlNfUlgsIElQX1JYKTtcbitcdFNZUyhkZWxfcngsIFwiaXAgLW4gJXMgbGluayBzZXQgdmV0aDEgdXBcIiwgTlNfUlgpO1xuK1xuK1x0dG9rID0gb3Blbl9uZXRucyhOU19UWCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZGVsX3J4O1xuK1xuK1x0U1lTKGNsb3NlX25zLCBcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcm9vdCBoYW5kbGUgMTogaHRiIGRlZmF1bHQgMVwiKTtcbitcdFNZUyhjbG9zZV9ucywgXCJ0YyBjbGFzcyBhZGQgZGV2IHZldGgwIHBhcmVudCAxOiBjbGFzc2lkIDE6MSBodGIgcmF0ZSAxbWJpdCBjZWlsIDFtYml0XCIpO1xuK1xuK1x0aWYgKHN5c3RlbShcInRjIHFkaXNjIGFkZCBkZXYgdmV0aDAgcGFyZW50IDE6MSBoYW5kbGUgMTE6IHJlZCBcIlxuK1x0XHQgICBcImxpbWl0IDUwMDAwMCBhdnBrdCAxMDAwIHByb2JhYmlsaXR5IDEgbWluIDUwMDAgbWF4IDYwMDAgXCJcbitcdFx0ICAgXCJidXJzdCA2IHFldmVudCBlYXJseV9kcm9wIGJsb2NrIDEwIDJcdTAwM2UvZGV2L251bGxcIikpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIGNsb3NlX25zO1xuK1x0fVxuK1xuK1x0aWYgKHN5c3RlbShcInRjIGZpbHRlciBhZGQgYmxvY2sgMTAgYnBmIGRhIG9iamVjdC1waW5uZWQgXCJcbitcdFx0ICAgUElOX1BBVEggXCIgMlx1MDAzZS9kZXYvbnVsbFwiKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gY2xvc2VfbnM7XG4rXHR9XG4rXG4rXHRibGFzdF91ZHAoKTtcbitcdEFTU0VSVF9HVCgqY291bnRlciwgMCwgXCJxZXZlbnQgY2xhc3NpZmllciByYW5cIik7XG4rY2xvc2VfbnM6XG4rXHRjbG9zZV9uZXRucyh0b2spO1xuK2RlbF9yeDpcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfUlgpO1xuK2RlbF90eDpcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgJXNcIiwgTlNfVFgpO1xuK3VucGluOlxuK1x0YnBmX3Byb2dyYW1fX3VucGluKHByb2csIFBJTl9QQVRIKTtcbit9XG4rXG4rdm9pZCB0ZXN0X3RjX3FldmVudCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3RjX3FldmVudCAqc2tlbDtcbitcbitcdHNrZWwgPSB0ZXN0X3RjX3FldmVudF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwib3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJyZWRpcmVjdF92ZXJkaWN0XCIpKVxuK1x0XHRydW5fcWV2ZW50X3JlZGlyZWN0KHNrZWwtXHUwMDNlcHJvZ3MucWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3QsXG4rXHRcdFx0XHQgICAgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNldmVyZGljdF9jYWxscyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInJlZGlyZWN0X2hlbHBlclwiKSlcbitcdFx0cnVuX3FldmVudF9yZWRpcmVjdChza2VsLVx1MDAzZXByb2dzLnFldmVudF9yZWRpcmVjdF9oZWxwZXIsXG4rXHRcdFx0XHQgICAgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlaGVscGVyX2NhbGxzKTtcbitcbitcdHRlc3RfdGNfcWV2ZW50X19kZXN0cm95KHNrZWwpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3FldmVudC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1MjljMTExZjRhYTQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19xZXZlbnQuY1xuQEAgLTAsMCArMSwyMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXCJ2bWxpbnV4LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4raW50IHJlZGlyZWN0X2lmaW5kZXggPSAxO1xuK19fdTY0IHZlcmRpY3RfY2FsbHMgPSAwO1xuK19fdTY0IGhlbHBlcl9jYWxscyA9IDA7XG4rXG4rU0VDKFwidGNcIilcbitpbnQgcWV2ZW50X3JlZGlyZWN0X3ZlcmRpY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZlcmRpY3RfY2FsbHMsIDEpO1xuK1x0cmV0dXJuIFRDWF9SRURJUkVDVDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitpbnQgcWV2ZW50X3JlZGlyZWN0X2hlbHBlcihzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGVscGVyX2NhbGxzLCAxKTtcbitcdHJldHVybiBicGZfcmVkaXJlY3QocmVkaXJlY3RfaWZpbmRleCwgMCk7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjUzOjUyLjQ0MTU2ODg0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTM1NzY5OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgU2NoZWR1bGVyIENsYXNzaWZpY2F0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0J3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgdGhlIHdheSB0aGUga2VybmVsIGhhbmRsZXMgYFRDX0FDVF9SRURJUkVDVGAgd2l0aGluIHFkaXNjIGZpbHRlciBjaGFpbnMuIFRoZSBrZXkgaWRlYSBoZXJlIGlzIHRvIHJlcGxhY2UgZGlyZWN0IHVzZSBvZiBgdGNmX2NsYXNzaWZ5YCB3aXRoIGEgd3JhcHBlciwgYHRjZl9jbGFzc2lmeV9xZGlzY2AuIFRoaXMgbmV3IGZ1bmN0aW9uIHRyYW5zZm9ybXMgYFRDX0FDVF9SRURJUkVDVGAgaW50byBgVENfQUNUX1NIT1RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgYmVjYXVzZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCByZWRpcmVjdCBhY3Rpb25zIGFyZW4ndCBwcm9wZXJseSBzdXBwb3J0ZWQgd2l0aGluIHRoZXNlIGZpbHRlciBjaGFpbnMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIGlzc3Vlcy5cblxuVGhlIHBhdGNoIGFsc28gdGlnaHRlbnMgdXAgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBTcGVjaWZpY2FsbHksIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBub3cgaW5jb3Jwb3JhdGUgYSBudWxsIGNoZWNrIHVzaW5nIGAhYnBmX25ldF9jdHhfZ2V0KClgLCBhbmQgcmV0dXJuIGBUQ19BQ1RfU0hPVGAgaWYgdGhlIGNoZWNrIGZhaWxzLiBUaGlzIGlzIGEgY3J1Y2lhbCBzYWZlZ3VhcmQsIEknZCBzYXksIHRvIG1ha2Ugc3VyZSBCUEYgcHJvZ3JhbXMgYXJlbid0IGF0dGVtcHRpbmcgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy5cblxuVGhpcyBoYXMgYnJvYWQgaW1wbGljYXRpb25zLCBhZmZlY3RpbmcgbWFueSBvZiB0aGUgY29yZSBxZGlzY3MuIEknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYGNha2VgLCBgZHJyYCwgYGR1YWxwaTJgLCBgZXRzYCwgYGZxX2NvZGVsYCwgYGZxX3BpZWAsIGBoZnNjYCwgYGh0YmAsIGBtdWx0aXFgLCBgcHJpb2AsIGBxZnFgLCBgc2ZiYCwgYW5kIGBzZnFgLiBUaGV5J3JlIGFsbCBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCBpbnN0ZWFkIG9mIGB0Y2ZfY2xhc3NpZnlgLiBBbmQgYHRjZl9xZXZlbnRfaGFuZGxlYCBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AgaXMgYmVpbmcgbW9kaWZpZWQgYXMgd2VsbCwgdG8gdXRpbGl6ZSB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIHJlbW92YWwgb2YgdGhlIGBUQ19BQ1RfUkVESVJFQ1RgIGNhc2UgaW4gYHRjZl9xZXZlbnRfaGFuZGxlYCBmdXJ0aGVyIGNvbmZpcm1zIHRoZSBpbnRlbnQgdG8gcHJldmVudCB0aGUgcHJvYmxlbWF0aWMgYWN0aW9uLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgcWRpc2MgY2xhc3NpZmljYXRpb24gbG9naWMgYW5kIEJQRiByZWRpcmVjdCBoZWxwZXJzLCB3aGljaCBtZWFucyBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBrZXkgYXJlYXMgdG8gZm9jdXMgb24gd2lsbCBiZSBgdGNmX2NsYXNzaWZ5X3FkaXNjYCAoc2luY2UgaXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlKSwgYW5kIHRoZSBCUEYgaGVscGVycyBtZW50aW9uZWQuXG5cbmB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGlzIGFuIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBpbmNsdWRlL25ldC9wa3RfY2xzLmhgLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gVGhlIGZ1bmN0aW9ucyBtb2RpZmllZCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgIGFyZSBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBTaW5jZSB0aGVzZSBhcmUgQlBGIGhlbHBlcnMsIHRoZXkncmUgY2FsbGVkIHRocm91Z2ggQlBGIHByb2dyYW1zLCB3aGljaCBpcyBob3cgdGhleSdyZSBleHBvc2VkLiBBbmQgSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBgdGNmX3FldmVudF9oYW5kbGVgIGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBoYW5kbGVzIHRoaXMgdG9vLlxuXG5JIHNob3VsZCBsaXN0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgYW5kIHRob3NlIEJQRiByZWRpcmVjdCBoZWxwZXJzLiBCdXQgd2FpdCwgYGJwZl9yZWRpcmVjdGAgaXMgYSBtYWNybz8gTGV0IG1lIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCdzIGRlZmluZWQgYXMgYSBCUEYgY2FsbDogYEJQRl9DQUxMXzIoYnBmX3JlZGlyZWN0LCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjAzLjU3NzM0MDg2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgyMjE4Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9DQUxMXzJcXFxcKGJwZl9yZWRpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0yNTE5PWludCBza2JfZG9fcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU1MzpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjA2LjY1OTU2NjQyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzA0MTkxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWNvbnN0cnVjdGluZyBgYnBmX3JlZGlyZWN0YCBOYW1pbmcgQ29udmVudGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIG5vdGljaW5nIHRoYXQgdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGdlbmVyYXRlZCBieSB0aGF0IGBCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgLi4uKWAgbWFjcm8gaXNuJ3QgYWx3YXlzIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcyBgYnBmX3JlZGlyZWN0YC4gSXQgc2VlbXMgdG8gYmUgcGxheWluZyBhcm91bmQgd2l0aCBuYW1lcywgc29tZXRpbWVzIHJlc3VsdGluZyBpbiBzb21ldGhpbmcgbGlrZSBgX19fX2JwZl9yZWRpcmVjdGAgb3IgZXZlbiBgYnBmX3JlZGlyZWN0X19fX2ZtdGAuIFRoYXQncyBhIGxpdHRsZSBwZWN1bGlhciwgYW5kIGl0J3MgbWFraW5nIG1lIHdvbmRlciB3aGF0IHRoZSB1bmRlcmx5aW5nIGxvZ2ljIGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaWcgaW50byB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpdHNlbGYuIExldCdzIHRyYWNlIGJhY2sgdG8gd2hlcmUgYEJQRl9DQUxMXzJgIGlzIGRlZmluZWQg4oCTIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHBvc3NpYmx5IHRoZSBzb3VyY2Ugb2YgdGhlIG5hbWluZyBvYmZ1c2NhdGlvbikgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgbWFjcm8gZXhwYW5kcyB0byBpbiBvcmRlciB0byBmdWxseSBncmFzcCB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIFRpbWUgdG8gZ28gc3BlbHVua2luZyBpbiB0aGUgaGVhZGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoxMC4zMjk5ODcyNTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzQyNzM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfMlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MjQtI2RlZmluZSBCUEZfQ0FMTF8xKG5hbWUsIC4uLilcXHRCUEZfQ0FMTF94KDEsIF9fTk9BVFRSLCBuYW1lLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjYyNTojZGVmaW5lIEJQRl9DQUxMXzIobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMiwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjI2LSNkZWZpbmUgQlBGX0NBTExfMyhuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgzLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU0OjEyLjk1NzQxOTEyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzAwNjQ2OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBCUEZfQ0FMTF94KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8sIFwiTGV0J3MgY2hlY2sgYEJQRl9DQUxMX3hgLlwiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoYXQg4oCTIEkga25vdyBgQlBGX0NBTExgIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiBleHRlbmRlZCBCUEYsIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGwgbWVjaGFuaXNtLCBhbmQgdGhlIGBfeGAgbGlrZWx5IGRlbm90ZXMgYSBmYW1pbHkgb3IgYSB2YXJpYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBzcGVjaWZpYyB2YXJpYW50IHdlIGFyZSB0YWxraW5nIGFib3V0LiBXaGF0IGlzIGl0cyBleGFjdCBwdXJwb3NlIGFuZCBob3cgZG9lcyBpdCByZWxhdGUgdG8gdGhlIGlzc3VlIG9yIHRhc2sgYXQgaGFuZD8gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgc2VhcmNoIHRlcm1zIGFuZCBtZW50YWxseSByZXZpZXcgZG9jdW1lbnRhdGlvbiwgdGhpbmtpbmcgYWJvdXQga2V5IHNlY3Rpb25zIGluIHRoZSBCUEYgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdGhhdCBJJ2xsIG5lZWQgdG8gcmVmZXJlbmNlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGV4cGxvcmF0aW9uIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoyNi42NTgwNjgwMTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NzUwODgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgQlBGX0NBTExfeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTI1OT1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC02MDktXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo2MTA6I2RlZmluZSBCUEZfQ0FMTF94KHgsIGF0dHIsIG5hbWUsIC4uLilcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtNjExLVxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDoyOC41NTU1ODI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxOTM3NjE3ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEZWNvZGluZyBUaGlzIFNuaXBwZXQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21lIGNvZGUgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHN0cnVjdHVyZTogaXQgc2VlbXMgdG8gYmUgZGVmaW5pbmcgdHdvIGVudGl0aWVzIHJlbGF0ZWQgdG8gYSB2YXJpYWJsZSBvciBrZXkgY2FsbGVkIFwibmFtZVwiLiBJIHNlZSBgX19fXyMjbmFtZWAgYW5kIGp1c3QgYG5hbWVgLiBUaGUgbGVhZGluZyBjaGFyYWN0ZXJzIGFyZSBkZWZpbml0ZWx5IHVudXN1YWwuIFRoZXkgaW1tZWRpYXRlbHkgc3VnZ2VzdCBzb21lIGtpbmQgb2Ygc3BlY2lhbCBoYW5kbGluZywgcG90ZW50aWFsbHkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIG5hbWluZyBjb252ZW50aW9ucywgb3IgYSBzY29waW5nIG1lY2hhbmlzbS4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuVGhlIGZhY3QgdGhhdCBib3RoIHZlcnNpb25zIGV4aXN0IGxpa2VseSBtZWFucyB0aGVyZSdzIGEgZGlzdGluY3Rpb24gaW4gaG93IFwibmFtZVwiIGlzIGJlaW5nIHRyZWF0ZWQuIEkgc3VzcGVjdCB0aGF0IGBfX19fIyNuYW1lYCBtaWdodCByZXByZXNlbnQgYSBtb3JlIGZ1bmRhbWVudGFsLCBpbnRlcm5hbCwgb3IgcGVyaGFwcyBnbG9iYWxseSBzY29wZWQgdmVyc2lvbiBvZiBcIm5hbWVcIiBjb21wYXJlZCB0byB0aGUgc2ltcGxlIGBuYW1lYCBkZWZpbml0aW9uLiBQZXJoYXBzIHRoZSB1bmRlcnNjb3JlcyBkZW5vdGUgYW4gaW50ZXJuYWwgYXR0cmlidXRlLCBhIGhpZGRlbiB2YXJpYWJsZSwgb3IgYSB1bmlxdWUgaWRlbnRpZmllciB1c2VkIHRvIGF2b2lkIG5hbWluZyBjb25mbGljdHMuIFRoZSBkb3VibGUgaGFzaCBtaWdodCBpbmRpY2F0ZSBhIG1hY3JvIGV4cGFuc2lvbiwgYnV0IEkgd291bGQgbmVlZCBtb3JlIGNvbnRleHQgdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgcmVsYXRlZCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhIHRlbXBsYXRpbmcgc3lzdGVtLiBUaGUgZmFjdCB0aGF0IHRoZSB0ZXh0IGRvZXMgbm90IHN1cHBseSBtb3JlIGNvbnRleHQgaXMgcHJvYmxlbWF0aWMgYW5kIEkgd2lsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUgb3IgZW52aXJvbm1lbnQgdG8gd29yayBvdXQgdGhlIGZ1bGwgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTQ6NTAuNDkzMjAyMzYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHQjZGVmaW5lIEJQRl9DQUxMX3goeCwgYXR0ciwgbmFtZSwgLi4uKVxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxMTpcXHRcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4gNjEyOlxcdFxcdHU2NCBfX19fIyNuYW1lKF9fQlBGX01BUCh4LCBfX0JQRl9ERUNMX0FSR1MsIF9fQlBGX1YsIF9fVkFfQVJHU19fKSk7ICAgXFxcXFxcbiA2MTM6XFx0XFx0dHlwZWRlZiB1NjQgKCpidGZfIyNuYW1lKShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpOyBcXFxcXFxuIDYxNDpcXHRcXHRhdHRyIHU2NCBuYW1lKF9fQlBGX1JFRyh4LCBfX0JQRl9ERUNMX1JFR1MsIF9fQlBGX04sIF9fVkFfQVJHU19fKSk7ICAgIFxcXFxcXG4gNjE1OlxcdFxcdGF0dHIgdTY0IG5hbWUoX19CUEZfUkVHKHgsIF9fQlBGX0RFQ0xfUkVHUywgX19CUEZfTiwgX19WQV9BUkdTX18pKSAgICAgXFxcXFxcbiA2MTY6XFx0XFx0e1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYxNzpcXHRcXHRcXHRyZXR1cm4gKChidGZfIyNuYW1lKV9fX18jI25hbWUpKF9fQlBGX01BUCh4LF9fQlBGX0NBU1QsX19CUEZfTixfX1ZBX0FSR1NfXykpO1xcXFxcXG4gNjE4OlxcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcXFxcbiA2MTk6XFx0XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFxcXFxuIDYyMDpcXHRcXHR1NjQgX19fXyMjbmFtZShfX0JQRl9NQVAoeCwgX19CUEZfREVDTF9BUkdTLCBfX0JQRl9WLCBfX1ZBX0FSR1NfXykpXFxuIDYyMTpcXHRcXG4gNjIyOlxcdCNkZWZpbmUgX19OT0FUVFJcXG4gNjIzOlxcdCNkZWZpbmUgQlBGX0NBTExfMChuYW1lLCAuLi4pXFx0QlBGX0NBTExfeCgwLCBfX05PQVRUUiwgbmFtZSwgX19WQV9BUkdTX18pXFxuIDYyNDpcXHQjZGVmaW5lIEJQRl9DQUxMXzEobmFtZSwgLi4uKVxcdEJQRl9DQUxMX3goMSwgX19OT0FUVFIsIG5hbWUsIF9fVkFfQVJHU19fKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NDo1MC40OTMzNDM2NTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NTk4ODI2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBSZWRpcmVjdCBhbmQgVHJhZmZpYyBDb250cm9sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBCUEYgcmVkaXJlY3QgZnVuY3Rpb25zOiBgYnBmX3JlZGlyZWN0YCwgYGJwZl9yZWRpcmVjdF9wZWVyYCwgYW5kIGBicGZfcmVkaXJlY3RfbmVpZ2hgLiBBbHNvLCB0aGF0IGB0Y2ZfcWV2ZW50X2hhbmRsZWAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBpcyByZWxldmFudC4gTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGxpa2VseSByZXF1aXJlZCBmb3IgdGhpcy5cblxuRnJvbSB0aGUgcGF0Y2gsIEkgY2FuIHNlZSBtb2RpZmljYXRpb25zIGluIHNldmVyYWwgdHJhZmZpYyBjb250cm9sIChUQykgc2NoZWR1bGVyIGZpbGVzOiBgbmV0L3NjaGVkL3NjaF9jYWtlLmNgLCBgc2NoX2Ryci5jYCwgYHNjaF9kdWFscGkyLmNgLCBgc2NoX2V0cy5jYCwgYHNjaF9mcV9jb2RlbC5jYCwgYHNjaF9mcV9waWUuY2AsIGBzY2hfaGZzYy5jYCwgYHNjaF9odGIuY2AsIGBzY2hfbXVsdGlxLmNgLCBgc2NoX3ByaW8uY2AsIGBzY2hfcWZxLmNgLCBgc2NoX3NmYi5jYCwgYW5kIGBzY2hfc2ZxLmNgLiBBZGRpdGlvbmFsbHksIGBuZXQvc2NoZWQvY2xzX2FwaS5jYCBhbmQgYG5ldC9jb3JlL2ZpbHRlci5jYCBhcmUgYWxzbyBpbnZvbHZlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UnbGwgbmVlZCBgTkVUX1NDSF9DQUtFYCwgYE5FVF9TQ0hfRFJSYCwgYE5FVF9TQ0hfRFVBTFBJMmAsIGBORVRfU0NIX0VUU2AsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hfRlFfUElFYCwgYE5FVF9TQ0hfSEZTQ2AsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX01VTFRJUWAsIGBORVRfU0NIX1BSSU9gLCBgTkVUX1NDSF9RRlFgLCBgTkVUX1NDSF9TRkJgLCBhbmQgYE5FVF9TQ0hfU0ZRYCBlbmFibGVkLiBXZSBhbHNvIHNlZSB0aGF0IGBORVRfU0NIX1JFRGAgaGFzIGJlZW4gYWRkZWQgdG8gc2VsZnRlc3RzLCBzbyB3ZSdsbCBub3RlIHRoYXQuIEltcG9ydGFudGx5LCB3ZSdyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYE5FVF9DTFNfQUNUYCBhbmQgYE5FVF9TQ0hFRGAgZW5hYmxlZCBhcyB3ZWxsLlxuXG5Ob3csIEkgc2hvdWxkIGludmVzdGlnYXRlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMsIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZSBgdGNmX3FldmVudF9oYW5kbGVgIGZ1bmN0aW9uLCBzaW5jZSB0aGF0IHNlZW1zIGxpa2UgYSBjb3JlIGVsZW1lbnQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NToyNi40NTMyMzA2NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAyNDc2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3FldmVudF9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTYzMj1pbnQgdGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2Uoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgbmxhdHRyICpibG9ja19pbmRleF9hdHRyLFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9NjU2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDAzNT1FWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDAzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjYtfVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMC1cXHRcXHRcXHRcXHQgICBxLVxcdTAwM2VzdGF0cy5wcm9iX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAyLVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXFx0XFx0XFx0XFx0ICAgcS1cXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlxcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFxcdTAwMjZxLVxcdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXFx0aWYgKCFza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU1OjI4Ljk3MzQ4NjM4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODc2ODMyMjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgTmV0d29yayBTY2hlZHVsZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGNvZGUgY2hhbmdlcywgdGhhdCBgdGNmX3FldmVudF9oYW5kbGVgIGlzIGRlZmluaXRlbHkga2V5LCBhbmQgaXQncyB1c2VkIGluIGBuZXQvc2NoZWQvc2NoX3JlZC5jYC4gVGhlIHNlbGZ0ZXN0IGlzIGFkZGluZyBgQ09ORklHX05FVF9TQ0hfUkVEPXlgLCB3aGljaCBtYWtlcyBpdCBhIGNydWNpYWwgdGVzdC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhvc2UgQlBGIGhlbHBlcnM6IGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhleSdyZSBCUEYgaGVscGVycywgc28gd2UnbGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NDSEVEYCB0byBiZSBpbiB0aGUgY29uZmlnLiBUaGUgcGF0Y2ggaW1wYWN0cyBgdGNmX2NsYXNzaWZ5X3FkaXNjYCB0b28sIHdoaWNoIGlzIGNhbGxlZCBieSAqbG9hZHMqIG9mIHFkaXNjcy5cblxuT3JpZ2luYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgbGlzdGluZyBvdXQgYSB0b24gb2YgYE5FVF9TQ0hfKmAgY29uZmlnczogYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGBORVRfU0NIX0RSUmAsIGBORVRfU0NIX0RVQUxQSTJgLCBgTkVUX1NDSF9FVFNgLCBgTkVUX1NDSF9GUV9DT0RFTGAsIGBORVRfU0NIX0ZRX1BJRWAsIGBORVRfU0NIX0hGU0NgLCBgTkVUX1NDSF9NVUxUSVFgLCBgTkVUX1NDSF9QUklPYCwgYE5FVF9TQ0hfUUZRYCwgYE5FVF9TQ0hfU0ZCYCwgYW5kIGBORVRfU0NIX1NGUWAuIEJ1dCB0aGF0J3MgcHJvYmFibHkgb3ZlcmtpbGwuIFdlIGNhbiBqdXN0IGZvY3VzIG9uIHRoZSBjb3JlIG9uZXMgdGhhdCBhcmUgaW52b2x2ZWQsIGxpa2UgYE5FVF9TQ0hfUkVEYCBhbmQgYE5FVF9TQ0hfSFRCYCwgcGx1cyBlaXRoZXIgYE5FVF9DTFNfQlBGYCBvciBgTkVUX1NDSF9CUEZgIHNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byBCUEYgZmlsdGVycy4gVGhlIHNlbGZ0ZXN0IGFscmVhZHkgc2V0cyBgQ09ORklHX05FVF9TQ0hfUkVEPXlgLCBgQ09ORklHX05FVF9TQ0hfQlBGPXlgLCBhbmQgYENPTkZJR19ORVRfU0NIX0hUQj15YC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWdzIHRvIGJlIGNvbnNpZGVyZWQuXG5cbkFscmlnaHQsIGxldCdzIHBlZWsgYXQgYHRjZl9jbGFzc2lmeV9xZGlzY2AgaW4gYGluY2x1ZGUvbmV0L3BrdF9jbHMuaGAuIEl0J3MgdXNlZCBieSBgY2FrZV9jbGFzc2lmeWAsIGBkcnJfY2xhc3NpZnlgLCBgZHVhbHBpMl9za2JfY2xhc3NpZnlgLCBgZXRzX2NsYXNzaWZ5YCwgYGZxX2NvZGVsX2NsYXNzaWZ5YCwgYGZxX3BpZV9jbGFzc2lmeWAsIGBoZnNjX2NsYXNzaWZ5YCwgYGh0Yl9jbGFzc2lmeWAsIGBtdWx0aXFfY2xhc3NpZnlgLCBgcHJpb19jbGFzc2lmeWAsIGBxZnFfY2xhc3NpZnlgLCBgc2ZiX2NsYXNzaWZ5YCwgYW5kIGBzZnFfY2xhc3NpZnlgLlxuXG5TbywgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAuIEknbSBhbHNvIGNvbnNpZGVyaW5nIGxpc3Rpbmcgc29tZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGUgaW5saW5lIGB0Y2ZfY2xhc3NpZnlfcWRpc2NgIGZvciBmb2N1cyBsaWtlIGBodGJfY2xhc3NpZnlgLCBgZnFfY29kZWxfY2xhc3NpZnlgLCBhbmQgYGNha2VfY2xhc3NpZnlgLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBgYnBmX3JlZGlyZWN0YCBpcyBhY3R1YWxseSBhIHN5bWJvbC4gWWVwLCBpdCdzIGRlZmluZWQgdmlhIGBCUEZfQ0FMTF8yYCwgd2hpY2ggZG9lcyBpbmRlZWQgY3JlYXRlIGJvdGggYGJwZl9yZWRpcmVjdGAgYW5kIGBfX19fYnBmX3JlZGlyZWN0YC4gVGhhdCdzIGdvb2Q7IGl0J3MgYSB2YWxpZCBzeW1ib2wgdG8gY29uc2lkZXIuIEFsc28sIGB0Y2ZfcWV2ZW50X2hhbmRsZWAgaXMgZXhwb3J0ZWQuXG5cblNvIG15IGZpbmFsIGNvbmZpZyBsaXN0IHdpbGwgYmU6IGBORVRfU0NIX1JFRGAsIGBORVRfU0NIX0hUQmAsIGBORVRfU0NIX0JQRmAsIGFuZCBgTkVUX0NMU19CUEZgLiBJJ2xsIGFsc28gYWRkIGBORVRfU0NIX0NBS0VgIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAgYXMgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgdXNlZCBpbiByZWFsIHdvcmxkIHNjZW5hcmlvcy5cblxuVWx0aW1hdGVseSwgdGhlIHJlYXNvbiBmb3IgdGhpcyBhbmFseXNpcyBpcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IHdlIGhhbmRsZSBgVENfQUNUX1JFRElSRUNUYCBpbiBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjaGFuZ2luZyBpdCB0byBgVENfQUNUX1NIT1RgLiBBbHNvLCB0aGUgcGF0Y2ggdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycy4gVGhpcyBpbXBhY3RzIG11bHRpcGxlIHFkaXNjcyBhbmQgQlBGIHJlZGlyZWN0IGZ1bmN0aW9uYWxpdHkgd2hpY2ggY291bGQgYmUgZXhwb3NlZC5cblxuTGV0J3MgcmVmaW5lIHRob3NlIGZvY3VzIHN5bWJvbHM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGFuZCBgZnFfY29kZWxfY2xhc3NpZnlgLiBBbmQgYWdhaW4sIEknbGwgdmVyaWZ5IGBicGZfcmVkaXJlY3RgIGlzIGEgc3ltYm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxOCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1Njo1Ny43NDE4MTIwNDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDg1MTM5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZGlyZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgOTA1IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdD0zMT1LZXJuZWwgQlBGXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzItLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0OjMzOmJwZl9yZWRpcmVjdF9tYXAoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM0LV5eXl5eXl5eXl5eXl5eXl5eXlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3QtMzYtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6Mzc6ICAgICBsb25nIGJwZl9yZWRpcmVjdF9tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdTMyIGtleSwgdTY0IGZsYWdzKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9jcHVtYXAucnN0LTM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q9MTAyPVRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGAgY2FsbGVkXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0xNTItXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2NwdW1hcC5yc3Q6MTUzOiAgICAgICAgcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNmNwdV9tYXAsIGNwdV9kZXN0LCAwKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfY3B1bWFwLnJzdC0xNTQtICAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTU9QlBGX01BUF9UWVBFX0RFVk1BUCBhbmQgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xMi1gYEJQRl9NQVBfVFlQRV9ERVZNQVBgYCBhbmQgYGBCUEZfTUFQX1RZUEVfREVWTUFQX0hBU0hgYCBhcmUgQlBGIG1hcHMgcHJpbWFyaWx5XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MTM6dXNlZCBhcyBiYWNrZW5kIG1hcHMgZm9yIHRoZSBYRFAgQlBGIGhlbHBlciBjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMTQtYGBCUEZfTUFQX1RZUEVfREVWTUFQYGAgaXMgYmFja2VkIGJ5IGFuIGFycmF5IHRoYXQgdXNlcyB0aGUga2V5IGFzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0zMD1LZXJuZWwgQlBGXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzEtLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0OjMyOmJwZl9yZWRpcmVjdF9tYXAoKVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTMzLV5eXl5eXl5eXl5eXl5eXl5eXlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzUtXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3Q6MzY6ICAgIGxvbmcgYnBmX3JlZGlyZWN0X21hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5LCB1NjQgZmxhZ3MpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX2Rldm1hcC5yc3QtMzctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdD0xNzM9aW5ncmVzcyBgYGlmaW5kZXhgYCBhcyB0aGUgYGBrZXlgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE4MS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdDoxODI6ICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2Zm9yd2FyZF9tYXAsIGluZGV4LCAwKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfZGV2bWFwLnJzdC0xODMtICAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0PTE4Nj1hbGwgdGhlIGludGVyZmFjZXMgaW4gdGhlIGBgdHhfcG9ydGBgIGRldm1hcC5cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5Mi0gICAge1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0OjE5MzogICAgICAgIHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFxcdTAwMjZ0eF9wb3J0LCAwLCBCUEZfRl9CUk9BRENBU1QgfCBCUEZfRl9FWENMVURFX0lOR1JFU1MpO1xcbkRvY3VtZW50YXRpb24vYnBmL21hcF9kZXZtYXAucnN0LTE5NC0gICAgfVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9MTE9VGhlIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGlzIHVzZWQgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXJcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxMjpjYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICdkZXZtYXAnIGFuZCAnY3B1bWFwJy5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMy1UaGlzIG1hcCB0eXBlIHJlZGlyZWN0cyByYXcgWERQIGZyYW1lcyB0byBgQUZfWERQYF8gc29ja2V0cyAoWFNLcyksIGEgbmV3IHR5cGUgb2ZcXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTU5PUtlcm5lbCBCUEZcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02MC0tLS0tLS0tLS0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6NjE6YnBmX3JlZGlyZWN0X21hcCgpXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjItXl5eXl5eXl5eXl5eXl5eXl5eXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02NC1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2NTogICAgbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXksIHU2NCBmbGFncylcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0PTEzOD1UaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGNhbGxlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTU2LVxcdFxcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ4c2tzX21hcCwgXFx1MDAyNmluZGV4KSlcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNTc6XFx0XFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhza3NfbWFwLCBpbmRleCwgMCk7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTU4LVxcdFxcdHJldHVybiBYRFBfUEFTUztcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTE4PXJlZGlyZWN0IGluZ3Jlc3MgZnJhbWVzIHRvIG90aGVyIFhEUCBlbmFibGVkIG5ldGRldnMsIHVzaW5nIHRoZVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjE5OmJwZl9yZWRpcmVjdF9tYXAoKSBmdW5jdGlvbi4gQUZfWERQIHNvY2tldHMgZW5hYmxlIHRoZSBwb3NzaWJpbGl0eSBmb3JcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMC1YRFAgcHJvZ3JhbXMgdG8gcmVkaXJlY3QgZnJhbWVzIHRvIGEgbWVtb3J5IGJ1ZmZlciBpbiBhIHVzZXItc3BhY2VcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTIyMz1PbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjQ6aXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI1LWZyYW1lIHRvIGEgc29ja2V0Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjgwPXJvdW5kLXJvYmluIGV4YW1wbGUgb2YgZGlzdHJpYnV0aW5nIHBhY2tldHMgaXMgc2hvd24gYmVsb3c6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0zMDEtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MzAyOiAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrc19tYXAsIHJyLCBYRFBfRFJPUCk7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMzAzLSAgIH1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTU2Mj1UaGUgWERQIGNvZGUgc2FtcGxlIGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC01NzItICAgICAgIGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ4c2tzX21hcCwgXFx1MDAyNmluZGV4KSlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo1NzM6ICAgICAgICAgICByZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrc19tYXAsIGluZGV4LCAwKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC01NzQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdD05MT1jYW4gb3ZlcnJpZGUgc29tZSBvZiB0aGUgbWV0YWRhdGEgdXNlZCBmb3IgYnVpbGRpbmcgYGBza2JzYGAuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3QtOTItXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hkcC1yeC1tZXRhZGF0YS5yc3Q6OTM6YnBmX3JlZGlyZWN0X21hcFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy94ZHAtcngtbWV0YWRhdGEucnN0LTk0LT09PT09PT09PT09PT09PT1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05NS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdDo5NjpgYGJwZl9yZWRpcmVjdF9tYXBgYCBjYW4gcmVkaXJlY3QgdGhlIGZyYW1lIHRvIGEgZGlmZmVyZW50IGRldmljZS5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGRwLXJ4LW1ldGFkYXRhLnJzdC05Ny1Tb21lIGRldmljZXMgKGxpa2UgdmlydHVhbCBldGhlcm5ldCBsaW5rcykgc3VwcG9ydCBydW5uaW5nIGEgc2Vjb25kIFhEUFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD03ODE9c3RydWN0IGJwZl9uaF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC03ODgtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo3ODk6LyogZmxhZ3MgZm9yIGJwZl9yZWRpcmVjdF9pbmZvIGtlcm5fZmxhZ3MgKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5MC0jZGVmaW5lIEJQRl9SSV9GX1JGX05PX0RJUkVDVFxcdEJJVCgwKVxcdC8qIG5vIG5hcGlfZGlyZWN0IG9uIHJldHVybl9mcmFtZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC03OTUtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo3OTY6c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTc5Ny1cXHR1NjQgdGd0X2luZGV4O1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MDc9c3RydWN0IGJwZl9uZXRfY29udGV4dCB7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDo4MDg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvIHJpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODA5LVxcdHN0cnVjdCBsaXN0X2hlYWQgY3B1X21hcF9mbHVzaF9saXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD04MzI9c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX25ldF9jb250ZXh0ICpicGZfbmV0X2N0eF9nZXQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtODM2LVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6ODM3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpicGZfbmV0X2N0eF9nZXRfcmkodm9pZClcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTgzOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyMzY9c3RhdGljIGlubGluZSBib29sIHhkcF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjM3LXtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyMzg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIzOS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX3NldF9yZXR1cm5fZnJhbWVfbm9fZGlyZWN0KHZvaWQpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjQ0LXtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyNDU6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTI0Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTI1MD1zdGF0aWMgaW5saW5lIHZvaWQgeGRwX2NsZWFyX3JldHVybl9mcmFtZV9ub19kaXJlY3Qodm9pZClcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyNTEte1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTI1MjpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjUzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xODA4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBfX2JwZl94ZHBfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTgxMS17XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxODEyOlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4MTMtXFx0Y29uc3QgdTY0IGFjdGlvbl9tYXNrID0gWERQX0FCT1JURUQgfCBYRFBfRFJPUCB8IFhEUF9QQVNTIHwgWERQX1RYO1xcbi0tXFxuaW5jbHVkZS9saW51eC9pZl9hcnAuaD00ND1zdGF0aWMgaW5saW5lIGJvb2wgZGV2X2lzX21hY19oZWFkZXJfeG1pdChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9pZl9hcnAuaC01Ni1cXHQvKiBQUFAgYWRkcyBpdHMgbDIgaGVhZGVyIGF1dG9tYXRpY2FsbHkgaW4gcHBwX3N0YXJ0X3htaXQoKS5cXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oOjU3OlxcdCAqIFRoaXMgbWFrZXMgaXQgbG9vayBsaWtlIGFuIGwzIGRldmljZSB0byBfX2JwZl9yZWRpcmVjdCgpIGFuZCB0Y2ZfbWlycmVkX2luaXQoKS5cXG5pbmNsdWRlL2xpbnV4L2lmX2FycC5oLTU4LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oPTYxOD1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9zZXRfcmVkaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrX3JlZGlyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9za21zZy5oLTYyNS1cXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmg6NjI2OnN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnNrYl9icGZfcmVkaXJlY3RfZmV0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5pbmNsdWRlL2xpbnV4L3NrbXNnLmgtNjI3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MzItXFxuaW5jbHVkZS9saW51eC9za21zZy5oOjYzMzpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2JwZl9yZWRpcmVjdF9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvc2ttc2cuaC02MzQte1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjEtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyMjogKiBcXHRcXHRJbiBjb21wYXJpc29uIHdpdGggKipicGZfcmVkaXJlY3QqKlxcXFwgKCkgaGVscGVyLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yMjIzLSAqIFxcdFxcdCoqYnBmX2Nsb25lX3JlZGlyZWN0KipcXFxcICgpIGhhcyB0aGUgYXNzb2NpYXRlZCBjb3N0IG9mXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjQtICogXFx0XFx0ZHVwbGljYXRpbmcgdGhlIHBhY2tldCBidWZmZXIsIGJ1dCB0aGlzIGNhbiBiZSBleGVjdXRlZCBvdXQgb2ZcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjIyNTogKiBcXHRcXHR0aGUgZUJQRiBwcm9ncmFtLiBDb252ZXJzZWx5LCAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSBpcyBtb3JlXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTIyMjYtICogXFx0XFx0ZWZmaWNpZW50LCBidXQgaXQgaXMgaGFuZGxlZCB0aHJvdWdoIGFuIGFjdGlvbiBjb2RlIHdoZXJlIHRoZVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTI0MzktICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MjQ0MDogKiBsb25nIGJwZl9yZWRpcmVjdCh1MzIgaWZpbmRleCwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0yNDQxLSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1NC0gKiBcXHRcXHRUaGUgc2FtZSBlZmZlY3QgY2FuIGFsc28gYmUgYXR0YWluZWQgd2l0aCB0aGUgbW9yZSBnZW5lcmljXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjI0NTU6ICogXFx0XFx0KipicGZfcmVkaXJlY3RfbWFwKipcXFxcICgpLCB3aGljaCB1c2VzIGEgQlBGIG1hcCB0byBzdG9yZSB0aGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMjQ1Ni0gKiBcXHRcXHRyZWRpcmVjdCB0YXJnZXQgaW5zdGVhZCBvZiBwcm92aWRpbmcgaXQgZGlyZWN0bHkgdG8gdGhlIGhlbHBlci5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDUxLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjMwNTI6ICogbG9uZyBicGZfcmVkaXJlY3RfbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBrZXksIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzA1My0gKiBcXHREZXNjcmlwdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTMwNzAtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MzA3MTogKiBcXHRcXHRTZWUgYWxzbyAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSwgd2hpY2ggb25seSBzdXBwb3J0cyByZWRpcmVjdGluZ1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zMDcyLSAqIFxcdFxcdHRvIGFuIGlmaW5kZXgsIGJ1dCBkb2Vzbid0IHJlcXVpcmUgYSBtYXAgdG8gZG8gc28uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMzUyMy0gKlxcdFxcdFxcdGFuZCAqcGFyYW1zKi1cXHUwMDNlc21hYyB3aWxsIG5vdCBiZSBzZXQgYXMgb3V0cHV0LiBBIGNvbW1vblxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDozNTI0OiAqXFx0XFx0XFx0dXNlIGNhc2UgaXMgdG8gY2FsbCAqKmJwZl9yZWRpcmVjdF9uZWlnaCoqXFxcXCAoKSBhZnRlclxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0zNTI1LSAqXFx0XFx0XFx0ZG9pbmcgKipicGZfZmliX2xvb2t1cCoqXFxcXCAoKS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC00NDg0LSAqXFx0XFx0d2lsbCBjYXVzZSAqc2tiKiB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIHNwZWNpZmllZCBzb2NrZXQuXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjQ0ODU6ICpcXHRcXHRTdWJzZXF1ZW50IHJlZGlyZWN0aW9uIG9mICpza2IqIHZpYSAgKipicGZfcmVkaXJlY3QqKlxcXFwgKCksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTQ0ODYtICpcXHRcXHQqKmJwZl9jbG9uZV9yZWRpcmVjdCoqXFxcXCAoKSBvciBvdGhlciBtZXRob2RzIG91dHNpZGUgb2YgQlBGIG1heVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwMjctICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTAyODogKiBsb25nIGJwZl9yZWRpcmVjdF9uZWlnaCh1MzIgaWZpbmRleCwgc3RydWN0IGJwZl9yZWRpcl9uZWlnaCAqcGFyYW1zLCBpbnQgcGxlbiwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDI5LSAqIFxcdERlc2NyaXB0aW9uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMS0gKiBcXHRcXHRhbmQgZmlsbCBpbiBMMiBhZGRyZXNzZXMgZnJvbSBuZWlnaGJvcmluZyBzdWJzeXN0ZW0uIFRoaXMgaGVscGVyXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwMzI6ICogXFx0XFx0aXMgc29tZXdoYXQgc2ltaWxhciB0byAqKmJwZl9yZWRpcmVjdCoqXFxcXCAoKSwgZXhjZXB0IHRoYXQgaXRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTAzMy0gKiBcXHRcXHRwb3B1bGF0ZXMgTDIgYWRkcmVzc2VzIGFzIHdlbGwsIG1lYW5pbmcsIGludGVybmFsbHksIHRoZSBoZWxwZXJcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc3LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjUwNzg6ICogbG9uZyBicGZfcmVkaXJlY3RfcGVlcih1MzIgaWZpbmRleCwgdTY0IGZsYWdzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDc5LSAqIFxcdERlc2NyaXB0aW9uXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwODAtICogXFx0XFx0UmVkaXJlY3QgdGhlIHBhY2tldCB0byBhbm90aGVyIG5ldCBkZXZpY2Ugb2YgaW5kZXggKmlmaW5kZXgqLlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDgxOiAqIFxcdFxcdFRoaXMgaGVscGVyIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gKipicGZfcmVkaXJlY3QqKlxcXFwgKCksIGV4Y2VwdFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC01MDgyLSAqIFxcdFxcdHRoYXQgdGhlIHJlZGlyZWN0aW9uIGhhcHBlbnMgdG8gdGhlICppZmluZGV4KicgcGVlciBkZXZpY2UgYW5kXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyNi0gKlxcdFxcdEJQRl9TS0JfVFNUQU1QX0RFTElWRVJZX01PTk8gaXMgdGhlIG9ubHkgdHN0YW1wIHRoYXRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTYyNzogKlxcdFxcdHdpbGwgYmUga2VwdCBkdXJpbmcgYnBmX3JlZGlyZWN0XyooKS4gIEEgbm9uIHplcm9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYyOC0gKlxcdFxcdCp0c3RhbXAqIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBCUEZfU0tCX1RTVEFNUF9ERUxJVkVSWV9NT05PXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTYzNy0gKlxcdFxcdG1vbm8gZGVsaXZlcnkgdGltZSB0byBfX3NrX2J1ZmYtXFx1MDAzZXRzdGFtcCBhbmQgdGhlblxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1NjM4OiAqXFx0XFx0YnBmX3JlZGlyZWN0XyooKSB0byB0aGUgZWdyZXNzIG9mIGFuIGlmYWNlLiAgRm9yIGV4YW1wbGUsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTU2MzktICpcXHRcXHRjaGFuZ2luZyB0aGUgKHJjdikgdGltZXN0YW1wIGluIF9fc2tfYnVmZi1cXHUwMDNldHN0YW1wIGF0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjU2NDA6ICpcXHRcXHRpbmdyZXNzIHRvIGEgbW9ubyBkZWxpdmVyeSB0aW1lIGFuZCB0aGVuIGJwZl9yZWRpcmVjdF8qKClcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTY0MS0gKlxcdFxcdHRvIHNjaF9mcUBwaHktZGV2Llxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTYzMzI9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjMzNjovKiBGbGFncyBmb3IgYnBmX3JlZGlyZWN0IGFuZCBicGZfcmVkaXJlY3RfbWFwIGhlbHBlcnMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjMzNy1lbnVtIHtcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtOS0gKiBUaGUgJ2NwdW1hcCcgaXMgcHJpbWFyaWx5IHVzZWQgYXMgYSBiYWNrZW5kIG1hcCBmb3IgWERQIEJQRiBoZWxwZXJcXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjEwOiAqIGNhbGwgYnBmX3JlZGlyZWN0X21hcCgpIGFuZCBYRFBfUkVESVJFQ1QgYWN0aW9uLCBsaWtlICdkZXZtYXAnLlxcbmtlcm5lbC9icGYvY3B1bWFwLmMtMTEtICpcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtNS0vKiBEZXZtYXBzIHByaW1hcnkgdXNlIGlzIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyIGNhbGxcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjY6ICogYnBmX3JlZGlyZWN0X21hcCgpLiBCZWNhdXNlIFhEUCBpcyBtb3N0bHkgY29uY2VybmVkIHdpdGggcGVyZm9ybWFuY2Ugd2VcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTctICogc3BlbnQgc29tZSBlZmZvcnQgdG8gZW5zdXJlIHRoZSBkYXRhcGF0aCB3aXRoIHJlZGlyZWN0IG1hcHMgZG9lcyBub3QgdXNlXFxuLS1cXG5rZXJuZWwvYnBmL2Rldm1hcC5jPTE4Nj1zdGF0aWMgdm9pZCBkZXZfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA0LVxcbmtlcm5lbC9icGYvZGV2bWFwLmM6MjA1OlxcdC8qIGJwZl9yZWRpcmVjdF9pbmZvLVxcdTAwM2VtYXAgaXMgYXNzaWduZWQgaW4gX19icGZfeGRwX3JlZGlyZWN0X21hcCgpXFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDYtXFx0ICogZHVyaW5nIE5BUEkgY2FsbGJhY2sgYW5kIGNsZWFyZWQgYWZ0ZXIgdGhlIFhEUCByZWRpcmVjdC4gVGhlcmUgaXMgbm9cXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIwNzpcXHQgKiBleHBsaWNpdCBSQ1UgcmVhZCBzZWN0aW9uIHdoaWNoIHByb3RlY3RzIGJwZl9yZWRpcmVjdF9pbmZvLVxcdTAwM2VtYXAgYnV0XFxua2VybmVsL2JwZi9kZXZtYXAuYy0yMDgtXFx0ICogbG9jYWxfYmhfZGlzYWJsZSgpIGFsc28gbWFya3MgdGhlIGJlZ2lubmluZyBhbiBSQ1Ugc2VjdGlvbi4gVGhpc1xcbmtlcm5lbC9icGYvZGV2bWFwLmMtMjA5LVxcdCAqIG1ha2VzIHRoZSBjb21wbGV0ZSBzb2Z0aXJxIGNhbGxiYWNrIFJDVSBwcm90ZWN0ZWQuIFRodXMgYWZ0ZXJcXG5rZXJuZWwvYnBmL2Rldm1hcC5jOjIxMDpcXHQgKiBmb2xsb3dpbmcgc3luY2hyb25pemVfcmN1KCkgdGhlcmUgbm8gYnBmX3JlZGlyZWN0X2luZm8tXFx1MDAzZW1hcCA9PSBtYXBcXG5rZXJuZWwvYnBmL2Rldm1hcC5jLTIxMS1cXHQgKiBhc3NpZ25tZW50Llxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTI3Mz1zdGF0aWMgaW50IHhkcF90ZXN0X3J1bl9iYXRjaChzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSAqeGRwLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjc4LVxcdHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMgPSB4ZHAtXFx1MDAzZWZyYW1lcztcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjc5OlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTI4MC1cXHRzdHJ1Y3QgeGRwX3BhZ2VfaGVhZCAqaGVhZDtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTIxNDE9c3RhdGljIGlubGluZSBpbnQgX19icGZfdHhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTYxLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIxNjI6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9ub19tYWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTYzLVxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIxODk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMTkwLVxcdFxcdFxcdFxcdCB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjAyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIyMDM6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyMDQtXFx0XFx0XFx0ICB1MzIgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjA2LVxcdGlmIChkZXZfaXNfbWFjX2hlYWRlcl94bWl0KGRldikpXFxubmV0L2NvcmUvZmlsdGVyLmM6MjIwNzpcXHRcXHRyZXR1cm4gX19icGZfcmVkaXJlY3RfY29tbW9uKHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjIwOC1cXHRlbHNlXFxubmV0L2NvcmUvZmlsdGVyLmM6MjIwOTpcXHRcXHRyZXR1cm4gX19icGZfcmVkaXJlY3Rfbm9fbWFjKHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjIxMC19XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMjEzPXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMjY2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIyNjc6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIyNjgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMwOC0jZWxzZVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMDk6c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzMTAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9uaF9wYXJhbXMgKm5oKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjMxOD1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjM3NS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyMzc2OnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yMzc3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MTktI2Vsc2VcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDIwOnN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9maWx0ZXIuYy0yNDIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfbmhfcGFyYW1zICpuaClcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MjctXFxubmV0L2NvcmUvZmlsdGVyLmM6MjQyODpzdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvZmlsdGVyLmMtMjQyOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX25oX3BhcmFtcyAqbmgpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDQzLVxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ0OlxcdFxcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChza2IsIGRldiwgbmgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDUtXFx0ZWxzZSBpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcXG5uZXQvY29yZS9maWx0ZXIuYzoyNDQ2OlxcdFxcdHJldHVybiBfX2JwZl9yZWRpcmVjdF9uZWlnaF92Nihza2IsIGRldiwgbmgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI0NDctb3V0Olxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjQ2MD1CUEZfQ0FMTF8zKGJwZl9jbG9uZV9yZWRpcmVjdCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNDk2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI0OTc6XFx0cmV0dXJuIF9fYnBmX3JlZGlyZWN0KGNsb25lLCBkZXYsIGZsYWdzKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNDk4LX1cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTI1MTk9aW50IHNrYl9kb19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1MjAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1MjE6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTI1MjItXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTQ0LVxcdHJldHVybiBmbGFncyBcXHUwMDI2IEJQRl9GX05FSUdIID9cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTQ1OlxcdCAgICAgICBfX2JwZl9yZWRpcmVjdF9uZWlnaChza2IsIGRldiwgZmxhZ3MgXFx1MDAyNiBCUEZfRl9ORVhUSE9QID9cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTQ2LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2cmktXFx1MDAzZW5oIDogTlVMTCkgOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NDc6XFx0ICAgICAgIF9fYnBmX3JlZGlyZWN0KHNrYiwgZGV2LCBmbGFncyk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjU0OC1vdXRfZHJvcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU1MzpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NTQte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NTU6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTU2LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU2Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Njk6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3JlZGlyZWN0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzAtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1NzY6QlBGX0NBTExfMihicGZfcmVkaXJlY3RfcGVlciwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1Nzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI1Nzg6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTc5LVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU4OS1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X3BlZXJfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MjU5MTpcXHQuZnVuYyAgICAgICAgICAgPSBicGZfcmVkaXJlY3RfcGVlcixcXG5uZXQvY29yZS9maWx0ZXIuYy0yNTkyLVxcdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU5Ny1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNTk4OkJQRl9DQUxMXzQoYnBmX3JlZGlyZWN0X25laWdoLCB1MzIsIGlmaW5kZXgsIHN0cnVjdCBicGZfcmVkaXJfbmVpZ2ggKiwgcGFyYW1zLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTktXFx0ICAgaW50LCBwbGVuLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI2MDAte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI2MDE6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaTtcXG5uZXQvY29yZS9maWx0ZXIuYy0yNjAyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMjYxNy1cXG5uZXQvY29yZS9maWx0ZXIuYzoyNjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3JlZGlyZWN0X25laWdoX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjI2MTk6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9yZWRpcmVjdF9uZWlnaCxcXG5uZXQvY29yZS9maWx0ZXIuYy0yNjIwLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00Mzg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9hZGp1c3RfbWV0YV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MDEtICpcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDAyOiAqIDEuIFRoZSBicGZfcmVkaXJlY3QoKSBhbmQgYnBmX3JlZGlyZWN0X21hcCgpIGhlbHBlcnMgd2lsbCBsb29rdXAgdGhlIHRhcmdldFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0MDMtICogICAgb2YgdGhlIHJlZGlyZWN0IGFuZCBzdG9yZSBpdCAoYWxvbmcgd2l0aCBzb21lIG90aGVyIG1ldGFkYXRhKSBpbiBhIHBlci1DUFVcXG5uZXQvY29yZS9maWx0ZXIuYzo0NDA0OiAqICAgIHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mby5cXG5uZXQvY29yZS9maWx0ZXIuYy00NDA1LSAqXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NDA3LSAqICAgIGNhbGwgeGRwX2RvX3JlZGlyZWN0KCkgd2hpY2ggd2lsbCB1c2UgdGhlIGluZm9ybWF0aW9uIGluIHN0cnVjdFxcbm5ldC9jb3JlL2ZpbHRlci5jOjQ0MDg6ICogICAgYnBmX3JlZGlyZWN0X2luZm8gdG8gYWN0dWFsbHkgZW5xdWV1ZSB0aGUgZnJhbWUgaW50byBhIG1hcCB0eXBlLXNwZWNpZmljXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQwOS0gKiAgICBidWxrIHF1ZXVlIHN0cnVjdHVyZS5cXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ0NzQ9dTMyIHhkcF9tYXN0ZXJfcmVkaXJlY3Qoc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ3NS17XFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ3NjpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDQ3Ny1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyLCAqc2xhdmU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NDk2PUVYUE9SVF9TWU1CT0xfR1BMKHhkcF9tYXN0ZXJfcmVkaXJlY3QpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ0OTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NDQ5ODpzdGF0aWMgaW5saW5lIGludCBfX3hkcF9kb19yZWRpcmVjdF94c2soc3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSxcXG5uZXQvY29yZS9maWx0ZXIuYy00NDk5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NTIyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50XFxubmV0L2NvcmUvZmlsdGVyLmM6NDUyMzpfX3hkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1MjQtXFx0XFx0XFx0c3RydWN0IHhkcF9mcmFtZSAqeGRwZixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ1OTM9aW50IHhkcF9kb19yZWRpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1OTUte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ1OTY6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ1OTctXFx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cXHUwMDNlbWFwX3R5cGU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NjA3PWludCB4ZHBfZG9fcmVkaXJlY3RfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NjEwLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo0NjExOlxcdHN0cnVjdCBicGZfcmVkaXJlY3RfaW5mbyAqcmkgPSBicGZfbmV0X2N0eF9nZXRfcmkoKTtcXG5uZXQvY29yZS9maWx0ZXIuYy00NjEyLVxcdGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlID0gcmktXFx1MDAzZW1hcF90eXBlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDYyMT1zdGF0aWMgaW50IHhkcF9kb19nZW5lcmljX3JlZGlyZWN0X21hcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDYyNy17XFxubmV0L2NvcmUvZmlsdGVyLmM6NDYyODpcXHRzdHJ1Y3QgYnBmX3JlZGlyZWN0X2luZm8gKnJpID0gYnBmX25ldF9jdHhfZ2V0X3JpKCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNDYyOS1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY3OT1pbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODIte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ2ODM6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2ODQtXFx0ZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUgPSByaS1cXHUwMDNlbWFwX3R5cGU7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzE3PUJQRl9DQUxMXzIoYnBmX3hkcF9yZWRpcmVjdCwgdTMyLCBpZmluZGV4LCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MTgte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3MTk6XFx0c3RydWN0IGJwZl9yZWRpcmVjdF9pbmZvICpyaSA9IGJwZl9uZXRfY3R4X2dldF9yaSgpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTAtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTExOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3JlZGlyZWN0X3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTItXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9uZWlnaDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTEzOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3JlZGlyZWN0X25laWdoX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTQtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9wZWVyOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTE2LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODg0Nz1sd3RfeG1pdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg1OC1cXHRjYXNlIEJQRl9GVU5DX3JlZGlyZWN0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmMtODg2MC1cXHRjYXNlIEJQRl9GVU5DX2Nsb25lX3JlZGlyZWN0Olxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jPTM5PXN0YXRpYyBpbnQgcnVuX2x3dF9icGYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9sd3RfcHJvZyAqbHd0LFxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQ0LVxcbm5ldC9jb3JlL2x3dF9icGYuYzo0NTpcXHQvKiBEaXNhYmxpbmcgQkggaXMgbmVlZGVkIHRvIHByb3RlY3QgcGVyLUNQVSBicGZfcmVkaXJlY3RfaW5mbyBiZXR3ZWVuXFxubmV0L2NvcmUvbHd0X2JwZi5jLTQ2LVxcdCAqIEJQRiBwcm9nIGFuZCBza2JfZG9fcmVkaXJlY3QoKS5cXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmM9NjcxPXN0YXRpYyB2b2lkIHNrX3Bzb2NrX2JhY2tsb2coc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy03MTItXFx0XFx0aW5ncmVzcyA9IHNrYl9icGZfaW5ncmVzcyhza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6NzEzOlxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTcxNC1cXHRcXHRkbyB7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTgzMz1zdGF0aWMgdm9pZCBfX3NrX3Bzb2NrX3phcF9pbmdyZXNzKHN0cnVjdCBza19wc29jayAqcHNvY2spXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTgzNy1cXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19za2IpKSAhPSBOVUxMKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo4Mzg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtODM5LVxcdFxcdHNvY2tfZHJvcChwc29jay1cXHUwMDNlc2ssIHNrYik7XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTk1OD1zdGF0aWMgaW50IHNrX3Bzb2NrX3NrYl9yZWRpcmVjdChzdHJ1Y3Qgc2tfcHNvY2sgKmZyb20sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTk2Mi1cXG5uZXQvY29yZS9za21zZy5jOjk2MzpcXHRza19vdGhlciA9IHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTk2NC1cXHQvKiBUaGlzIGVycm9yIGlzIGEgYnVnZ3kgQlBGIHByb2dyYW0sIGl0IHJldHVybmVkIGEgcmVkaXJlY3RcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTY3LVxcdGlmICh1bmxpa2VseSghc2tfb3RoZXIpKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo5Njg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTY5LVxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTc3LVxcdGlmICghcHNvY2tfb3RoZXIgfHwgc29ja19mbGFnKHNrX290aGVyLCBTT0NLX0RFQUQpKSB7XFxubmV0L2NvcmUvc2ttc2cuYzo5Nzg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtOTc5LVxcdFxcdHNvY2tfZHJvcChmcm9tLVxcdTAwM2Vzaywgc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtOTg0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwc29ja19vdGhlci1cXHUwMDNlaW5ncmVzc19sb2NrKTtcXG5uZXQvY29yZS9za21zZy5jOjk4NTpcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy05ODYtXFx0XFx0c29ja19kcm9wKGZyb20tXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz05OTY9c3RhdGljIGludCBza19wc29ja192ZXJkaWN0X2FwcGx5KHN0cnVjdCBza19wc29jayAqcHNvY2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za21zZy5jLTEwNDgtb3V0X2ZyZWU6XFxubmV0L2NvcmUvc2ttc2cuYzoxMDQ5OlxcdFxcdHNrYl9icGZfcmVkaXJlY3RfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jLTEwNTAtXFx0XFx0dGNwX2VhdF9za2IocHNvY2stXFx1MDAzZXNrLCBza2IpO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMDc1PXN0YXRpYyB2b2lkIHNrX3Bzb2NrX3N0cnBfcmVhZChzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvc2ttc2cuYy0xMDkyLVxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTA5MzpcXHRcXHRza2JfYnBmX3JlZGlyZWN0X2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk0LVxcdFxcdHJldCA9IGJwZl9wcm9nX3J1bl9waW5fb25fY3B1KHByb2csIHNrYik7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk1LVxcdFxcdHNrYl9icGZfc2V0X3N0cnBhcnNlcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTA5NjpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMDk3LVxcdFxcdHNrYi1cXHUwMDNlc2sgPSBOVUxMO1xcbi0tXFxubmV0L2NvcmUvc2ttc2cuYz0xMTk4PXN0YXRpYyBpbnQgc2tfcHNvY2tfdmVyZGljdF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtMTIxNy1cXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG5uZXQvY29yZS9za21zZy5jOjEyMTg6XFx0XFx0c2tiX2JwZl9yZWRpcmVjdF9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmMtMTIxOS1cXHRcXHRyZXQgPSBicGZfcHJvZ19ydW5fcGluX29uX2NwdShwcm9nLCBza2IpO1xcbm5ldC9jb3JlL3NrbXNnLmM6MTIyMDpcXHRcXHRyZXQgPSBza19wc29ja19tYXBfdmVyZChyZXQsIHNrYl9icGZfcmVkaXJlY3RfZmV0Y2goc2tiKSk7XFxubmV0L2NvcmUvc2ttc2cuYy0xMjIxLVxcdH1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYz01OT1pbnQgX2wyX3RvX2lwdHVuX2luZ3Jlc3NfZm9yd2FyZChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtODQtXFx0XFx0XFx0XFx0IF9odG9ubChpcGgtXFx1MDAzZWRhZGRyKSk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjg1OlxcdFxcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIEJQRl9GX0lOR1JFU1MpO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy04Ni1cXHR9IGVsc2UgaWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbi0tXFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTk5LVxcdFxcdFxcdFxcdCBfaHRvbmwoaXA2aC1cXHUwMDNlZGFkZHIuczZfYWRkcjMyWzNdKSk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jOjEwMDpcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0KCppZmluZGV4LCBCUEZfRl9JTkdSRVNTKTtcXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmMtMTAxLVxcdH1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYz0xMDc9aW50IF9sMl90b19pcHR1bl9pbmdyZXNzX3JlZGlyZWN0KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xNDEtXFx0YnBmX3NrYl9zZXRfdHVubmVsX2tleShza2IsIFxcdTAwMjZ0a2V5LCBzaXplb2YodGtleSksIDApO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYzoxNDI6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdCgqaWZpbmRleCwgMCk7XFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE0My19XFxuLS1cXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM9MTQ2PWludCBfbDJfdG9faXA2dHVuX2luZ3Jlc3NfcmVkaXJlY3Qoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbi0tXFxuc2FtcGxlcy9icGYvdGNfbDJfcmVkaXJlY3Rfa2Vybi5jLTE5Ni1cXHRicGZfc2tiX3NldF90dW5uZWxfa2V5KHNrYiwgXFx1MDAyNnRrZXksIHNpemVvZih0a2V5KSwgQlBGX0ZfVFVOSU5GT19JUFY2KTtcXG5zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdF9rZXJuLmM6MTk3OlxcdHJldHVybiBicGZfcmVkaXJlY3QoKmlmaW5kZXgsIDApO1xcbnNhbXBsZXMvYnBmL3RjX2wyX3JlZGlyZWN0X2tlcm4uYy0xOTgtfVxcbi0tXFxuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYz03MD1pbnQgX3JlZGlyZWN0X3htaXQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmMtNzEte1xcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM6NzI6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdChza2ItXFx1MDAzZWlmaW5kZXggKyAxLCAwKTtcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTczLX1cXG4tLVxcbnNhbXBsZXMvYnBmL3RjYnBmMV9rZXJuLmM9NzU9aW50IF9yZWRpcmVjdF9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jLTc2LXtcXG5zYW1wbGVzL2JwZi90Y2JwZjFfa2Vybi5jOjc3OlxcdHJldHVybiBicGZfcmVkaXJlY3Qoc2tiLVxcdTAwM2VpZmluZGV4ICsgMSwgMSk7XFxuc2FtcGxlcy9icGYvdGNicGYxX2tlcm4uYy03OC19XFxuLS1cXG5zYW1wbGVzL2JwZi90ZXN0X2x3dF9icGYuYz0xNjA9c3RhdGljIGlubGluZSBpbnQgX19kb19wdXNoX2xsX2FuZF9yZWRpcmVjdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTY6NTkuODkwMzMwMjYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0ODY5NjIzNzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlN5bWJvbCBWZXJpZmljYXRpb24gYW5kIFBvdGVudGlhbCBSZWRpcmVjdCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgYGJwZl9yZWRpcmVjdGAgc2VlbXMgdG8gYmUgYSBsZWdpdCBzeW1ib2wg4oCTIGdvb2Qgc3RhcnQuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYGJwZl9yZWRpcmVjdF9wZWVyYCBhbmQgYGJwZl9yZWRpcmVjdF9uZWlnaGAgYXJlIGF2YWlsYWJsZS4gVW5kZXJzdGFuZGluZyB0aGVpciByZWxhdGlvbnNoaXAgdG8gYGJwZl9yZWRpcmVjdGAgaXMgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgcmVkaXJlY3QgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LCBhbmQgdGhleSdyZSBsaWtlbHkgdG8gcHJvdmlkZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsaXR5IGlmIHRoZSBiYXNlIHN5bWJvbCBjaGVja3Mgb3V0LiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHVzaW5nIG9uZSBvciB0aGUgb3RoZXIgYmFzZWQgb24gdGhlIGludGVuZGVkIHJlZGlyZWN0IGRlc3RpbmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg5MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjI0Ljc1OTk1NjI2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNjg0MTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVkaXJlY3RfcGVlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3Ny0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo1MDc4OiAqIGxvbmcgYnBmX3JlZGlyZWN0X3BlZXIodTMyIGlmaW5kZXgsIHU2NCBmbGFncylcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNTA3OS0gKiBcXHREZXNjcmlwdGlvblxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MjU2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9yZWRpcmVjdF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1NzUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjU3NjpCUEZfQ0FMTF8yKGJwZl9yZWRpcmVjdF9wZWVyLCB1MzIsIGlmaW5kZXgsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjU3Ny17XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yNTg5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjI1OTA6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcmVkaXJlY3RfcGVlcl9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoyNTkxOlxcdC5mdW5jICAgICAgICAgICA9IGJwZl9yZWRpcmVjdF9wZWVyLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTI1OTItXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDYzPXRjX2Nsc19hY3RfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1MTQtXFx0Y2FzZSBCUEZfRlVOQ19yZWRpcmVjdF9wZWVyOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg1MTU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfcmVkaXJlY3RfcGVlcl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NTE2LVxcdGNhc2UgQlBGX0ZVTkNfZ2V0X3JvdXRlX3JlYWxtOlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzctICpcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NTA3ODogKiBsb25nIGJwZl9yZWRpcmVjdF9wZWVyKHUzMiBpZmluZGV4LCB1NjQgZmxhZ3MpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTUwNzktICogXFx0RGVzY3JpcHRpb25cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3JlZGlyZWN0LmMtNy0gKiBob3N0IGZhY2luZyB2ZXRoIGluIGZ3ZCB3aGljaCBjYWxscyBpbnRvIGkpIGJwZl9yZWRpcmVjdF9uZWlnaCgpIHRvIHBlcmZvcm0gdGhlXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGNfcmVkaXJlY3QuYzo4OiAqIG5laWdoIGFkZHIgcG9wdWxhdGlvbiBhbmQgcmVkaXJlY3Qgb3IgaWkpIGJwZl9yZWRpcmVjdF9wZWVyKCkgZm9yIG5hbWVzcGFjZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RjX3JlZGlyZWN0LmMtOS0gKiBzd2l0Y2ggZnJvbSBpbmdyZXNzIHNpZGU7IGl0IGFsc28gaW5zdGFsbHMgYSBjaGVja2VyIHByb2cgb24gdGhlIGVncmVzcyBzaWRlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM9MjY9aW50IHRjX2RzdChzdHJ1Y3QgX19za19idWZmICpza2IpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTI3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6Mjg6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfU1JDLCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtMjktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jPTMyPWludCB0Y19zcmMoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy0zMy17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jOjM0OlxcdHJldHVybiBicGZfcmVkaXJlY3RfcGVlcihJRklOREVYX0RTVCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfdGNfcGVlci5jLTM1LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYz00ND1pbnQgdGNfc3JjX2wzKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3RjX3BlZXIuYy01OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmM6NjA6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKElGSU5ERVhfRFNULCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF90Y19wZWVyLmMtNjEtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvaHcvbmtfZm9yd2FyZC5icGYuYz0yMj1pbnQgdGNfcmVkaXJlY3RfcGVlcihzdHJ1Y3QgX19za19idWZmICpza2IpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2h3L25rX2ZvcndhcmQuYnBmLmM6NDY6XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9wZWVyKG5ldGtpdF9pZmluZGV4LCAwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ody9ua19mb3J3YXJkLmJwZi5jLTQ3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTc6MjYuNjc2ODAzOTgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzcwMjAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgU3ltYm9sIFZhbGlkaXR5IGZvciBDbGFzc2lmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uYW5kIHllcywgdGhlc2UgYXJlICphYnNvbHV0ZWx5KiB2YWxpZCBzeW1ib2xzIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTm8gYW1iaWd1aXR5IHRoZXJlLiBOb3csIHRoZSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXNlIGFyZSBpbXBsZW1lbnRlZC4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIGBodGJfY2xhc3NpZnlgIGFuZCBgZnFfY29kZWxfY2xhc3NpZnlgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlaXIgb3BlcmF0aW9uIGlzIGFzIGV4cGVjdGVkIGluIHJlbGF0aW9uIHRvIHRoZXNlIHN5bWJvbHM7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGV5IGFyZSBiZWluZyBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYW5kIGFyZSBjb250cmlidXRpbmcgdG8gdGhlIGludGVuZGVkIGJlaGF2aW91ciBvZiB0aGUgc3lzdGVtcy4gVGltZSB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNzIsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozMS44MTM4MjY2OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzQxMzQ5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHRiX2NsYXNzaWZ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfaHRiLmM9MTk4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGh0Yl9zZWFyY2goc3RydWN0IFFkaXNjICpzY2gsIHUzMiBoYW5kbGUpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2h0Yi5jLTIwNS0vKipcXG5uZXQvc2NoZWQvc2NoX2h0Yi5jOjIwNjogKiBodGJfY2xhc3NpZnkgLSBjbGFzc2lmeSBhIHBhY2tldCBpbnRvIGNsYXNzXFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMDctICogQHNrYjogdGhlIHNvY2tldCBidWZmZXJcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtMjE5LSAqL1xcbm5ldC9zY2hlZC9zY2hfaHRiLmM6MjIwOnN0YXRpYyBzdHJ1Y3QgaHRiX2NsYXNzICpodGJfY2xhc3NpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxubmV0L3NjaGVkL3NjaF9odGIuYy0yMjEtXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9odGIuYz02MjA9c3RhdGljIGludCBodGJfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNjI1LVxcdHN0cnVjdCBodGJfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxubmV0L3NjaGVkL3NjaF9odGIuYzo2MjY6XFx0c3RydWN0IGh0Yl9jbGFzcyAqY2wgPSBodGJfY2xhc3NpZnkoc2tiLCBzY2gsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfaHRiLmMtNjI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozMy42NDc5Njg1MzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExMDcxODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25maXJtYXRpb24gYW5kIFZhbGlkYXRpb24qKlxuXG5BaCwgZ29vZC4gSSBzZWUgdGhlIHN5bWJvbCBgaHRiX2NsYXNzaWZ5YCByZWZlcmVuY2VkLCBhbmQgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgaXQuIFllcywgdGhhdCBzeW1ib2wgaXMgaW5kZWVkIHZhbGlkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgY2FuIGNvbmZpcm0gaXRzIGxlZ2l0aW1hY3kgd2l0aG91dCBhbnkgZnVydGhlciBuZWVkIHRvIGRlbHZlIGludG8gaXRzIGRlZmluaXRpb24gb3Igc291cmNlLiBJdCdzIGEga25vd24gcXVhbnRpdHksIGEgcmVjb2duaXphYmxlIGVsZW1lbnQgaW4gdGhlIGxhbmRzY2FwZSBvZiB0aGlzIHNwZWNpZmljIGRvbWFpbi4gTm8gYW1iaWd1aXR5IHRoZXJlLiBUaGlzIHN0cmVhbWxpbmVzIHRoZSBhbmFseXNpcyBhbmQgbW92ZXMgbWUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NzgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1NzozNi43NTg2ODkwNDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzM4MzMxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnFfY29kZWxfY2xhc3NpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTcwPXN0YXRpYyB1bnNpZ25lZCBpbnQgZnFfY29kZWxfaGFzaChjb25zdCBzdHJ1Y3QgZnFfY29kZWxfc2NoZWRfZGF0YSAqcSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy03NS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmM6NzY6c3RhdGljIHVuc2lnbmVkIGludCBmcV9jb2RlbF9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtNzctXFx0XFx0XFx0XFx0ICAgICAgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jPTE4NT1zdGF0aWMgaW50IGZxX2NvZGVsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMtMTk0LVxcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYzoxOTU6XFx0aWR4ID0gZnFfY29kZWxfY2xhc3NpZnkoc2tiLCBzY2gsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYy0xOTYtXFx0aWYgKGlkeCA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjM4LjQ5MjUyNjE2NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQyODA2NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBTeW1ib2wgVmFsaWRpdHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gdGhlIHN5c3RlbSByZWNvZ25pemVzIGBmcV9jb2RlbF9jbGFzc2lmeWAuIEdvb2QuIFRoYXQncyB3aGF0IEkgZXhwZWN0ZWQ7IGl0J3MgYSBrbm93biBzeW1ib2wgd2l0aGluIHRoaXMgY29udGV4dCwgcGFydCBvZiB0aGUgc3RhbmRhcmQgdG9vbGtpdC4gTm93LCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBuZXh0IGVsZW1lbnQ6IGBjYWtlX2NsYXNzaWZ5YC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0J3MgYWxzbyBhIGRlZmluZWQgZnVuY3Rpb24gb3IgbWFjcm8gd2l0aGluIHRoaXMgc2V0dXAuIFRpbWUgdG8gdmVyaWZ5IGl0cyBleGlzdGVuY2UgYW5kIGRlZmluaXRpb24uIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI5NCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU3OjQxLjgzNTMzNTAyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNTczNjQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWtlX2NsYXNzaWZ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9zY2hfY2FrZS5jPTE2Nzg9c3RhdGljIHN0cnVjdCBjYWtlX3Rpbl9kYXRhICpjYWtlX3NlbGVjdF90aW4oc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYy0xNzE4LVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jOjE3MTk6c3RhdGljIHUzMiBjYWtlX2NsYXNzaWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgY2FrZV90aW5fZGF0YSAqKnQsXFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTcyMC1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsb3dfbW9kZSwgaW50ICpxZXJyKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9jYWtlLmM9MTc1OT1zdGF0aWMgczMyIGNha2VfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfY2FrZS5jLTE3NzEtXFx0LyogY2hvb3NlIGZsb3cgdG8gaW5zZXJ0IGludG8gKi9cXG5uZXQvc2NoZWQvc2NoX2Nha2UuYzoxNzcyOlxcdGlkeCA9IGNha2VfY2xhc3NpZnkoc2NoLCBcXHUwMDI2Yiwgc2tiLCBxLVxcdTAwM2Vjb25maWctXFx1MDAzZWZsb3dfbW9kZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9jYWtlLmMtMTc3My1cXHRpZiAoaWR4ID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTc6NDMuNjYxMDc2MTczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MjkxMjkxODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIFN5bWJvbCBWYWxpZGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gWWVzLCBcImNha2VcXF9jbGFzc2lmeVwiIGRvZXMgaW5kZWVkIGxvb2sgbGlrZSBhIHZhbGlkIHN5bWJvbC4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBsZXQncyBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSBcInRjZlxcX3FldmVudFxcX2hhbmRsZS5cIiBHb3R0YSBtYWtlIHN1cmUgdGhhdCBvbmUgY2hlY2tzIG91dCBhcyB3ZWxsLiBJdCdzIGltcG9ydGFudCB0byBiZSBtZXRob2RpY2FsIGFib3V0IHRoZXNlIGNoZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MzEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODowMC45NTIzNjk3NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzYzMjg3NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX3FldmVudF9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTYzMj1pbnQgdGNmX3FldmVudF92YWxpZGF0ZV9jaGFuZ2Uoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgbmxhdHRyICpibG9ja19pbmRleF9hdHRyLFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC02MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjYzNDpzdHJ1Y3Qgc2tfYnVmZiAqdGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjM1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldCk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9NjU2PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDo2NTc6dGNmX3FldmVudF9oYW5kbGUoc3RydWN0IHRjZl9xZXZlbnQgKnFlLCBzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtNjU4LVxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKip0b19mcmVlLCBpbnQgKnJldClcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM9NDAzNT1FWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfdmFsaWRhdGVfY2hhbmdlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwMzYtXFxubmV0L3NjaGVkL2Nsc19hcGkuYzo0MDM3OnN0cnVjdCBza19idWZmICp0Y2ZfcWV2ZW50X2hhbmRsZShzdHJ1Y3QgdGNmX3FldmVudCAqcWUsIHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9jbHNfYXBpLmMtNDAzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSwgaW50ICpyZXQpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjYtfVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDA2NzpFWFBPUlRfU1lNQk9MKHRjZl9xZXZlbnRfaGFuZGxlKTtcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQwNjgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jPTcwPXN0YXRpYyBpbnQgcmVkX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpzY2gsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3JlZC5jLTEwMC1cXHRcXHRcXHRcXHQgICBxLVxcdTAwM2VzdGF0cy5wcm9iX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEwMTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTAyLVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xMjQtXFx0XFx0XFx0XFx0ICAgcS1cXHUwMDNlc3RhdHMuZm9yY2VkX21hcmsgKyAxKTtcXG5uZXQvc2NoZWQvc2NoX3JlZC5jOjEyNTpcXHRcXHRcXHRza2IgPSB0Y2ZfcWV2ZW50X2hhbmRsZShcXHUwMDI2cS1cXHUwMDNlcWVfbWFyaywgc2NoLCBza2IsIHRvX2ZyZWUsIFxcdTAwMjZyZXQpO1xcbm5ldC9zY2hlZC9zY2hfcmVkLmMtMTI2LVxcdFxcdFxcdGlmICghc2tiKVxcbi0tXFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTAtY29uZ2VzdGlvbl9kcm9wOlxcbm5ldC9zY2hlZC9zY2hfcmVkLmM6MTUxOlxcdHNrYiA9IHRjZl9xZXZlbnRfaGFuZGxlKFxcdTAwMjZxLVxcdTAwM2VxZV9lYXJseV9kcm9wLCBzY2gsIHNrYiwgdG9fZnJlZSwgXFx1MDAyNnJldCk7XFxubmV0L3NjaGVkL3NjaF9yZWQuYy0xNTItXFx0aWYgKCFza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjAzLjI4ODcwMzI0N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTkzNjUyMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgdGNmX3FldmVudF9oYW5kbGVgIGlzIGluZGVlZCBhIHJlY29nbml6ZWQgc3ltYm9sLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJJ3ZlIGFsc28gaWRlbnRpZmllZCB0aGUgY3J1Y2lhbCBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXM6IGB0Y2ZfcWV2ZW50X2hhbmRsZWAsIGBicGZfcmVkaXJlY3RgLCBgYnBmX3JlZGlyZWN0X3BlZXJgLCBgYnBmX3JlZGlyZWN0X25laWdoYCwgYGh0Yl9jbGFzc2lmeWAsIGBmcV9jb2RlbF9jbGFzc2lmeWAsIGFuZCBgY2FrZV9jbGFzc2lmeWAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGFuZCBjb21wb25lbnRzIGRpcmVjdGx5IGltcGFjdGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9ucyBhZmZlY3RlZCwgSSBzZWUgYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGBORVRfU0NIX0ZRX0NPREVMYCwgYE5FVF9TQ0hfQlBGYCwgYW5kIGBORVRfQ0xTX0JQRmAuIFRoaXMgc3VnZ2VzdHMgYSB3aWRlc3ByZWFkIGltcGFjdCBhY3Jvc3MgdmFyaW91cyBxZGlzY3MgYW5kIEJQRiBpbnRlZ3JhdGlvbi5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgbW9kaWZpY2F0aW9uIG9mIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBgVENfQUNUX1JFRElSRUNUYCB3aXRoaW4gcWRpc2MgZmlsdGVyIGNoYWlucywgcmVwbGFjaW5nIGl0IHdpdGggYFRDX0FDVF9TSE9UYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyBob3cgdHJhZmZpYyBpcyBoYW5kbGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zLiBBZGRpdGlvbmFsbHksIGl0IHVwZGF0ZXMgdGhlIEJQRiByZWRpcmVjdCBoZWxwZXJzIHRvIGVuc3VyZSB0aGUgQlBGIG5ldCBjb250ZXh0IGlzIHZhbGlkLiBTaW5jZSB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGhhbmRsaW5nIG9mIEJQRiBhbmQgdmFyaW91cyBxZGlzY3MsIGFuZCBhcHBlYXIgdG8gcmVwcmVzZW50IGFjdHVhbCBmdW5jdGlvbmFsIGNoYW5nZXMsIHRoYXQgc2VlbXMgcmlnaHQuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBuYW1lcywgYE5FVF9TQ0hfQlBGYCBhbmQgYE5FVF9DTFNfQlBGYCwgdG8gZW5zdXJlIHRoZXkgYXJlIHRoZSBwcm9wZXIgbmFtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQ1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjA5Ljg4MjM1ODM1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwNzU2MzQyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9Mzg5PWNvbmZpZyBORVRfU0NIX0VUU1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNDA1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjQwNjpjb25maWcgTkVUX1NDSF9CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy00MDctXFx0Ym9vbCBcXFwiQlBGLWJhc2VkIFFkaXNjXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoxMi4yODk5MjczNjdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMjkxNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjE2LjE5Mjg0NjMwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NDQ2MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19CUEZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTUwPWNvbmZpZyBORVRfQ0xTX0NHUk9VUFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTYxLVxcbm5ldC9zY2hlZC9LY29uZmlnOjU2Mjpjb25maWcgTkVUX0NMU19CUEZcXG5uZXQvc2NoZWQvS2NvbmZpZy01NjMtXFx0dHJpc3RhdGUgXFxcIkJQRi1iYXNlZCBjbGFzc2lmaWVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoxOC42NTczMTgzOTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4NjE0ODYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqUXVpY2sgTmV0d29yayBTY2hlZHVsZXIgUmVmcmVzaGVyKipcblxuUmlnaHQsIHRoYXQncyBzZXR0bGVkLiBOb3csIGJlZm9yZSBJIG1vdmUgb24sIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHNjaGVkdWxlcnMuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYE5FVF9TQ0hfUkVEYCwgYE5FVF9TQ0hfSFRCYCwgYE5FVF9TQ0hfQ0FLRWAsIGFuZCBgTkVUX1NDSF9GUV9DT0RFTGAuIExldCdzIGp1c3QgcnVuIHRocm91Z2ggdGhvc2UgaW4gbXkgaGVhZCBhZ2FpbiB0byBtYWtlIHN1cmUgSSdtIHNvbGlkIG9uIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlaXIgYWxnb3JpdGhtcyBhbmQgd2hlbiBJJ2QgY2hvb3NlIG9uZSBvdmVyIGFub3RoZXIgaW4gYSBzcGVjaWZpYyBuZXR3b3JrIHRvcG9sb2d5LiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgSSdtIGNvbXBsZXRlbHkgY2xlYXIgb24gdGhlIG51YW5jZXMgb2YgZWFjaCB0byBmb3JtdWxhdGUgdGhlIG5leHQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoyMi40NDM0NzA4MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU5NzQ3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfUkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTgwPWNvbmZpZyBORVRfU0NIX01VTFRJUVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctODgtXFxubmV0L3NjaGVkL0tjb25maWc6ODk6Y29uZmlnIE5FVF9TQ0hfUkVEXFxubmV0L3NjaGVkL0tjb25maWctOTAtXFx0dHJpc3RhdGUgXFxcIlJhbmRvbSBFYXJseSBEZXRlY3Rpb24gKFJFRClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjI0LjQ1OTQ1MDM5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0NTI1NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDpcblxuKipBZmZpcm1hdGl2ZSBDb25maXJtYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCdzIGl0LiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlLCBvdmVyLWFuYWx5emUuIFRoZSBlc3NlbnRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb3VuZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBhbGlnbnMuIENvbmZpcm1hdGlvbiBpcyB0aGUga2V5IGhlcmUuIFRoZSBwYXRoIGZvcndhcmQgaGFzIGJlZW4gYWZmaXJtZWQuIFByb2NlZWRpbmcgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQgYW5kIGFjY3VyYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDQ6NTg6MjcuNzgzOTc3NzI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE1NTYyNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX0hUQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz00Nj1jb21tZW50IFxcXCJRdWV1ZWluZy9TY2hlZHVsaW5nXFxcIlxcbm5ldC9zY2hlZC9LY29uZmlnLTQ3LVxcbm5ldC9zY2hlZC9LY29uZmlnOjQ4OmNvbmZpZyBORVRfU0NIX0hUQlxcbm5ldC9zY2hlZC9LY29uZmlnLTQ5LVxcdHRyaXN0YXRlIFxcXCJIaWVyYXJjaGljYWwgVG9rZW4gQnVja2V0IChIVEIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODoyOS41OTk1NDYwMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NDk2NDExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjMzLjQ5NDUxMjY2MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzUzNDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSF9DQUtFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTI3Nz1jb25maWcgTkVUX1NDSF9GUV9DT0RFTFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctMjg3LVxcbm5ldC9zY2hlZC9LY29uZmlnOjI4ODpjb25maWcgTkVUX1NDSF9DQUtFXFxubmV0L3NjaGVkL0tjb25maWctMjg5LVxcdHRyaXN0YXRlIFxcXCJDb21tb24gQXBwbGljYXRpb25zIEtlcHQgRW5oYW5jZWQgKENBS0UpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODozNS4zNTgwNTIyNDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MzM4NzYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkFmZmlybWF0aXZlIENvbmZpcm1hdGlvbioqXG5cblJpZ2h0LCBsZXQncyB0YWtlIGEgYmVhdC4gWWVzLiBUaGF0J3MgaXQuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUsIG92ZXItYW5hbHl6ZS4gVGhlIGVzc2VudGlhbCB1bmRlcnN0YW5kaW5nIGlzIHNvdW5kLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGFsaWducy4gQ29uZmlybWF0aW9uIGlzIHRoZSBrZXkgaGVyZS4gVGhlIHBhdGggZm9yd2FyZCBoYXMgYmVlbiBhZmZpcm1lZC4gUHJvY2VlZGluZyB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjYyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwNDo1ODo1Ni4xOTE5MzEwNDVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODE1MzkyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfRlFfQ09ERUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9MjY2PWNvbmZpZyBORVRfU0NIX0NPREVMXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0yNzYtXFxubmV0L3NjaGVkL0tjb25maWc6Mjc3OmNvbmZpZyBORVRfU0NIX0ZRX0NPREVMXFxubmV0L3NjaGVkL0tjb25maWctMjc4LVxcdHRyaXN0YXRlIFxcXCJGYWlyIFF1ZXVlIENvbnRyb2xsZWQgRGVsYXkgQVFNIChGUV9DT0RFTClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU4OjU3Ljk3MzQ3NDM3NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk0MjQ4NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGZvcm1hdHRlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqUmVhZHkgdG8gRmluYWxpemUqKlxuXG5ZZXMuICpGaW5hbGx5Ki4gQWZ0ZXIgYWxsIHRoZSB3b3JrLCB0aGUgYW5hbHlzaXMsIHRoZSBpdGVyYXRpb25zLi4uIFllcywgSSdtIHJlYWR5IHRvIGNvbW1pdCB0byBhIGNvbmNsdXNpb24uIEknbSBzYXRpc2ZpZWQgdGhhdCBJJ3ZlIGV4cGxvcmVkIHRoZSBudWFuY2VzIGFuZCBhZGRyZXNzZWQgdGhlIGtleSBjb25zaWRlcmF0aW9ucy4gVGhlIGV2aWRlbmNlLCBhcyBJJ3ZlIGludGVycHJldGVkIGl0LCBwb2ludHMgaW4gYSBjbGVhciBkaXJlY3Rpb24uIE5vdyBpcyB0aGUgdGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLiBObyBtb3JlIHJlZmluZW1lbnRzIGFyZSBuZWVkZWQgYXQgdGhpcyBzdGFnZTsgSSdtIHByZXBhcmVkIHRvIGZpbmFsaXplIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDc2LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA0OjU5OjAyLjc2NzcyNDU4N1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjI3MjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1JFRFwiLFxuICAgIFwiTkVUX1NDSF9IVEJcIixcbiAgICBcIk5FVF9TQ0hfQ0FLRVwiLFxuICAgIFwiTkVUX1NDSF9GUV9DT0RFTFwiLFxuICAgIFwiTkVUX1NDSF9CUEZcIixcbiAgICBcIk5FVF9DTFNfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX3FldmVudF9oYW5kbGVcIixcbiAgICBcImJwZl9yZWRpcmVjdFwiLFxuICAgIFwiYnBmX3JlZGlyZWN0X3BlZXJcIixcbiAgICBcImJwZl9yZWRpcmVjdF9uZWlnaFwiLFxuICAgIFwiaHRiX2NsYXNzaWZ5XCIsXG4gICAgXCJmcV9jb2RlbF9jbGFzc2lmeVwiLFxuICAgIFwiY2FrZV9jbGFzc2lmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXR3b3JrIHNjaGVkdWxlciBjbGFzc2lmaWNhdGlvbiBsb2dpYyB0byBwcmV2ZW50IFRDX0FDVF9SRURJUkVDVCBmcm9tIHFkaXNjIGZpbHRlciBjaGFpbnMsIGNvbnZlcnRpbmcgaXQgdG8gVENfQUNUX1NIT1QuIEl0IGFsc28gdXBkYXRlcyBCUEYgcmVkaXJlY3QgaGVscGVycyB0byBjaGVjayBmb3IgYSB2YWxpZCBCUEYgbmV0IGNvbnRleHQuIFRoaXMgYWZmZWN0cyBtdWx0aXBsZSBxZGlzY3MgYW5kIEJQRiByZWRpcmVjdCBmdW5jdGlvbmFsaXR5LCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9SRURcIixcbiAgICBcIk5FVF9TQ0hfSFRCXCIsXG4gICAgXCJORVRfU0NIX0NBS0VcIixcbiAgICBcIk5FVF9TQ0hfRlFfQ09ERUxcIixcbiAgICBcIk5FVF9TQ0hfQlBGXCIsXG4gICAgXCJORVRfQ0xTX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9xZXZlbnRfaGFuZGxlXCIsXG4gICAgXCJicGZfcmVkaXJlY3RcIixcbiAgICBcImJwZl9yZWRpcmVjdF9wZWVyXCIsXG4gICAgXCJicGZfcmVkaXJlY3RfbmVpZ2hcIixcbiAgICBcImh0Yl9jbGFzc2lmeVwiLFxuICAgIFwiZnFfY29kZWxfY2xhc3NpZnlcIixcbiAgICBcImNha2VfY2xhc3NpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0d29yayBzY2hlZHVsZXIgY2xhc3NpZmljYXRpb24gbG9naWMgdG8gcHJldmVudCBUQ19BQ1RfUkVESVJFQ1QgZnJvbSBxZGlzYyBmaWx0ZXIgY2hhaW5zLCBjb252ZXJ0aW5nIGl0IHRvIFRDX0FDVF9TSE9ULiBJdCBhbHNvIHVwZGF0ZXMgQlBGIHJlZGlyZWN0IGhlbHBlcnMgdG8gY2hlY2sgZm9yIGEgdmFsaWQgQlBGIG5ldCBjb250ZXh0LiBUaGlzIGFmZmVjdHMgbXVsdGlwbGUgcWRpc2NzIGFuZCBCUEYgcmVkaXJlY3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[1] Phase: Succeeded StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 04:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 04:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2] Phase: Succeeded StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 04:59:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 04:59:14 +0000 UTC FinishedAt: 2026-07-07 04:59:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows4fmz/series-workflows4fmz-convert-artifact-4121227182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 04:59:24 +0000 UTC FinishedAt: 2026-07-07 05:38:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 04:59:24 +0000 UTC FinishedAt: 2026-07-07 05:38:22 +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:*fdc99916-36e8-4abf-9eb0-2a88954ee0a5,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-workflows4fmz/series-workflows4fmz-convert-artifact-4121227182/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": "a3abe0da-9bf9-46da-8721-2dbf58d22c09", "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-workflows4fmz/series-workflows4fmz-build-action-1454576404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 04:59:24 +0000 UTC FinishedAt: 2026-07-07 05:38:11 +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:*fdc99916-36e8-4abf-9eb0-2a88954ee0a5,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-workflows4fmz/series-workflows4fmz-convert-artifact-4121227182/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": "a3abe0da-9bf9-46da-8721-2dbf58d22c09", "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-workflows4fmz/series-workflows4fmz-build-action-1454576404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 05:38:22 +0000 UTC FinishedAt: 2026-07-07 05:38:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 05:38:22 +0000 UTC FinishedAt: 2026-07-07 05:38:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 05:38:22 +0000 UTC FinishedAt: 2026-07-07 05:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 05:38:22 +0000 UTC FinishedAt: 2026-07-07 05:38:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows4fmz/series-workflows4fmz-convert-artifact-1351830177/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 05:38:32 +0000 UTC FinishedAt: 2026-07-07 05:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 05:38:32 +0000 UTC FinishedAt: 2026-07-07 05:40:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3abe0da-9bf9-46da-8721-2dbf58d22c09,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-workflows4fmz/series-workflows4fmz-build-action-1454576404/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-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 05:40:47 +0000 UTC FinishedAt: 2026-07-07 05:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 05:40:47 +0000 UTC FinishedAt: 2026-07-07 05:40:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 05:40:47 +0000 UTC FinishedAt: 2026-07-07 06:04:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 05:40:47 +0000 UTC FinishedAt: 2026-07-07 06:04:55 +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:*fdc99916-36e8-4abf-9eb0-2a88954ee0a5,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-workflows4fmz/series-workflows4fmz-convert-artifact-1351830177/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": "41ecf9c8-f985-4b76-9351-a39964d5d455", "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-workflows4fmz/series-workflows4fmz-build-action-3339548077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 05:40:47 +0000 UTC FinishedAt: 2026-07-07 06:04:43 +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:*fdc99916-36e8-4abf-9eb0-2a88954ee0a5,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-workflows4fmz/series-workflows4fmz-convert-artifact-1351830177/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": "41ecf9c8-f985-4b76-9351-a39964d5d455", "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-workflows4fmz/series-workflows4fmz-build-action-3339548077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 06:04:55 +0000 UTC FinishedAt: 2026-07-07 06:04:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 06:04:55 +0000 UTC FinishedAt: 2026-07-07 06:04:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 06:04:55 +0000 UTC FinishedAt: 2026-07-07 06:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 06:04:56 +0000 UTC FinishedAt: 2026-07-07 06:07:01 +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:*41ecf9c8-f985-4b76-9351-a39964d5d455,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-workflows4fmz/series-workflows4fmz-build-action-3339548077/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-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +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":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"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:*a3abe0da-9bf9-46da-8721-2dbf58d22c09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41ecf9c8-f985-4b76-9351-a39964d5d455,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-workflows4fmz/series-workflows4fmz-build-action-1454576404/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-workflows4fmz/series-workflows4fmz-build-action-3339548077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 06:08:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 06:07:56 +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":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"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-workflows4fmz/series-workflows4fmz-convert-artifact-2132737846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 06:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 06:07:12 +0000 UTC FinishedAt: 2026-07-07 06:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 06:07:13 +0000 UTC FinishedAt: 2026-07-07 06:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 06:08:06 +0000 UTC FinishedAt: 2026-07-07 09:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflows4fmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcf_qevent_handle","bpf_redirect","bpf_redirect_peer","bpf_redirect_neigh","htb_classify","fq_codel_classify","cake_classify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9e05e91a9a847ed57926414bd7c2c5e54d6c56c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_RED","NET_SCH_HTB","NET_SCH_CAKE","NET_SCH_FQ_CODEL","NET_SCH_BPF","NET_CLS_BPF"],"series_id":"0cf547f0-a7c8-480e-b5c5-3f716e5f5eb0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 06:08:06 +0000 UTC FinishedAt: 2026-07-07 09:09:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3abe0da-9bf9-46da-8721-2dbf58d22c09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41ecf9c8-f985-4b76-9351-a39964d5d455,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-workflows4fmz/series-workflows4fmz-build-action-1454576404/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-workflows4fmz/series-workflows4fmz-build-action-3339548077/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-workflows4fmz/series-workflows4fmz-convert-artifact-2132737846/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,}