Name: series-workflowtt7s2 Phase: Succeeded StartedAt: 2026-08-01 12:10:57 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[0] Phase: Succeeded StartedAt: 2026-08-01 12:10:57 +0000 UTC FinishedAt: 2026-08-01 12:31:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 12:10:57 +0000 UTC FinishedAt: 2026-08-01 12:31:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_ADVANCED", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_ADVANCED", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "a47fb4df-95b8-4a38-b72c-69f69cc66609" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfqnl_recv_verdict", "nft_payload_set_eval" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMjoyOToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggYjhhYWYzOWNiNGQ4ZS4uNWMyOWE0NDI4YjZlYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbkBAIC0yOCwxMCAmIzQzOzI4LDE3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY3RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFx1MDAzZVxuQEAgLTEyMDYsNiAmIzQzOzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbiBcdHJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS1cdTAwM2Vza2IpICYjNDM7IDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuJiM0MztcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDtcbiYjNDM7XG4mIzQzO1x0Y3QgPSBuZl9jdF9nZXQoZS1cdTAwM2Vza2IsIFx1MDAyNmN0aW5mbyk7XG4mIzQzO1x0aWYgKGN0IFx1MDAyNlx1MDAyNiAhbmZfY3RfaXNfdGVtcGxhdGUoY3QpIFx1MDAyNlx1MDAyNiBuZl9jdF9wcm90b251bShjdCkgIT0gcHJvdG8pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHByb3RvKSB7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1RDUDoge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSAoY29uc3Qgc3RydWN0IHRjcGhkciAqKWRhdGE7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgdGhsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKnRoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHRobGVuID0gX190Y3BfaGRybGVuKHRoKTtcbiYjNDM7XHRcdGlmICh0aGxlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkgfHwgZGF0YV9sZW4gXHUwMDNjIHRobGVuKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGNhc2UgSVBQUk9UT19VRFA6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuJiM0MztcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fU0NUUDpcbiYjNDM7XHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0dSRTpcbiYjNDM7XHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fQUg6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwX2F1dGhfaGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fRVNQOlxuJiM0MztcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4ge1xuQEAgLTEyMjksNyAmIzQzOzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdC8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlXG4gXHQgKiByZWNvbXBpbGUgJiM0Mzsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxuIFx0ICovXG4tXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7XG4mIzQzO1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggJiM0MzsgaWhsLCBkYXRhX2xlbiAtIGlobCwgZSxcbiYjNDM7XHRcdFx0XHQgaXBoLVx1MDAzZXByb3RvY29sKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcbkBAIC0xMjg2LDcgJiM0MzsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRpbnQgaGRybGVuO1xuIFxuIFx0XHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLFxuJiM0MztcdFx0XHRcdFx0XHQgbmV3X25leHRoZHIpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTEzMjMsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXG4gXHRcdGRhdGEgJiM0Mzs9IGhkcmxlbjtcbiBcdH1cbiBcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwgbmV3X25leHRoZHIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggOGE0NDcyZmQ3N2Q5Zi4uZTMxNWQzNWY3M2Q0YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5AQCAtMTA2Nyw2ICYjNDM7MTA2NywxNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgJiM0Mzsgc2l6ZW9mKF9fYmUzMik7XG4mIzQzO1xuJiM0MztcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuQEAgLTExMDUsNiAmIzQzOzExMTYsOCBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4gXHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4gXHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdFx0b2Zmc2V0ID0gbmZ0X3Rob2ZmKHBrdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMjoyOToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IGI4YWFmMzljYjRkOGUuLjVjMjlhNDQyOGI2ZWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMjgsMTAgJiM0MzsyOCwxNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjdHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZ3JvdXAtZGVmcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JoYXNodGFibGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9qaGFzaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3NvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwX3N0YXRlcy5oJmd0OwpAQCAtMTIwNiw2ICYjNDM7MTIxMyw1MSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LAogCXJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS0mZ3Q7c2tiKSAmIzQzOyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKJiM0MzsJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKJiM0MzsKJiM0MzsJY3QgPSBuZl9jdF9nZXQoZS0mZ3Q7c2tiLCAmYW1wO2N0aW5mbyk7CiYjNDM7CWlmIChjdCAmYW1wOyZhbXA7ICFuZl9jdF9pc190ZW1wbGF0ZShjdCkgJmFtcDsmYW1wOyBuZl9jdF9wcm90b251bShjdCkgIT0gcHJvdG8pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXN3aXRjaCAocHJvdG8pIHsKJiM0MzsJY2FzZSBJUFBST1RPX1RDUDogewomIzQzOwkJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSAoY29uc3Qgc3RydWN0IHRjcGhkciAqKWRhdGE7CiYjNDM7CQl1bnNpZ25lZCBpbnQgdGhsZW47CiYjNDM7CiYjNDM7CQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKnRoKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQl0aGxlbiA9IF9fdGNwX2hkcmxlbih0aCk7CiYjNDM7CQlpZiAodGhsZW4gJmx0OyBzaXplb2YoKnRoKSB8fCBkYXRhX2xlbiAmbHQ7IHRobGVuKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWNhc2UgSVBQUk9UT19VRFA6CiYjNDM7CQlyZXR1cm4gZGF0YV9sZW4gJmd0Oz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBkYXRhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fU0NUUDoKJiM0MzsJCXJldHVybiBkYXRhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fR1JFOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTsKJiM0MzsJY2FzZSBJUFBST1RPX0FIOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpOwomIzQzOwljYXNlIElQUFJPVE9fRVNQOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXA0KGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQogewpAQCAtMTIyOSw3ICYjNDM7MTI4MSw5IEBAIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLAogCS8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlCiAJICogcmVjb21waWxlICYjNDM7IHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS4KIAkgKi8KLQlyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7CiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggJiM0MzsgaWhsLCBkYXRhX2xlbiAtIGlobCwgZSwKJiM0MzsJCQkJIGlwaC0mZ3Q7cHJvdG9jb2wpOwogfQogCiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9vbmVfZXh0aGRyKGNvbnN0IHU4ICpkYXRhLApAQCAtMTI4Niw3ICYjNDM7MTM0MCw4IEBAIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldywKIAkJaW50IGhkcmxlbjsKIAogCQlpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwKJiM0MzsJCQkJCQkgbmV3X25leHRoZHIpOwogCiAJCWlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyAmZ3Q7PSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xMzIzLDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LAogCQlkYXRhICYjNDM7PSBoZHJsZW47CiAJfQogCi0JcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwgbmV3X25leHRoZHIpOwogfQogCiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDhhNDQ3MmZkNzdkOWYuLmUzMTVkMzVmNzNkNGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTEwNjcsNiAmIzQzOzEwNjcsMTcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgZG9mZiA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGFja19zZXEpICYjNDM7IHNpemVvZihfX2JlMzIpOwomIzQzOwomIzQzOwlpZiAocGt0LSZndDt0cHJvdCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7b2Zmc2V0ICZndDsgZG9mZiB8fCBwcml2LSZndDtvZmZzZXQgJiM0MzsgcHJpdi0mZ3Q7bGVuICZsdDs9IGRvZmY7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQkJCSBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsCiAJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQpAQCAtMTEwNSw2ICYjNDM7MTExNiw4IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiAJCWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LSZndDtmcmFnb2ZmKQogCQkJZ290byBlcnI7CiYjNDM7CQlpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTsKIAkJYnJlYWs7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgdmFsaWRhdGlvbiBmb3IgTDQgaGVhZGVycyBpbiBgbmZxbmxfdmFsaWRhdGVfbDRgIGFuZCBgbmZ0X3RoX3dyaXRlX29rYCwgcmVzcGVjdGl2ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXM/IEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hlbiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50LgoKTGV0JiMzOTtzIHNlZeKApiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIHByb2JhYmx5IHRpZWQgdG8gYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIE1ha2VzIHNlbnNlLiBBbmQgYG5mdF9wYXlsb2FkLmNg4oCmIEkgc3VzcGVjdCB0aGF0IG1pZ2h0IGJlIGVuYWJsZWQgYnkgYENPTkZJR19ORlRfUEFZTE9BRGAsIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsYXJnZXIgbGlrZSBgQ09ORklHX05GX1RBQkxFU2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRpbWUgdG8gZmlyZSB1cCBgZ2l0IGdyZXBgIGFuZCBwaW5wb2ludCB0aG9zZSBjb25maWcgb3B0aW9ucyBwcmVjaXNlbHkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGtpbmQgb2YgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgYSBwcm9wZXIgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19xdWV1ZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1QpICYjNDM7PSBuZm5ldGxpbmtfYWNjdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSkgJiM0Mzs9IG5mbmV0bGlua19xdWV1ZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cpICYjNDM7PSBuZm5ldGxpbmtfbG9nLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCByZWdhcmRpbmcgYG5mdF9wYXlsb2FkLmNgLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBpbnNwZWN0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBleHRyYWN0aW9uIG9mIHBheWxvYWQgZGF0YSBmcm9tIG5ldHdvcmsgcGFja2V0cywgYSBjcnVjaWFsIHN0ZXAgZm9yIGFueSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyBvciBtYW5pcHVsYXRpb24uIE15IG1pbmQmIzM5O3MgcmFjaW5nIHRocm91Z2ggdGhlIHBvc3NpYmxlIHVzZSBjYXNlczogZGVlcCBwYWNrZXQgaW5zcGVjdGlvbiAoRFBJKSwgY3VzdG9tIHJ1bGUgbWF0Y2hpbmcsIHBvc3NpYmx5IGV2ZW4gaW50cnVzaW9uIGRldGVjdGlvbiBzeXN0ZW1zIChJRFMpIHJlbHlpbmcgb24gY29udGVudCBzaWduYXR1cmVzLgoKSSYjMzk7bSBtZW50YWxseSBtYXBwaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaW5ncyBsaWtlIHRoZSBgc2tiYCAoU29ja2V0IEJ1ZmZlcikgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIGFjY2VzcyB0aGUgcGFja2V0IGRhdGEsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB0aGVyZSBhbnkgb2ZmLWJ5LW9uZSBlcnJvcnM/IFdoYXQgYWJvdXQgYnVmZmVyIG92ZXJmbG93cz8gSSYjMzk7bSBhbHJlYWR5IGltYWdpbmluZyBzY2VuYXJpb3Mgd2hlcmUgY3JhZnRlZCBwYWNrZXRzIGNvdWxkIGV4cGxvaXQgdGhlc2UgZmxhd3MgdG8gYnlwYXNzIGZpbHRlcmluZyBydWxlcyBvciBldmVuIGNhdXNlIGEgZGVuaWFsLW9mLXNlcnZpY2UuCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBQYXlsb2FkIGV4dHJhY3Rpb24gY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLCBlc3BlY2lhbGx5IGlmIGRvbmUgb24gZXZlcnkgcGFja2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IHR5cGVzIGFuZCBwcm90b2NvbHMg4oCTIGlzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgZXh0cmFjdGlvbiBtZXRob2RzIOKAkyBkb2VzIGl0IGNvcHkgZGF0YSBvciB1c2UgcG9pbnRlcnM/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYW55IG9wdGltaXphdGlvbnMsIGFuZCBhc3Nlc3MgdGhlaXIgdHJhZGVvZmZzIGJldHdlZW4gc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbi4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbi4gRG9lcyBpdCByZWFzc2VtYmxlIHBhY2tldHMgY29ycmVjdGx5LCBvciBhcmUgd2UgcG90ZW50aWFsbHkgbG9zaW5nIGRhdGEgYW5kIHRoZXJlZm9yZSBtaXNpbnRlcnByZXRpbmcgdGhlIHRyYWZmaWM/IEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBwYWNrZXQgaGVhZGVycywgYW5kIHRoZWlyIHJlbGF0aXZlIG9mZnNldHMgdG8gdGhlIHJlbGV2YW50IHBheWxvYWQgZGF0YS4gSXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyB0byBhdm9pZCB1bmV4cGVjdGVkIGFjY2VzcyB2aW9sYXRpb25zLCBnaXZlbiB0aGF0IHBhY2tldCBoZWFkZXJzIGNhbiB2YXJ5IGluIHNpemUuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUsIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYnVncywgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gYW55IHJlYWwtd29ybGQgZGVwbG95bWVudC4gSSBrbm93IHRoZXNlIGRldGFpbHMgYXJlIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5Olx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVx0XHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCB3aGljaCBpcywgaW4gdHVybiwgbmVzdGVkIHVuZGVyIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4gSSBrbm93IHRoYXQgYG5mX3RhYmxlc2AgaXMgY2VudHJhbCB0byBteSB3b3JrLCBzbyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IG9mIHRoZSBjcnVjaWFsIGVsZW1lbnRzIG9yIG1pc3NpbmcgYW55IGltcGxpY2F0aW9ucyBvZiBteSBjaG9pY2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGV2ZW4gKnRoaW5rKiBhYm91dCBlbmFibGluZyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCBpdCYjMzk7cyBsaWtlbHkgbGlua2VkIHRvIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLCBvYnZpb3VzbHksIGJ1dCBtYXliZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBOZXRsaW5rIHN1cHBvcnQsIG9yIGV2ZW4gY2VydGFpbiBuZXR3b3JrIHF1ZXVpbmcgZnJhbWV3b3JrcyB0byBiZSBhY3RpdmUgZmlyc3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9mIGNvdXJzZSwgcHJvYmFibHkgaW4gdGhlIE5ldGZpbHRlciBvciBOZXRsaW5rIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBpbWFnaW5pbmcgdGhlcmUmIzM5O3MgYSBjYXNjYWRlIG9mIGRlcGVuZGVuY2llczsgc29tZXRoaW5nIGxpa2UsICYjMzk7aWYgKnRoaXMqIGlzIG9uLCB0aGVuIHlvdSAqbXVzdCogaGF2ZSAqdGhhdCogb24sIGFuZCAqdGhlbiogeW91ICpjYW4qIGVuYWJsZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgJiMzOTsuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIGxpbmUgNTQgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBjb250YWlucyBhIHRvcC1sZXZlbCBgY29uZmlnYCBvcHRpb24gb3IgYSBtb2R1bGUgZGVmaW5pdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyB1c3VhbGx5IGJlZ2luLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzIGZvciBrZXkgbmV0ZmlsdGVyIGZlYXR1cmVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBvcmdhbml6ZWQgdGhlIG9wdGlvbnMgY29uY2VwdHVhbGx5IOKAkyBpcyBpdCBiYXNlZCBvbiBwcm90b2NvbCwgZnVuY3Rpb25hbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNTI6XHRcdCAgZm9yIGV4dGVuZGVkIGFjY291bnRpbmcgdmlhIE5GTkVUTElOSy5cbiAgNTM6XHRcbiAgNTQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAgNTU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA1NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNTc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDYwOlx0XHQgIGZvciBxdWV1ZWluZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNjQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA2NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjg6XHRcdCAgZm9yIGxvZ2dpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9ucyAtIEEgUXVpY2sgQXVkaXQqKgoKUmlnaHQsIHNvIEkgc2VlIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgY29udGluZ2VudCB1cG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBidWlsZCB1cG9uIGVhY2ggb3RoZXIuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBjb25maXJtaW5nIGEgcGFydGljdWxhciBkZXBlbmRlbmN5IGNoYWluLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbSBjb25maWd1cmluZyBhbnl0aGluZyB1cHN0cmVhbSB0aGF0IG1pZ2h0IGltcGFjdCB0aG9zZS4KCk5vdywgYE5GX1RBQkxFU2AuLi4gdGhhdCYjMzk7cyBhbm90aGVyIGtleSBwbGF5ZXIgaW4gdGhlIGlwdGFibGVzIHdvcmxkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIHdoZXJlIHRoZXkgbmVlZCB0byBiZSwgc28gSSBjYW4gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXQgSSBhbSB3b3JraW5nIG9uLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNDU1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBkZWNpc2lvbnMgYXJlIG1hZGUgaW4gdGVybXMgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhpcyBzZWN0aW9uLCBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEtjb25maWcgc3ltYm9scy4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdGNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcbiA0NTE6XHRcdHRyaXN0YXRlXG4gNDUyOlx0XG4gNDUzOlx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcbiA0NTQ6XHRcbiA0NTU6XHRjb25maWcgTkZfVEFCTEVTXG4gNDU2Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiA0NTc6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gNDU4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0NTk6XHRcdGhlbHBcbiA0NjA6XHRcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xuIDQ2MTpcdFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxuIDQ2MjpcdFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcbiA0NjM6XHRcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAmIzM5O25mdCYjMzk7IHV0aWxpdHlcbiA0NjQ6XHRcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXG4gNDY1Olx0XHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcbiA0NjY6XHRcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcbiA0Njc6XHRcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXG4gNDY4Olx0XG4gNDY5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGFuZCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYE5GX1RBQkxFU2AuIEluaXRpYWxseSwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbXBvbmVudHMuIEJ1dCBob2xkIG9uLCBJIGp1c3Qgc3BvdHRlZCBzb21ldGhpbmfigKYgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFuZCBtaWdodCBuZWNlc3NpdGF0ZSBhIGRlZXBlciBsb29rIGludG8gdGhlIGludGVyYWN0aW9ucyB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxhdGVkIHRvIHRoaXMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46IGBuZnFubF92YWxpZGF0ZV9sNGAsIGBuZnFubF92YWxpZGF0ZV9pcDRgLCBgbmZxbmxfdmFsaWRhdGVfaXBvcHRzYCwgYG5mcW5sX3ZhbGlkYXRlX2V4dGhkcmAsIGFuZCBgbmZxbmxfdmFsaWRhdGVfaXA2YCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGNsdXN0ZXIgb2YgdmFsaWRhdGlvbiBmdW5jdGlvbnMgdGhhdCB3ZXJlIHRvdWNoZWQuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBjYWxsIHRoZXNlIG1vZGlmaWVkIG9uZXMuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSB3aWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mcW5sX3ZhbGlkYXRlX2lwNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMjE2PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMjYwLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMjYxOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMjYyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDAwPXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDQtXHRjYXNlIE5GUFJPVE9fSVBWNDpcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQwNTpcdFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDYtXHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBuZnFubF92YWxpZGF0ZV93cml0ZWAgY2FsbDoKCioqQW5hbHl6aW5nIGBuZnFubF92YWxpZGF0ZV93cml0ZWAqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXkgYmVhcmluZ3MuICYjMzQ7V2hhdCYjMzk7cyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGw/JiMzNDsgSSYjMzk7bSB0aGlua2luZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqY2FsbGluZyogaXQuIElzIGl0IHBhcnQgb2YgdGhlIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZT8gSXMgaXQgdXNlci1zcGFjZSBpbnRlcmFjdGluZyB3aXRoIGEga2VybmVsIG1vZHVsZT8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlciBpcyAqY3JpdGljYWwqIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuCgpNeSBicmFpbiBpcyBhbHJlYWR5IGZpcmluZyBvZmYgcXVlc3Rpb25zLiBXaGF0IGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBpbnZhbGlkIGRhdGE/IElzIGl0IHJlbGF0ZWQgdG8gcGFja2V0IG1hbmlwdWxhdGlvbiwgcnVsZSBlbmZvcmNlbWVudCwgb3Igc29tZXRoaW5nIGVsc2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfdmFsaWRhdGVfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTM4ND1zdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTM5OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQwMDpzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxOD1uZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTQyNC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQyNTpcdGlmICghbmZxbmxfdmFsaWRhdGVfd3JpdGUoZGF0YSwgZGF0YV9sZW4sIGUpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDI2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYG5mcW5sX21hbmdsZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5IGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGNhbGxpbmcgYG5mcW5sX21hbmdsZWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGNvbXByZWhlbmQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgb3V0cHV0cywgYW5kIHNpZGUgZWZmZWN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIGZvciBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgZnVuY3Rpb25zIGFuZCB3aGljaCBwcm9jZXNzZXMgYXJlIGluaXRpYXRpbmcgaXQuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBXaGF0IGRhdGEgaXMgYmVpbmcgbWFuaXB1bGF0ZWQ/IFRoaXMgZGV0YWlsZWQgcGVyc3BlY3RpdmUgaXMgZXNzZW50aWFsIGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfbWFuZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0MTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDE4Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTc3ND1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTgyMy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTgyNDpcdFx0aWYgKG5mcW5sX21hbmdsZShubGFfZGF0YShuZnFhW05GUUFfUEFZTE9BRF0pLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODI1LVx0XHRcdFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlci9ORlRhYmxlcyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIGVudHJ5IHBvaW50IGZvciBuZXRmaWx0ZXIgcXVldWluZyDigJMgdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24mIzM5O3QgaXQ/IFRoZSBjb3JlIG9mIHByb2Nlc3NpbmcgcXVldWVkIHBhY2tldHMuIE5vdywgSSYjMzk7bSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gYWN0dWFsbHkgKmhhcHBlbio/IFdoYXQmIzM5O3MgdGhlIGRhbmNlPyBJdCBhbHdheXMgY29tZXMgYmFjayB0byB0aGUgaW50ZXJuYWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLiBTbywgdGhhdCBicmluZ3MgbWUgdG8gYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUsIHJpZ2h0PyBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLiBJIHdhbnQgdG8gdHJhY2UgaG93IGl0IGdldHMgdGhvc2UgcGFja2V0cywgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBkYXRhIHN0cmVhbSBoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC1cdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZ0X3BheWxvYWRfc2V0YCBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgbGlrZWx5IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCwgb2YgY291cnNlLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGl0c2VsZiDigJMgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgY29kZSwgaXMgcHJvYmFibHkgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBsaWtlIGBuZnRfZG9fY2hhaW5gLgoKTm93LCBhIGtleSBvYnNlcnZhdGlvbjogYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBkZWNsYXJlZCBhcyAqc3RhdGljKi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQmIzM5O3MgYW4gb3BzIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBpdCBhbiBpbXBvcnRhbnQgZm9jdXMgc3ltYm9sLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXTigJlzIGVpdGhlciB0aGF0LCBvciBgbmZxbmxfcmVjdl92ZXJkaWN0YC4gQnV0IHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCB3aGV0aGVyIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaGFzIGEgdW5pcXVlLCBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3MgaWYgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyBpdC4gSG93ZXZlciwgaXQgKmlzKiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBuZnRfcGF5bG9hZF9zZXRfb3BzLmV2YWxgKSwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBmdWxseSBpbmxpbmUgaXQuIEl0cyBhZGRyZXNzIG11c3QgYmUgdGFrZW4uIFRoaXMgbWVhbnMgaXQgbXVzdCBoYXZlIGEgZGlzdGluY3QgbWVtb3J5IGFkZHJlc3MuCgpUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSBpbiBhbmFseXNpcy4gQW5vdGhlciB3cmlua2xlIGlzIHRoYXQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgYWxzbyBzdGF0aWMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmICp0aGF0KiBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzb21ld2hlcmUuIEdvdHRhIGJlIHN5c3RlbWF0aWMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE2NTg9c3RhdGljIGludCBuZnFfaWRfYWZ0ZXIodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTY2Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTY2MzpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjY0LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzM5PXN0YXRpYyBpbnQgbmZxYV9wYXJzZV9icmlkZ2Uoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NzMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE3NzQ6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3NS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZxbmxfY2JbTkZRTkxfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg2LVx0W05GUU5MX01TR19WRVJESUNUXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5ODc6XHRcdC5jYWxsXHRcdD0gbmZxbmxfcmVjdl92ZXJkaWN0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg4LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfUkNVLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk5OC1cdFtORlFOTF9NU0dfVkVSRElDVF9CQVRDSF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5OTk6XHRcdC5jYWxsXHRcdD0gbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yMDAwLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfUkNVLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOgoKKipBbmFseXppbmcgRnVuY3Rpb24gUG9pbnRlcnMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb2RlJiMzOTtzIGRlZmluaXRlbHkgYXNzaWduaW5nIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBteSBzdXNwaWNpb24uLi4geWVhaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIEJ1dCwgc2luY2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIHRoZSBjb21waWxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbi4gV2Uga25vdyBob3cgdG8gZGVhbCB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgY29tcGlsZXIuCgpXaGlsZSBJJiMzOTttIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBhZGQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgSSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YuCgpBbmQgZmluYWxseSwgZ2l2ZW4gaXRzIHVzYWdlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIEl0IHdpbGwgYmUgcmVxdWlyZWQgaWYgaXRzIHVzZSBpcyByZXF1aXJlZCBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0NPTk5UUkFDSyBhbmQgbmZ0X3BheWxvYWRfc2V0X2V2YWwgLSBXaGVyZSYjMzk7cyB0aGUgSG9va3VwPyoqCgpBbHJpZ2h0LCBzbyBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIHRoYXQgY29udGV4dCwgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gZml0IGluPyBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCBzcGVjaWZpY2FsbHkgY2hlY2sgb3V0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2Ugc2VlIGhvdyBwYXlsb2FkIG9wZXJhdGlvbnMgYXJlICpldmFsdWF0ZWQqIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpbiByZWxhdGlvbiB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgY29ubnRyYWNrIHJlbGF0ZWQgaW5mb3JtYXRpb24gc29tZWhvdywgcG9zc2libHkgZm9yIGEgY29ubmVjdGlvbi1zcGVjaWZpYyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgY29kZSB3aWxsIHByb3ZpZGUgYSBjbGVhbiB2aWV3IG9mIGFueSBpbnRlZ3JhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBob3cgdGhlIGNvbm50cmFjayBjb250ZXh0IGlzIHVzZWQgKGlmIGl0IGlzKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNzA9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODItXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc3Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgaW4gdGhlIE5GVGFibGVzIENvZGViYXNlKioKCkFscmlnaHQsIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFllcCwgY29uZmlybWF0aW9uIC0gc3RhdGljIGl0IGlzLiBOb3csIHRoZSBnb2FsIGlzIHRvIHBpbnBvaW50IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBhbmQgc2luY2Ugc3RhdGljcyBhcmUgZ2VuZXJhbGx5IGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGRpcmVjdCBhdHRhY2sgdmVjdG9yIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIE15IHRoaW5raW5nIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBxdWV1ZS4gT2theSwgc28gYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgYWxzbyBzdGF0aWMsIHNvIG5vIGx1Y2sgdGhlcmUuIExldCBtZSBtb3ZlIG9uIGFuZCBleHBsb3JlIHRoZSByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gYG5mbmV0bGlua19xdWV1ZS5jYCB0byBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG5mcW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqSHVudGluZyBmb3IgRHluYW1pYyBGdW5jdGlvbmFsaXR5IGluIG5mbmV0bGlua19xdWV1ZS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZuZXRsaW5rX3F1ZXVlLmNgIGZpbGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBhbnkgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCByaWdpZGx5IHN0YXRpYy4gU3RhdGljIGZ1bmN0aW9ucywgYnkgdGhlaXIgbmF0dXJlLCBhcmUgbGltaXRlZCBpbiBzY29wZSwgYW5kIGxlc3MgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBtb3JlIGR5bmFtaWMgb3IgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIG5ldGxpbmsgcXVldWVpbmcgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQsIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGZpbGUsIG9yIG1heWJlIGV2ZW4gbGlua2VkIGR5bmFtaWNhbGx5LiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhhdCBob2xkIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLCBpdHMgZmxleGliaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgaXRzIHZ1bG5lcmFiaWxpdGllcyBvciBwb2ludHMgb2YgY3VzdG9taXphdGlvbi4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0JiMzOTtzIHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIG5mcW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA6c3RydWN0IG5mcW5sX2luc3RhbmNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzEtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDtcdFx0LyogZ2xvYmFsIGxpc3Qgb2YgcXVldWVzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZXhwb3NlZCwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gaWRlbnRpZnlpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIGdvaW5nIHRvIGJlIGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZGVjbGFyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBsb29rIGZvciBleHBsaWNpdCBgRVhQT1JUX1NZTUJPTGAgY2FsbHMuIFRoYXQgd2lsbCBjbGVhcmx5IGlkZW50aWZ5IHRoZSBzeW1ib2xzIHRoYXQgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIElmIHRoYXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgeWllbGQgd2hhdCBJIG5lZWQsIEkmIzM5O2xsIGdvIGJhY2sgYW5kIHJ1biBhIG1vcmUgYmFzaWMgc2VhcmNoIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhlbiBmaWx0ZXIgYmFzZWQgb24gdGhlIHByZXNlbmNlLCBvciBhYnNlbmNlLCBvZiB0aGUgYHN0YXRpY2Aga2V5d29yZC4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGZpbmQgdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmVuJiMzOTt0KiBzdGF0aWMsIGFuZCBoZW5jZSwgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIEludGVyYWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgdGhlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGZ1bmN0aW9uOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQmIzM5O3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIGBuZnFubF9jYmAgc3RydWN0dXJlLCByaWdodD8gVGhlIGBuZnFubF9jYmAgYXJyYXkgaXRzZWxmIGdldHMgcmVnaXN0ZXJlZCB1c2luZyBgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcmAsIHNvIHRoYXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludC4KClRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGlzIGBuZm5ldGxpbmtfcmN2X21zZ2AsIHdoaWNoIHRoZW4sIG5hdHVyYWxseSwgY2FsbHMgdGhpcyBjYWxsYmFjay4gQ29uc2VxdWVudGx5LCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBlbmRzIHVwIGdldHRpbmcgZXhlY3V0ZWQuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtZWFucyB3ZSBjYW4gdHJlYXQgaXQgYXMgYSBzeW1ib2wgb2YgaW50ZXJlc3QsIGEgcG9pbnQgZm9yIHBvdGVudGlhbCBmdXp6aW5nIGZvY3VzLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGVzcGVjaWFsbHkgZnJvbSBhIHN5emthbGxlciBwZXJzcGVjdGl2ZTsgd2UgY2FuIG9mdGVuIHRhcmdldCB0aGVzZSBzdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgaW5kZWVkICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGdlbmVyYWxseSBwcmVjbHVkZXMgaW5saW5pbmcuIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIEkmIzM5O2xsIHR1cm4gdG8gYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWlnaHQgYmUgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKSSBzaG91bGQgYWxzbyBkbyBhIGJyb2FkZXIgc2Nhbi4gQXJlIHRoZXJlICphbnkqIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZnRfcGF5bG9hZC5jYD8gQSB0aG9yb3VnaCBzZWFyY2ggY291bGQgcmV2ZWFsIGZ1cnRoZXIgdXNlZnVsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xNDg9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdCh1MzIgb2Zmc2V0LCB1MzIgbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYwLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY0OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZUIFBheWxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBgbmZ0X3BheWxvYWRfZXZhbGAgZnVuY3Rpb24ganVtcHMgb3V0IGF0IG1lIOKAkyBpdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IHRoZSByZWFsIGNydXggb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEhtbSwgdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBtb2RpZnkgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQgZXh0ZXJuYWxseT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiBpcyAqY2FsbGluZyogYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gQmVjYXVzZSBpZiB0aGVyZSBpc24mIzM5O3Qgb25lLCB0aGVuIHRoaXMgY2hhbmdlIGlzIHN1c3BlY3QuIEFoLCBubywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGFuIG9wcyBjYWxsYmFjay4gU28sIGl0IHNob3VsZCBiZSB1c2VkIGluIHRoZSBzYW1lIGZpbGUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gT3IsIGlzIGl0IHB1cmVseSB1c2VkIHdpdGhpbiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC1cdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBUEkgRW50cnlwb2ludHMgZm9yIFNhZmV0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGZvciByZWxpYWJsZSBsaXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBteSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBleGNsdWRlIGl0LCBidXQgaXQgYXBwZWFycyB0byBiZSBmaW5lIGJlY2F1c2UgaXQmIzM5O3Mgbm90IGlubGluZWQuCgpIb3dldmVyLCBzaW5jZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZXkgYXJlICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZXkgKmRvKiBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcywgc28gaXQgc2hvdWxkIGJlIHNhZmUgdG8gbGlzdCB0aGVtLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgdXNhZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbXBsaWNhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9yZWN2X3ZlcmRpY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTY1OD1zdGF0aWMgaW50IG5mcV9pZF9hZnRlcih1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBtYXgpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjYyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNjYzOnN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3Mzk9c3RhdGljIGludCBuZnFhX3BhcnNlX2JyaWRnZShzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc3NDpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzc1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBuZnFhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xOTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZnFubF9jYltORlFOTF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODYtXHRbTkZRTkxfTVNHX1ZFUkRJQ1RdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk4NzpcdFx0LmNhbGxcdFx0PSBuZnFubF9yZWN2X3ZlcmRpY3QsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTk4LVx0W05GUU5MX01TR19WRVJESUNUX0JBVENIXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk5OTpcdFx0LmNhbGxcdFx0PSBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2gsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTIwMDAtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkVudHJ5IFBvaW50cyBhbmQgQmF0Y2ggUHJvY2Vzc2luZyBpbiBOZXRmaWx0ZXIgUXVldWUqKgoKUmlnaHQsIHNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBhcmUgKnRoZSogY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBOZXRmaWx0ZXIgUXVldWUgc3Vic3lzdGVtLiBUaGV5JiMzOTtyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBoYW5kbGluZyBwYWNrZXRzLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBkb2VzIGBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2hgLCBpbiBpdHMgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCwgYWxzbyBtYWtlIGEgY2FsbCB0byBgbmZxbmxfbWFuZ2xlYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gVGhlIGltcGFjdCBvZiBwb3RlbnRpYWxseSBtdWx0aXBsZSBjYWxscyB0byBhIG1hbmdsaW5nIGZ1bmN0aW9uIGluIGEgYmF0Y2ggY29udGV4dCBoYXMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgb3B0aW1pemF0aW9uIGFuZCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBteSBkZXNpZ24uIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgY2FsbCBwYXRoIHRvIGVuc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mcW5sX21hbmdsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDE3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQxODpuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDE5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3NzQ9c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE4MjQ6XHRcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTgyNS1cdFx0XHRcdCBwYXlsb2FkX2xlbiwgZW50cnksIGRpZmYpIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBuZnFubF9tYW5nbGVgLiBHb3QgaXQuIFRoZXJlZm9yZSwgdGhlIGNvcmUgZm9jdXMgZm9yIHN5bWJvbCBpZGVudGlmaWNhdGlvbiBzaG91bGQgYmU6IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCwgY3J1Y2lhbGx5LCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MgYW50aWNpcGF0ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gYE5GX1RBQkxFU2AgaXMgZGVmaW5pdGVseSBhIGNvbnNpZGVyYXRpb24gdG9vLCBhbmQsIEkgKnRoaW5rKiBJIHNhdyBgTkZfQ09OTlRSQUNLYCBwb3AgdXAgd2hlbiBJIHdhcyByZXZpZXdpbmcgdGhlIGBuZnFubF92YWxpZGF0ZV9sNGAgY29kZSB3aXRoIHRoZSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylgIGNoZWNrLCBzbyB0aGF0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLgoKTGV0IG1lIGFuYWx5emUgdGhhdCBgTkZfQ09OTlRSQUNLYCBkZXBlbmRlbmN5IG1vcmUgdGhvcm91Z2hseS4gVGhlIGNvbmRpdGlvbmFsIGNvZGUgaW4gYG5mcW5sX3ZhbGlkYXRlX2w0YCBzcGVjaWZpY2FsbHkgY2hlY2tzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGJlZm9yZSBkb2luZyBzb21lIHByb3RvY29sLXNwZWNpZmljIGNoZWNrcy4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgZGlzYWJsZWQsIGl0IGp1c3QgYnlwYXNzZXMgdGhhdCBwYXJ0LiBIb3dldmVyLCBlbmFibGluZyBpdCB3b3VsZCBhbGxvdyBtZSB0byB0aG9yb3VnaGx5IHRlc3QgdGhhdCBicmFuY2ggb2YgdGhlIGNvZGUuIFNvLCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UsIEkgc2hvdWxkIGluY2x1ZGUgaXQgaW4gbXkgY29uZmlnLgoKQW5kIGxhc3RseSwgbGV0JiMzOTtzIHZlcmlmeSBpZiBgTkZUX1BBWUxPQURgIGl0c2VsZiBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfUEFZTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbm5lY3RpbmcgdGhlIERvdHM6IG5mdF9wYXlsb2FkLm8gYW5kIENPTkZJR19ORl9UQUJMRVMqKgoKUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFNvLCBgbmZ0X3BheWxvYWQub2AuLi4gdGhhdCYjMzk7cyB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byBoYW5kbGluZyBwYXlsb2FkIGRhdGEsIGlzbiYjMzk7dCBpdD8gT2theSwgYW5kIHRoYXQmIzM5O3MgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkLiBUaGUgc3lzdGVtJiMzOTtzIGJ1aWxkIHByb2Nlc3MgaXNuJiMzOTt0IGp1c3QgY2h1cm5pbmcgaXQgb3V0IHVubGVzcy4uLiBhaGEhIFRoZSBjbHVlIGlzIGBDT05GSUdfTkZfVEFCTEVTYCBiZWluZyBlbmFibGVkLiBTbywgdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uICpzcGVjaWZpY2FsbHkqIHRpZXMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBgbmZ0X3BheWxvYWQub2AgbW9kdWxlIHRvIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBOZXRmaWx0ZXIgdGFibGVzIGZ1bmN0aW9uYWxpdHkuIFRoYXQgbWVhbnMgaWYgTmV0ZmlsdGVyIHRhYmxlcyBhcmUgZW5hYmxlZCwgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBwYXlsb2FkIGRhdGEgZ2V0cyBidWlsdCB0b28uIEl04oCZcyBsaWtlIGEgZGVwZW5kZW5jeSDigJMgYG5mdF9wYXlsb2FkLm9gIGlzIGEgc3VwcG9ydGluZyBtb2R1bGUgZm9yIGBORl9UQUJMRVNgLiBHb3QgaXQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHJlbGF0aW9uc2hpcCB0byByZW1lbWJlciB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZyB0aGlzIGFyZWEsIHNpbmNlIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgZmlsZSB3b3VsZCBiZSBpbmRpY2F0aXZlIG9mIE5GX1RBQkxFUyBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBuZl90YWJsZXMgRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZ0X3BheWxvYWQub2Agb2JqZWN0IGZpbGUuIE15IGluaXRpYWwgaHVuY2ggaXMgcmlnaHQ6IGl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYG5mX3RhYmxlcy1vYmpzYCBsaXN0LiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBuZl90YWJsZXNgIGlzIHRoZSBrZXkgbW9kdWxlIGhlcmUsIGFuZCBgbmZ0X3BheWxvYWQub2AgaXMgYSBrbm93biBjb21wb25lbnQuIFRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaW5jbHVkZSBpdCB3aGVuIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBzZXQg4oCTIGEgcHJldHR5IHN0YW5kYXJkIGRlcGVuZGVuY3kuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzaW5jZSBpdCBpcyBhIGRlcGVuZGVuY3kuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcyBhIGRlcGVuZGVuY3kuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgdG8gdHJvdWJsZXNob290IG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgZGVmaW5lZC4gSXMgaXQgdHVja2VkIGF3YXkgaW4gdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUsIGNvdmVyaW5nIGJyb2FkZXIgbmV0d29ya2luZyBmZWF0dXJlcz8gT3IgZG9lcyBpdCByZXNpZGUgd2l0aGluIHRoZSBkZWRpY2F0ZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZGlyZWN0b3J5LCB3aGljaCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZ2l2ZW4gdGhlICYjMzQ7bmV0ZmlsdGVyJiMzNDsgcHJlZml4PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTM0CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNydWNpYWwgTDQgaGVhZGVyIHZhbGlkYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IG1hbmdsaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgcmlnb3JvdXNseSB0ZXN0ZWQuIEZpcnN0LCBpdCBzZWVtcyBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBhIHByZXJlcXVpc2l0ZSwgc28gSSYjMzk7bGwgYmUgc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IGBORVRGSUxURVJfTkVUTElOS2AgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgTkZfVEFCTEVTYCwgc28gSSB3b24mIzM5O3Qgd29ycnkgYWJvdXQgZXhwbGljaXRseSBzZXR0aW5nIGl0LiBXaGlsZSBgSVBWNmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIEkmIzM5O2xsIGluY2x1ZGUgaXQgaW4gdGhlIGNvbmZpZyBqdXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29yayB0cmFmZmljLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgQ09ORklHX05GX1RBQkxFU2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYW5kIG9mIGNvdXJzZSBgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRGAuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBORlFOTF9NU0dfVkVSRElDVGAsIGFuZCBJIGNvbmZpcm0gYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIGZvciB0aGUgcGF5bG9hZCBzZXQuCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgZnVuY3Rpb25hbGl0eS4gVGhlIHBhdGNoIGFkZHMgYG5mcW5sX3ZhbGlkYXRlX2w0YCBmb3IgbmZxdWV1ZSBhbmQgYG5mdF90aF93cml0ZV9va2AgZm9yIHRoZSBuZnRhYmxlcyBwYXlsb2FkLiBUaGVzZSBhcmUgZGVzaWduZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3Igb3RoZXIgaW52YWxpZCBtYW5pcHVsYXRpb25zIG9mIHBhY2tldCBoZWFkZXJzLiBUaGVzZSBjaGVja3MgYXJlIGFic29sdXRlbHkgKmNyaXRpY2FsKiBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIHZhbGlkYXRpb24gaXMgcm9idXN0LgoKSSYjMzk7dmUgZ290IHRoZSBkYXRhIEkgbmVlZC4KCioqTXkgVmVyZGljdDoqKiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb246CgoqICAgYG5mcW5sX3JlY3ZfdmVyZGljdGAKKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAKCkkmIzM5O2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBORVRGSUxURVJfQURWQU5DRURgCiogICBgTkVURklMVEVSX05FVExJTktfUVVFVUVgCiogICBgTkZfVEFCTEVTYAoqICAgYE5GX0NPTk5UUkFDS2AKCk15IHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBzdHJlbmd0aGVucyB0aGUgYm91bmRzIGNoZWNraW5nIGZvciBwYWNrZXQgbWFuZ2xpbmcgb3BlcmF0aW9ucy4gQnkgZnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCB0aGUgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uLCB3ZSBjYW4gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgZWZmaWNhY3kgb2YgdGhlc2UgbmV3IHZhbGlkYXRpb24gbWVjaGFuaXNtcyBhbmQsIGhvcGVmdWxseSwgdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNi45NjU4NDIwNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNTk5Mzk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnFubF9yZWN2X3ZlcmRpY3RcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMNCBoZWFkZXIgdmFsaWRhdGlvbiBmb3IgcGFja2V0IG1hbmdsaW5nIHZpYSBuZnF1ZXVlIGFuZCBuZnRhYmxlcyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgaW52YWxpZCBwYWNrZXQgbW9kaWZpY2F0aW9ucy4gRnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24gcGF0aHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgYm91bmRzIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MjYuOTY1ODUwODA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU2NzMzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5pbmRleCBiOGFhZjM5Y2I0ZDhlLi41YzI5YTQ0MjhiNmViIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXFxuQEAgLTI4LDEwICsyOCwxNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjdHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC1kZWZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91ZHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9nc28uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXFx1MDAzZVxcbkBAIC0xMjA2LDYgKzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcXG4gXFx0cmV0dXJuIG1lbWNtcChpcGhfbmV3ICsgMSwgaXBfaGRyKGUtXFx1MDAzZXNrYikgKyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbitcXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0O1xcbitcXG4rXFx0Y3QgPSBuZl9jdF9nZXQoZS1cXHUwMDNlc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4rXFx0aWYgKGN0IFxcdTAwMjZcXHUwMDI2ICFuZl9jdF9pc190ZW1wbGF0ZShjdCkgXFx1MDAyNlxcdTAwMjYgbmZfY3RfcHJvdG9udW0oY3QpICE9IHByb3RvKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbitcXG4rXFx0c3dpdGNoIChwcm90bykge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOiB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilkYXRhO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgdGhsZW47XFxuK1xcbitcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBzaXplb2YoKnRoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0dGhsZW4gPSBfX3RjcF9oZHJsZW4odGgpO1xcbitcXHRcXHRpZiAodGhsZW4gXFx1MDAzYyBzaXplb2YoKnRoKSB8fCBkYXRhX2xlbiBcXHUwMDNjIHRobGVuKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRcXHRyZXR1cm4gZGF0YV9sZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4rXFx0XFx0cmV0dXJuIGRhdGFfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7XFxuK1xcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcXG4rXFx0Y2FzZSBJUFBST1RPX1NDVFA6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fR1JFOlxcbitcXHRcXHRyZXR1cm4gZGF0YV9sZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBncmVfYmFzZV9oZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fQUg6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwX2F1dGhfaGRyKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0VTUDpcXG4rXFx0XFx0cmV0dXJuIGRhdGFfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4ge1xcbkBAIC0xMjI5LDcgKzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4gXFx0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcXG4gXFx0ICogcmVjb21waWxlICsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpO1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG5mcW5sX3ZhbGlkYXRlX2w0KChjb25zdCB1OCAqKWlwaCArIGlobCwgZGF0YV9sZW4gLSBpaGwsIGUsXFxuK1xcdFxcdFxcdFxcdCBpcGgtXFx1MDAzZXByb3RvY29sKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcXG5AQCAtMTI4Niw3ICsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxcbiBcXHRcXHRpbnQgaGRybGVuO1xcbiBcXG4gXFx0XFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfbDQoZGF0YSwgZGF0YV9sZW4sIGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuZXdfbmV4dGhkcik7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCsrIFxcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xMzIzLDcgKzEzNzgsNyBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXFxuIFxcdFxcdGRhdGEgKz0gaGRybGVuO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLCBuZXdfbmV4dGhkcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IDhhNDQ3MmZkNzdkOWYuLmUzMTVkMzVmNzNkNGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTEwNjcsNiArMTA2NywxNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGRvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBhY2tfc2VxKSArIHNpemVvZihfX2JlMzIpO1xcbitcXG4rXFx0aWYgKHBrdC1cXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZW9mZnNldCBcXHUwMDNlIGRvZmYgfHwgcHJpdi1cXHUwMDNlb2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IGRvZmY7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbkBAIC0xMTA1LDYgKzExMTYsOCBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4gXFx0XFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pIHx8IHBrdC1cXHUwMDNlZnJhZ29mZilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNy40MzI0NjgwMzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDE4OTMyOTk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnFubF9yZWN2X3ZlcmRpY3RcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMNCBoZWFkZXIgdmFsaWRhdGlvbiBmb3IgcGFja2V0IG1hbmdsaW5nIHZpYSBuZnF1ZXVlIGFuZCBuZnRhYmxlcyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgaW52YWxpZCBwYWNrZXQgbW9kaWZpY2F0aW9ucy4gRnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24gcGF0aHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgYm91bmRzIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWIyNGMyMWQ3NDMxZDg5ZjgwZmU3OThmZjRkMmE3ZmM1NTk2NTdhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggYjhhYWYzOWNiNGQ4ZS4uNWMyOWE0NDI4YjZlYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbkBAIC0yOCwxMCArMjgsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2N0cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbkBAIC0xMjA2LDYgKzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbiBcdHJldHVybiBtZW1jbXAoaXBoX25ldyArIDEsIGlwX2hkcihlLVx1MDAzZXNrYikgKyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIHU4IHByb3RvKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuK1x0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3Q7XG4rXG4rXHRjdCA9IG5mX2N0X2dldChlLVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbitcdGlmIChjdCBcdTAwMjZcdTAwMjYgIW5mX2N0X2lzX3RlbXBsYXRlKGN0KSBcdTAwMjZcdTAwMjYgbmZfY3RfcHJvdG9udW0oY3QpICE9IHByb3RvKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rI2VuZGlmXG4rXG4rXHRzd2l0Y2ggKHByb3RvKSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilkYXRhO1xuK1x0XHR1bnNpZ25lZCBpbnQgdGhsZW47XG4rXG4rXHRcdGlmIChkYXRhX2xlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHR0aGxlbiA9IF9fdGNwX2hkcmxlbih0aCk7XG4rXHRcdGlmICh0aGxlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkgfHwgZGF0YV9sZW4gXHUwMDNjIHRobGVuKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4rXHRjYXNlIElQUFJPVE9fSUNNUDpcbitcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuK1x0Y2FzZSBJUFBST1RPX1NDVFA6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7XG4rXHRjYXNlIElQUFJPVE9fR1JFOlxuK1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGdyZV9iYXNlX2hkcik7XG4rXHRjYXNlIElQUFJPVE9fQUg6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpO1xuK1x0Y2FzZSBJUFBST1RPX0VTUDpcbitcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuIHtcbkBAIC0xMjI5LDcgKzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdC8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlXG4gXHQgKiByZWNvbXBpbGUgKyBza2IgdHJhbnNwb3J0IGhlYWRlciB1cGRhdGUuXG4gXHQgKi9cbi1cdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTtcbitcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggKyBpaGwsIGRhdGFfbGVuIC0gaWhsLCBlLFxuK1x0XHRcdFx0IGlwaC1cdTAwM2Vwcm90b2NvbCk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX29uZV9leHRoZHIoY29uc3QgdTggKmRhdGEsXG5AQCAtMTI4Niw3ICsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRpbnQgaGRybGVuO1xuIFxuIFx0XHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfbDQoZGF0YSwgZGF0YV9sZW4sIGUsXG4rXHRcdFx0XHRcdFx0IG5ld19uZXh0aGRyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGV4dGhkcl9jbnQrKyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTMyMyw3ICsxMzc4LDcgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRkYXRhICs9IGhkcmxlbjtcbiBcdH1cbiBcbi1cdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLCBuZXdfbmV4dGhkcik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCA4YTQ0NzJmZDc3ZDlmLi5lMzE1ZDM1ZjczZDRhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0xMDY3LDYgKzEwNjcsMTcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgKyBzaXplb2YoX19iZTMyKTtcbitcbitcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICsgcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSBkb2ZmO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuQEAgLTExMDUsNiArMTExNiw4IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbiBcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXHUwMDNlZnJhZ29mZilcbiBcdFx0XHRnb3RvIGVycjtcbitcdFx0aWYgKCFuZnRfdGhfd3JpdGVfb2socGt0LCBwcml2KSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0b2Zmc2V0ID0gbmZ0X3Rob2ZmKHBrdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNy40MzI0Njk2MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI1NTQ5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgdmFsaWRhdGlvbiBmb3IgTDQgaGVhZGVycyBpbiBgbmZxbmxfdmFsaWRhdGVfbDRgIGFuZCBgbmZ0X3RoX3dyaXRlX29rYCwgcmVzcGVjdGl2ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXM/IEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hlbiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50LlxuXG5MZXQncyBzZWXigKYgYG5mbmV0bGlua19xdWV1ZS5jYCBpcyBwcm9iYWJseSB0aWVkIHRvIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBNYWtlcyBzZW5zZS4gQW5kIGBuZnRfcGF5bG9hZC5jYOKApiBJIHN1c3BlY3QgdGhhdCBtaWdodCBiZSBlbmFibGVkIGJ5IGBDT05GSUdfTkZUX1BBWUxPQURgLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGFyZ2VyIGxpa2UgYENPTkZJR19ORl9UQUJMRVNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgcGlucG9pbnQgdGhvc2UgY29uZmlnIG9wdGlvbnMgcHJlY2lzZWx5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGtpbmQgb2YgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgYSBwcm9wZXIgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzEuMjU4MDIxNTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzU1MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5ldGxpbmtfcXVldWVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19BQ0NUKSArPSBuZm5ldGxpbmtfYWNjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyODpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUpICs9IG5mbmV0bGlua19xdWV1ZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HKSArPSBuZm5ldGxpbmtfbG9nLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzEuNjExNTc3ODU2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzMyMzg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgcmVnYXJkaW5nIGBuZnRfcGF5bG9hZC5jYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGFja2V0IGluc3BlY3Rpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGV4dHJhY3Rpb24gb2YgcGF5bG9hZCBkYXRhIGZyb20gbmV0d29yayBwYWNrZXRzLCBhIGNydWNpYWwgc3RlcCBmb3IgYW55IHNvcGhpc3RpY2F0ZWQgZmlsdGVyaW5nIG9yIG1hbmlwdWxhdGlvbi4gTXkgbWluZCdzIHJhY2luZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSB1c2UgY2FzZXM6IGRlZXAgcGFja2V0IGluc3BlY3Rpb24gKERQSSksIGN1c3RvbSBydWxlIG1hdGNoaW5nLCBwb3NzaWJseSBldmVuIGludHJ1c2lvbiBkZXRlY3Rpb24gc3lzdGVtcyAoSURTKSByZWx5aW5nIG9uIGNvbnRlbnQgc2lnbmF0dXJlcy5cblxuSSdtIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhpbmdzIGxpa2UgdGhlIGBza2JgIChTb2NrZXQgQnVmZmVyKSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB0byBhY2Nlc3MgdGhlIHBhY2tldCBkYXRhLCBhbmQgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMuIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvZmYtYnktb25lIGVycm9ycz8gV2hhdCBhYm91dCBidWZmZXIgb3ZlcmZsb3dzPyBJJ20gYWxyZWFkeSBpbWFnaW5pbmcgc2NlbmFyaW9zIHdoZXJlIGNyYWZ0ZWQgcGFja2V0cyBjb3VsZCBleHBsb2l0IHRoZXNlIGZsYXdzIHRvIGJ5cGFzcyBmaWx0ZXJpbmcgcnVsZXMgb3IgZXZlbiBjYXVzZSBhIGRlbmlhbC1vZi1zZXJ2aWNlLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFBheWxvYWQgZXh0cmFjdGlvbiBjYW4gYmUgcmVsYXRpdmVseSBleHBlbnNpdmUsIGVzcGVjaWFsbHkgaWYgZG9uZSBvbiBldmVyeSBwYWNrZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWNrZXQgdHlwZXMgYW5kIHByb3RvY29scyDigJMgaXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBleHRyYWN0aW9uIG1ldGhvZHMg4oCTIGRvZXMgaXQgY29weSBkYXRhIG9yIHVzZSBwb2ludGVycz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgb3B0aW1pemF0aW9ucywgYW5kIGFzc2VzcyB0aGVpciB0cmFkZW9mZnMgYmV0d2VlbiBzcGVlZCBhbmQgbWVtb3J5IGNvbnN1bXB0aW9uLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRvIGNoZWNrIGhvdyBpdCBkZWFscyB3aXRoIGZyYWdtZW50YXRpb24uIERvZXMgaXQgcmVhc3NlbWJsZSBwYWNrZXRzIGNvcnJlY3RseSwgb3IgYXJlIHdlIHBvdGVudGlhbGx5IGxvc2luZyBkYXRhIGFuZCB0aGVyZWZvcmUgbWlzaW50ZXJwcmV0aW5nIHRoZSB0cmFmZmljPyBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwYWNrZXQgaGVhZGVycywgYW5kIHRoZWlyIHJlbGF0aXZlIG9mZnNldHMgdG8gdGhlIHJlbGV2YW50IHBheWxvYWQgZGF0YS4gSXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyB0byBhdm9pZCB1bmV4cGVjdGVkIGFjY2VzcyB2aW9sYXRpb25zLCBnaXZlbiB0aGF0IHBhY2tldCBoZWFkZXJzIGNhbiB2YXJ5IGluIHNpemUuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJ1Z3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIGFueSByZWFsLXdvcmxkIGRlcGxveW1lbnQuIEkga25vdyB0aGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTozNS43Mjg5MDQzOTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTE5Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjM1LjgzMzAyOTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDI5NjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIGFzIHBhcnQgb2YgYG5mX3RhYmxlcy1vYmpzYCwgd2hpY2ggaXMsIGluIHR1cm4sIG5lc3RlZCB1bmRlciBgQ09ORklHX05GX1RBQkxFU2AuIFRoYXQncyB0aGUgY29yZS4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uLiBJIGtub3cgdGhhdCBgbmZfdGFibGVzYCBpcyBjZW50cmFsIHRvIG15IHdvcmssIHNvIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCdsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvZiB0aGUgY3J1Y2lhbCBlbGVtZW50cyBvciBtaXNzaW5nIGFueSBpbXBsaWNhdGlvbnMgb2YgbXkgY2hvaWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzguNzg3MzI5MTc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU5MDI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzguOTY0OTI4MjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMjAyNzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiAqdGhpbmsqIGFib3V0IGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IGl0J3MgbGlrZWx5IGxpbmtlZCB0byB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbSwgb2J2aW91c2x5LCBidXQgbWF5YmUgaXQgcmVxdWlyZXMgc3BlY2lmaWMgTmV0bGluayBzdXBwb3J0LCBvciBldmVuIGNlcnRhaW4gbmV0d29yayBxdWV1aW5nIGZyYW1ld29ya3MgdG8gYmUgYWN0aXZlIGZpcnN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9mIGNvdXJzZSwgcHJvYmFibHkgaW4gdGhlIE5ldGZpbHRlciBvciBOZXRsaW5rIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGltYWdpbmluZyB0aGVyZSdzIGEgY2FzY2FkZSBvZiBkZXBlbmRlbmNpZXM7IHNvbWV0aGluZyBsaWtlLCAnaWYgKnRoaXMqIGlzIG9uLCB0aGVuIHlvdSAqbXVzdCogaGF2ZSAqdGhhdCogb24sIGFuZCAqdGhlbiogeW91ICpjYW4qIGVuYWJsZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgJy4gVGltZSB0byBnZXQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDIuMTc2OTU4OTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg0ODg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQyLjM0NTQ1NjYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwMDc3ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgbGluZSA1NCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBhc3N1bWluZyB0aGF0IGxpbmUgcHJvYmFibHkgY29udGFpbnMgYSB0b3AtbGV2ZWwgYGNvbmZpZ2Agb3B0aW9uIG9yIGEgbW9kdWxlIGRlZmluaXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgdXN1YWxseSBiZWdpbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzIGZvciBrZXkgbmV0ZmlsdGVyIGZlYXR1cmVzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgb3JnYW5pemVkIHRoZSBvcHRpb25zIGNvbmNlcHR1YWxseSDigJMgaXMgaXQgYmFzZWQgb24gcHJvdG9jb2wsIGZ1bmN0aW9uYWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjIxNTUzNzAxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA2NTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjg6XFx0XFx0ICBmb3IgbG9nZ2luZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDUuMjE1Njc1OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY3OTU5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbnMgLSBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIHNvIEkgc2VlIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgY29udGluZ2VudCB1cG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBidWlsZCB1cG9uIGVhY2ggb3RoZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGNvbmZpcm1pbmcgYSBwYXJ0aWN1bGFyIGRlcGVuZGVuY3kgY2hhaW4uIE5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGFtIGNvbmZpZ3VyaW5nIGFueXRoaW5nIHVwc3RyZWFtIHRoYXQgbWlnaHQgaW1wYWN0IHRob3NlLlxuXG5Ob3csIGBORl9UQUJMRVNgLi4uIHRoYXQncyBhbm90aGVyIGtleSBwbGF5ZXIgaW4gdGhlIGlwdGFibGVzIHdvcmxkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIHdoZXJlIHRoZXkgbmVlZCB0byBiZSwgc28gSSBjYW4gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXQgSSBhbSB3b3JraW5nIG9uLiBcblxuXG4iLCJJbnB1dFRva2VucyI6NjAyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDguMjMyNDc1NDc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUxMDUxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDguNDE3NTg2NDUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjkwMTA3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNDU1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBkZWNpc2lvbnMgYXJlIG1hZGUgaW4gdGVybXMgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhpcyBzZWN0aW9uLCBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEtjb25maWcgc3ltYm9scy4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjUxLjA0NjYwMTQzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTEuMDQ2NzUyMzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzg2MzcyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGFuZCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBORl9UQUJMRVNgLiBJbml0aWFsbHksIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbXBvbmVudHMuIEJ1dCBob2xkIG9uLCBJIGp1c3Qgc3BvdHRlZCBzb21ldGhpbmfigKYgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIG1pZ2h0IG5lY2Vzc2l0YXRlIGEgZGVlcGVyIGxvb2sgaW50byB0aGUgaW50ZXJhY3Rpb25zIHRoZXJlLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxhdGVkIHRvIHRoaXMuIEknbSBzZWVpbmcgY2hhbmdlcyBpbjogYG5mcW5sX3ZhbGlkYXRlX2w0YCwgYG5mcW5sX3ZhbGlkYXRlX2lwNGAsIGBuZnFubF92YWxpZGF0ZV9pcG9wdHNgLCBgbmZxbmxfdmFsaWRhdGVfZXh0aGRyYCwgYW5kIGBuZnFubF92YWxpZGF0ZV9pcDZgLCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY2x1c3RlciBvZiB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgY2FsbCB0aGVzZSBtb2RpZmllZCBvbmVzLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTUuMjI1MzkyMDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwNzg3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfdmFsaWRhdGVfaXA0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMjE2PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEyNjAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMjYxOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTI2Mi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDAwPXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTQwNC1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE0MDU6XFx0XFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDA2LVxcdGNhc2UgTkZQUk9UT19JUFY2OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo1NS4zNjY0Nzc0NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTE0ODUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYG5mcW5sX3ZhbGlkYXRlX3dyaXRlYCBjYWxsOlxuXG4qKkFuYWx5emluZyBgbmZxbmxfdmFsaWRhdGVfd3JpdGVgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBteSBiZWFyaW5ncy4gXCJXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBjYWxsP1wiIEknbSB0aGlua2luZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzICpjYWxsaW5nKiBpdC4gSXMgaXQgcGFydCBvZiB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlPyBJcyBpdCB1c2VyLXNwYWNlIGludGVyYWN0aW5nIHdpdGggYSBrZXJuZWwgbW9kdWxlPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY2FsbGVyIGlzICpjcml0aWNhbCogdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS5cblxuTXkgYnJhaW4gaXMgYWxyZWFkeSBmaXJpbmcgb2ZmIHF1ZXN0aW9ucy4gV2hhdCBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgaW52YWxpZCBkYXRhPyBJcyBpdCByZWxhdGVkIHRvIHBhY2tldCBtYW5pcHVsYXRpb24sIHJ1bGUgZW5mb3JjZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIHdpbGwgc3RhcnQgYnkgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEknbSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU4LjU1NzYyOTQxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTA0MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX3ZhbGlkYXRlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMzg0PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzOTktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDAwOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxOD1uZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDI0LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQyNTpcXHRpZiAoIW5mcW5sX3ZhbGlkYXRlX3dyaXRlKGRhdGEsIGRhdGFfbGVuLCBlKSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MjYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU4LjY3MTczODkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAxMjI0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG5mcW5sX21hbmdsZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGNhbGxpbmcgYG5mcW5sX21hbmdsZWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgY29tcHJlaGVuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgc2lkZSBlZmZlY3RzLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBtZW50YWwgbW9kZWwgb2YgaG93IGl0IGZ1bmN0aW9ucyBhbmQgd2hpY2ggcHJvY2Vzc2VzIGFyZSBpbml0aWF0aW5nIGl0LiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gV2hhdCBkYXRhIGlzIGJlaW5nIG1hbmlwdWxhdGVkPyBUaGlzIGRldGFpbGVkIHBlcnNwZWN0aXZlIGlzIGVzc2VudGlhbCBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjAxLjc3Mjk2Njk2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MDA5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfbWFuZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDE3PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE0MTg6bmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MTkte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzc0PXN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODI0OlxcdFxcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjUtXFx0XFx0XFx0XFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowMS44NjA0NzMxNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMTI3NTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIvTkZUYWJsZXMgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgZW50cnkgcG9pbnQgZm9yIG5ldGZpbHRlciBxdWV1aW5nIOKAkyB0aGF0IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IFRoZSBjb3JlIG9mIHByb2Nlc3NpbmcgcXVldWVkIHBhY2tldHMuIE5vdywgSSdtIHRoaW5raW5nLCB3aGVyZSBkb2VzIHRoZSBwYXlsb2FkIG1hbmlwdWxhdGlvbiBhY3R1YWxseSAqaGFwcGVuKj8gV2hhdCdzIHRoZSBkYW5jZT8gSXQgYWx3YXlzIGNvbWVzIGJhY2sgdG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gU28sIHRoYXQgYnJpbmdzIG1lIHRvIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoYXQncyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUsIHJpZ2h0PyBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLiBJIHdhbnQgdG8gdHJhY2UgaG93IGl0IGdldHMgdGhvc2UgcGFja2V0cywgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBkYXRhIHN0cmVhbSBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS4xOTE3NTIyNTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTcxNTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNzA9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgtXFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS4yOTc0NzMzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4MTg2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5mdF9wYXlsb2FkX3NldGAgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIHRoZSBgZXZhbGAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgYG5mdF9wYXlsb2FkX3NldF9vcHNgIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBsaWtlbHkgYG5mcW5sX3JlY3ZfdmVyZGljdGAgYW5kLCBvZiBjb3Vyc2UsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXRzZWxmIOKAkyB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBpcyBwcm9iYWJseSBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYG5mdF9kb19jaGFpbmAuXG5cbk5vdywgYSBrZXkgb2JzZXJ2YXRpb246IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXMgZGVjbGFyZWQgYXMgKnN0YXRpYyouIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQncyBhbiBvcHMgY2FsbGJhY2ssIHdoaWNoIG1ha2VzIGl0IGFuIGltcG9ydGFudCBmb2N1cyBzeW1ib2wuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdOKAmXMgZWl0aGVyIHRoYXQsIG9yIGBuZnFubF9yZWN2X3ZlcmRpY3RgLiBCdXQgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHdoZXRoZXIgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBoYXMgYSB1bmlxdWUsIGlkZW50aWZpYWJsZSBzeW1ib2wgYWRkcmVzcyBpZiB0aGUgY29tcGlsZXIgY29tcGxldGVseSBpbmxpbmVzIGl0LiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYG5mdF9wYXlsb2FkX3NldF9vcHMuZXZhbGApLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgY2FuJ3QgZnVsbHkgaW5saW5lIGl0LiBJdHMgYWRkcmVzcyBtdXN0IGJlIHRha2VuLiBUaGlzIG1lYW5zIGl0IG11c3QgaGF2ZSBhIGRpc3RpbmN0IG1lbW9yeSBhZGRyZXNzLlxuXG5UaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlIGluIGFuYWx5c2lzLiBBbm90aGVyIHdyaW5rbGUgaXMgdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBhbHNvIHN0YXRpYy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgKnRoYXQqIGlzIGFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHNvbWV3aGVyZS4gR290dGEgYmUgc3lzdGVtYXRpYyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjEwLjI2NTY2MzU2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTM5MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX3JlY3ZfdmVyZGljdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTY1OD1zdGF0aWMgaW50IG5mcV9pZF9hZnRlcih1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNjYzOnN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjY0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzM5PXN0YXRpYyBpbnQgbmZxYV9wYXJzZV9icmlkZ2Uoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE3NzQ6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5mcWFbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZxbmxfY2JbTkZRTkxfTVNHX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODYtXFx0W05GUU5MX01TR19WRVJESUNUXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk4NzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZxbmxfcmVjdl92ZXJkaWN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk4OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9SQ1UsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5OTgtXFx0W05GUU5MX01TR19WRVJESUNUX0JBVENIXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5OTk6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTIwMDAtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoxMC4zOTI2MjE1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzczODQwODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBQb2ludGVycyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIGRlZmluaXRlbHkgYXNzaWduaW5nIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MganVzdCBjb25maXJtIG15IHN1c3BpY2lvbi4uLiB5ZWFoLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBCdXQsIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB0aGUgY29tcGlsZXIgd29uJ3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbi4gV2Uga25vdyBob3cgdG8gZGVhbCB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgY29tcGlsZXIuXG5cbldoaWxlIEknbSBoZXJlLCBJIG1pZ2h0IGFzIHdlbGwgYWRkIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgdG8gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mLlxuXG5BbmQgZmluYWxseSwgZ2l2ZW4gaXRzIHVzYWdlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIEl0IHdpbGwgYmUgcmVxdWlyZWQgaWYgaXRzIHVzZSBpcyByZXF1aXJlZCBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjE0LjE2NjQ2NjY0MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTk3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTQuMjY4NDY5MTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDE2MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfQ09OTlRSQUNLIGFuZCBuZnRfcGF5bG9hZF9zZXRfZXZhbCAtIFdoZXJlJ3MgdGhlIEhvb2t1cD8qKlxuXG5BbHJpZ2h0LCBzbyBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIHRoYXQgY29udGV4dCwgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gZml0IGluPyBMZXQncyBkaXZlIHJpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHNwZWNpZmljYWxseSBjaGVjayBvdXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2Ugc2VlIGhvdyBwYXlsb2FkIG9wZXJhdGlvbnMgYXJlICpldmFsdWF0ZWQqIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpbiByZWxhdGlvbiB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBjb25udHJhY2sgcmVsYXRlZCBpbmZvcm1hdGlvbiBzb21laG93LCBwb3NzaWJseSBmb3IgYSBjb25uZWN0aW9uLXNwZWNpZmljIHBheWxvYWQgbW9kaWZpY2F0aW9uLiBIb3BlZnVsbHksIHRoZSBjb2RlIHdpbGwgcHJvdmlkZSBhIGNsZWFuIHZpZXcgb2YgYW55IGludGVncmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgaG93IHRoZSBjb25udHJhY2sgY29udGV4dCBpcyB1c2VkIChpZiBpdCBpcykuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTguMDE4NjM0OTExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMDYxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzc6XFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTguMjU1OTQ2Njc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ4MDQ3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQXR0YWNrIFN1cmZhY2VzIGluIHRoZSBORlRhYmxlcyBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBjb25maXJtYXRpb24gLSBzdGF0aWMgaXQgaXMuIE5vdywgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIGFuZCBzaW5jZSBzdGF0aWNzIGFyZSBnZW5lcmFsbHkgbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgZGlyZWN0IGF0dGFjayB2ZWN0b3IgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgdGhpbmtpbmcgaXMgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIHF1ZXVlLiBPa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBhbHNvIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gTGV0IG1lIG1vdmUgb24gYW5kIGV4cGxvcmUgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG9uIGBuZm5ldGxpbmtfcXVldWUuY2AgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBhbSBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjEuNjgwNzU0Njk0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3MTkzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbmZxbmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjIxLjc5NjQ4MjYzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4ODIzMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqSHVudGluZyBmb3IgRHluYW1pYyBGdW5jdGlvbmFsaXR5IGluIG5mbmV0bGlua19xdWV1ZS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5mbmV0bGlua19xdWV1ZS5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCByaWdpZGx5IHN0YXRpYy4gU3RhdGljIGZ1bmN0aW9ucywgYnkgdGhlaXIgbmF0dXJlLCBhcmUgbGltaXRlZCBpbiBzY29wZSwgYW5kIGxlc3MgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBtb3JlIGR5bmFtaWMgb3IgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIG5ldGxpbmsgcXVldWVpbmcgc3lzdGVtLiBJJ20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgZmlsZSwgb3IgbWF5YmUgZXZlbiBsaW5rZWQgZHluYW1pY2FsbHkuIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGhvbGQgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvciwgaXRzIGZsZXhpYmlsaXR5LCBhbmQgcG90ZW50aWFsbHksIGl0cyB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGN1c3RvbWl6YXRpb24uIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODYyLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjUuMDU1MzA4NzcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM3NDk0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogbmZxbmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjcwOnN0cnVjdCBuZnFubF9pbnN0YW5jZSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MS1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDtcXHRcXHQvKiBnbG9iYWwgbGlzdCBvZiBxdWV1ZXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjUuMzM5MDY2NzU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzA4MTE5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGV4cG9zZWQsIGFuZCBJJ20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gaWRlbnRpZnlpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIGdvaW5nIHRvIGJlIGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZGVjbGFyYXRpb25zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGV4cGxpY2l0IGBFWFBPUlRfU1lNQk9MYCBjYWxscy4gVGhhdCB3aWxsIGNsZWFybHkgaWRlbnRpZnkgdGhlIHN5bWJvbHMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSWYgdGhhdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHlpZWxkIHdoYXQgSSBuZWVkLCBJJ2xsIGdvIGJhY2sgYW5kIHJ1biBhIG1vcmUgYmFzaWMgc2VhcmNoIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhlbiBmaWx0ZXIgYmFzZWQgb24gdGhlIHByZXNlbmNlLCBvciBhYnNlbmNlLCBvZiB0aGUgYHN0YXRpY2Aga2V5d29yZC4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgKmFyZW4ndCogc3RhdGljLCBhbmQgaGVuY2UsIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoyOC43Njk4ODE1ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYxMTUzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjguOTY4NTAwNzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MTM3NzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IHRoZSBgbmZxbmxfcmVjdl92ZXJkaWN0YCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIGBuZnFubF9jYmAgc3RydWN0dXJlLCByaWdodD8gVGhlIGBuZnFubF9jYmAgYXJyYXkgaXRzZWxmIGdldHMgcmVnaXN0ZXJlZCB1c2luZyBgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcmAsIHNvIHRoYXQncyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50LlxuXG5UaGUgbmV0bGluayBlbnRyeSBwb2ludCBpcyBgbmZuZXRsaW5rX3Jjdl9tc2dgLCB3aGljaCB0aGVuLCBuYXR1cmFsbHksIGNhbGxzIHRoaXMgY2FsbGJhY2suIENvbnNlcXVlbnRseSwgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBnZXR0aW5nIGV4ZWN1dGVkLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGlzIG1lYW5zIHdlIGNhbiB0cmVhdCBpdCBhcyBhIHN5bWJvbCBvZiBpbnRlcmVzdCwgYSBwb2ludCBmb3IgcG90ZW50aWFsIGZ1enppbmcgZm9jdXMsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIGVzcGVjaWFsbHkgZnJvbSBhIHN5emthbGxlciBwZXJzcGVjdGl2ZTsgd2UgY2FuIG9mdGVuIHRhcmdldCB0aGVzZSBzdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBpbmRlZWQgKm5vdCogaW5saW5lZC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBnZW5lcmFsbHkgcHJlY2x1ZGVzIGlubGluaW5nLiBUaGF0J3MgZ29vZC5cblxuTmV4dCwgSSdsbCB0dXJuIHRvIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IGxvb2tzIGxpa2UgaXQncyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWlnaHQgYmUgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5JIHNob3VsZCBhbHNvIGRvIGEgYnJvYWRlciBzY2FuLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5mdF9wYXlsb2FkLmNgPyBBIHRob3JvdWdoIHNlYXJjaCBjb3VsZCByZXZlYWwgZnVydGhlciB1c2VmdWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNC4wMTk4ODA4NTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mjk3NTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xNDg9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdCh1MzIgb2Zmc2V0LCB1MzIgbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2MC1cXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTU1PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjQ6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNC4zODI4NjI2MjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NTc4ODg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBuZnRfcGF5bG9hZF9ldmFsYCBmdW5jdGlvbiBqdW1wcyBvdXQgYXQgbWUg4oCTIGl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCB0aGUgcmVhbCBjcnV4IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBIbW0sIHRoYXQgb25lJ3Mgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBtb2RpZnkgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQncyBub3QgYmVpbmcgdXNlZCBleHRlcm5hbGx5P1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgKmNhbGxpbmcqIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEJlY2F1c2UgaWYgdGhlcmUgaXNuJ3Qgb25lLCB0aGVuIHRoaXMgY2hhbmdlIGlzIHN1c3BlY3QuIEFoLCBubywgaXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYW4gb3BzIGNhbGxiYWNrLiBTbywgaXQgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHNhbWUgZmlsZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gT3IsIGlzIGl0IHB1cmVseSB1c2VkIHdpdGhpbiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzcuOTM4NjU0MDk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MzgwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzc6XFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzguMDYxNTk3OTE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI5MzAzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50cyBmb3IgU2FmZXR5KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkncmUgZ29pbmcgdG8gaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhhdCdzIHdoYXQgd2Ugd2FudCBmb3IgcmVsaWFibGUgbGlzdGluZy4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0J3Mgc3RhdGljLCBzbyBteSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBleGNsdWRlIGl0LCBidXQgaXQgYXBwZWFycyB0byBiZSBmaW5lIGJlY2F1c2UgaXQncyBub3QgaW5saW5lZC5cblxuSG93ZXZlciwgc2luY2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBXaGljaCBtZWFucyB0aGV5ICpkbyogaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMsIHNvIGl0IHNob3VsZCBiZSBzYWZlIHRvIGxpc3QgdGhlbS5cblxuSSdkIGJldHRlciBkb3VibGUtY2hlY2sgYG5mcW5sX3JlY3ZfdmVyZGljdGAgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHVzYWdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb21wbGljYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDEuODI0NTU2NTQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2NTk3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfcmVjdl92ZXJkaWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNjU4PXN0YXRpYyBpbnQgbmZxX2lkX2FmdGVyKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTY2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE2NjM6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3Mzk9c3RhdGljIGludCBuZnFhX3BhcnNlX2JyaWRnZShzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzczLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc3NDpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3NS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xOTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZnFubF9jYltORlFOTF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk4Ni1cXHRbTkZRTkxfTVNHX1ZFUkRJQ1RdXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxOTg3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZnFubF9yZWN2X3ZlcmRpY3QsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg4LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX1JDVSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk5OC1cXHRbTkZRTkxfTVNHX1ZFUkRJQ1RfQkFUQ0hdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk5OTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjAwMC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9SQ1UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjQyLjAxMjIyMjAzNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAzNDU1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW50cnkgUG9pbnRzIGFuZCBCYXRjaCBQcm9jZXNzaW5nIGluIE5ldGZpbHRlciBRdWV1ZSoqXG5cblJpZ2h0LCBzbywgYXMgSSB1bmRlcnN0YW5kIGl0LCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBhbmQgYG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaGAgYXJlICp0aGUqIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTmV0ZmlsdGVyIFF1ZXVlIHN1YnN5c3RlbS4gVGhleSdyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBoYW5kbGluZyBwYWNrZXRzLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBkb2VzIGBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2hgLCBpbiBpdHMgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCwgYWxzbyBtYWtlIGEgY2FsbCB0byBgbmZxbmxfbWFuZ2xlYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gVGhlIGltcGFjdCBvZiBwb3RlbnRpYWxseSBtdWx0aXBsZSBjYWxscyB0byBhIG1hbmdsaW5nIGZ1bmN0aW9uIGluIGEgYmF0Y2ggY29udGV4dCBoYXMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kuIEl0J3MgYSBrZXkgcXVlc3Rpb24gd2hlbiB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIG15IGRlc2lnbi4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBjYWxsIHBhdGggdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIGZsb3cgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo0NS42MTU2ODA4MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDI1MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX21hbmdsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxNz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDE4Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDE5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTc3ND1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTgyNDpcXHRcXHRpZiAobmZxbmxfbWFuZ2xlKG5sYV9kYXRhKG5mcWFbTkZRQV9QQVlMT0FEXSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODI1LVxcdFxcdFxcdFxcdCBwYXlsb2FkX2xlbiwgZW50cnksIGRpZmYpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDUuNzk3NzExOTA3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzUyODM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBkb2Vzbid0IGRpcmVjdGx5IGNhbGwgYG5mcW5sX21hbmdsZWAuIEdvdCBpdC4gVGhlcmVmb3JlLCB0aGUgY29yZSBmb2N1cyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uIHNob3VsZCBiZTogYG5mcW5sX3JlY3ZfdmVyZGljdGAgYW5kLCBjcnVjaWFsbHksIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGhhbmRsZWQuXG5cbk5vdywgbGV0J3MgYW50aWNpcGF0ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBgTkZfVEFCTEVTYCBpcyBkZWZpbml0ZWx5IGEgY29uc2lkZXJhdGlvbiB0b28sIGFuZCwgSSAqdGhpbmsqIEkgc2F3IGBORl9DT05OVFJBQ0tgIHBvcCB1cCB3aGVuIEkgd2FzIHJldmlld2luZyB0aGUgYG5mcW5sX3ZhbGlkYXRlX2w0YCBjb2RlIHdpdGggdGhlIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKWAgY2hlY2ssIHNvIHRoYXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uXG5cbkxldCBtZSBhbmFseXplIHRoYXQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkuIFRoZSBjb25kaXRpb25hbCBjb2RlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAgc3BlY2lmaWNhbGx5IGNoZWNrcyBmb3IgY29ubmVjdGlvbiB0cmFja2luZyBiZWZvcmUgZG9pbmcgc29tZSBwcm90b2NvbC1zcGVjaWZpYyBjaGVja3MuIElmIGBORl9DT05OVFJBQ0tgIGlzIGRpc2FibGVkLCBpdCBqdXN0IGJ5cGFzc2VzIHRoYXQgcGFydC4gSG93ZXZlciwgZW5hYmxpbmcgaXQgd291bGQgYWxsb3cgbWUgdG8gdGhvcm91Z2hseSB0ZXN0IHRoYXQgYnJhbmNoIG9mIHRoZSBjb2RlLiBTbywgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLCBJIHNob3VsZCBpbmNsdWRlIGl0IGluIG15IGNvbmZpZy5cblxuQW5kIGxhc3RseSwgbGV0J3MgdmVyaWZ5IGlmIGBORlRfUEFZTE9BRGAgaXRzZWxmIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjUxLjE3Mjk5OTg3M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMzkxMzE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1BBWUxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1MS4zNzM0MDE5MjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0Njk4NzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ29ubmVjdGluZyB0aGUgRG90czogbmZ0X3BheWxvYWQubyBhbmQgQ09ORklHX05GX1RBQkxFUyoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBTbywgYG5mdF9wYXlsb2FkLm9gLi4uIHRoYXQncyB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byBoYW5kbGluZyBwYXlsb2FkIGRhdGEsIGlzbid0IGl0PyBPa2F5LCBhbmQgdGhhdCdzICpjb25kaXRpb25hbGx5KiBjb21waWxlZC4gVGhlIHN5c3RlbSdzIGJ1aWxkIHByb2Nlc3MgaXNuJ3QganVzdCBjaHVybmluZyBpdCBvdXQgdW5sZXNzLi4uIGFoYSEgVGhlIGNsdWUgaXMgYENPTkZJR19ORl9UQUJMRVNgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKnNwZWNpZmljYWxseSogdGllcyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGBuZnRfcGF5bG9hZC5vYCBtb2R1bGUgdG8gdGhlIGFjdGl2YXRpb24gb2YgdGhlIE5ldGZpbHRlciB0YWJsZXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtZWFucyBpZiBOZXRmaWx0ZXIgdGFibGVzIGFyZSBlbmFibGVkLCB0aGUgY29kZSB0aGF0IG1hbmFnZXMgdGhlIHBheWxvYWQgZGF0YSBnZXRzIGJ1aWx0IHRvby4gSXTigJlzIGxpa2UgYSBkZXBlbmRlbmN5IOKAkyBgbmZ0X3BheWxvYWQub2AgaXMgYSBzdXBwb3J0aW5nIG1vZHVsZSBmb3IgYE5GX1RBQkxFU2AuIEdvdCBpdC4gVGhhdCdzIGEgY3J1Y2lhbCByZWxhdGlvbnNoaXAgdG8gcmVtZW1iZXIgd2hlbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgdGhpcyBhcmVhLCBzaW5jZSB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIGZpbGUgd291bGQgYmUgaW5kaWNhdGl2ZSBvZiBORl9UQUJMRVMgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1NC45MjAzOTMxMDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYyODk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1NS4wNTUwMjkxODJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDcxMTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgbmZfdGFibGVzIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZC5vYCBvYmplY3QgZmlsZS4gTXkgaW5pdGlhbCBodW5jaCBpcyByaWdodDogaXQncyBkZWZpbml0ZWx5IGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIGBuZl90YWJsZXMtb2Jqc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgbmZfdGFibGVzYCBpcyB0aGUga2V5IG1vZHVsZSBoZXJlLCBhbmQgYG5mdF9wYXlsb2FkLm9gIGlzIGEga25vd24gY29tcG9uZW50LiBUaGUgYnVpbGQgcHJvY2VzcyB3aWxsIGluY2x1ZGUgaXQgd2hlbiBgQ09ORklHX05GX1RBQkxFU2AgaXMgc2V0IOKAkyBhIHByZXR0eSBzdGFuZGFyZCBkZXBlbmRlbmN5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzaW5jZSBpdCBpcyBhIGRlcGVuZGVuY3kuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGBORVRGSUxURVJfQURWQU5DRURgIGFzIGEgZGVwZW5kZW5jeS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHRyb3VibGVzaG9vdCBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjU4LjY3OTc0NDM2NloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwMjYxNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1OC43NzY3ODE0NDRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMTU0MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgZGVmaW5lZC4gSXMgaXQgdHVja2VkIGF3YXkgaW4gdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUsIGNvdmVyaW5nIGJyb2FkZXIgbmV0d29ya2luZyBmZWF0dXJlcz8gT3IgZG9lcyBpdCByZXNpZGUgd2l0aGluIHRoZSBkZWRpY2F0ZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZGlyZWN0b3J5LCB3aGljaCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZ2l2ZW4gdGhlIFwibmV0ZmlsdGVyXCIgcHJlZml4PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCdzIHRoZSBmaXJzdCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMxOjAxLjY4ODMyNzMxOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY0Mzc4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yMTg9aWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjE5LVxcbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIkFkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMTowMS43NzQ3NzE1MTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM1Njg5MjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgY3J1Y2lhbCBMNCBoZWFkZXIgdmFsaWRhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXQgbWFuZ2xpbmcgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyByaWdvcm91c2x5IHRlc3RlZC4gRmlyc3QsIGl0IHNlZW1zIGBORVRGSUxURVJfQURWQU5DRURgIGlzIGEgcHJlcmVxdWlzaXRlLCBzbyBJJ2xsIGJlIHN1cmUgdGhhdCdzIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IGBORVRGSUxURVJfTkVUTElOS2AgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgTkZfVEFCTEVTYCwgc28gSSB3b24ndCB3b3JyeSBhYm91dCBleHBsaWNpdGx5IHNldHRpbmcgaXQuIFdoaWxlIGBJUFY2YCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgSSdsbCBpbmNsdWRlIGl0IGluIHRoZSBjb25maWcganVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmsgdHJhZmZpYy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uczogYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBhbmQgb2YgY291cnNlIGBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEYC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBORlFOTF9NU0dfVkVSRElDVGAsIGFuZCBJIGNvbmZpcm0gYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIGZvciB0aGUgcGF5bG9hZCBzZXQuXG5cbk9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBhZGRzIGBuZnFubF92YWxpZGF0ZV9sNGAgZm9yIG5mcXVldWUgYW5kIGBuZnRfdGhfd3JpdGVfb2tgIGZvciB0aGUgbmZ0YWJsZXMgcGF5bG9hZC4gVGhlc2UgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIG90aGVyIGludmFsaWQgbWFuaXB1bGF0aW9ucyBvZiBwYWNrZXQgaGVhZGVycy4gVGhlc2UgY2hlY2tzIGFyZSBhYnNvbHV0ZWx5ICpjcml0aWNhbCogZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIHZhbGlkYXRpb24gaXMgcm9idXN0LlxuXG5JJ3ZlIGdvdCB0aGUgZGF0YSBJIG5lZWQuXG5cbioqTXkgVmVyZGljdDoqKiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb246XG5cbiogICBgbmZxbmxfcmVjdl92ZXJkaWN0YFxuKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGBcblxuSSdsbCBiZSBzdXJlIHRvIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczpcblxuKiAgIGBORVRGSUxURVJfQURWQU5DRURgXG4qICAgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYFxuKiAgIGBORl9UQUJMRVNgXG4qICAgYE5GX0NPTk5UUkFDS2BcblxuTXkgcmVhc29uaW5nIGlzIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IHN0cmVuZ3RoZW5zIHRoZSBib3VuZHMgY2hlY2tpbmcgZm9yIHBhY2tldCBtYW5nbGluZyBvcGVyYXRpb25zLiBCeSBmdXp6aW5nIHRoZSBuZXRsaW5rIHZlcmRpY3QgYW5kIHRoZSBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24sIHdlIGNhbiB0aG9yb3VnaGx5IHZhbGlkYXRlIHRoZSBlZmZpY2FjeSBvZiB0aGVzZSBuZXcgdmFsaWRhdGlvbiBtZWNoYW5pc21zIGFuZCwgaG9wZWZ1bGx5LCB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEzNCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzE6MDkuMTMxNjY4MjIyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDk1MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mcW5sX3JlY3ZfdmVyZGljdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEw0IGhlYWRlciB2YWxpZGF0aW9uIGZvciBwYWNrZXQgbWFuZ2xpbmcgdmlhIG5mcXVldWUgYW5kIG5mdGFibGVzIHBheWxvYWQgbW9kaWZpY2F0aW9uLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgd3JpdGVzIGFuZCBpbnZhbGlkIHBhY2tldCBtb2RpZmljYXRpb25zLiBGdXp6aW5nIHRoZSBuZXRsaW5rIHZlcmRpY3QgYW5kIG5mdGFibGVzIHBheWxvYWQgZXZhbHVhdGlvbiBwYXRocyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGVzZSBib3VuZHMgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZxbmxfcmVjdl92ZXJkaWN0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 12:10:57 +0000 UTC FinishedAt: 2026-08-01 12:31:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_ADVANCED", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_ADVANCED", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_CONNTRACK" ], "series_id": "a47fb4df-95b8-4a38-b72c-69f69cc66609" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfqnl_recv_verdict", "nft_payload_set_eval" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMjoyOToyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggYjhhYWYzOWNiNGQ4ZS4uNWMyOWE0NDI4YjZlYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbkBAIC0yOCwxMCAmIzQzOzI4LDE3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pY21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY3RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFx1MDAzZVxuQEAgLTEyMDYsNiAmIzQzOzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbiBcdHJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS1cdTAwM2Vza2IpICYjNDM7IDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bylcbiYjNDM7e1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuJiM0MztcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDtcbiYjNDM7XG4mIzQzO1x0Y3QgPSBuZl9jdF9nZXQoZS1cdTAwM2Vza2IsIFx1MDAyNmN0aW5mbyk7XG4mIzQzO1x0aWYgKGN0IFx1MDAyNlx1MDAyNiAhbmZfY3RfaXNfdGVtcGxhdGUoY3QpIFx1MDAyNlx1MDAyNiBuZl9jdF9wcm90b251bShjdCkgIT0gcHJvdG8pXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHByb3RvKSB7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1RDUDoge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSAoY29uc3Qgc3RydWN0IHRjcGhkciAqKWRhdGE7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgdGhsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKnRoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHRobGVuID0gX190Y3BfaGRybGVuKHRoKTtcbiYjNDM7XHRcdGlmICh0aGxlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkgfHwgZGF0YV9sZW4gXHUwMDNjIHRobGVuKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGNhc2UgSVBQUk9UT19VRFA6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXBoZHIpO1xuJiM0MztcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fU0NUUDpcbiYjNDM7XHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0dSRTpcbiYjNDM7XHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fQUg6XG4mIzQzO1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwX2F1dGhfaGRyKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fRVNQOlxuJiM0MztcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4ge1xuQEAgLTEyMjksNyAmIzQzOzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdC8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlXG4gXHQgKiByZWNvbXBpbGUgJiM0Mzsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxuIFx0ICovXG4tXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7XG4mIzQzO1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggJiM0MzsgaWhsLCBkYXRhX2xlbiAtIGlobCwgZSxcbiYjNDM7XHRcdFx0XHQgaXBoLVx1MDAzZXByb3RvY29sKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcbkBAIC0xMjg2LDcgJiM0MzsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRpbnQgaGRybGVuO1xuIFxuIFx0XHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLFxuJiM0MztcdFx0XHRcdFx0XHQgbmV3X25leHRoZHIpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTEzMjMsNyAmIzQzOzEzNzgsNyBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXG4gXHRcdGRhdGEgJiM0Mzs9IGhkcmxlbjtcbiBcdH1cbiBcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwgbmV3X25leHRoZHIpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggOGE0NDcyZmQ3N2Q5Zi4uZTMxNWQzNWY3M2Q0YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5AQCAtMTA2Nyw2ICYjNDM7MTA2NywxNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgJiM0Mzsgc2l6ZW9mKF9fYmUzMik7XG4mIzQzO1xuJiM0MztcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuQEAgLTExMDUsNiAmIzQzOzExMTYsOCBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4gXHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4gXHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdFx0b2Zmc2V0ID0gbmZ0X3Rob2ZmKHBrdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMjoyOToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IGI4YWFmMzljYjRkOGUuLjVjMjlhNDQyOGI2ZWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMjgsMTAgJiM0MzsyOCwxNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjdHAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jZ3JvdXAtZGVmcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JoYXNodGFibGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9qaGFzaC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3NvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2suaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwX3N0YXRlcy5oJmd0OwpAQCAtMTIwNiw2ICYjNDM7MTIxMyw1MSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LAogCXJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS0mZ3Q7c2tiKSAmIzQzOyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKJiM0MzsJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKJiM0MzsKJiM0MzsJY3QgPSBuZl9jdF9nZXQoZS0mZ3Q7c2tiLCAmYW1wO2N0aW5mbyk7CiYjNDM7CWlmIChjdCAmYW1wOyZhbXA7ICFuZl9jdF9pc190ZW1wbGF0ZShjdCkgJmFtcDsmYW1wOyBuZl9jdF9wcm90b251bShjdCkgIT0gcHJvdG8pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXN3aXRjaCAocHJvdG8pIHsKJiM0MzsJY2FzZSBJUFBST1RPX1RDUDogewomIzQzOwkJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSAoY29uc3Qgc3RydWN0IHRjcGhkciAqKWRhdGE7CiYjNDM7CQl1bnNpZ25lZCBpbnQgdGhsZW47CiYjNDM7CiYjNDM7CQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKnRoKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQl0aGxlbiA9IF9fdGNwX2hkcmxlbih0aCk7CiYjNDM7CQlpZiAodGhsZW4gJmx0OyBzaXplb2YoKnRoKSB8fCBkYXRhX2xlbiAmbHQ7IHRobGVuKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWNhc2UgSVBQUk9UT19VRFA6CiYjNDM7CQlyZXR1cm4gZGF0YV9sZW4gJmd0Oz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBkYXRhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGljbXBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fU0NUUDoKJiM0MzsJCXJldHVybiBkYXRhX2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwomIzQzOwljYXNlIElQUFJPVE9fR1JFOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgZ3JlX2Jhc2VfaGRyKTsKJiM0MzsJY2FzZSBJUFBST1RPX0FIOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpOwomIzQzOwljYXNlIElQUFJPVE9fRVNQOgomIzQzOwkJcmV0dXJuIGRhdGFfbGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXA0KGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQogewpAQCAtMTIyOSw3ICYjNDM7MTI4MSw5IEBAIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLAogCS8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlCiAJICogcmVjb21waWxlICYjNDM7IHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS4KIAkgKi8KLQlyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7CiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggJiM0MzsgaWhsLCBkYXRhX2xlbiAtIGlobCwgZSwKJiM0MzsJCQkJIGlwaC0mZ3Q7cHJvdG9jb2wpOwogfQogCiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9vbmVfZXh0aGRyKGNvbnN0IHU4ICpkYXRhLApAQCAtMTI4Niw3ICYjNDM7MTM0MCw4IEBAIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldywKIAkJaW50IGhkcmxlbjsKIAogCQlpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCXJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwKJiM0MzsJCQkJCQkgbmV3X25leHRoZHIpOwogCiAJCWlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyAmZ3Q7PSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0xMzIzLDcgJiM0MzsxMzc4LDcgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LAogCQlkYXRhICYjNDM7PSBoZHJsZW47CiAJfQogCi0JcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9sNChkYXRhLCBkYXRhX2xlbiwgZSwgbmV3X25leHRoZHIpOwogfQogCiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDhhNDQ3MmZkNzdkOWYuLmUzMTVkMzVmNzNkNGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTEwNjcsNiAmIzQzOzEwNjcsMTcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgZG9mZiA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGFja19zZXEpICYjNDM7IHNpemVvZihfX2JlMzIpOwomIzQzOwomIzQzOwlpZiAocGt0LSZndDt0cHJvdCAhPSBJUFBST1RPX1RDUCkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7b2Zmc2V0ICZndDsgZG9mZiB8fCBwcml2LSZndDtvZmZzZXQgJiM0MzsgcHJpdi0mZ3Q7bGVuICZsdDs9IGRvZmY7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQkJCSBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsCiAJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQpAQCAtMTEwNSw2ICYjNDM7MTExNiw4IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiAJCWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LSZndDtmcmFnb2ZmKQogCQkJZ290byBlcnI7CiYjNDM7CQlpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTsKIAkJYnJlYWs7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgdmFsaWRhdGlvbiBmb3IgTDQgaGVhZGVycyBpbiBgbmZxbmxfdmFsaWRhdGVfbDRgIGFuZCBgbmZ0X3RoX3dyaXRlX29rYCwgcmVzcGVjdGl2ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXM/IEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hlbiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50LgoKTGV0JiMzOTtzIHNlZeKApiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIHByb2JhYmx5IHRpZWQgdG8gYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIE1ha2VzIHNlbnNlLiBBbmQgYG5mdF9wYXlsb2FkLmNg4oCmIEkgc3VzcGVjdCB0aGF0IG1pZ2h0IGJlIGVuYWJsZWQgYnkgYENPTkZJR19ORlRfUEFZTE9BRGAsIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsYXJnZXIgbGlrZSBgQ09ORklHX05GX1RBQkxFU2AuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRpbWUgdG8gZmlyZSB1cCBgZ2l0IGdyZXBgIGFuZCBwaW5wb2ludCB0aG9zZSBjb25maWcgb3B0aW9ucyBwcmVjaXNlbHkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGtpbmQgb2YgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgYSBwcm9wZXIgcmV2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19xdWV1ZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1QpICYjNDM7PSBuZm5ldGxpbmtfYWNjdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSkgJiM0Mzs9IG5mbmV0bGlua19xdWV1ZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI5LW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cpICYjNDM7PSBuZm5ldGxpbmtfbG9nLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCByZWdhcmRpbmcgYG5mdF9wYXlsb2FkLmNgLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBhY2tldCBpbnNwZWN0aW9uIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIGtub3cgdGhhdCB0aGlzIGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBleHRyYWN0aW9uIG9mIHBheWxvYWQgZGF0YSBmcm9tIG5ldHdvcmsgcGFja2V0cywgYSBjcnVjaWFsIHN0ZXAgZm9yIGFueSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyBvciBtYW5pcHVsYXRpb24uIE15IG1pbmQmIzM5O3MgcmFjaW5nIHRocm91Z2ggdGhlIHBvc3NpYmxlIHVzZSBjYXNlczogZGVlcCBwYWNrZXQgaW5zcGVjdGlvbiAoRFBJKSwgY3VzdG9tIHJ1bGUgbWF0Y2hpbmcsIHBvc3NpYmx5IGV2ZW4gaW50cnVzaW9uIGRldGVjdGlvbiBzeXN0ZW1zIChJRFMpIHJlbHlpbmcgb24gY29udGVudCBzaWduYXR1cmVzLgoKSSYjMzk7bSBtZW50YWxseSBtYXBwaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgY29uc2lkZXJpbmcgdGhlIGxpa2VseSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaW5ncyBsaWtlIHRoZSBgc2tiYCAoU29ja2V0IEJ1ZmZlcikgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHRvIGFjY2VzcyB0aGUgcGFja2V0IGRhdGEsIGFuZCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMuIEkmIzM5O20gaW1tZWRpYXRlbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB0aGVyZSBhbnkgb2ZmLWJ5LW9uZSBlcnJvcnM/IFdoYXQgYWJvdXQgYnVmZmVyIG92ZXJmbG93cz8gSSYjMzk7bSBhbHJlYWR5IGltYWdpbmluZyBzY2VuYXJpb3Mgd2hlcmUgY3JhZnRlZCBwYWNrZXRzIGNvdWxkIGV4cGxvaXQgdGhlc2UgZmxhd3MgdG8gYnlwYXNzIGZpbHRlcmluZyBydWxlcyBvciBldmVuIGNhdXNlIGEgZGVuaWFsLW9mLXNlcnZpY2UuCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBQYXlsb2FkIGV4dHJhY3Rpb24gY2FuIGJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLCBlc3BlY2lhbGx5IGlmIGRvbmUgb24gZXZlcnkgcGFja2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IHR5cGVzIGFuZCBwcm90b2NvbHMg4oCTIGlzIGl0IG9wdGltaXplZCBmb3IgY29tbW9uIHNjZW5hcmlvcz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgZXh0cmFjdGlvbiBtZXRob2RzIOKAkyBkb2VzIGl0IGNvcHkgZGF0YSBvciB1c2UgcG9pbnRlcnM/IEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYW55IG9wdGltaXphdGlvbnMsIGFuZCBhc3Nlc3MgdGhlaXIgdHJhZGVvZmZzIGJldHdlZW4gc3BlZWQgYW5kIG1lbW9yeSBjb25zdW1wdGlvbi4KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gY2hlY2sgaG93IGl0IGRlYWxzIHdpdGggZnJhZ21lbnRhdGlvbi4gRG9lcyBpdCByZWFzc2VtYmxlIHBhY2tldHMgY29ycmVjdGx5LCBvciBhcmUgd2UgcG90ZW50aWFsbHkgbG9zaW5nIGRhdGEgYW5kIHRoZXJlZm9yZSBtaXNpbnRlcnByZXRpbmcgdGhlIHRyYWZmaWM/IEkmIzM5O20gYWxzbyB0aGlua2luZyBhYm91dCBwYWNrZXQgaGVhZGVycywgYW5kIHRoZWlyIHJlbGF0aXZlIG9mZnNldHMgdG8gdGhlIHJlbGV2YW50IHBheWxvYWQgZGF0YS4gSXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyB0byBhdm9pZCB1bmV4cGVjdGVkIGFjY2VzcyB2aW9sYXRpb25zLCBnaXZlbiB0aGF0IHBhY2tldCBoZWFkZXJzIGNhbiB2YXJ5IGluIHNpemUuCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUsIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYnVncywgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgYmUgcmVsZXZhbnQgdG8gYW55IHJlYWwtd29ybGQgZGVwbG95bWVudC4gSSBrbm93IHRoZXNlIGRldGFpbHMgYXJlIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5Olx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVx0XHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkgc2VlIHRoYXQgYG5mdF9wYXlsb2FkLm9gIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgYXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCB3aGljaCBpcywgaW4gdHVybiwgbmVzdGVkIHVuZGVyIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCYjMzk7cyB0aGUgY29yZS4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyAqcmVhbGx5KiBnb2luZyBvbi4gSSBrbm93IHRoYXQgYG5mX3RhYmxlc2AgaXMgY2VudHJhbCB0byBteSB3b3JrLCBzbyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IG9mIHRoZSBjcnVjaWFsIGVsZW1lbnRzIG9yIG1pc3NpbmcgYW55IGltcGxpY2F0aW9ucyBvZiBteSBjaG9pY2VzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcyBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEkgY2FuIGV2ZW4gKnRoaW5rKiBhYm91dCBlbmFibGluZyB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCBpdCYjMzk7cyBsaWtlbHkgbGlua2VkIHRvIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLCBvYnZpb3VzbHksIGJ1dCBtYXliZSBpdCByZXF1aXJlcyBzcGVjaWZpYyBOZXRsaW5rIHN1cHBvcnQsIG9yIGV2ZW4gY2VydGFpbiBuZXR3b3JrIHF1ZXVpbmcgZnJhbWV3b3JrcyB0byBiZSBhY3RpdmUgZmlyc3QuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9mIGNvdXJzZSwgcHJvYmFibHkgaW4gdGhlIE5ldGZpbHRlciBvciBOZXRsaW5rIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBpbWFnaW5pbmcgdGhlcmUmIzM5O3MgYSBjYXNjYWRlIG9mIGRlcGVuZGVuY2llczsgc29tZXRoaW5nIGxpa2UsICYjMzk7aWYgKnRoaXMqIGlzIG9uLCB0aGVuIHlvdSAqbXVzdCogaGF2ZSAqdGhhdCogb24sIGFuZCAqdGhlbiogeW91ICpjYW4qIGVuYWJsZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgJiMzOTsuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCwgYW5kIGxpbmUgNTQgZmVlbHMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgbGluZSBwcm9iYWJseSBjb250YWlucyBhIHRvcC1sZXZlbCBgY29uZmlnYCBvcHRpb24gb3IgYSBtb2R1bGUgZGVmaW5pdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBkZWZpbml0aW9ucyB1c3VhbGx5IGJlZ2luLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzIGZvciBrZXkgbmV0ZmlsdGVyIGZlYXR1cmVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBvcmdhbml6ZWQgdGhlIG9wdGlvbnMgY29uY2VwdHVhbGx5IOKAkyBpcyBpdCBiYXNlZCBvbiBwcm90b2NvbCwgZnVuY3Rpb25hbGl0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLiBIb3BlZnVsbHksIGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRoZWxwXG4gIDUxOlx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNTI6XHRcdCAgZm9yIGV4dGVuZGVkIGFjY291bnRpbmcgdmlhIE5GTkVUTElOSy5cbiAgNTM6XHRcbiAgNTQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbiAgNTU6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA1NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNTc6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1ODpcdFx0aGVscFxuICA1OTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDYwOlx0XHQgIGZvciBxdWV1ZWluZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xuICA2MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNjQ6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA2NTpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcbiAgNjg6XHRcdCAgZm9yIGxvZ2dpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jaWVzIGFuZCBDb25maWd1cmF0aW9ucyAtIEEgUXVpY2sgQXVkaXQqKgoKUmlnaHQsIHNvIEkgc2VlIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgY29udGluZ2VudCB1cG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBidWlsZCB1cG9uIGVhY2ggb3RoZXIuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBjb25maXJtaW5nIGEgcGFydGljdWxhciBkZXBlbmRlbmN5IGNoYWluLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSBhbSBjb25maWd1cmluZyBhbnl0aGluZyB1cHN0cmVhbSB0aGF0IG1pZ2h0IGltcGFjdCB0aG9zZS4KCk5vdywgYE5GX1RBQkxFU2AuLi4gdGhhdCYjMzk7cyBhbm90aGVyIGtleSBwbGF5ZXIgaW4gdGhlIGlwdGFibGVzIHdvcmxkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIHdoZXJlIHRoZXkgbmVlZCB0byBiZSwgc28gSSBjYW4gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXQgSSBhbSB3b3JraW5nIG9uLiAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNDU1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBkZWNpc2lvbnMgYXJlIG1hZGUgaW4gdGVybXMgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhpcyBzZWN0aW9uLCBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEtjb25maWcgc3ltYm9scy4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1MDpcdGNvbmZpZyBORVRGSUxURVJfU1lOUFJPWFlcbiA0NTE6XHRcdHRyaXN0YXRlXG4gNDUyOlx0XG4gNDUzOlx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcbiA0NTQ6XHRcbiA0NTU6XHRjb25maWcgTkZfVEFCTEVTXG4gNDU2Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiA0NTc6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gNDU4Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0NTk6XHRcdGhlbHBcbiA0NjA6XHRcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xuIDQ2MTpcdFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxuIDQ2MjpcdFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcbiA0NjM6XHRcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAmIzM5O25mdCYjMzk7IHV0aWxpdHlcbiA0NjQ6XHRcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXG4gNDY1Olx0XHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcbiA0NjY6XHRcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcbiA0Njc6XHRcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXG4gNDY4Olx0XG4gNDY5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGFuZCBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYE5GX1RBQkxFU2AuIEluaXRpYWxseSwgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbXBvbmVudHMuIEJ1dCBob2xkIG9uLCBJIGp1c3Qgc3BvdHRlZCBzb21ldGhpbmfigKYgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFuZCBtaWdodCBuZWNlc3NpdGF0ZSBhIGRlZXBlciBsb29rIGludG8gdGhlIGludGVyYWN0aW9ucyB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxhdGVkIHRvIHRoaXMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46IGBuZnFubF92YWxpZGF0ZV9sNGAsIGBuZnFubF92YWxpZGF0ZV9pcDRgLCBgbmZxbmxfdmFsaWRhdGVfaXBvcHRzYCwgYG5mcW5sX3ZhbGlkYXRlX2V4dGhkcmAsIGFuZCBgbmZxbmxfdmFsaWRhdGVfaXA2YCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGNsdXN0ZXIgb2YgdmFsaWRhdGlvbiBmdW5jdGlvbnMgdGhhdCB3ZXJlIHRvdWNoZWQuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGlkZW50aWZ5IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBjYWxsIHRoZXNlIG1vZGlmaWVkIG9uZXMuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSB3aWRlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mcW5sX3ZhbGlkYXRlX2lwNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMjE2PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMjYwLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMjYxOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMjYyLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDAwPXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDQtXHRjYXNlIE5GUFJPVE9fSVBWNDpcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQwNTpcdFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDYtXHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhlIGBuZnFubF92YWxpZGF0ZV93cml0ZWAgY2FsbDoKCioqQW5hbHl6aW5nIGBuZnFubF92YWxpZGF0ZV93cml0ZWAqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGdldHRpbmcgbXkgYmVhcmluZ3MuICYjMzQ7V2hhdCYjMzk7cyB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIGNhbGw/JiMzNDsgSSYjMzk7bSB0aGlua2luZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqY2FsbGluZyogaXQuIElzIGl0IHBhcnQgb2YgdGhlIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZT8gSXMgaXQgdXNlci1zcGFjZSBpbnRlcmFjdGluZyB3aXRoIGEga2VybmVsIG1vZHVsZT8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGxlciBpcyAqY3JpdGljYWwqIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UuCgpNeSBicmFpbiBpcyBhbHJlYWR5IGZpcmluZyBvZmYgcXVlc3Rpb25zLiBXaGF0IGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBpbnZhbGlkIGRhdGE/IElzIGl0IHJlbGF0ZWQgdG8gcGFja2V0IG1hbmlwdWxhdGlvbiwgcnVsZSBlbmZvcmNlbWVudCwgb3Igc29tZXRoaW5nIGVsc2Ugd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gSSYjMzk7bSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfdmFsaWRhdGVfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTM4ND1zdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTM5OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQwMDpzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDEtXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxOD1uZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTQyNC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQyNTpcdGlmICghbmZxbmxfdmFsaWRhdGVfd3JpdGUoZGF0YSwgZGF0YV9sZW4sIGUpKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDI2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYG5mcW5sX21hbmdsZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5IGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGNhbGxpbmcgYG5mcW5sX21hbmdsZWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGNvbXByZWhlbmQgaXRzIHBsYWNlIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlucHV0cywgb3V0cHV0cywgYW5kIHNpZGUgZWZmZWN0cy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIGZvciBhIG1lbnRhbCBtb2RlbCBvZiBob3cgaXQgZnVuY3Rpb25zIGFuZCB3aGljaCBwcm9jZXNzZXMgYXJlIGluaXRpYXRpbmcgaXQuIFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzPyBXaGF0IGRhdGEgaXMgYmVpbmcgbWFuaXB1bGF0ZWQ/IFRoaXMgZGV0YWlsZWQgcGVyc3BlY3RpdmUgaXMgZXNzZW50aWFsIGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfbWFuZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0MTc9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDE4Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MTkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTc3ND1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTgyMy1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTgyNDpcdFx0aWYgKG5mcW5sX21hbmdsZShubGFfZGF0YShuZnFhW05GUUFfUEFZTE9BRF0pLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODI1LVx0XHRcdFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlci9ORlRhYmxlcyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSB6ZXJvZXMgaW4gb24gdGhlIGVudHJ5IHBvaW50IGZvciBuZXRmaWx0ZXIgcXVldWluZyDigJMgdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBpc24mIzM5O3QgaXQ/IFRoZSBjb3JlIG9mIHByb2Nlc3NpbmcgcXVldWVkIHBhY2tldHMuIE5vdywgSSYjMzk7bSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gYWN0dWFsbHkgKmhhcHBlbio/IFdoYXQmIzM5O3MgdGhlIGRhbmNlPyBJdCBhbHdheXMgY29tZXMgYmFjayB0byB0aGUgaW50ZXJuYWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLiBTbywgdGhhdCBicmluZ3MgbWUgdG8gYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUsIHJpZ2h0PyBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLiBJIHdhbnQgdG8gdHJhY2UgaG93IGl0IGdldHMgdGhvc2UgcGFja2V0cywgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBkYXRhIHN0cmVhbSBoYXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC1cdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbmZ0X3BheWxvYWRfc2V0YCBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhlIGBuZnRfcGF5bG9hZF9zZXRfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgbGlrZWx5IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCwgb2YgY291cnNlLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGl0c2VsZiDigJMgd2hpY2gsIGFjY29yZGluZyB0byB0aGUgY29kZSwgaXMgcHJvYmFibHkgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBsaWtlIGBuZnRfZG9fY2hhaW5gLgoKTm93LCBhIGtleSBvYnNlcnZhdGlvbjogYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBkZWNsYXJlZCBhcyAqc3RhdGljKi4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQmIzM5O3MgYW4gb3BzIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBpdCBhbiBpbXBvcnRhbnQgZm9jdXMgc3ltYm9sLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gSXTigJlzIGVpdGhlciB0aGF0LCBvciBgbmZxbmxfcmVjdl92ZXJkaWN0YC4gQnV0IHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbiByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCB3aGV0aGVyIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaGFzIGEgdW5pcXVlLCBpZGVudGlmaWFibGUgc3ltYm9sIGFkZHJlc3MgaWYgdGhlIGNvbXBpbGVyIGNvbXBsZXRlbHkgaW5saW5lcyBpdC4gSG93ZXZlciwgaXQgKmlzKiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBuZnRfcGF5bG9hZF9zZXRfb3BzLmV2YWxgKSwgd2hpY2ggbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBmdWxseSBpbmxpbmUgaXQuIEl0cyBhZGRyZXNzIG11c3QgYmUgdGFrZW4uIFRoaXMgbWVhbnMgaXQgbXVzdCBoYXZlIGEgZGlzdGluY3QgbWVtb3J5IGFkZHJlc3MuCgpUaGF0JiMzOTtzIGEgYml0IG9mIGEgd3JpbmtsZSBpbiBhbmFseXNpcy4gQW5vdGhlciB3cmlua2xlIGlzIHRoYXQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgYWxzbyBzdGF0aWMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmICp0aGF0KiBpcyBhbHNvIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBzb21ld2hlcmUuIEdvdHRhIGJlIHN5c3RlbWF0aWMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE2NTg9c3RhdGljIGludCBuZnFfaWRfYWZ0ZXIodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgbWF4KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTY2Mi1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTY2MzpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjY0LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzM5PXN0YXRpYyBpbnQgbmZxYV9wYXJzZV9icmlkZ2Uoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NzMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE3NzQ6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3NS1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZxbmxfY2JbTkZRTkxfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg2LVx0W05GUU5MX01TR19WRVJESUNUXVx0PSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5ODc6XHRcdC5jYWxsXHRcdD0gbmZxbmxfcmVjdl92ZXJkaWN0LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg4LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfUkNVLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk5OC1cdFtORlFOTF9NU0dfVkVSRElDVF9CQVRDSF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5OTk6XHRcdC5jYWxsXHRcdD0gbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yMDAwLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfUkNVLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOgoKKipBbmFseXppbmcgRnVuY3Rpb24gUG9pbnRlcnMgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjb2RlJiMzOTtzIGRlZmluaXRlbHkgYXNzaWduaW5nIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBteSBzdXNwaWNpb24uLi4geWVhaCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIEJ1dCwgc2luY2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4sIHRoZSBjb21waWxlciB3b24mIzM5O3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbi4gV2Uga25vdyBob3cgdG8gZGVhbCB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgY29tcGlsZXIuCgpXaGlsZSBJJiMzOTttIGhlcmUsIEkgbWlnaHQgYXMgd2VsbCBhZGQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgSSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YuCgpBbmQgZmluYWxseSwgZ2l2ZW4gaXRzIHVzYWdlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIEl0IHdpbGwgYmUgcmVxdWlyZWQgaWYgaXRzIHVzZSBpcyByZXF1aXJlZCBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0NPTk5UUkFDSyBhbmQgbmZ0X3BheWxvYWRfc2V0X2V2YWwgLSBXaGVyZSYjMzk7cyB0aGUgSG9va3VwPyoqCgpBbHJpZ2h0LCBzbyBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIHRoYXQgY29udGV4dCwgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gZml0IGluPyBMZXQmIzM5O3MgZGl2ZSByaWdodCBpbnRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCBzcGVjaWZpY2FsbHkgY2hlY2sgb3V0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2Ugc2VlIGhvdyBwYXlsb2FkIG9wZXJhdGlvbnMgYXJlICpldmFsdWF0ZWQqIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpbiByZWxhdGlvbiB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoaXMgaXMgaGFuZGxpbmcgY29ubnRyYWNrIHJlbGF0ZWQgaW5mb3JtYXRpb24gc29tZWhvdywgcG9zc2libHkgZm9yIGEgY29ubmVjdGlvbi1zcGVjaWZpYyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgY29kZSB3aWxsIHByb3ZpZGUgYSBjbGVhbiB2aWV3IG9mIGFueSBpbnRlZ3JhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBob3cgdGhlIGNvbm50cmFjayBjb250ZXh0IGlzIHVzZWQgKGlmIGl0IGlzKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNzA9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODItXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc3Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgaW4gdGhlIE5GVGFibGVzIENvZGViYXNlKioKCkFscmlnaHQsIGZpcnN0IHRoaW5nJiMzOTtzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIFllcCwgY29uZmlybWF0aW9uIC0gc3RhdGljIGl0IGlzLiBOb3csIHRoZSBnb2FsIGlzIHRvIHBpbnBvaW50IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBhbmQgc2luY2Ugc3RhdGljcyBhcmUgZ2VuZXJhbGx5IGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGRpcmVjdCBhdHRhY2sgdmVjdG9yIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIE15IHRoaW5raW5nIGlzIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIE5ldGZpbHRlciBxdWV1ZS4gT2theSwgc28gYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgYWxzbyBzdGF0aWMsIHNvIG5vIGx1Y2sgdGhlcmUuIExldCBtZSBtb3ZlIG9uIGFuZCBleHBsb3JlIHRoZSByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgZm9jdXMgb24gYG5mbmV0bGlua19xdWV1ZS5jYCB0byBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG5mcW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2MgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqSHVudGluZyBmb3IgRHluYW1pYyBGdW5jdGlvbmFsaXR5IGluIG5mbmV0bGlua19xdWV1ZS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbmZuZXRsaW5rX3F1ZXVlLmNgIGZpbGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBhbnkgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCByaWdpZGx5IHN0YXRpYy4gU3RhdGljIGZ1bmN0aW9ucywgYnkgdGhlaXIgbmF0dXJlLCBhcmUgbGltaXRlZCBpbiBzY29wZSwgYW5kIGxlc3MgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBtb3JlIGR5bmFtaWMgb3IgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIG5ldGxpbmsgcXVldWVpbmcgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGV4cG9zZWQsIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgaW1tZWRpYXRlIGZpbGUsIG9yIG1heWJlIGV2ZW4gbGlua2VkIGR5bmFtaWNhbGx5LiBUaG9zZSBhcmUgdGhlIG9uZXMgdGhhdCBob2xkIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyBydW50aW1lIGJlaGF2aW9yLCBpdHMgZmxleGliaWxpdHksIGFuZCBwb3RlbnRpYWxseSwgaXRzIHZ1bG5lcmFiaWxpdGllcyBvciBwb2ludHMgb2YgY3VzdG9taXphdGlvbi4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0JiMzOTtzIHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIG5mcW5sXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzA6c3RydWN0IG5mcW5sX2luc3RhbmNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzEtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDtcdFx0LyogZ2xvYmFsIGxpc3Qgb2YgcXVldWVzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZXhwb3NlZCwgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gaWRlbnRpZnlpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIGdvaW5nIHRvIGJlIGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZGVjbGFyYXRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBsb29rIGZvciBleHBsaWNpdCBgRVhQT1JUX1NZTUJPTGAgY2FsbHMuIFRoYXQgd2lsbCBjbGVhcmx5IGlkZW50aWZ5IHRoZSBzeW1ib2xzIHRoYXQgYXJlIGludGVuZGVkIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIElmIHRoYXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgeWllbGQgd2hhdCBJIG5lZWQsIEkmIzM5O2xsIGdvIGJhY2sgYW5kIHJ1biBhIG1vcmUgYmFzaWMgc2VhcmNoIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhlbiBmaWx0ZXIgYmFzZWQgb24gdGhlIHByZXNlbmNlLCBvciBhYnNlbmNlLCBvZiB0aGUgYHN0YXRpY2Aga2V5d29yZC4gSXQmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGZpbmQgdGhlIGZ1bmN0aW9ucyB0aGF0ICphcmVuJiMzOTt0KiBzdGF0aWMsIGFuZCBoZW5jZSwgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIEludGVyYWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgdGhlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGZ1bmN0aW9uOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQmIzM5O3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIGBuZnFubF9jYmAgc3RydWN0dXJlLCByaWdodD8gVGhlIGBuZnFubF9jYmAgYXJyYXkgaXRzZWxmIGdldHMgcmVnaXN0ZXJlZCB1c2luZyBgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcmAsIHNvIHRoYXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludC4KClRoZSBuZXRsaW5rIGVudHJ5IHBvaW50IGlzIGBuZm5ldGxpbmtfcmN2X21zZ2AsIHdoaWNoIHRoZW4sIG5hdHVyYWxseSwgY2FsbHMgdGhpcyBjYWxsYmFjay4gQ29uc2VxdWVudGx5LCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBlbmRzIHVwIGdldHRpbmcgZXhlY3V0ZWQuIEJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhpcyBtZWFucyB3ZSBjYW4gdHJlYXQgaXQgYXMgYSBzeW1ib2wgb2YgaW50ZXJlc3QsIGEgcG9pbnQgZm9yIHBvdGVudGlhbCBmdXp6aW5nIGZvY3VzLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24sIGVzcGVjaWFsbHkgZnJvbSBhIHN5emthbGxlciBwZXJzcGVjdGl2ZTsgd2UgY2FuIG9mdGVuIHRhcmdldCB0aGVzZSBzdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgaW5kZWVkICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGdlbmVyYWxseSBwcmVjbHVkZXMgaW5saW5pbmcuIFRoYXQmIzM5O3MgZ29vZC4KCk5leHQsIEkmIzM5O2xsIHR1cm4gdG8gYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWlnaHQgYmUgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKSSBzaG91bGQgYWxzbyBkbyBhIGJyb2FkZXIgc2Nhbi4gQXJlIHRoZXJlICphbnkqIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBuZnRfcGF5bG9hZC5jYD8gQSB0aG9yb3VnaCBzZWFyY2ggY291bGQgcmV2ZWFsIGZ1cnRoZXIgdXNlZnVsIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xNDg9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdCh1MzIgb2Zmc2V0LCB1MzIgbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYwLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY0OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM0MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZUIFBheWxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBgbmZ0X3BheWxvYWRfZXZhbGAgZnVuY3Rpb24ganVtcHMgb3V0IGF0IG1lIOKAkyBpdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IHRoZSByZWFsIGNydXggb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEhtbSwgdGhhdCBvbmUmIzM5O3Mgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBtb2RpZnkgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQgZXh0ZXJuYWxseT8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiBpcyAqY2FsbGluZyogYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gQmVjYXVzZSBpZiB0aGVyZSBpc24mIzM5O3Qgb25lLCB0aGVuIHRoaXMgY2hhbmdlIGlzIHN1c3BlY3QuIEFoLCBubywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGFuIG9wcyBjYWxsYmFjay4gU28sIGl0IHNob3VsZCBiZSB1c2VkIGluIHRoZSBzYW1lIGZpbGUuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gT3IsIGlzIGl0IHB1cmVseSB1c2VkIHdpdGhpbiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3OC1cdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQ1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBUEkgRW50cnlwb2ludHMgZm9yIFNhZmV0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkmIzM5O3JlIGdvaW5nIHRvIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGZvciByZWxpYWJsZSBsaXN0aW5nLiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYWJvdXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQmIzM5O3Mgc3RhdGljLCBzbyBteSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBleGNsdWRlIGl0LCBidXQgaXQgYXBwZWFycyB0byBiZSBmaW5lIGJlY2F1c2UgaXQmIzM5O3Mgbm90IGlubGluZWQuCgpIb3dldmVyLCBzaW5jZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGFuZCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIHRoZXkgYXJlICpub3QqIGlubGluZWQuIFdoaWNoIG1lYW5zIHRoZXkgKmRvKiBoYXZlIGRpc3RpbmN0IGFkZHJlc3Nlcywgc28gaXQgc2hvdWxkIGJlIHNhZmUgdG8gbGlzdCB0aGVtLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgdXNhZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbXBsaWNhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnFubF9yZWN2X3ZlcmRpY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTY1OD1zdGF0aWMgaW50IG5mcV9pZF9hZnRlcih1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBtYXgpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjYyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNjYzOnN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3Mzk9c3RhdGljIGludCBuZnFhX3BhcnNlX2JyaWRnZShzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc3NDpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzc1LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBuZnFhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xOTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZnFubF9jYltORlFOTF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODYtXHRbTkZRTkxfTVNHX1ZFUkRJQ1RdXHQ9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk4NzpcdFx0LmNhbGxcdFx0PSBuZnFubF9yZWN2X3ZlcmRpY3QsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTk4LVx0W05GUU5MX01TR19WRVJESUNUX0JBVENIXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk5OTpcdFx0LmNhbGxcdFx0PSBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2gsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTIwMDAtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkVudHJ5IFBvaW50cyBhbmQgQmF0Y2ggUHJvY2Vzc2luZyBpbiBOZXRmaWx0ZXIgUXVldWUqKgoKUmlnaHQsIHNvLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBhcmUgKnRoZSogY3JpdGljYWwgZW50cnkgcG9pbnRzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBOZXRmaWx0ZXIgUXVldWUgc3Vic3lzdGVtLiBUaGV5JiMzOTtyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBoYW5kbGluZyBwYWNrZXRzLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBkb2VzIGBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2hgLCBpbiBpdHMgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCwgYWxzbyBtYWtlIGEgY2FsbCB0byBgbmZxbmxfbWFuZ2xlYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gVGhlIGltcGFjdCBvZiBwb3RlbnRpYWxseSBtdWx0aXBsZSBjYWxscyB0byBhIG1hbmdsaW5nIGZ1bmN0aW9uIGluIGEgYmF0Y2ggY29udGV4dCBoYXMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kuIEl0JiMzOTtzIGEga2V5IHF1ZXN0aW9uIHdoZW4gdGhpbmtpbmcgYWJvdXQgb3B0aW1pemF0aW9uIGFuZCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBteSBkZXNpZ24uIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgY2FsbCBwYXRoIHRvIGVuc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBmbG93IGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mcW5sX21hbmdsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDE3PXN0YXRpYyBpbnRcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQxODpuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDE5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3NzQ9c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjMtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE4MjQ6XHRcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTgyNS1cdFx0XHRcdCBwYXlsb2FkX2xlbiwgZW50cnksIGRpZmYpIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBuZnFubF9tYW5nbGVgLiBHb3QgaXQuIFRoZXJlZm9yZSwgdGhlIGNvcmUgZm9jdXMgZm9yIHN5bWJvbCBpZGVudGlmaWNhdGlvbiBzaG91bGQgYmU6IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGFuZCwgY3J1Y2lhbGx5LCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGVkLgoKTm93LCBsZXQmIzM5O3MgYW50aWNpcGF0ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gYE5GX1RBQkxFU2AgaXMgZGVmaW5pdGVseSBhIGNvbnNpZGVyYXRpb24gdG9vLCBhbmQsIEkgKnRoaW5rKiBJIHNhdyBgTkZfQ09OTlRSQUNLYCBwb3AgdXAgd2hlbiBJIHdhcyByZXZpZXdpbmcgdGhlIGBuZnFubF92YWxpZGF0ZV9sNGAgY29kZSB3aXRoIHRoZSBgI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylgIGNoZWNrLCBzbyB0aGF0IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLgoKTGV0IG1lIGFuYWx5emUgdGhhdCBgTkZfQ09OTlRSQUNLYCBkZXBlbmRlbmN5IG1vcmUgdGhvcm91Z2hseS4gVGhlIGNvbmRpdGlvbmFsIGNvZGUgaW4gYG5mcW5sX3ZhbGlkYXRlX2w0YCBzcGVjaWZpY2FsbHkgY2hlY2tzIGZvciBjb25uZWN0aW9uIHRyYWNraW5nIGJlZm9yZSBkb2luZyBzb21lIHByb3RvY29sLXNwZWNpZmljIGNoZWNrcy4gSWYgYE5GX0NPTk5UUkFDS2AgaXMgZGlzYWJsZWQsIGl0IGp1c3QgYnlwYXNzZXMgdGhhdCBwYXJ0LiBIb3dldmVyLCBlbmFibGluZyBpdCB3b3VsZCBhbGxvdyBtZSB0byB0aG9yb3VnaGx5IHRlc3QgdGhhdCBicmFuY2ggb2YgdGhlIGNvZGUuIFNvLCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UsIEkgc2hvdWxkIGluY2x1ZGUgaXQgaW4gbXkgY29uZmlnLgoKQW5kIGxhc3RseSwgbGV0JiMzOTtzIHZlcmlmeSBpZiBgTkZUX1BBWUxPQURgIGl0c2VsZiBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfUEFZTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbm5lY3RpbmcgdGhlIERvdHM6IG5mdF9wYXlsb2FkLm8gYW5kIENPTkZJR19ORl9UQUJMRVMqKgoKUmlnaHQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIFNvLCBgbmZ0X3BheWxvYWQub2AuLi4gdGhhdCYjMzk7cyB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byBoYW5kbGluZyBwYXlsb2FkIGRhdGEsIGlzbiYjMzk7dCBpdD8gT2theSwgYW5kIHRoYXQmIzM5O3MgKmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkLiBUaGUgc3lzdGVtJiMzOTtzIGJ1aWxkIHByb2Nlc3MgaXNuJiMzOTt0IGp1c3QgY2h1cm5pbmcgaXQgb3V0IHVubGVzcy4uLiBhaGEhIFRoZSBjbHVlIGlzIGBDT05GSUdfTkZfVEFCTEVTYCBiZWluZyBlbmFibGVkLiBTbywgdGhlIGtlcm5lbCBidWlsZCBjb25maWd1cmF0aW9uICpzcGVjaWZpY2FsbHkqIHRpZXMgdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBgbmZ0X3BheWxvYWQub2AgbW9kdWxlIHRvIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBOZXRmaWx0ZXIgdGFibGVzIGZ1bmN0aW9uYWxpdHkuIFRoYXQgbWVhbnMgaWYgTmV0ZmlsdGVyIHRhYmxlcyBhcmUgZW5hYmxlZCwgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBwYXlsb2FkIGRhdGEgZ2V0cyBidWlsdCB0b28uIEl04oCZcyBsaWtlIGEgZGVwZW5kZW5jeSDigJMgYG5mdF9wYXlsb2FkLm9gIGlzIGEgc3VwcG9ydGluZyBtb2R1bGUgZm9yIGBORl9UQUJMRVNgLiBHb3QgaXQuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIHJlbGF0aW9uc2hpcCB0byByZW1lbWJlciB3aGVuIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZyB0aGlzIGFyZWEsIHNpbmNlIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgZmlsZSB3b3VsZCBiZSBpbmRpY2F0aXZlIG9mIE5GX1RBQkxFUyBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBuZl90YWJsZXMgRGVwZW5kZW5jeSBDaGFpbioqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZ0X3BheWxvYWQub2Agb2JqZWN0IGZpbGUuIE15IGluaXRpYWwgaHVuY2ggaXMgcmlnaHQ6IGl0JiMzOTtzIGRlZmluaXRlbHkgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUgYG5mX3RhYmxlcy1vYmpzYCBsaXN0LiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBuZl90YWJsZXNgIGlzIHRoZSBrZXkgbW9kdWxlIGhlcmUsIGFuZCBgbmZ0X3BheWxvYWQub2AgaXMgYSBrbm93biBjb21wb25lbnQuIFRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaW5jbHVkZSBpdCB3aGVuIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBzZXQg4oCTIGEgcHJldHR5IHN0YW5kYXJkIGRlcGVuZGVuY3kuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzaW5jZSBpdCBpcyBhIGRlcGVuZGVuY3kuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBgTkVURklMVEVSX0FEVkFOQ0VEYCBhcyBhIGRlcGVuZGVuY3kuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgdG8gdHJvdWJsZXNob290IG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgZGVmaW5lZC4gSXMgaXQgdHVja2VkIGF3YXkgaW4gdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUsIGNvdmVyaW5nIGJyb2FkZXIgbmV0d29ya2luZyBmZWF0dXJlcz8gT3IgZG9lcyBpdCByZXNpZGUgd2l0aGluIHRoZSBkZWRpY2F0ZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZGlyZWN0b3J5LCB3aGljaCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZ2l2ZW4gdGhlICYjMzQ7bmV0ZmlsdGVyJiMzNDsgcHJlZml4PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgd2l0aCBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTM0CgkJCQkJCQlvdXRwdXQ6IDEzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNydWNpYWwgTDQgaGVhZGVyIHZhbGlkYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBmb3IgcGFja2V0IG1hbmdsaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBuYXR1cmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgcmlnb3JvdXNseSB0ZXN0ZWQuIEZpcnN0LCBpdCBzZWVtcyBgTkVURklMVEVSX0FEVkFOQ0VEYCBpcyBhIHByZXJlcXVpc2l0ZSwgc28gSSYjMzk7bGwgYmUgc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IGBORVRGSUxURVJfTkVUTElOS2AgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgTkZfVEFCTEVTYCwgc28gSSB3b24mIzM5O3Qgd29ycnkgYWJvdXQgZXhwbGljaXRseSBzZXR0aW5nIGl0LiBXaGlsZSBgSVBWNmAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIEkmIzM5O2xsIGluY2x1ZGUgaXQgaW4gdGhlIGNvbmZpZyBqdXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29yayB0cmFmZmljLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgQ09ORklHX05GX1RBQkxFU2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYW5kIG9mIGNvdXJzZSBgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRGAuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBORlFOTF9NU0dfVkVSRElDVGAsIGFuZCBJIGNvbmZpcm0gYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIGZvciB0aGUgcGF5bG9hZCBzZXQuCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgZnVuY3Rpb25hbGl0eS4gVGhlIHBhdGNoIGFkZHMgYG5mcW5sX3ZhbGlkYXRlX2w0YCBmb3IgbmZxdWV1ZSBhbmQgYG5mdF90aF93cml0ZV9va2AgZm9yIHRoZSBuZnRhYmxlcyBwYXlsb2FkLiBUaGVzZSBhcmUgZGVzaWduZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyB3cml0ZXMgb3Igb3RoZXIgaW52YWxpZCBtYW5pcHVsYXRpb25zIG9mIHBhY2tldCBoZWFkZXJzLiBUaGVzZSBjaGVja3MgYXJlIGFic29sdXRlbHkgKmNyaXRpY2FsKiBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIEl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIHZhbGlkYXRpb24gaXMgcm9idXN0LgoKSSYjMzk7dmUgZ290IHRoZSBkYXRhIEkgbmVlZC4KCioqTXkgVmVyZGljdDoqKiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb246CgoqICAgYG5mcW5sX3JlY3ZfdmVyZGljdGAKKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAKCkkmIzM5O2xsIGJlIHN1cmUgdG8gZW5hYmxlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOgoKKiAgIGBORVRGSUxURVJfQURWQU5DRURgCiogICBgTkVURklMVEVSX05FVExJTktfUVVFVUVgCiogICBgTkZfVEFCTEVTYAoqICAgYE5GX0NPTk5UUkFDS2AKCk15IHJlYXNvbmluZyBpcyB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBzdHJlbmd0aGVucyB0aGUgYm91bmRzIGNoZWNraW5nIGZvciBwYWNrZXQgbWFuZ2xpbmcgb3BlcmF0aW9ucy4gQnkgZnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCB0aGUgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uLCB3ZSBjYW4gdGhvcm91Z2hseSB2YWxpZGF0ZSB0aGUgZWZmaWNhY3kgb2YgdGhlc2UgbmV3IHZhbGlkYXRpb24gbWVjaGFuaXNtcyBhbmQsIGhvcGVmdWxseSwgdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZxbmxfcmVjdl92ZXJkaWN0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNi45NjU4NDIwNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNTk5Mzk4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnFubF9yZWN2X3ZlcmRpY3RcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMNCBoZWFkZXIgdmFsaWRhdGlvbiBmb3IgcGFja2V0IG1hbmdsaW5nIHZpYSBuZnF1ZXVlIGFuZCBuZnRhYmxlcyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgaW52YWxpZCBwYWNrZXQgbW9kaWZpY2F0aW9ucy4gRnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24gcGF0aHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgYm91bmRzIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MjYuOTY1ODUwODA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjU2NzMzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YjI0YzIxZDc0MzFkODlmODBmZTc5OGZmNGQyYTdmYzU1OTY1N2E4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5pbmRleCBiOGFhZjM5Y2I0ZDhlLi41YzI5YTQ0MjhiNmViIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXFxuQEAgLTI4LDEwICsyOCwxNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjdHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC1kZWZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91ZHAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9nc28uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXFx1MDAzZVxcbkBAIC0xMjA2LDYgKzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcXG4gXFx0cmV0dXJuIG1lbWNtcChpcGhfbmV3ICsgMSwgaXBfaGRyKGUtXFx1MDAzZXNrYikgKyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCB1OCBwcm90bylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbitcXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0O1xcbitcXG4rXFx0Y3QgPSBuZl9jdF9nZXQoZS1cXHUwMDNlc2tiLCBcXHUwMDI2Y3RpbmZvKTtcXG4rXFx0aWYgKGN0IFxcdTAwMjZcXHUwMDI2ICFuZl9jdF9pc190ZW1wbGF0ZShjdCkgXFx1MDAyNlxcdTAwMjYgbmZfY3RfcHJvdG9udW0oY3QpICE9IHByb3RvKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbitcXG4rXFx0c3dpdGNoIChwcm90bykge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOiB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilkYXRhO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgdGhsZW47XFxuK1xcbitcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBzaXplb2YoKnRoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0dGhsZW4gPSBfX3RjcF9oZHJsZW4odGgpO1xcbitcXHRcXHRpZiAodGhsZW4gXFx1MDAzYyBzaXplb2YoKnRoKSB8fCBkYXRhX2xlbiBcXHUwMDNjIHRobGVuKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRcXHRyZXR1cm4gZGF0YV9sZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4rXFx0XFx0cmV0dXJuIGRhdGFfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7XFxuK1xcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcXG4rXFx0Y2FzZSBJUFBST1RPX1NDVFA6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fR1JFOlxcbitcXHRcXHRyZXR1cm4gZGF0YV9sZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBncmVfYmFzZV9oZHIpO1xcbitcXHRjYXNlIElQUFJPVE9fQUg6XFxuK1xcdFxcdHJldHVybiBkYXRhX2xlbiBcXHUwMDNlPSBzaXplb2Yoc3RydWN0IGlwX2F1dGhfaGRyKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0VTUDpcXG4rXFx0XFx0cmV0dXJuIGRhdGFfbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4gXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4ge1xcbkBAIC0xMjI5LDcgKzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4gXFx0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcXG4gXFx0ICogcmVjb21waWxlICsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxcbiBcXHQgKi9cXG4tXFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpO1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG5mcW5sX3ZhbGlkYXRlX2w0KChjb25zdCB1OCAqKWlwaCArIGlobCwgZGF0YV9sZW4gLSBpaGwsIGUsXFxuK1xcdFxcdFxcdFxcdCBpcGgtXFx1MDAzZXByb3RvY29sKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcXG5AQCAtMTI4Niw3ICsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxcbiBcXHRcXHRpbnQgaGRybGVuO1xcbiBcXG4gXFx0XFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfbDQoZGF0YSwgZGF0YV9sZW4sIGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBuZXdfbmV4dGhkcik7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCsrIFxcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbkBAIC0xMzIzLDcgKzEzNzgsNyBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXFxuIFxcdFxcdGRhdGEgKz0gaGRybGVuO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLCBuZXdfbmV4dGhkcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IDhhNDQ3MmZkNzdkOWYuLmUzMTVkMzVmNzNkNGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTEwNjcsNiArMTA2NywxNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGRvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBhY2tfc2VxKSArIHNpemVvZihfX2JlMzIpO1xcbitcXG4rXFx0aWYgKHBrdC1cXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZW9mZnNldCBcXHUwMDNlIGRvZmYgfHwgcHJpdi1cXHUwMDNlb2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IGRvZmY7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbkBAIC0xMTA1LDYgKzExMTYsOCBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4gXFx0XFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pIHx8IHBrdC1cXHUwMDNlZnJhZ29mZilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNy40MzI0NjgwMzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDE4OTMyOTk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnFubF9yZWN2X3ZlcmRpY3RcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMNCBoZWFkZXIgdmFsaWRhdGlvbiBmb3IgcGFja2V0IG1hbmdsaW5nIHZpYSBuZnF1ZXVlIGFuZCBuZnRhYmxlcyBwYXlsb2FkIG1vZGlmaWNhdGlvbi4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHdyaXRlcyBhbmQgaW52YWxpZCBwYWNrZXQgbW9kaWZpY2F0aW9ucy4gRnV6emluZyB0aGUgbmV0bGluayB2ZXJkaWN0IGFuZCBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24gcGF0aHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlc2UgYm91bmRzIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWIyNGMyMWQ3NDMxZDg5ZjgwZmU3OThmZjRkMmE3ZmM1NTk2NTdhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggYjhhYWYzOWNiNGQ4ZS4uNWMyOWE0NDI4YjZlYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcbkBAIC0yOCwxMCArMjgsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2N0cC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbkBAIC0xMjA2LDYgKzEyMTMsNTEgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbiBcdHJldHVybiBtZW1jbXAoaXBoX25ldyArIDEsIGlwX2hkcihlLVx1MDAzZXNrYikgKyAxLCBpaGwgLSBzaXplb2YoKmlwaF9vcmlnKSkgPT0gMDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfbDQoY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIHU4IHByb3RvKVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuK1x0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3Q7XG4rXG4rXHRjdCA9IG5mX2N0X2dldChlLVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbitcdGlmIChjdCBcdTAwMjZcdTAwMjYgIW5mX2N0X2lzX3RlbXBsYXRlKGN0KSBcdTAwMjZcdTAwMjYgbmZfY3RfcHJvdG9udW0oY3QpICE9IHByb3RvKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rI2VuZGlmXG4rXG4rXHRzd2l0Y2ggKHByb3RvKSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOiB7XG4rXHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilkYXRhO1xuK1x0XHR1bnNpZ25lZCBpbnQgdGhsZW47XG4rXG4rXHRcdGlmIChkYXRhX2xlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHR0aGxlbiA9IF9fdGNwX2hkcmxlbih0aCk7XG4rXHRcdGlmICh0aGxlbiBcdTAwM2Mgc2l6ZW9mKCp0aCkgfHwgZGF0YV9sZW4gXHUwMDNjIHRobGVuKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4rXHRjYXNlIElQUFJPVE9fSUNNUDpcbitcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpO1xuK1x0Y2FzZSBJUFBST1RPX1NDVFA6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7XG4rXHRjYXNlIElQUFJPVE9fR1JFOlxuK1x0XHRyZXR1cm4gZGF0YV9sZW4gXHUwMDNlPSBzaXplb2Yoc3RydWN0IGdyZV9iYXNlX2hkcik7XG4rXHRjYXNlIElQUFJPVE9fQUg6XG4rXHRcdHJldHVybiBkYXRhX2xlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpO1xuK1x0Y2FzZSBJUFBST1RPX0VTUDpcbitcdFx0cmV0dXJuIGRhdGFfbGVuIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuIHtcbkBAIC0xMjI5LDcgKzEyODEsOSBAQCBzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiBcdC8qIHN1cHBvcnQgZm9yIGlwb3B0cyBtYW5nbGluZyB3b3VsZCByZXF1aXJlXG4gXHQgKiByZWNvbXBpbGUgKyBza2IgdHJhbnNwb3J0IGhlYWRlciB1cGRhdGUuXG4gXHQgKi9cbi1cdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTtcbitcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBuZnFubF92YWxpZGF0ZV9sNCgoY29uc3QgdTggKilpcGggKyBpaGwsIGRhdGFfbGVuIC0gaWhsLCBlLFxuK1x0XHRcdFx0IGlwaC1cdTAwM2Vwcm90b2NvbCk7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX29uZV9leHRoZHIoY29uc3QgdTggKmRhdGEsXG5AQCAtMTI4Niw3ICsxMzQwLDggQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRpbnQgaGRybGVuO1xuIFxuIFx0XHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfbDQoZGF0YSwgZGF0YV9sZW4sIGUsXG4rXHRcdFx0XHRcdFx0IG5ld19uZXh0aGRyKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGV4dGhkcl9jbnQrKyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtMTMyMyw3ICsxMzc4LDcgQEAgc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfbmV3LFxuIFx0XHRkYXRhICs9IGhkcmxlbjtcbiBcdH1cbiBcbi1cdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2w0KGRhdGEsIGRhdGFfbGVuLCBlLCBuZXdfbmV4dGhkcik7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCA4YTQ0NzJmZDc3ZDlmLi5lMzE1ZDM1ZjczZDRhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0xMDY3LDYgKzEwNjcsMTcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgKyBzaXplb2YoX19iZTMyKTtcbitcbitcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICsgcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSBkb2ZmO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuQEAgLTExMDUsNiArMTExNiw4IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbiBcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXHUwMDNlZnJhZ29mZilcbiBcdFx0XHRnb3RvIGVycjtcbitcdFx0aWYgKCFuZnRfdGhfd3JpdGVfb2socGt0LCBwcml2KSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0b2Zmc2V0ID0gbmZ0X3Rob2ZmKHBrdCk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOToyNy40MzI0Njk2MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI1NTQ5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCBhbmQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhZGRpbmcgdmFsaWRhdGlvbiBmb3IgTDQgaGVhZGVycyBpbiBgbmZxbmxfdmFsaWRhdGVfbDRgIGFuZCBgbmZ0X3RoX3dyaXRlX29rYCwgcmVzcGVjdGl2ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGljaCBjb25maWcgb3B0aW9ucyBlbmFibGUgdGhlc2UgZmlsZXM/IEtub3dpbmcgdGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hlbiB0aGlzIHBhdGNoIGlzIHJlbGV2YW50LlxuXG5MZXQncyBzZWXigKYgYG5mbmV0bGlua19xdWV1ZS5jYCBpcyBwcm9iYWJseSB0aWVkIHRvIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLiBNYWtlcyBzZW5zZS4gQW5kIGBuZnRfcGF5bG9hZC5jYOKApiBJIHN1c3BlY3QgdGhhdCBtaWdodCBiZSBlbmFibGVkIGJ5IGBDT05GSUdfTkZUX1BBWUxPQURgLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGFyZ2VyIGxpa2UgYENPTkZJR19ORl9UQUJMRVNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGZpcmUgdXAgYGdpdCBncmVwYCBhbmQgcGlucG9pbnQgdGhvc2UgY29uZmlnIG9wdGlvbnMgcHJlY2lzZWx5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmNpZXMgb3Igc2lkZSBlZmZlY3RzLiBUaGlzIGtpbmQgb2YgY29udGV4dCBpcyBjcml0aWNhbCBmb3IgYSBwcm9wZXIgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzEuMjU4MDIxNTgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzU1MDgzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZm5ldGxpbmtfcXVldWVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTI3PW9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19BQ0NUKSArPSBuZm5ldGxpbmtfYWNjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyODpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUpICs9IG5mbmV0bGlua19xdWV1ZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yOS1vYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HKSArPSBuZm5ldGxpbmtfbG9nLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzEuNjExNTc3ODU2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNzMyMzg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgcmVnYXJkaW5nIGBuZnRfcGF5bG9hZC5jYCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X3BheWxvYWQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGFja2V0IGluc3BlY3Rpb24gd2l0aGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkga25vdyB0aGF0IHRoaXMgZmlsZSBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGV4dHJhY3Rpb24gb2YgcGF5bG9hZCBkYXRhIGZyb20gbmV0d29yayBwYWNrZXRzLCBhIGNydWNpYWwgc3RlcCBmb3IgYW55IHNvcGhpc3RpY2F0ZWQgZmlsdGVyaW5nIG9yIG1hbmlwdWxhdGlvbi4gTXkgbWluZCdzIHJhY2luZyB0aHJvdWdoIHRoZSBwb3NzaWJsZSB1c2UgY2FzZXM6IGRlZXAgcGFja2V0IGluc3BlY3Rpb24gKERQSSksIGN1c3RvbSBydWxlIG1hdGNoaW5nLCBwb3NzaWJseSBldmVuIGludHJ1c2lvbiBkZXRlY3Rpb24gc3lzdGVtcyAoSURTKSByZWx5aW5nIG9uIGNvbnRlbnQgc2lnbmF0dXJlcy5cblxuSSdtIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBjb25zaWRlcmluZyB0aGUgbGlrZWx5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhpbmdzIGxpa2UgdGhlIGBza2JgIChTb2NrZXQgQnVmZmVyKSBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZCB0byBhY2Nlc3MgdGhlIHBhY2tldCBkYXRhLCBhbmQgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb21tb24gcGl0ZmFsbHMuIEknbSBpbW1lZGlhdGVseSBjb25jZXJuZWQgYWJvdXQgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gQXJlIHRoZXJlIGFueSBvZmYtYnktb25lIGVycm9ycz8gV2hhdCBhYm91dCBidWZmZXIgb3ZlcmZsb3dzPyBJJ20gYWxyZWFkeSBpbWFnaW5pbmcgc2NlbmFyaW9zIHdoZXJlIGNyYWZ0ZWQgcGFja2V0cyBjb3VsZCBleHBsb2l0IHRoZXNlIGZsYXdzIHRvIGJ5cGFzcyBmaWx0ZXJpbmcgcnVsZXMgb3IgZXZlbiBjYXVzZSBhIGRlbmlhbC1vZi1zZXJ2aWNlLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFBheWxvYWQgZXh0cmFjdGlvbiBjYW4gYmUgcmVsYXRpdmVseSBleHBlbnNpdmUsIGVzcGVjaWFsbHkgaWYgZG9uZSBvbiBldmVyeSBwYWNrZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWNrZXQgdHlwZXMgYW5kIHByb3RvY29scyDigJMgaXMgaXQgb3B0aW1pemVkIGZvciBjb21tb24gc2NlbmFyaW9zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBleHRyYWN0aW9uIG1ldGhvZHMg4oCTIGRvZXMgaXQgY29weSBkYXRhIG9yIHVzZSBwb2ludGVycz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgb3B0aW1pemF0aW9ucywgYW5kIGFzc2VzcyB0aGVpciB0cmFkZW9mZnMgYmV0d2VlbiBzcGVlZCBhbmQgbWVtb3J5IGNvbnN1bXB0aW9uLlxuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRvIGNoZWNrIGhvdyBpdCBkZWFscyB3aXRoIGZyYWdtZW50YXRpb24uIERvZXMgaXQgcmVhc3NlbWJsZSBwYWNrZXRzIGNvcnJlY3RseSwgb3IgYXJlIHdlIHBvdGVudGlhbGx5IGxvc2luZyBkYXRhIGFuZCB0aGVyZWZvcmUgbWlzaW50ZXJwcmV0aW5nIHRoZSB0cmFmZmljPyBJJ20gYWxzbyB0aGlua2luZyBhYm91dCBwYWNrZXQgaGVhZGVycywgYW5kIHRoZWlyIHJlbGF0aXZlIG9mZnNldHMgdG8gdGhlIHJlbGV2YW50IHBheWxvYWQgZGF0YS4gSXMgdGhlcmUgc3VmZmljaWVudCBlcnJvciBjaGVja2luZyB0byBhdm9pZCB1bmV4cGVjdGVkIGFjY2VzcyB2aW9sYXRpb25zLCBnaXZlbiB0aGF0IHBhY2tldCBoZWFkZXJzIGNhbiB2YXJ5IGluIHNpemUuXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlLCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJ1Z3MsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIGJlIHJlbGV2YW50IHRvIGFueSByZWFsLXdvcmxkIGRlcGxveW1lbnQuIEkga25vdyB0aGVzZSBkZXRhaWxzIGFyZSBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTI5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTozNS43Mjg5MDQzOTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTE5Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjM1LjgzMzAyOTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDI5NjcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIHNlZSB0aGF0IGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIGFzIHBhcnQgb2YgYG5mX3RhYmxlcy1vYmpzYCwgd2hpY2ggaXMsIGluIHR1cm4sIG5lc3RlZCB1bmRlciBgQ09ORklHX05GX1RBQkxFU2AuIFRoYXQncyB0aGUgY29yZS4gTm93IEkgbmVlZCB0byBzZWUgd2hhdCdzICpyZWFsbHkqIGdvaW5nIG9uLiBJIGtub3cgdGhhdCBgbmZfdGFibGVzYCBpcyBjZW50cmFsIHRvIG15IHdvcmssIHNvIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgYW5kIGBDT05GSUdfTkZfVEFCTEVTYC4gVGhhdCdsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBvZiB0aGUgY3J1Y2lhbCBlbGVtZW50cyBvciBtaXNzaW5nIGFueSBpbXBsaWNhdGlvbnMgb2YgbXkgY2hvaWNlcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzguNzg3MzI5MTc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU5MDI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00Nj1jb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6MzguOTY0OTI4MjMxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMjAyNzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgTkVURklMVEVSX05FVExJTktfUVVFVUVgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gVGhpcyBwcm9iYWJseSBtZWFucyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiAqdGhpbmsqIGFib3V0IGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBvcHRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IGl0J3MgbGlrZWx5IGxpbmtlZCB0byB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbSwgb2J2aW91c2x5LCBidXQgbWF5YmUgaXQgcmVxdWlyZXMgc3BlY2lmaWMgTmV0bGluayBzdXBwb3J0LCBvciBldmVuIGNlcnRhaW4gbmV0d29yayBxdWV1aW5nIGZyYW1ld29ya3MgdG8gYmUgYWN0aXZlIGZpcnN0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9mIGNvdXJzZSwgcHJvYmFibHkgaW4gdGhlIE5ldGZpbHRlciBvciBOZXRsaW5rIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGltYWdpbmluZyB0aGVyZSdzIGEgY2FzY2FkZSBvZiBkZXBlbmRlbmNpZXM7IHNvbWV0aGluZyBsaWtlLCAnaWYgKnRoaXMqIGlzIG9uLCB0aGVuIHlvdSAqbXVzdCogaGF2ZSAqdGhhdCogb24sIGFuZCAqdGhlbiogeW91ICpjYW4qIGVuYWJsZSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgJy4gVGltZSB0byBnZXQgZGlnZ2luZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDIuMTc2OTU4OTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg0ODg2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQyLjM0NTQ1NjYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwMDc3ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgbGluZSA1NCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBnZXQgYSBncmFzcCBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbSBhc3N1bWluZyB0aGF0IGxpbmUgcHJvYmFibHkgY29udGFpbnMgYSB0b3AtbGV2ZWwgYGNvbmZpZ2Agb3B0aW9uIG9yIGEgbW9kdWxlIGRlZmluaXRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGVmaW5pdGlvbnMgdXN1YWxseSBiZWdpbi4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIGFuZCBtYXliZSBzb21lIGRlZmF1bHQgdmFsdWVzIGZvciBrZXkgbmV0ZmlsdGVyIGZlYXR1cmVzLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkndmUgb3JnYW5pemVkIHRoZSBvcHRpb25zIGNvbmNlcHR1YWxseSDigJMgaXMgaXQgYmFzZWQgb24gcHJvdG9jb2wsIGZ1bmN0aW9uYWxpdHksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIGZvbGxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjIxNTUzNzAxNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNTI6XFx0XFx0ICBmb3IgZXh0ZW5kZWQgYWNjb3VudGluZyB2aWEgTkZORVRMSU5LLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4gIDU1OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA1NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgNTc6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBrZXJuZWwgd2lsbCBpbmNsdWRlIHN1cHBvcnRcXG4gIDYwOlxcdFxcdCAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbiAgNjM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNjQ6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA2NTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDY2OlxcdFxcdGhlbHBcXG4gIDY3OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjg6XFx0XFx0ICBmb3IgbG9nZ2luZyBwYWNrZXRzIHZpYSBORk5FVExJTksuXFxuICA2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDUuMjE1Njc1OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTY3OTU5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgQ29uZmlndXJhdGlvbnMgLSBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIHNvIEkgc2VlIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgY29udGluZ2VudCB1cG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBNYWtlcyBzZW5zZSwgdGhleSBvZnRlbiBidWlsZCB1cG9uIGVhY2ggb3RoZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGNvbmZpcm1pbmcgYSBwYXJ0aWN1bGFyIGRlcGVuZGVuY3kgY2hhaW4uIE5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIGFtIGNvbmZpZ3VyaW5nIGFueXRoaW5nIHVwc3RyZWFtIHRoYXQgbWlnaHQgaW1wYWN0IHRob3NlLlxuXG5Ob3csIGBORl9UQUJMRVNgLi4uIHRoYXQncyBhbm90aGVyIGtleSBwbGF5ZXIgaW4gdGhlIGlwdGFibGVzIHdvcmxkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgYXJlIHdoZXJlIHRoZXkgbmVlZCB0byBiZSwgc28gSSBjYW4gZW5zdXJlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHdoYXQgSSBhbSB3b3JraW5nIG9uLiBcblxuXG4iLCJJbnB1dFRva2VucyI6NjAyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDguMjMyNDc1NDc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODUxMDUxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDguNDE3NTg2NDUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjkwMTA3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGxpbmUgNDU1LiBUaGlzIGlzIGxpa2VseSB3aGVyZSBzb21lIGtleSBkZWNpc2lvbnMgYXJlIG1hZGUgaW4gdGVybXMgb2Ygd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBhbmQgSSdtIGd1ZXNzaW5nIHRoaXMgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgdGhpcyBzZWN0aW9uLCBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEtjb25maWcgc3ltYm9scy4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjUxLjA0NjYwMTQzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTEuMDQ2NzUyMzMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzg2MzcyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIGFuZCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBORl9UQUJMRVNgLiBJbml0aWFsbHksIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIGNvcmUgTmV0ZmlsdGVyIGNvbXBvbmVudHMuIEJ1dCBob2xkIG9uLCBJIGp1c3Qgc3BvdHRlZCBzb21ldGhpbmfigKYgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCwgYW5kIG1pZ2h0IG5lY2Vzc2l0YXRlIGEgZGVlcGVyIGxvb2sgaW50byB0aGUgaW50ZXJhY3Rpb25zIHRoZXJlLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFyZSByZWxhdGVkIHRvIHRoaXMuIEknbSBzZWVpbmcgY2hhbmdlcyBpbjogYG5mcW5sX3ZhbGlkYXRlX2w0YCwgYG5mcW5sX3ZhbGlkYXRlX2lwNGAsIGBuZnFubF92YWxpZGF0ZV9pcG9wdHNgLCBgbmZxbmxfdmFsaWRhdGVfZXh0aGRyYCwgYW5kIGBuZnFubF92YWxpZGF0ZV9pcDZgLCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgY2x1c3RlciBvZiB2YWxpZGF0aW9uIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgY2FsbCB0aGVzZSBtb2RpZmllZCBvbmVzLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgd2lkZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTY3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTUuMjI1MzkyMDU3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwNzg3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfdmFsaWRhdGVfaXA0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMjE2PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2w0KGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEyNjAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMjYxOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTI2Mi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDAwPXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTQwNC1cXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE0MDU6XFx0XFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDA2LVxcdGNhc2UgTkZQUk9UT19JUFY2OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo1NS4zNjY0Nzc0NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MTE0ODUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgYG5mcW5sX3ZhbGlkYXRlX3dyaXRlYCBjYWxsOlxuXG4qKkFuYWx5emluZyBgbmZxbmxfdmFsaWRhdGVfd3JpdGVgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZ2V0dGluZyBteSBiZWFyaW5ncy4gXCJXaGF0J3MgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBjYWxsP1wiIEknbSB0aGlua2luZy4gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzICpjYWxsaW5nKiBpdC4gSXMgaXQgcGFydCBvZiB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlPyBJcyBpdCB1c2VyLXNwYWNlIGludGVyYWN0aW5nIHdpdGggYSBrZXJuZWwgbW9kdWxlPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY2FsbGVyIGlzICpjcml0aWNhbCogdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS5cblxuTXkgYnJhaW4gaXMgYWxyZWFkeSBmaXJpbmcgb2ZmIHF1ZXN0aW9ucy4gV2hhdCBkYXRhIGlzIGJlaW5nIHZhbGlkYXRlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgaW52YWxpZCBkYXRhPyBJcyBpdCByZWxhdGVkIHRvIHBhY2tldCBtYW5pcHVsYXRpb24sIHJ1bGUgZW5mb3JjZW1lbnQsIG9yIHNvbWV0aGluZyBlbHNlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbT8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIHdpbGwgc3RhcnQgYnkgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGNhbGwgc3RhY2sgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEknbSBpbWFnaW5pbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcxOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU4LjU1NzYyOTQxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTA0MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX3ZhbGlkYXRlX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMzg0PXN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2LCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzOTktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDAwOnN0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MDEtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxOD1uZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDI0LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTQyNTpcXHRpZiAoIW5mcW5sX3ZhbGlkYXRlX3dyaXRlKGRhdGEsIGRhdGFfbGVuLCBlKSlcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MjYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU4LjY3MTczODkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAxMjI0NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG5mcW5sX21hbmdsZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGNhbGxpbmcgYG5mcW5sX21hbmdsZWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggdGhpcyBmdW5jdGlvbi4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgY29tcHJlaGVuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgc2lkZSBlZmZlY3RzLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBtZW50YWwgbW9kZWwgb2YgaG93IGl0IGZ1bmN0aW9ucyBhbmQgd2hpY2ggcHJvY2Vzc2VzIGFyZSBpbml0aWF0aW5nIGl0LiBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gV2hhdCBkYXRhIGlzIGJlaW5nIG1hbmlwdWxhdGVkPyBUaGlzIGRldGFpbGVkIHBlcnNwZWN0aXZlIGlzIGVzc2VudGlhbCBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjAxLjc3Mjk2Njk2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MDA5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfbWFuZ2xlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNDE3PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE0MTg6bmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE0MTkte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzc0PXN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjMtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxODI0OlxcdFxcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4MjUtXFx0XFx0XFx0XFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowMS44NjA0NzMxNzNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMTI3NTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIvTkZUYWJsZXMgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHplcm9lcyBpbiBvbiB0aGUgZW50cnkgcG9pbnQgZm9yIG5ldGZpbHRlciBxdWV1aW5nIOKAkyB0aGF0IGBuZnFubF9yZWN2X3ZlcmRpY3RgIGZ1bmN0aW9uLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgaXNuJ3QgaXQ/IFRoZSBjb3JlIG9mIHByb2Nlc3NpbmcgcXVldWVkIHBhY2tldHMuIE5vdywgSSdtIHRoaW5raW5nLCB3aGVyZSBkb2VzIHRoZSBwYXlsb2FkIG1hbmlwdWxhdGlvbiBhY3R1YWxseSAqaGFwcGVuKj8gV2hhdCdzIHRoZSBkYW5jZT8gSXQgYWx3YXlzIGNvbWVzIGJhY2sgdG8gdGhlIGludGVybmFscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZC4gU28sIHRoYXQgYnJpbmdzIG1lIHRvIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoYXQncyB3aGVyZSB0aGUgZm9jdXMgbmVlZHMgdG8gYmUsIHJpZ2h0PyBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGRhdGFwYXRoLiBJIHdhbnQgdG8gdHJhY2UgaG93IGl0IGdldHMgdGhvc2UgcGFja2V0cywgYW5kIHdoYXQgaW1wbGljYXRpb25zIHRoZSBkYXRhIHN0cmVhbSBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS4xOTE3NTIyNTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTcxNTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNzA9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NzpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgtXFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS4yOTc0NzMzNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY4MTg2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG5mdF9wYXlsb2FkX3NldGAgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIHRoZSBgZXZhbGAgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgYG5mdF9wYXlsb2FkX3NldF9vcHNgIHN0cnVjdHVyZS4gVGhpcyBtZWFucyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBsaWtlbHkgYG5mcW5sX3JlY3ZfdmVyZGljdGAgYW5kLCBvZiBjb3Vyc2UsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXRzZWxmIOKAkyB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBpcyBwcm9iYWJseSBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIGxpa2UgYG5mdF9kb19jaGFpbmAuXG5cbk5vdywgYSBrZXkgb2JzZXJ2YXRpb246IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgaXMgZGVjbGFyZWQgYXMgKnN0YXRpYyouIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXQncyBhbiBvcHMgY2FsbGJhY2ssIHdoaWNoIG1ha2VzIGl0IGFuIGltcG9ydGFudCBmb2N1cyBzeW1ib2wuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdOKAmXMgZWl0aGVyIHRoYXQsIG9yIGBuZnFubF9yZWN2X3ZlcmRpY3RgLiBCdXQgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uIHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHdoZXRoZXIgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBoYXMgYSB1bmlxdWUsIGlkZW50aWZpYWJsZSBzeW1ib2wgYWRkcmVzcyBpZiB0aGUgY29tcGlsZXIgY29tcGxldGVseSBpbmxpbmVzIGl0LiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYG5mdF9wYXlsb2FkX3NldF9vcHMuZXZhbGApLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgY2FuJ3QgZnVsbHkgaW5saW5lIGl0LiBJdHMgYWRkcmVzcyBtdXN0IGJlIHRha2VuLiBUaGlzIG1lYW5zIGl0IG11c3QgaGF2ZSBhIGRpc3RpbmN0IG1lbW9yeSBhZGRyZXNzLlxuXG5UaGF0J3MgYSBiaXQgb2YgYSB3cmlua2xlIGluIGFuYWx5c2lzLiBBbm90aGVyIHdyaW5rbGUgaXMgdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBhbHNvIHN0YXRpYy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgKnRoYXQqIGlzIGFsc28gYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHNvbWV3aGVyZS4gR290dGEgYmUgc3lzdGVtYXRpYyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjYzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjEwLjI2NTY2MzU2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2OTM5MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX3JlY3ZfdmVyZGljdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTY1OD1zdGF0aWMgaW50IG5mcV9pZF9hZnRlcih1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGludCBtYXgpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNjYzOnN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNjY0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzM5PXN0YXRpYyBpbnQgbmZxYV9wYXJzZV9icmlkZ2Uoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE3NzQ6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NzUtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5mcWFbXSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTk4MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZxbmxfY2JbTkZRTkxfTVNHX01BWF0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5ODYtXFx0W05GUU5MX01TR19WRVJESUNUXVxcdD0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk4NzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZxbmxfcmVjdl92ZXJkaWN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk4OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9SQ1UsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE5OTgtXFx0W05GUU5MX01TR19WRVJESUNUX0JBVENIXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE5OTk6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTIwMDAtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoxMC4zOTI2MjE1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzczODQwODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyBGdW5jdGlvbiBQb2ludGVycyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIGRlZmluaXRlbHkgYXNzaWduaW5nIGBuZnFubF9yZWN2X3ZlcmRpY3RgIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MganVzdCBjb25maXJtIG15IHN1c3BpY2lvbi4uLiB5ZWFoLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBCdXQsIHNpbmNlIGl0cyBhZGRyZXNzIGlzIGJlaW5nIHRha2VuLCB0aGUgY29tcGlsZXIgd29uJ3QgYmUgYWJsZSB0byBpbmxpbmUgaXQsIHdoaWNoIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbi4gV2Uga25vdyBob3cgdG8gZGVhbCB3aXRoIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgY29tcGlsZXIuXG5cbldoaWxlIEknbSBoZXJlLCBJIG1pZ2h0IGFzIHdlbGwgYWRkIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgdG8gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIHRyYWNrIG9mLlxuXG5BbmQgZmluYWxseSwgZ2l2ZW4gaXRzIHVzYWdlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIGVuYWJsZWQuIEl0IHdpbGwgYmUgcmVxdWlyZWQgaWYgaXRzIHVzZSBpcyByZXF1aXJlZCBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjE0LjE2NjQ2NjY0MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTk3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTQuMjY4NDY5MTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1MDE2MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTkZfQ09OTlRSQUNLIGFuZCBuZnRfcGF5bG9hZF9zZXRfZXZhbCAtIFdoZXJlJ3MgdGhlIEhvb2t1cD8qKlxuXG5BbHJpZ2h0LCBzbyBgTkZfQ09OTlRSQUNLYCBpcyBjbGVhcmx5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGdpdmVuIHRoYXQgY29udGV4dCwgd2hlcmUgZG9lcyB0aGUgcGF5bG9hZCBtYW5pcHVsYXRpb24gZml0IGluPyBMZXQncyBkaXZlIHJpZ2h0IGludG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHNwZWNpZmljYWxseSBjaGVjayBvdXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2Ugc2VlIGhvdyBwYXlsb2FkIG9wZXJhdGlvbnMgYXJlICpldmFsdWF0ZWQqIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpbiByZWxhdGlvbiB0byBjb25uZWN0aW9uIHRyYWNraW5nLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBpcyBoYW5kbGluZyBjb25udHJhY2sgcmVsYXRlZCBpbmZvcm1hdGlvbiBzb21laG93LCBwb3NzaWJseSBmb3IgYSBjb25uZWN0aW9uLXNwZWNpZmljIHBheWxvYWQgbW9kaWZpY2F0aW9uLiBIb3BlZnVsbHksIHRoZSBjb2RlIHdpbGwgcHJvdmlkZSBhIGNsZWFuIHZpZXcgb2YgYW55IGludGVncmF0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgaG93IHRoZSBjb25udHJhY2sgY29udGV4dCBpcyB1c2VkIChpZiBpdCBpcykuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTguMDE4NjM0OTExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMDYxNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzc6XFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTguMjU1OTQ2Njc3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjQ4MDQ3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQXR0YWNrIFN1cmZhY2VzIGluIHRoZSBORlRhYmxlcyBDb2RlYmFzZSoqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5nJ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBjb25maXJtYXRpb24gLSBzdGF0aWMgaXQgaXMuIE5vdywgdGhlIGdvYWwgaXMgdG8gcGlucG9pbnQgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4sIGFuZCBzaW5jZSBzdGF0aWNzIGFyZSBnZW5lcmFsbHkgbGVzcyBpbnRlcmVzdGluZyBmcm9tIGEgZGlyZWN0IGF0dGFjayB2ZWN0b3IgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gTXkgdGhpbmtpbmcgaXMgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIHF1ZXVlLiBPa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBhbHNvIHN0YXRpYywgc28gbm8gbHVjayB0aGVyZS4gTGV0IG1lIG1vdmUgb24gYW5kIGV4cGxvcmUgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG9uIGBuZm5ldGxpbmtfcXVldWUuY2AgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBhbSBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjEuNjgwNzU0Njk0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3MTkzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbmZxbmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjIxLjc5NjQ4MjYzMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4ODIzMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqSHVudGluZyBmb3IgRHluYW1pYyBGdW5jdGlvbmFsaXR5IGluIG5mbmV0bGlua19xdWV1ZS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5mbmV0bGlua19xdWV1ZS5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgYW55IGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCByaWdpZGx5IHN0YXRpYy4gU3RhdGljIGZ1bmN0aW9ucywgYnkgdGhlaXIgbmF0dXJlLCBhcmUgbGltaXRlZCBpbiBzY29wZSwgYW5kIGxlc3MgbGlrZWx5IHRvIGJlIGludm9sdmVkIGluIHRoZSBtb3JlIGR5bmFtaWMgb3IgY29uZmlndXJhYmxlIGFzcGVjdHMgb2YgdGhlIG5ldGxpbmsgcXVldWVpbmcgc3lzdGVtLiBJJ20gbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCwgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgZmlsZSwgb3IgbWF5YmUgZXZlbiBsaW5rZWQgZHluYW1pY2FsbHkuIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGhvbGQgdGhlIGtleXMgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3MgcnVudGltZSBiZWhhdmlvciwgaXRzIGZsZXhpYmlsaXR5LCBhbmQgcG90ZW50aWFsbHksIGl0cyB2dWxuZXJhYmlsaXRpZXMgb3IgcG9pbnRzIG9mIGN1c3RvbWl6YXRpb24uIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IGxldCdzIHN0YXJ0IHNjYW5uaW5nIHRoZSBjb2RlIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODYyLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjUuMDU1MzA4NzcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM3NDk0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogbmZxbmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02OS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjcwOnN0cnVjdCBuZnFubF9pbnN0YW5jZSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy03MS1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDtcXHRcXHQvKiBnbG9iYWwgbGlzdCBvZiBxdWV1ZXMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjUuMzM5MDY2NzU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzA4MTE5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGdW5jdGlvbnMgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGV4cG9zZWQsIGFuZCBJJ20gdGhpbmtpbmcgdGhlIG1vc3QgZGlyZWN0IHBhdGggdG8gaWRlbnRpZnlpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGlzIGdvaW5nIHRvIGJlIGJ5IHplcm9pbmcgaW4gb24gdGhvc2UgZGVjbGFyYXRpb25zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGxvb2sgZm9yIGV4cGxpY2l0IGBFWFBPUlRfU1lNQk9MYCBjYWxscy4gVGhhdCB3aWxsIGNsZWFybHkgaWRlbnRpZnkgdGhlIHN5bWJvbHMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSWYgdGhhdCBkb2Vzbid0IGltbWVkaWF0ZWx5IHlpZWxkIHdoYXQgSSBuZWVkLCBJJ2xsIGdvIGJhY2sgYW5kIHJ1biBhIG1vcmUgYmFzaWMgc2VhcmNoIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB0aGVtc2VsdmVzLCBhbmQgdGhlbiBmaWx0ZXIgYmFzZWQgb24gdGhlIHByZXNlbmNlLCBvciBhYnNlbmNlLCBvZiB0aGUgYHN0YXRpY2Aga2V5d29yZC4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZmluZCB0aGUgZnVuY3Rpb25zIHRoYXQgKmFyZW4ndCogc3RhdGljLCBhbmQgaGVuY2UsIHBvdGVudGlhbGx5IGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoyOC43Njk4ODE1ODNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYxMTUzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjguOTY4NTAwNzhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MTM3NzEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IHRoZSBgbmZxbmxfcmVjdl92ZXJkaWN0YCBmdW5jdGlvbjsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0J3MgYSBjYWxsYmFjayB3aXRoaW4gdGhlIGBuZnFubF9jYmAgc3RydWN0dXJlLCByaWdodD8gVGhlIGBuZnFubF9jYmAgYXJyYXkgaXRzZWxmIGdldHMgcmVnaXN0ZXJlZCB1c2luZyBgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3RlcmAsIHNvIHRoYXQncyB0aGUgcmVnaXN0cmF0aW9uIHBvaW50LlxuXG5UaGUgbmV0bGluayBlbnRyeSBwb2ludCBpcyBgbmZuZXRsaW5rX3Jjdl9tc2dgLCB3aGljaCB0aGVuLCBuYXR1cmFsbHksIGNhbGxzIHRoaXMgY2FsbGJhY2suIENvbnNlcXVlbnRseSwgYG5mcW5sX3JlY3ZfdmVyZGljdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZW5kcyB1cCBnZXR0aW5nIGV4ZWN1dGVkLiBCZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBldmVuIHRob3VnaCBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGlzIG1lYW5zIHdlIGNhbiB0cmVhdCBpdCBhcyBhIHN5bWJvbCBvZiBpbnRlcmVzdCwgYSBwb2ludCBmb3IgcG90ZW50aWFsIGZ1enppbmcgZm9jdXMsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIGVzcGVjaWFsbHkgZnJvbSBhIHN5emthbGxlciBwZXJzcGVjdGl2ZTsgd2UgY2FuIG9mdGVuIHRhcmdldCB0aGVzZSBzdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBpcyBpbmRlZWQgKm5vdCogaW5saW5lZC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBnZW5lcmFsbHkgcHJlY2x1ZGVzIGlubGluaW5nLiBUaGF0J3MgZ29vZC5cblxuTmV4dCwgSSdsbCB0dXJuIHRvIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0IGxvb2tzIGxpa2UgaXQncyBhbHNvIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgbWlnaHQgYmUgYW5vdGhlciBpbnRlcmVzdGluZyBwb2ludCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5JIHNob3VsZCBhbHNvIGRvIGEgYnJvYWRlciBzY2FuLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5mdF9wYXlsb2FkLmNgPyBBIHRob3JvdWdoIHNlYXJjaCBjb3VsZCByZXZlYWwgZnVydGhlciB1c2VmdWwgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNC4wMTk4ODA4NTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2Mjk3NTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xNDg9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdCh1MzIgb2Zmc2V0LCB1MzIgbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTU5OnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2MC1cXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTU1PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjQ6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNC4zODI4NjI2MjVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1NTc4ODg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBuZnRfcGF5bG9hZF9ldmFsYCBmdW5jdGlvbiBqdW1wcyBvdXQgYXQgbWUg4oCTIGl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCB0aGUgcmVhbCBjcnV4IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBIbW0sIHRoYXQgb25lJ3Mgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIFdoeSBtb2RpZnkgYSBzdGF0aWMgZnVuY3Rpb24gaWYgaXQncyBub3QgYmVpbmcgdXNlZCBleHRlcm5hbGx5P1xuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gaXMgKmNhbGxpbmcqIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEJlY2F1c2UgaWYgdGhlcmUgaXNuJ3Qgb25lLCB0aGVuIHRoaXMgY2hhbmdlIGlzIHN1c3BlY3QuIEFoLCBubywgaXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYW4gb3BzIGNhbGxiYWNrLiBTbywgaXQgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHNhbWUgZmlsZS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gT3IsIGlzIGl0IHB1cmVseSB1c2VkIHdpdGhpbiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzcuOTM4NjU0MDk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5MzgwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDcwPXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEyNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc2LVxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNzc6XFx0LmV2YWxcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzguMDYxNTk3OTE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI5MzAzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50cyBmb3IgU2FmZXR5KipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhpcyBpcyBiZWNhdXNlIHRoZXkncmUgZ29pbmcgdG8gaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBhbmQgdGhhdCdzIHdoYXQgd2Ugd2FudCBmb3IgcmVsaWFibGUgbGlzdGluZy4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGFib3V0IGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEl0J3Mgc3RhdGljLCBzbyBteSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBleGNsdWRlIGl0LCBidXQgaXQgYXBwZWFycyB0byBiZSBmaW5lIGJlY2F1c2UgaXQncyBub3QgaW5saW5lZC5cblxuSG93ZXZlciwgc2luY2UgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mcW5sX3JlY3ZfdmVyZGljdGAgYXJlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGV5IGFyZSAqbm90KiBpbmxpbmVkLiBXaGljaCBtZWFucyB0aGV5ICpkbyogaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMsIHNvIGl0IHNob3VsZCBiZSBzYWZlIHRvIGxpc3QgdGhlbS5cblxuSSdkIGJldHRlciBkb3VibGUtY2hlY2sgYG5mcW5sX3JlY3ZfdmVyZGljdGAgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgaW4gYG5mbmV0bGlua19xdWV1ZS5jYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHVzYWdlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb21wbGljYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDEuODI0NTU2NTQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2NTk3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZxbmxfcmVjdl92ZXJkaWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNjU4PXN0YXRpYyBpbnQgbmZxX2lkX2FmdGVyKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IG1heClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTY2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE2NjM6c3RhdGljIGludCBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE2NjQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE3Mzk9c3RhdGljIGludCBuZnFhX3BhcnNlX2JyaWRnZShzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzczLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc3NDpzdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc3NS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xOTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZnFubF9jYltORlFOTF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk4Ni1cXHRbTkZRTkxfTVNHX1ZFUkRJQ1RdXFx0PSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxOTg3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZnFubF9yZWN2X3ZlcmRpY3QsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xOTg4LVxcdFxcdC50eXBlXFx0XFx0PSBORk5MX0NCX1JDVSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTk5OC1cXHRbTkZRTkxfTVNHX1ZFUkRJQ1RfQkFUQ0hdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTk5OTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjAwMC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9SQ1UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjQyLjAxMjIyMjAzNloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjAzNDU1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRW50cnkgUG9pbnRzIGFuZCBCYXRjaCBQcm9jZXNzaW5nIGluIE5ldGZpbHRlciBRdWV1ZSoqXG5cblJpZ2h0LCBzbywgYXMgSSB1bmRlcnN0YW5kIGl0LCBgbmZxbmxfcmVjdl92ZXJkaWN0YCBhbmQgYG5mcW5sX3JlY3ZfdmVyZGljdF9iYXRjaGAgYXJlICp0aGUqIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgTmV0ZmlsdGVyIFF1ZXVlIHN1YnN5c3RlbS4gVGhleSdyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2Ygd2hlbiBoYW5kbGluZyBwYWNrZXRzLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBkb2VzIGBuZnFubF9yZWN2X3ZlcmRpY3RfYmF0Y2hgLCBpbiBpdHMgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCwgYWxzbyBtYWtlIGEgY2FsbCB0byBgbmZxbmxfbWFuZ2xlYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC4gVGhlIGltcGFjdCBvZiBwb3RlbnRpYWxseSBtdWx0aXBsZSBjYWxscyB0byBhIG1hbmdsaW5nIGZ1bmN0aW9uIGluIGEgYmF0Y2ggY29udGV4dCBoYXMgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgY29uY3VycmVuY3kuIEl0J3MgYSBrZXkgcXVlc3Rpb24gd2hlbiB0aGlua2luZyBhYm91dCBvcHRpbWl6YXRpb24gYW5kIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIG15IGRlc2lnbi4gSSBzaG91bGQgaW52ZXN0aWdhdGUgdGhhdCBjYWxsIHBhdGggdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgdGhlIGZsb3cgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo0NS42MTU2ODA4MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDI1MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mcW5sX21hbmdsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTQxNz1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNDE4Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNDE5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTc3ND1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTgyNDpcXHRcXHRpZiAobmZxbmxfbWFuZ2xlKG5sYV9kYXRhKG5mcWFbTkZRQV9QQVlMT0FEXSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODI1LVxcdFxcdFxcdFxcdCBwYXlsb2FkX2xlbiwgZW50cnksIGRpZmYpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDUuNzk3NzExOTA3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzUyODM0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBgbmZxbmxfcmVjdl92ZXJkaWN0X2JhdGNoYCBkb2Vzbid0IGRpcmVjdGx5IGNhbGwgYG5mcW5sX21hbmdsZWAuIEdvdCBpdC4gVGhlcmVmb3JlLCB0aGUgY29yZSBmb2N1cyBmb3Igc3ltYm9sIGlkZW50aWZpY2F0aW9uIHNob3VsZCBiZTogYG5mcW5sX3JlY3ZfdmVyZGljdGAgYW5kLCBjcnVjaWFsbHksIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGhhbmRsZWQuXG5cbk5vdywgbGV0J3MgYW50aWNpcGF0ZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIEkgbWlnaHQgYmUgbWlzc2luZy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgZW5hYmxlZCwgb2YgY291cnNlLiBgTkZfVEFCTEVTYCBpcyBkZWZpbml0ZWx5IGEgY29uc2lkZXJhdGlvbiB0b28sIGFuZCwgSSAqdGhpbmsqIEkgc2F3IGBORl9DT05OVFJBQ0tgIHBvcCB1cCB3aGVuIEkgd2FzIHJldmlld2luZyB0aGUgYG5mcW5sX3ZhbGlkYXRlX2w0YCBjb2RlIHdpdGggdGhlIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKWAgY2hlY2ssIHNvIHRoYXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uXG5cbkxldCBtZSBhbmFseXplIHRoYXQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkuIFRoZSBjb25kaXRpb25hbCBjb2RlIGluIGBuZnFubF92YWxpZGF0ZV9sNGAgc3BlY2lmaWNhbGx5IGNoZWNrcyBmb3IgY29ubmVjdGlvbiB0cmFja2luZyBiZWZvcmUgZG9pbmcgc29tZSBwcm90b2NvbC1zcGVjaWZpYyBjaGVja3MuIElmIGBORl9DT05OVFJBQ0tgIGlzIGRpc2FibGVkLCBpdCBqdXN0IGJ5cGFzc2VzIHRoYXQgcGFydC4gSG93ZXZlciwgZW5hYmxpbmcgaXQgd291bGQgYWxsb3cgbWUgdG8gdGhvcm91Z2hseSB0ZXN0IHRoYXQgYnJhbmNoIG9mIHRoZSBjb2RlLiBTbywgdG8gZW5zdXJlIGNvbXBsZXRlIGNvdmVyYWdlLCBJIHNob3VsZCBpbmNsdWRlIGl0IGluIG15IGNvbmZpZy5cblxuQW5kIGxhc3RseSwgbGV0J3MgdmVyaWZ5IGlmIGBORlRfUEFZTE9BRGAgaXRzZWxmIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDE5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjUxLjE3Mjk5OTg3M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMzkxMzE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX1BBWUxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1MS4zNzM0MDE5MjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0Njk4NzczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ29ubmVjdGluZyB0aGUgRG90czogbmZ0X3BheWxvYWQubyBhbmQgQ09ORklHX05GX1RBQkxFUyoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBTbywgYG5mdF9wYXlsb2FkLm9gLi4uIHRoYXQncyB0aGUgb2JqZWN0IGZpbGUgcmVsYXRlZCB0byBoYW5kbGluZyBwYXlsb2FkIGRhdGEsIGlzbid0IGl0PyBPa2F5LCBhbmQgdGhhdCdzICpjb25kaXRpb25hbGx5KiBjb21waWxlZC4gVGhlIHN5c3RlbSdzIGJ1aWxkIHByb2Nlc3MgaXNuJ3QganVzdCBjaHVybmluZyBpdCBvdXQgdW5sZXNzLi4uIGFoYSEgVGhlIGNsdWUgaXMgYENPTkZJR19ORl9UQUJMRVNgIGJlaW5nIGVuYWJsZWQuIFNvLCB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24gKnNwZWNpZmljYWxseSogdGllcyB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGBuZnRfcGF5bG9hZC5vYCBtb2R1bGUgdG8gdGhlIGFjdGl2YXRpb24gb2YgdGhlIE5ldGZpbHRlciB0YWJsZXMgZnVuY3Rpb25hbGl0eS4gVGhhdCBtZWFucyBpZiBOZXRmaWx0ZXIgdGFibGVzIGFyZSBlbmFibGVkLCB0aGUgY29kZSB0aGF0IG1hbmFnZXMgdGhlIHBheWxvYWQgZGF0YSBnZXRzIGJ1aWx0IHRvby4gSXTigJlzIGxpa2UgYSBkZXBlbmRlbmN5IOKAkyBgbmZ0X3BheWxvYWQub2AgaXMgYSBzdXBwb3J0aW5nIG1vZHVsZSBmb3IgYE5GX1RBQkxFU2AuIEdvdCBpdC4gVGhhdCdzIGEgY3J1Y2lhbCByZWxhdGlvbnNoaXAgdG8gcmVtZW1iZXIgd2hlbiB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcgdGhpcyBhcmVhLCBzaW5jZSB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiB0aGlzIGZpbGUgd291bGQgYmUgaW5kaWNhdGl2ZSBvZiBORl9UQUJMRVMgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxMDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1NC45MjAzOTMxMDRaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYyODk0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1NS4wNTUwMjkxODJaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNDcxMTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgbmZfdGFibGVzIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZC5vYCBvYmplY3QgZmlsZS4gTXkgaW5pdGlhbCBodW5jaCBpcyByaWdodDogaXQncyBkZWZpbml0ZWx5IGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIGBuZl90YWJsZXMtb2Jqc2AgbGlzdC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgbmZfdGFibGVzYCBpcyB0aGUga2V5IG1vZHVsZSBoZXJlLCBhbmQgYG5mdF9wYXlsb2FkLm9gIGlzIGEga25vd24gY29tcG9uZW50LiBUaGUgYnVpbGQgcHJvY2VzcyB3aWxsIGluY2x1ZGUgaXQgd2hlbiBgQ09ORklHX05GX1RBQkxFU2AgaXMgc2V0IOKAkyBhIHByZXR0eSBzdGFuZGFyZCBkZXBlbmRlbmN5LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzaW5jZSBpdCBpcyBhIGRlcGVuZGVuY3kuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGBORVRGSUxURVJfQURWQU5DRURgIGFzIGEgZGVwZW5kZW5jeS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHRyb3VibGVzaG9vdCBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjU4LjY3OTc0NDM2NloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwMjYxNjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1OC43NzY3ODE0NDRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMTU0MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGV4YWN0bHkgYE5FVEZJTFRFUl9BRFZBTkNFRGAgaXMgZGVmaW5lZC4gSXMgaXQgdHVja2VkIGF3YXkgaW4gdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUsIGNvdmVyaW5nIGJyb2FkZXIgbmV0d29ya2luZyBmZWF0dXJlcz8gT3IgZG9lcyBpdCByZXNpZGUgd2l0aGluIHRoZSBkZWRpY2F0ZWQgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZGlyZWN0b3J5LCB3aGljaCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UgZ2l2ZW4gdGhlIFwibmV0ZmlsdGVyXCIgcHJlZml4PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2F0aW9uIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhhdCdzIHRoZSBmaXJzdCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCB3aXRoIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMxOjAxLjY4ODMyNzMxOVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY0Mzc4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0yMTg9aWYgTkVURklMVEVSXFxubmV0L0tjb25maWctMjE5LVxcbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIkFkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMTowMS43NzQ3NzE1MTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM1Njg5MjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgY3J1Y2lhbCBMNCBoZWFkZXIgdmFsaWRhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGZvciBwYWNrZXQgbWFuZ2xpbmcgd2l0aGluIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyByaWdvcm91c2x5IHRlc3RlZC4gRmlyc3QsIGl0IHNlZW1zIGBORVRGSUxURVJfQURWQU5DRURgIGlzIGEgcHJlcmVxdWlzaXRlLCBzbyBJJ2xsIGJlIHN1cmUgdGhhdCdzIGVuYWJsZWQuIEkgY2FuIHNlZSB0aGF0IGBORVRGSUxURVJfTkVUTElOS2AgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBgTkVURklMVEVSX05FVExJTktfUVVFVUVgIGFuZCBgTkZfVEFCTEVTYCwgc28gSSB3b24ndCB3b3JyeSBhYm91dCBleHBsaWNpdGx5IHNldHRpbmcgaXQuIFdoaWxlIGBJUFY2YCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgSSdsbCBpbmNsdWRlIGl0IGluIHRoZSBjb25maWcganVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmsgdHJhZmZpYy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uczogYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBhbmQgb2YgY291cnNlIGBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEYC5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGBuZnFubF9yZWN2X3ZlcmRpY3RgIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBORlFOTF9NU0dfVkVSRElDVGAsIGFuZCBJIGNvbmZpcm0gYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBpcyB0aGUgYGV2YWxgIGZ1bmN0aW9uIGZvciB0aGUgcGF5bG9hZCBzZXQuXG5cbk9rYXksIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBhZGRzIGBuZnFubF92YWxpZGF0ZV9sNGAgZm9yIG5mcXVldWUgYW5kIGBuZnRfdGhfd3JpdGVfb2tgIGZvciB0aGUgbmZ0YWJsZXMgcGF5bG9hZC4gVGhlc2UgYXJlIGRlc2lnbmVkIHRvIHByZXZlbnQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgd3JpdGVzIG9yIG90aGVyIGludmFsaWQgbWFuaXB1bGF0aW9ucyBvZiBwYWNrZXQgaGVhZGVycy4gVGhlc2UgY2hlY2tzIGFyZSBhYnNvbHV0ZWx5ICpjcml0aWNhbCogZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIHZhbGlkYXRpb24gaXMgcm9idXN0LlxuXG5JJ3ZlIGdvdCB0aGUgZGF0YSBJIG5lZWQuXG5cbioqTXkgVmVyZGljdDoqKiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb246XG5cbiogICBgbmZxbmxfcmVjdl92ZXJkaWN0YFxuKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGBcblxuSSdsbCBiZSBzdXJlIHRvIGVuYWJsZSB0aGVzZSBjb25maWd1cmF0aW9uczpcblxuKiAgIGBORVRGSUxURVJfQURWQU5DRURgXG4qICAgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYFxuKiAgIGBORl9UQUJMRVNgXG4qICAgYE5GX0NPTk5UUkFDS2BcblxuTXkgcmVhc29uaW5nIGlzIHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IHN0cmVuZ3RoZW5zIHRoZSBib3VuZHMgY2hlY2tpbmcgZm9yIHBhY2tldCBtYW5nbGluZyBvcGVyYXRpb25zLiBCeSBmdXp6aW5nIHRoZSBuZXRsaW5rIHZlcmRpY3QgYW5kIHRoZSBuZnRhYmxlcyBwYXlsb2FkIGV2YWx1YXRpb24sIHdlIGNhbiB0aG9yb3VnaGx5IHZhbGlkYXRlIHRoZSBlZmZpY2FjeSBvZiB0aGVzZSBuZXcgdmFsaWRhdGlvbiBtZWNoYW5pc21zIGFuZCwgaG9wZWZ1bGx5LCB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEzNCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzE6MDkuMTMxNjY4MjIyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDk1MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mcW5sX3JlY3ZfdmVyZGljdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEw0IGhlYWRlciB2YWxpZGF0aW9uIGZvciBwYWNrZXQgbWFuZ2xpbmcgdmlhIG5mcXVldWUgYW5kIG5mdGFibGVzIHBheWxvYWQgbW9kaWZpY2F0aW9uLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgd3JpdGVzIGFuZCBpbnZhbGlkIHBhY2tldCBtb2RpZmljYXRpb25zLiBGdXp6aW5nIHRoZSBuZXRsaW5rIHZlcmRpY3QgYW5kIG5mdGFibGVzIHBheWxvYWQgZXZhbHVhdGlvbiBwYXRocyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGVzZSBib3VuZHMgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZxbmxfcmVjdl92ZXJkaWN0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTDQgaGVhZGVyIHZhbGlkYXRpb24gZm9yIHBhY2tldCBtYW5nbGluZyB2aWEgbmZxdWV1ZSBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBtb2RpZmljYXRpb24uIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyB3cml0ZXMgYW5kIGludmFsaWQgcGFja2V0IG1vZGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlIG5ldGxpbmsgdmVyZGljdCBhbmQgbmZ0YWJsZXMgcGF5bG9hZCBldmFsdWF0aW9uIHBhdGhzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZXNlIGJvdW5kcyBjaGVja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[1] Phase: Succeeded StartedAt: 2026-08-01 12:31:54 +0000 UTC FinishedAt: 2026-08-01 12:31:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 12:31:54 +0000 UTC FinishedAt: 2026-08-01 12:31:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2] Phase: Succeeded StartedAt: 2026-08-01 12:31:54 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 12:31:54 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 12:31:54 +0000 UTC FinishedAt: 2026-08-01 12:32:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 12:31:55 +0000 UTC FinishedAt: 2026-08-01 12:32:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowtt7s2/series-workflowtt7s2-convert-artifact-2435733565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 12:32:48 +0000 UTC FinishedAt: 2026-08-01 13:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 12:32:48 +0000 UTC FinishedAt: 2026-08-01 13:10:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*74e5c73d-a6a0-4a56-8c00-e94bee1e7296,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-workflowtt7s2/series-workflowtt7s2-convert-artifact-2435733565/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": "f953fe22-3a72-4501-b038-2898df65b3a4", "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-workflowtt7s2/series-workflowtt7s2-build-action-3012002163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 12:32:49 +0000 UTC FinishedAt: 2026-08-01 13:09:44 +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:*74e5c73d-a6a0-4a56-8c00-e94bee1e7296,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-workflowtt7s2/series-workflowtt7s2-convert-artifact-2435733565/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": "f953fe22-3a72-4501-b038-2898df65b3a4", "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-workflowtt7s2/series-workflowtt7s2-build-action-3012002163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 13:10:07 +0000 UTC FinishedAt: 2026-08-01 13:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 13:10:07 +0000 UTC FinishedAt: 2026-08-01 13:10:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 13:10:07 +0000 UTC FinishedAt: 2026-08-01 13:10:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 13:10:07 +0000 UTC FinishedAt: 2026-08-01 13:10:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowtt7s2/series-workflowtt7s2-convert-artifact-4218057624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 13:10:17 +0000 UTC FinishedAt: 2026-08-01 13:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 13:10:17 +0000 UTC FinishedAt: 2026-08-01 13:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f953fe22-3a72-4501-b038-2898df65b3a4,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-workflowtt7s2/series-workflowtt7s2-build-action-3012002163/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-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 13:12:16 +0000 UTC FinishedAt: 2026-08-01 13:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 13:12:16 +0000 UTC FinishedAt: 2026-08-01 13:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 13:12:16 +0000 UTC FinishedAt: 2026-08-01 13:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 13:12:16 +0000 UTC FinishedAt: 2026-08-01 13:33:47 +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:*74e5c73d-a6a0-4a56-8c00-e94bee1e7296,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-workflowtt7s2/series-workflowtt7s2-convert-artifact-4218057624/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": "44d09a5c-9686-41b4-9fbf-fe5e14a6a306", "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-workflowtt7s2/series-workflowtt7s2-build-action-2480786436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 13:12:16 +0000 UTC FinishedAt: 2026-08-01 13:33:37 +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:*74e5c73d-a6a0-4a56-8c00-e94bee1e7296,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-workflowtt7s2/series-workflowtt7s2-convert-artifact-4218057624/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": "44d09a5c-9686-41b4-9fbf-fe5e14a6a306", "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-workflowtt7s2/series-workflowtt7s2-build-action-2480786436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 13:33:47 +0000 UTC FinishedAt: 2026-08-01 13:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 13:33:47 +0000 UTC FinishedAt: 2026-08-01 13:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 13:33:47 +0000 UTC FinishedAt: 2026-08-01 13:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 13:33:47 +0000 UTC FinishedAt: 2026-08-01 13:35:30 +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:*44d09a5c-9686-41b4-9fbf-fe5e14a6a306,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-workflowtt7s2/series-workflowtt7s2-build-action-2480786436/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-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"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:*f953fe22-3a72-4501-b038-2898df65b3a4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44d09a5c-9686-41b4-9fbf-fe5e14a6a306,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-workflowtt7s2/series-workflowtt7s2-build-action-3012002163/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-workflowtt7s2/series-workflowtt7s2-build-action-2480786436/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 13:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 13:35:44 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"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-workflowtt7s2/series-workflowtt7s2-convert-artifact-3362792049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 13:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 13:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 13:35:40 +0000 UTC FinishedAt: 2026-08-01 13:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 13:35:50 +0000 UTC FinishedAt: 2026-08-01 16:38:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtt7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfqnl_recv_verdict","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_ADVANCED","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_CONNTRACK"],"series_id":"a47fb4df-95b8-4a38-b72c-69f69cc66609","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 13:35:50 +0000 UTC FinishedAt: 2026-08-01 16:38:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f953fe22-3a72-4501-b038-2898df65b3a4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*44d09a5c-9686-41b4-9fbf-fe5e14a6a306,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-workflowtt7s2/series-workflowtt7s2-build-action-3012002163/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-workflowtt7s2/series-workflowtt7s2-build-action-2480786436/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-workflowtt7s2/series-workflowtt7s2-convert-artifact-3362792049/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,}