Name: series-workflowjncqk Phase: Succeeded StartedAt: 2026-08-26 18:40:07 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[0] Phase: Succeeded StartedAt: 2026-08-26 18:40:07 +0000 UTC FinishedAt: 2026-08-26 19:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 18:40:07 +0000 UTC FinishedAt: 2026-08-26 19:09:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "24b6135d-fd02-4061-8e40-c554837bd6ca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxM2RlYjZkZGNmNWVkN2IxOTQzODBkYWY2NmFkZjE5YzcyNDU4ZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li44OTdlYzRiMzhkZWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTUsNiAmIzQzOzM1NSw4IEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHR0eXBlID0gYmFzZV90eXBlKHR5cGUpO1xuIFx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX1NPQ0tFVCB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxuJiM0MztcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbiYjNDM7XHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fTUFQX0tFWSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19TT0NLX0NPTU1PTiB8fFxuQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0aWYgKCFpc19qbXAzMiBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNlxuIFx0ICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpICE9IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBiYXNlX3R5cGUoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGJhc2VfdHlwZShkc3RfcmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0ZXFfYnJhbmNoX3JlZ3MgPSBOVUxMO1xuQEAgLTE3MTAxLDkgJiM0MzsxNzEwMiwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGVxX2JyYW5jaF9yZWdzKSB7XG4tXHRcdFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbiYjNDM7XHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgZHN0ICE9IE5VTEwgPVx1MDAzZSBzcmMgIT0gTlVMTCAqL1xuJiM0MztcdFx0XHRpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbiBcdFx0XHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddKTtcbi1cdFx0XHRlbHNlXG4mIzQzO1x0XHRcdC8qIHNyYyA9PSBkc3QgXHUwMDI2XHUwMDI2IHNyYyAhPSBOVUxMID1cdTAwM2UgZHN0ICE9IE5VTEwgKi9cbiYjNDM7XHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IDNkMWU4ZGU0MzkwYzIuLmI0MTJhNTQyZWY3NmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMsNyAmIzQzOzMsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfa2Z1bmNzLmhcJiMzNDtcbiBcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xuQEAgLTEyLDYgJiM0MzsxNCwxMyBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBpbnQpO1xuIH0gbWFwX3hza21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbiYjNDM7fSBtYXBfaGFzaCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiAvKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBwcm9ncmFtOlxuICAqXG4gICogICByNiA9IHNrYi1cdTAwM2VzaztcbkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKVxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgY29tcGFyaXNvbiBiZXR3ZWVuIFBUUl9UT19NRU0gfCBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCBhbmRcbiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC5cbiYjNDM7ICogQSBidWcgaW4gY2hlY2tfY29uZF9qbXBfb3AoKSBtYWRlIHN1Y2ggaW5mZXJlbmNlIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fbXNnKFwmIzM0O2Vycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7XHUwMDNlXHUwMDNlXHUwMDNlIDExIHwgKDYxKSByMCA9ICoodTMyICopKHIwICYjNDM7MClcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB1bnRydXN0ZWRfbWVtX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByNiA9IGJwZl9yZG9ubHlfY2FzdCgwLCAwKTsgKi9cdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjZrZXkpOyAqL1x0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IDA7XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbiYjNDM7XHQvKlx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICogYnVnZ3kgdmVyaWZpZXIgYXNzdW1lZCB0aGF0IHI2IGNhbiYjMzk7dCBiZSBudWxsXHRcXFxuJiM0MztcdCAqIGFuZCBtYXJrZWQgcjAgbm9uLW51bGwgYXMgd2VsbC5cdFx0XFxcbiYjNDM7XHQgKi9cdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHI2ICE9IHIwIGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjAgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MzsxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXG4mIzQzO1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXQKIAl0eXBlID0gYmFzZV90eXBlKHR5cGUpOwogCXJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHwKIAkJdHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHwKJiM0MzsJCXR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8CiYjNDM7CQl0eXBlID09IFBUUl9UT19CVUYgfHwKIAkJdHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8CiAJCXR5cGUgPT0gUFRSX1RPX01BUF9LRVkgfHwKIAkJdHlwZSA9PSBQVFJfVE9fU09DS19DT01NT04gfHwKQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKi8KIAlpZiAoIWlzX2ptcDMyICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7CiAJICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgJmFtcDsmYW1wOyBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpICZhbXA7JmFtcDsKLQkgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKIAkgICAgYmFzZV90eXBlKHNyY19yZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgJmFtcDsmYW1wOwogCSAgICBiYXNlX3R5cGUoZHN0X3JlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX0JURl9JRCkgewogCQllcV9icmFuY2hfcmVncyA9IE5VTEw7CkBAIC0xNzEwMSw5ICYjNDM7MTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGVxX2JyYW5jaF9yZWdzKSB7Ci0JCQlpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSkKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgZHN0ICE9IE5VTEwgPSZndDsgc3JjICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O3NyY19yZWddKTsKLQkJCWVsc2UKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgc3JjICE9IE5VTEwgPSZndDsgZHN0ICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O2RzdF9yZWddKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCAzZDFlOGRlNDM5MGMyLi5iNDEyYTU0MmVmNzZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zLDcgJiM0MzszLDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2tmdW5jcy5oJiMzNDsKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7CkBAIC0xMiw2ICYjNDM7MTQsMTMgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIGludCk7CiB9IG1hcF94c2ttYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIGludCk7CiYjNDM7fSBtYXBfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06CiAgKgogICogICByNiA9IHNrYi0mZ3Q7c2s7CkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKQogICAgICAgICA6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kCiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC4KJiM0MzsgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX21zZygmIzM0OyZndDsmZ3Q7Jmd0OyAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CS8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqLwkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwlyMiA9IDA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX3Jkb25seV9jYXN0XTsJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDtrZXkpOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CS8qCQkJCQkJXAomIzQzOwkgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJiMzOTt0IGJlIG51bGwJXAomIzQzOwkgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuCQlcCiYjNDM7CSAqLwkJCQkJCVwKJiM0MzsJaWYgcjYgIT0gcjAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksCiYjNDM7CSAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksCiYjNDM7CSAgX19pbW1fYWRkcihtYXBfaGFzaCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0JiMzOTtzIGZvY3VzZWQgb24gbnVsbCBwb2ludGVyIGNoZWNrcywgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSBpbiBCUEYuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHRlcmluZyB0aGUgYHJlZ19ub3RfbnVsbGAgZnVuY3Rpb247IGl04oCZcyBub3cgZ29pbmcgdG8gcmV0dXJuIGB0cnVlYCBmb3IgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCBwb2ludGVyIHR5cGVzLCBleHBhbmRpbmcgaXRzIHNjb3BlIGJleW9uZCB0aGUgb3JpZ2luYWwgaW50ZW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyDigJMgcGFydGljdWxhcmx5IHRoZSBjb21wYXJpc29uIG9mIHBvaW50ZXJzIHdoZXJlIG9uZSAqbWlnaHQqIGJlIG51bGwsIGFuZCB0aGUgb3RoZXIgaXMgZGVmaW5pdGVseSBub3QuIFRoZSBsb2dpYyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYCBpcyBiZWluZyByZWZpbmVkLiBJdCBhcHBlYXJzIHRoZXnigJlyZSByZW1vdmluZyBhIGNvbmRpdGlvbjogYHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy0mZ3Q7dHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLSZndDt0eXBlKWAuIEluc3RlYWQsIHRoZXkmIzM5O3JlIGFkZGluZyB0aGVzZSB0d28gY3J1Y2lhbCBjaGVja3M6IGBpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKWAgYW5kIGBpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKWAuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IGZpeGluZyBhbiBpbmZlcmVuY2UgYnVnIGluIHRoZSB2ZXJpZmllci4KCkVzc2VudGlhbGx5LCB0aGV5IGFyZSB0aWdodGVuaW5nIHVwIHRoZSB2ZXJpZmllciYjMzk7cyBudWxsYWJpbGl0eSBpbmZlcmVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggcG9pbnRlciBjb21wYXJpc29ucyB3aGVyZSBvbmUgcG9pbnRlciBpcyBrbm93biB0byBiZSBub24tbnVsbCBhbmQgdGhlIG90aGVyIG1pZ2h0IGJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBiZWNhdXNlIGluY29ycmVjdCBudWxsYWJpbGl0eSBpbmZlcmVuY2UgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHNlY3VyaXR5IGlzc3Vlcywgb3IgbW9yZSBzaW1wbHksIGluY29ycmVjdCB2ZXJpZmllciBmYWlsdXJlcyAob3Igc3VjY2VzcykuCgpGaW5hbGx5LCB0aGVyZSBpcyBhIG5ldyB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY2AsIHdoaWNoIGxpa2VseSBkZW1vbnN0cmF0ZXMgdGhlIGJ1ZyBhbmQgdmVyaWZpZXMgdGhlIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHRlc3QgdG8gZnVsbHkgZ3Jhc3AgdGhlIGlzc3VlIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wcmVoZW5zaXZlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiB0aGUgZGlyZWN0b3J5LgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIG5vdzsgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgY2hlY2tfY29uZF9qbXBfb3BgIGFuZCBgcmVnX25vdF9udWxsYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19jb25kX2ptcF9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxOiAqIGJyYW5jaC4gU2VlIGNoZWNrX2NvbmRfam1wX29wKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODQ5PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjkwMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjkwNDpzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDUtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MjEyPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI5OTpcdFx0cmV0dXJuIGNoZWNrX2NvbmRfam1wX29wKGVudiwgaW5zbiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJQRiBWZXJpZmllcjogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgd2hpY2ggaXMgYSBrZXJuZWwgY29tcG9uZW50LCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIGl0cyByZWFjaGFiaWxpdHkgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGlkZW50aWZ5aW5nIHNvbWUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgdGhvdWdodCBgY2hlY2tfY29uZF9qbXBfb3BgIG1pZ2h0IGJlIGEgZ29vZCBvbmUsIGJ1dCB3YWl0Li4uIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBmdXp6aW5nLiBUaGUgc2FtZSBnb2VzIGZvciBgZG9fY2hlY2tfaW5zbmAuIEJvdGggYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwuIEFscmlnaHQsIG5ldyBwbGFuOiBJIG5lZWQgdG8gZmluZCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaW50byB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0IGNhbiB0cmlnZ2VyIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjY0Mj1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjY1My0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI2NTQ6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjU1LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDg9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwMjEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwMjI6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwMjMtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA0NDU9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDc2Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDc3LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1NDQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1NDU6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTQ2LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTc4PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MzogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5NC0gKiBvbmNlIHRoZSBwcm9ncmFtJiMzOTtzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAwMT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMTg6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMTktXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMzItXHQvKiAmIzM5O3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JiMzOTsgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBzbWFsbCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEzMzpcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEzNC1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI0My1cdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyNDQ6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI2My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTI2NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI2NS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEJQRiBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gR29vZCwgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgYGJwZl9jaGVja2AgaXMgZGVjbGFyZWQuIElzIGl0IGV4cG9ydGVkPyBPciBpcyBpdCBzdGF0aWM/IEFoLCBhbHJpZ2h0LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBpbnQgYnBmX2NoZWNrKC4uLilgLiBOb3Qgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdmlzaWJsZSBleHRlcm5hbGx5LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4geWVwLCB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBkZWZpbmVkIGFzIGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O2xsIGJlIHVzZWZ1bCBsYXRlciBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZS4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIEJQRiBjb25maWd1cmF0aW9uIGlzIGNvbnRyb2xsZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBsaWtlbHkgc291cmNlOiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgY2VudHJhbCBodWIgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgaW4gYEtjb25maWdgLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGZvciByZWxhdGVkIGBLY29uZmlnYCBmaWxlcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGtlcm5lbCB0cmVlOyB0aGVyZSBtaWdodCBiZSBuZXN0ZWQgY29uZmlndXJhdGlvbnMgb3IgaW5jbHVkZXMgdG8gb3RoZXIgcmVsZXZhbnQgY29uZmlnIGZpbGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGBjaGVja19jb25kX2ptcF9vcGAgYW5kIGByZWdfbm90X251bGxgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBsaWtlbHkgdHdlYWtpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGFyb3VuZCBjb25kaXRpb25hbCBqdW1wcyBhbmQgbnVsbCByZWdpc3RlciBjaGVja3MsIHdoaWNoIGlzIGEgZmFpcmx5IGNvbW1vbiBhcmVhIGZvciBCUEYgc2VjdXJpdHkgaGFyZGVuaW5nIG9yIGJ1ZyBmaXhlcy4gTXkgcHJpbWFyeSBhcmVhIG9mIGZvY3VzIHNob3VsZCBiZSB0aGUgYGJwZl9jaGVja2Agc3ltYm9scyB3aXRoaW4gdGhpcyBjb250ZXh0LgoKQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY2hhbmdlLiBUaGUgdGVzdCBzdWl0ZSBoaW50cyBhdCB0aGUgdXNlIG9mIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCBhbmQgYEJQRl9NQVBfVFlQRV9IQVNIYC4gQ29uc2lkZXJpbmcgYFhTS01BUGAgaXMgc3Ryb25nbHkgYXNzb2NpYXRlZCB3aXRoIEFGX1hEUCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhbHNvIGEgZGVwZW5kZW5jeSBvciByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXG5uZXQveGRwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQveGRwL0tjb25maWctOS1cbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xubmV0L3hkcC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBYRFAgU29ja2V0IEludGVncmF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB3aXRoaW4gdGhlIGByZWdfbm90X251bGxgIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBgUFRSX1RPX1hEUF9TT0NLYCBpcyBiZWluZyBtb2RpZmllZCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN0cm9uZyBsaW5rIHRvIGBYRFBfU09DS0VUU2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHZlcmlmaWVyIHdvdWxkIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBzcGVjaWZpYyBwb2ludGVyIHR5cGVzIHdoZW4gZGVhbGluZyB3aXRoIFhEUCBzb2NrZXRzLiBDb25zZXF1ZW50bHksIGFkZGluZyBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjb3Vyc2Ugb2YgYWN0aW9uIGhlcmUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHRoaW5nIHRvIGRvIHRvIGdldCB0aGluZ3Mgd29ya2luZyByaWdodCwgYXNzdW1pbmcgdGhlIHVzZXIgaGFzIGVuYWJsZWQgWERQX1NPQ0tFVFMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBQVFJfVE9fWERQX1NPQ0tgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiB2ZXJpZmllciBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoYXQgcG9pbnRlciB0eXBlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFJfVE9fWERQX1NPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0Nz1zdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU3LVx0XHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1ODpcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTktXHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU1PXN0YXRpYyB2b2lkIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjktXHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3MDpcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzEtXHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUCB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDAwPXN0YXRpYyBpbnQgY2hlY2tfc29ja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDIyLVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDIzOlx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAyNC1cdFx0dmFsaWQgPSBicGZfeGRwX3NvY2tfaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgXHUwMDI2aW5mbyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzQ9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNzgtXHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNzk6XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MjgwLVx0XHRwb2ludGVyX2Rlc2MgPSBcJiMzNDt4ZHBfc29jayBcJiMzNDs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIHNvY2tfdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNjYtXHRcdFBUUl9UT19UQ1BfU09DSyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTY3Olx0XHRQVFJfVE9fWERQX1NPQ0ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE2OC1cdH0sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE3Ni1cdFx0UFRSX1RPX1RDUF9TT0NLLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgxNzc6XHRcdFBUUl9UT19YRFBfU09DSyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTc4LVx0XHRQVFJfVE9fQlRGX0lELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk2MT1zdGF0aWMgYm9vbCByZWdfdHlwZV9taXNtYXRjaF9vayhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2Ny1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4Olx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjktXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWERQIGFuZCBlQlBGIE1hcCBUeXBlcyoqCgpSaWdodCwgc28gdGhpcyB0ZXN0IGlzIGxldmVyYWdpbmcgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgZ2l2ZXMgdXMgYSBgUFRSX1RPX1hEUF9TT0NLYCByZXR1cm4gdmFsdWUuIE9rYXksIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHJlbGV2YW5jZSBvZiBgWERQX1NPQ0tFVFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBYRFAgYW5kIHRyeWluZyB0byBpbnRlZ3JhdGUgaXQgd2l0aCBzb2NrZXRzIHNvbWVob3csIHByb2JhYmx5IHRvIGltcGxlbWVudCB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBvdmVyIFhEUC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBqb2cgbXkgbWVtb3J5IGFuZCBzZWUgaG93IGBQVFJfVE9fQlVGYCBmaXRzIGludG8gYWxsIHRoaXMuIEkgdGhpbmsgaXQgaXMgdXNlZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZSBhbmQgbWlnaHQgZXhwbGFpbiBob3cgZGF0YSBpcyB0cmFuc21pdHRlZCBpbiBYRFAgb3IgaW4gZ2VuZXJhbCBlQlBGIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgcHJvZ3JhbW1hYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFJfVE9fQlVGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDc9c3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OC1cdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk6XHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2MC1cdFx0dHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY0MTY9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYwMC1cdFx0XHRcdFx0ICAgICAgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MDE6XHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjAyLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzAzNj1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzUtXHRcdFx0XHRcdCAgICAgICB6ZXJvX3NpemVfYWxsb3dlZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzA3NjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MDc3LVx0XHRpZiAodHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cdTAwM2V0eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBtZW1fdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTMtXHRcdFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk0Olx0XHRQVFJfVE9fQlVGLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTUtXHRcdFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUxMj1zdGF0aWMgaW50IF9fY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU1LVx0Y2FzZSBQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUY6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU1NjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTU3Olx0Y2FzZSBQVFJfVE9fQlVGIHwgTUVNX1JET05MWTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU4LVx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYwPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyNy1cdGNhc2UgUFRSX1RPX01FTTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYyODpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyOS1cdGNhc2UgUFRSX1RPX0ZVTkM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gYFBUUl9UT19CVUZgIGFwcGVhcnMgdG8gYmUgYSBjb21tb24gYnVmZmVyIHBvaW50ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBsYXJnZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGNoZWNrX2NvbmRfam1wX29wYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgZG9fY2hlY2tfaW5zbmAuIGBkb19jaGVja19pbnNuYCBpcyB0aGVuIGNhbGxlZCBieSBgZG9fY2hlY2tgLCBhbmQgYGRvX2NoZWNrYCBnZXRzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gUmlnaHQsIHNvIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHZlcmlmaWNhdGlvbiBsb2dpYy4gSXQgbWFrZXMgc2Vuc2UsIHRoYXQgaXMgdGhlIEJQRiB2ZXJpZmllciBlbnRyeS4KCkJ1dCwgYXJlIHRoZXJlICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcuIEl0JiMzOTtzIGJlc3QgcHJhY3RpY2UgdG8gcnVsZSBvdXQgb3RoZXIgcG9zc2libGUgYWNjZXNzIHBvaW50cywgc28gSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJwZl9jaGVja2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MTc9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEzMi1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjM0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzY3Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc2OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTEzLVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTExNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM5OS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NDAwOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDY4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDcwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ4Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0ODc6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MTg9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUyNzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzExLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTMtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMjMtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzI0Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEJQRiB2ZXJpZmllciB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBlbnRyeSBwb2ludC4gSXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLCBhbmQgaW50ZXJuYWxseSBpdCBjYWxscyBgYnBmX2NoZWNrYC4gQWhhLCBgYnBmX2NoZWNrYCEgVGhhdCYjMzk7cyBpdCwgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBicGZfY2hlY2tgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wuIExvb2tpbmcgYmFjaywgYGJwZl9jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfbG9hZGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAgLSB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBgYnBmX2NoZWNrYCBpcyBkZWZpbml0ZWx5IG15IHByaW1hcnkgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIGlmIGBicGZfY2hlY2tgIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUuIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCYjMzk7cyBub3QgbWFya2VkIGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgaXRzIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNvLCBgYnBmX2NoZWNrYCBpcyBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2wgdG8gdXNlIQoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIFhEUCBzb2NrZXRzIGJlY2F1c2UgdGhlIHRlc3QgY29kZSB1c2VzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYC4gRG8gSSBuZWVkIGBYRFBfU09DS0VUU2AgdG8gdXNlIGBCUEZfTUFQX1RZUEVfWFNLTUFQYD8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIGlzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgZW5hYmxpbmcgYFhEUF9TT0NLRVRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX1hTS01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC00LT09PT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNi09PT09PT09PT09PT09PT09PT09XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0Ojk6ICAgLSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCB3YXMgaW50cm9kdWNlZCBpbiBrZXJuZWwgdmVyc2lvbiA0LjE4XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMC1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMi1jYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsgYW5kICYjMzk7Y3B1bWFwJiMzOTsuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9Njc9UmVkaXJlY3QgdGhlIHBhY2tldCB0byB0aGUgZW5kcG9pbnQgcmVmZXJlbmNlZCBieSBgYG1hcGBgIGF0IGluZGV4IGBga2V5YGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02OS1mb3Igc29ja2V0cyBhdHRhY2hlZCB0byBhIG5ldGRldiYjMzk7cyBxdWV1ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9MTM1PUtlcm5lbFxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEzNy1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjEzODpUaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGNhbGxlZFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE0My1cdHN0cnVjdCB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNDQ6XHRcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE0NS1cdFx0X190eXBlKGtleSwgX191MzIpO1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdD0xMj1YRFBfUkVESVJFQ1Qgd29ya3Mgd2l0aCB0aGUgZm9sbG93aW5nIG1hcCB0eXBlczpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3QtMTYtLSBgYEJQRl9NQVBfVFlQRV9DUFVNQVBgYFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0OjE3Oi0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGBcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD03MT1Ib3cgaXMgdGhlbiBwYWNrZXRzIGRpc3RyaWJ1dGVkIGZyb20gYW4gWERQIHByb2dyYW0gdG8gdGhlIFhTS3M/IFRoZXJlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC03My11c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNhbiBwbGFjZSBhbiBYU0sgYXQgYW4gYXJiaXRyYXJ5IHBsYWNlIGluIHRoaXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjIxLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjIyOlhTS01BUCAvIEJQRl9NQVBfVFlQRV9YU0tNQVBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjU6T24gWERQIHNpZGUgdGhlcmUgaXMgYSBCUEYgbWFwIHR5cGUgQlBGX01BUF9UWVBFX1hTS01BUCAoWFNLTUFQKSB0aGF0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjgyPXJvdW5kLXJvYmluIGV4YW1wbGUgb2YgZGlzdHJpYnV0aW5nIHBhY2tldHMgaXMgc2hvd24gYmVsb3c6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjkxLSAgIHN0cnVjdCB7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyOTI6ICAgICAgIF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE3PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE5OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIwLSNlbmRpZlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cdEJQRl9NQVBfVFlQRV9DUFVNQVAsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTAxODpcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cdEJQRl9NQVBfVFlQRV9TT0NLSEFTSCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cdGNhc2UgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTUyNTpcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1MjYtXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU1PXN0YXRpYyB2b2lkIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgtXHRcdFx0cmVnLVx1MDAzZW1hcF91aWQgPSByZWctXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTpcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwLVx0XHRyZWctXHUwMDNldHlwZSA9IFBUUl9UT19YRFBfU09DSyB8IG1heWJlX251bGw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjU9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwODQtXHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwODU6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA4Ni1cdFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjAyLVx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9DUFVNQVAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTIwMzpcdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDQtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjgzPWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY4OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ2ODk6XHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2OTAtXHRcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDY5Nz1pbnQgeGRwX2RvX3JlZGlyZWN0X2ZyYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDMtXG5uZXQvY29yZS9maWx0ZXIuYzo0NzA0Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYy00NzA1LVx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ3MTE9c3RhdGljIGludCB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ1LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDY6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5uZXQvY29yZS9maWx0ZXIuYy00NzQ3LVx0XHRlcnIgPSB4c2tfZ2VuZXJpY19yY3YoZndkLCB4ZHApO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cdEJQRl9NQVBfVFlQRV9DUFVNQVAsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTAxODpcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cdEJQRl9NQVBfVFlQRV9TT0NLSEFTSCxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4MS1cdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVx0XHRcdD0gXCYjMzQ7Y3B1bWFwXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XHRbQlBGX01BUF9UWVBFX1hTS01BUF1cdFx0XHQ9IFwmIzM0O3hza21hcFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzLVx0W0JQRl9NQVBfVFlQRV9TT0NLSEFTSF1cdFx0XHQ9IFwmIzM0O3NvY2toYXNoXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjctXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjU0Njg6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXHRjYXNlIEJQRl9NQVBfVFlQRV9TT0NLTUFQOlxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc1LVx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6Mzc2Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS0hBU0g6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jOjQ3NjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9FTlRSSUVTKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy03MDMtXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jOjcwNDpcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9YU0tNQVAsIGNoZWNrX3hza21hcCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tIQVNILCBjaGVja19zb2NraGFzaCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmM6MTE6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM6MzA6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jOjk6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXHRfX3VpbnQobWF4X2VudHJpZXMsIDI1Nik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVx0X191aW50KG1heF9lbnRyaWVzLCA0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jOjEyOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMTEzNS1cdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYzoxMTM2Olx0XHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jLTExMzctXHRcdFx0XHRcdHNpemVvZihpbnQpLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjcKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSB0ZXN0IHJlbGllcyBvbiBgQlBGX01BUF9UWVBFX1hTS01BUGAsIHdoaWNoIGlzIGRlZmluZWQgb25seSBpZiBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4sIHNvIHRvIHJ1biB0aGlzIHRlc3QsIEkgYWJzb2x1dGVseSBuZWVkIHRvIGFkZCBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gQWxzbywgSSBrbm93IEkmIzM5O2xsIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgLCBvZiBjb3Vyc2UuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYGNoZWNrX2NvbmRfam1wX29wYCBmdW5jdGlvbi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHdheSBpdCBpbmZlcnMgcG9pbnRlciBudWxsYWJpbGl0eSB3aXRoaW4gY29uZGl0aW9uYWwganVtcHMuIEl0JiMzOTtzIGFsc28gdXBkYXRpbmcgYHJlZ19ub3RfbnVsbGAgdG8gYWNjb3VudCBmb3IgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB0eXBlcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgcGlja2VkIGBicGZfY2hlY2tgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgYXJlIGludGVybmFsIGFuZCBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIG91dC4gWWVwLCBgYnBmX2NoZWNrYCBpdCBpcywgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBjaG9pY2UuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlnIG5hbWVzLiBZZXMsIGBYRFBfU09DS0VUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L3hkcC9LY29uZmlnYCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEV2ZXJ5dGhpbmcgYWxpZ25zLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGluZmVycmluZyBudWxsYWJpbGl0eSBvZiBwb2ludGVycyBpbiBjb25kaXRpb25hbCBqdW1wIG9wZXJhdGlvbnMgKGNoZWNrX2NvbmRfam1wX29wKS4gSXQgYWxzbyB1cGRhdGVzIHJlZ19ub3RfbnVsbCB0byBpbmNsdWRlIFBUUl9UT19YRFBfU09DSyBhbmQgUFRSX1RPX0JVRi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbiYjMzk7dCBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsIChlLmcuLCBhbiB1bnRydXN0ZWQgcG9pbnRlcikuIFRoaXMgY291bGQgbGVhZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBieSB0aGUgQlBGIHByb2dyYW0uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIChPT0IsIFVBRiwgTlVMTCBkZXJlZikgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFkZGluZykgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXQKIAl0eXBlID0gYmFzZV90eXBlKHR5cGUpOwogCXJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHwKIAkJdHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHwKJiM0MzsJCXR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8CiYjNDM7CQl0eXBlID09IFBUUl9UT19CVUYgfHwKIAkJdHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8CiAJCXR5cGUgPT0gUFRSX1RPX01BUF9LRVkgfHwKIAkJdHlwZSA9PSBQVFJfVE9fU09DS19DT01NT04gfHwKQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKi8KIAlpZiAoIWlzX2ptcDMyICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7CiAJICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgJmFtcDsmYW1wOyBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpICZhbXA7JmFtcDsKLQkgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKIAkgICAgYmFzZV90eXBlKHNyY19yZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgJmFtcDsmYW1wOwogCSAgICBiYXNlX3R5cGUoZHN0X3JlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX0JURl9JRCkgewogCQllcV9icmFuY2hfcmVncyA9IE5VTEw7CkBAIC0xNzEwMSw5ICYjNDM7MTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGVxX2JyYW5jaF9yZWdzKSB7Ci0JCQlpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSkKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgZHN0ICE9IE5VTEwgPSZndDsgc3JjICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O3NyY19yZWddKTsKLQkJCWVsc2UKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgc3JjICE9IE5VTEwgPSZndDsgZHN0ICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O2RzdF9yZWddKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCAzZDFlOGRlNDM5MGMyLi5iNDEyYTU0MmVmNzZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zLDcgJiM0MzszLDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2tmdW5jcy5oJiMzNDsKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7CkBAIC0xMiw2ICYjNDM7MTQsMTMgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIGludCk7CiB9IG1hcF94c2ttYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIGludCk7CiYjNDM7fSBtYXBfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06CiAgKgogICogICByNiA9IHNrYi0mZ3Q7c2s7CkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKQogICAgICAgICA6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kCiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC4KJiM0MzsgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX21zZygmIzM0OyZndDsmZ3Q7Jmd0OyAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CS8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqLwkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwlyMiA9IDA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX3Jkb25seV9jYXN0XTsJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDtrZXkpOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CS8qCQkJCQkJXAomIzQzOwkgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJiMzOTt0IGJlIG51bGwJXAomIzQzOwkgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuCQlcCiYjNDM7CSAqLwkJCQkJCVwKJiM0MzsJaWYgcjYgIT0gcjAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksCiYjNDM7CSAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksCiYjNDM7CSAgX19pbW1fYWRkcihtYXBfaGFzaCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMQoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiAxMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBgY2hlY2tfY29uZF9qbXBfb3AoKWAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMsIHRoZSBvcmlnaW5hbCBsb2dpYyBpbmNvcnJlY3RseSBpbmZlcnJlZCBwb2ludGVyIG5vbi1udWxsbmVzcyBpbiBjZXJ0YWluIGNvbXBhcmlzb24gc2NlbmFyaW9zLiBJdCBzZWVtcyB0aGUgdmVyaWZpZXIgd2FzIG1ha2luZyBhbiBhc3N1bXB0aW9uOiBpZiB5b3UgY29tcGFyZSB0d28gcG9pbnRlcnMgYW5kIG9uZSAqbWlnaHQqIGJlIG51bGwsIGJ1dCB0aGUgb3RoZXIgKmlzbiYjMzk7dCosIGFuZCB0aGV5IGFyZSBlcXVhbCwgdGhlbiB0aGUgbnVsbGFibGUgcG9pbnRlciBiZWNvbWVzIG5vbi1udWxsLiBUaGUgcHJvYmxlbSBpcywgdGhpcyBpbmZlcmVuY2Ugd2FzIGZsYXdlZCwgYmVjYXVzZSB0aGUgc2Vjb25kIHBvaW50ZXIgYWxzbyBtaWdodCBiZSBudWxsLCBidXQgbm90ICpndWFyYW50ZWVkKiB0byBiZSBub24tbnVsbC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBjaGVja2VkIGZvciB0aGUgKmRpZmZlcmVuY2UqIGluIHRoZSBgdHlwZV9tYXlfYmVfbnVsbCgpYCByZXN1bHQsIGFuZCBtaXNzZWQgY2FzZXMgd2hlcmUgYm90aCBjb3VsZCBiZSBudWxsLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBCUEYgcHJvZ3JhbSBwb3RlbnRpYWxseSBkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyLCBvciBhY2Nlc3NpbmcgbWVtb3J5IG91dC1vZi1ib3VuZHMsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGhhcyBpbmNvcnJlY3RseSBhc3Nlc3NlZCBzYWZldHkuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nLCB3aXRoIGByZWdfbm90X251bGwoZW52LCBkc3RfcmVnKWAsIGlmIHRoZSAqb3RoZXIqIHBvaW50ZXIgaXMgYWN0dWFsbHkgbm9uLW51bGwgYmVmb3JlIG1ha2luZyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaXJzdCBwb2ludGVyIGlzIGFsc28gbm9uLW51bGwuIFRoaXMgaXMgYSBjcnVjaWFsIGZpeCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgYW5kIGVuc3VyZSBwcm9wZXIgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyBLTVNBTiBuZWVkZWQgaGVyZT8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBidWcgaXMgYWJvdXQgKnBvaW50ZXIgbnVsbGFiaWxpdHkqLCB3aGljaCBsZWFkcyB0byBtZW1vcnkgc2FmZXR5IGlzc3VlczogcG90ZW50aWFsbHksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIHZlcmlmaWVyIGluY29ycmVjdGx5IG1hcmtzIGEgcG9pbnRlciBhcyBzYWZlLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZSB2ZXJpZmllciYjMzk7cyBtaXNpbnRlcnByZXRhdGlvbiBvZiB0aGUgQlBGIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcywgb3IgaG93IHRoZSB2ZXJpZmllciAqaGFuZGxlcyogcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGZvY3VzZWQgZW50aXJlbHkgb24gdHJhY2tpbmcgcG9pbnRlciBub24tbnVsbGl0eS4gS01TQU4gaXMgZ3JlYXQsIGJ1dCBpdCYjMzk7cyBwdXJwb3NlIGlzIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBub3QgdGhlIGlzc3VlIGhlcmUuIEkgYW0gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTiA9IGZhbHNlYCBoZXJlIGlzIGNvcnJlY3QuIFRoZSByZWFzb25pbmcgYmVpbmcgdGhhdCwgYmVjYXVzZSB0aGUgaXNzdWUgaXMgb25lIHRoYXQgY2F1c2VzIGlzc3VlcywgZS5nLiBhY2Nlc3NpbmcgYSBudWxsIHBvaW50ZXIsIHRoYXQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMC40ODU5MTA1MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzNTAzMzc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbid0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMC40ODU5MTU3NTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTMyODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzZGViNmRkY2Y1ZWQ3YjE5NDM4MGRhZjY2YWRmMTljNzI0NThlZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTAzNmFlMjBiZjZiOS4uODk3ZWM0YjM4ZGVhYiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzU1LDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XFxuIFxcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XFxuIFxcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcXG4gXFx0XFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcXG4rXFx0XFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcXG4rXFx0XFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XFxuIFxcdFxcdHR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSB8fFxcbiBcXHRcXHR0eXBlID09IFBUUl9UT19NQVBfS0VZIHx8XFxuIFxcdFxcdHR5cGUgPT0gUFRSX1RPX1NPQ0tfQ09NTU9OIHx8XFxuQEAgLTE3MDg1LDcgKzE3MDg3LDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc19qbXAzMiBcXHUwMDI2XFx1MDAyNiBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgYmFzZV90eXBlKHNyY19yZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGJhc2VfdHlwZShkc3RfcmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEKSB7XFxuIFxcdFxcdGVxX2JyYW5jaF9yZWdzID0gTlVMTDtcXG5AQCAtMTcxMDEsOSArMTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXFfYnJhbmNoX3JlZ3MpIHtcXG4tXFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxuK1xcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgZHN0ICE9IE5VTEwgPVxcdTAwM2Ugc3JjICE9IE5VTEwgKi9cXG4rXFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxuIFxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10pO1xcbi1cXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgc3JjICE9IE5VTEwgPVxcdTAwM2UgZHN0ICE9IE5VTEwgKi9cXG4rXFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkpXFxuIFxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuaW5kZXggM2QxZThkZTQzOTBjMi4uYjQxMmE1NDJlZjc2ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcXG5AQCAtMyw3ICszLDkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9rZnVuY3MuaFxcXCJcXG4gXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5AQCAtMTIsNiArMTQsMTMgQEAgc3RydWN0IHtcXG4gXFx0X190eXBlKHZhbHVlLCBpbnQpO1xcbiB9IG1hcF94c2ttYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBpbnQpO1xcbit9IG1hcF9oYXNoIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06XFxuICAqXFxuICAqICAgcjYgPSBza2ItXFx1MDAzZXNrO1xcbkBAIC0yNjQsNCArMjczLDQ3IEBAIF9fbmFrZWQgdm9pZCBqbmVfcmVnX3JlZ19udWxsX2NoZWNrKHZvaWQpXFxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSBjb21wYXJpc29uIGJldHdlZW4gUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVEIGFuZFxcbisgKiBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgc2hvdWxkIG5vdCBpbmZlciB0aGF0IG1hcCBwb2ludGVyIGlzIG5vdCBudWxsLlxcbisgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXFxcIilcXG4rX19tc2coXFxcIlxcdTAwM2VcXHUwMDNlXFx1MDAzZSAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCArMClcXFwiKVxcbitfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqL1xcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcXHUwMDI2a2V5KTsgKi9cXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVttYXBfaGFzaF0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyICs9IC04O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1xcdFxcdFxcdFxcXFxcXG4rXFx0LypcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAqIGJ1Z2d5IHZlcmlmaWVyIGFzc3VtZWQgdGhhdCByNiBjYW4ndCBiZSBudWxsXFx0XFxcXFxcbitcXHQgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuXFx0XFx0XFxcXFxcbitcXHQgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHI2ICE9IHIwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHIwICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXFxuK1xcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXFxuK1xcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rdm9pZCBrZnVuY19yb290KHZvaWQpXFxuK3tcXG4rXFx0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xcbit9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MjEuMDUyMDUxODA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ2MzExNzIxMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxM2RlYjZkZGNmNWVkN2IxOTQzODBkYWY2NmFkZjE5YzcyNDU4ZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1NSw2ICszNTUsOCBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbitcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbitcdFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfS0VZIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1NPQ0tfQ09NTU9OIHx8XG5AQCAtMTcwODUsNyArMTcwODcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKi9cbiBcdGlmICghaXNfam1wMzIgXHUwMDI2XHUwMDI2IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmFzZV90eXBlKHNyY19yZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiYXNlX3R5cGUoZHN0X3JlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdGVxX2JyYW5jaF9yZWdzID0gTlVMTDtcbkBAIC0xNzEwMSw5ICsxNzEwMiwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGVxX2JyYW5jaF9yZWdzKSB7XG4tXHRcdFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbitcdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBkc3QgIT0gTlVMTCA9XHUwMDNlIHNyYyAhPSBOVUxMICovXG4rXHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSk7XG4tXHRcdFx0ZWxzZVxuK1x0XHRcdC8qIHNyYyA9PSBkc3QgXHUwMDI2XHUwMDI2IHNyYyAhPSBOVUxMID1cdTAwM2UgZHN0ICE9IE5VTEwgKi9cbitcdFx0XHRpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSlcbiBcdFx0XHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuaW5kZXggM2QxZThkZTQzOTBjMi4uYjQxMmE1NDJlZjc2ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5AQCAtMyw3ICszLDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImJwZl9rZnVuY3MuaFwiXG4gXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkBAIC0xMiw2ICsxNCwxMyBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBpbnQpO1xuIH0gbWFwX3hza21hcCBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBpbnQpO1xuK30gbWFwX2hhc2ggU0VDKFwiLm1hcHNcIik7XG4rXG4gLyogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbTpcbiAgKlxuICAqICAgcjYgPSBza2ItXHUwMDNlc2s7XG5AQCAtMjY0LDQgKzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKVxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kXG4rICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC5cbisgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuXG4rICovXG4rU0VDKFwicmF3X3RwXCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX21zZyhcIlx1MDAzZVx1MDAzZVx1MDAzZSAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCArMClcIilcbitfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9yZG9ubHlfY2FzdCgwLCAwKTsgKi9cdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjIgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbitcdC8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2a2V5KTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDA7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHQvKlx0XHRcdFx0XHRcdFxcXG4rXHQgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJ3QgYmUgbnVsbFx0XFxcbitcdCAqIGFuZCBtYXJrZWQgcjAgbm9uLW51bGwgYXMgd2VsbC5cdFx0XFxcbitcdCAqL1x0XHRcdFx0XHRcdFxcXG4rXHRpZiByNiAhPSByMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjAgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXG4rXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rdm9pZCBrZnVuY19yb290KHZvaWQpXG4re1xuK1x0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMS4wNTIwNTI5OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU2MTI0ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0J3MgZm9jdXNlZCBvbiBudWxsIHBvaW50ZXIgY2hlY2tzLCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGluIEJQRi4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBgcmVnX25vdF9udWxsYCBmdW5jdGlvbjsgaXTigJlzIG5vdyBnb2luZyB0byByZXR1cm4gYHRydWVgIGZvciBgUFRSX1RPX1hEUF9TT0NLYCBhbmQgYFBUUl9UT19CVUZgIHBvaW50ZXIgdHlwZXMsIGV4cGFuZGluZyBpdHMgc2NvcGUgYmV5b25kIHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyDigJMgcGFydGljdWxhcmx5IHRoZSBjb21wYXJpc29uIG9mIHBvaW50ZXJzIHdoZXJlIG9uZSAqbWlnaHQqIGJlIG51bGwsIGFuZCB0aGUgb3RoZXIgaXMgZGVmaW5pdGVseSBub3QuIFRoZSBsb2dpYyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYCBpcyBiZWluZyByZWZpbmVkLiBJdCBhcHBlYXJzIHRoZXnigJlyZSByZW1vdmluZyBhIGNvbmRpdGlvbjogYHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSlgLiBJbnN0ZWFkLCB0aGV5J3JlIGFkZGluZyB0aGVzZSB0d28gY3J1Y2lhbCBjaGVja3M6IGBpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlgIGFuZCBgaWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpYC4gVGhpcyBpcyBtYWtpbmcgbWUgdGhpbmsgdGhpcyBpcyBsaWtlbHkgZml4aW5nIGFuIGluZmVyZW5jZSBidWcgaW4gdGhlIHZlcmlmaWVyLlxuXG5Fc3NlbnRpYWxseSwgdGhleSBhcmUgdGlnaHRlbmluZyB1cCB0aGUgdmVyaWZpZXIncyBudWxsYWJpbGl0eSBpbmZlcmVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggcG9pbnRlciBjb21wYXJpc29ucyB3aGVyZSBvbmUgcG9pbnRlciBpcyBrbm93biB0byBiZSBub24tbnVsbCBhbmQgdGhlIG90aGVyIG1pZ2h0IGJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBiZWNhdXNlIGluY29ycmVjdCBudWxsYWJpbGl0eSBpbmZlcmVuY2UgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHNlY3VyaXR5IGlzc3Vlcywgb3IgbW9yZSBzaW1wbHksIGluY29ycmVjdCB2ZXJpZmllciBmYWlsdXJlcyAob3Igc3VjY2VzcykuXG5cbkZpbmFsbHksIHRoZXJlIGlzIGEgbmV3IHRlc3QgY2FzZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jYCwgd2hpY2ggbGlrZWx5IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGFuZCB2ZXJpZmllcyB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCB0ZXN0IHRvIGZ1bGx5IGdyYXNwIHRoZSBpc3N1ZSBhbmQgZW5zdXJlIHRoZSBmaXggaXMgY29tcHJlaGVuc2l2ZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiB0aGUgZGlyZWN0b3J5LlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgbm93OyBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyOC43MDgxODAyMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NTQxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfY29uZF9qbXBfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwLSAqIFBUUl9UT19NQVBfVkFMVUUgYW5kIHRoZSBzYW1lIHJlZ2lzdGVyIGNoYW5nZXMgc3RhdGUgdG8gQ09OU1RfSU1NIGluIHRoZSBmYWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE6ICogYnJhbmNoLiBTZWUgY2hlY2tfY29uZF9qbXBfb3AoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4NDk9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2OTA0OnN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyMTI9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Mjk4LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyOTk6XFx0XFx0cmV0dXJuIGNoZWNrX2NvbmRfam1wX29wKGVudiwgaW5zbiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA2OjI4Ljc1ODYzODg2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDYxNzIwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIFZlcmlmaWVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHdoaWNoIGlzIGEga2VybmVsIGNvbXBvbmVudCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBpdHMgcmVhY2hhYmlsaXR5IHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgaXQncyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGlkZW50aWZ5aW5nIHNvbWUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgdGhvdWdodCBgY2hlY2tfY29uZF9qbXBfb3BgIG1pZ2h0IGJlIGEgZ29vZCBvbmUsIGJ1dCB3YWl0Li4uIGl0J3Mgc3RhdGljLiBUaGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGRvX2NoZWNrX2luc25gLiBCb3RoIGFyZSBzdGF0aWMgYW5kIGludGVybmFsLiBBbHJpZ2h0LCBuZXcgcGxhbjogSSBuZWVkIHRvIGZpbmQgdGhlIG1haW4gZW50cnkgcG9pbnRzIGludG8gdGhlIEJQRiB2ZXJpZmllciBpdHNlbGYuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0IGNhbiB0cmlnZ2VyIGl0cyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzMuNTY0ODEzODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2Mzc3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MS0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjY0Mj1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjUzLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI2NTQ6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjY1NS0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDg9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDAyMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwMjI6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDIzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA0NDU9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0NzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDc2OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0NzctXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU0NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1NDU6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU0Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk3OD1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItLypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5OTM6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTk0LSAqIG9uY2UgdGhlIHByb2dyYW0ncyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAwMT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTExNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMTg6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTE5LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTMyLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEzMzpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTM0LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMjQzLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjQ0OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNjMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjY0OlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA2OjMzLjYxMzQ1ODUyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTAwMDcxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoLiBHb29kLCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyBgYnBmX2NoZWNrYCBpcyBkZWNsYXJlZC4gSXMgaXQgZXhwb3J0ZWQ/IE9yIGlzIGl0IHN0YXRpYz8gQWgsIGFscmlnaHQsIGl0J3MgZGVmaW5lZCBhcyBgaW50IGJwZl9jaGVjayguLi4pYC4gTm90IHN0YXRpYywgc28gaXQgc2hvdWxkIGJlIHZpc2libGUgZXh0ZXJuYWxseS4gVGhhdCdzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gTGV0J3Mgc2VlLi4uIHllcCwgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZGVmaW5lZCBhcyBgQlBGX1NZU0NBTExgLiBUaGF0J2xsIGJlIHVzZWZ1bCBsYXRlciBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZS4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzcuOTAzNDY4MzE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTkxMTAxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzguMTMzMzg2NzM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NzY4OTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgQlBGIGNvbmZpZ3VyYXRpb24gaXMgY29udHJvbGxlZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGxpa2VseSBzb3VyY2U6IGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgaHViIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkga25vdyB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJZiBpdCdzIG5vdCBkaXJlY3RseSBpbiBgS2NvbmZpZ2AsIEknbGwgc3RhcnQgbG9va2luZyBmb3IgcmVsYXRlZCBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwgdHJlZTsgdGhlcmUgbWlnaHQgYmUgbmVzdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGluY2x1ZGVzIHRvIG90aGVyIHJlbGV2YW50IGNvbmZpZyBmaWxlcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDcuODEwMjc5NTY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3OTUzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODowOS42MjgyNDIwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM1MDA1NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGxpa2VseSB0d2Vha2luZyB0aGUgdmVyaWZpZXIncyBsb2dpYyBhcm91bmQgY29uZGl0aW9uYWwganVtcHMgYW5kIG51bGwgcmVnaXN0ZXIgY2hlY2tzLCB3aGljaCBpcyBhIGZhaXJseSBjb21tb24gYXJlYSBmb3IgQlBGIHNlY3VyaXR5IGhhcmRlbmluZyBvciBidWcgZml4ZXMuIE15IHByaW1hcnkgYXJlYSBvZiBmb2N1cyBzaG91bGQgYmUgdGhlIGBicGZfY2hlY2tgIHN5bWJvbHMgd2l0aGluIHRoaXMgY29udGV4dC5cblxuQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY2hhbmdlLiBUaGUgdGVzdCBzdWl0ZSBoaW50cyBhdCB0aGUgdXNlIG9mIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCBhbmQgYEJQRl9NQVBfVFlQRV9IQVNIYC4gQ29uc2lkZXJpbmcgYFhTS01BUGAgaXMgc3Ryb25nbHkgYXNzb2NpYXRlZCB3aXRoIEFGX1hEUCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhbHNvIGEgZGVwZW5kZW5jeSBvciByZWxldmFudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE1LjM2MzI1MDU5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Nzc3NjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE3LjI1MTAzMjc0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEzNTM5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gWERQIFNvY2tldCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB3aXRoaW4gdGhlIGByZWdfbm90X251bGxgIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBgUFRSX1RPX1hEUF9TT0NLYCBpcyBiZWluZyBtb2RpZmllZCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN0cm9uZyBsaW5rIHRvIGBYRFBfU09DS0VUU2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHZlcmlmaWVyIHdvdWxkIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBzcGVjaWZpYyBwb2ludGVyIHR5cGVzIHdoZW4gZGVhbGluZyB3aXRoIFhEUCBzb2NrZXRzLiBDb25zZXF1ZW50bHksIGFkZGluZyBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjb3Vyc2Ugb2YgYWN0aW9uIGhlcmUuIEl0J3MgdGhlIGxvZ2ljYWwgdGhpbmcgdG8gZG8gdG8gZ2V0IHRoaW5ncyB3b3JraW5nIHJpZ2h0LCBhc3N1bWluZyB0aGUgdXNlciBoYXMgZW5hYmxlZCBYRFBfU09DS0VUUy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYFBUUl9UT19YRFBfU09DS2Agd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgdmVyaWZpZXIgY29kZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGF0IHBvaW50ZXIgdHlwZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjIxLjA2NDU3NDczOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRSX1RPX1hEUF9TT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ3PXN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1Ny1cXHRcXHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg6XFx0XFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5LVxcdFxcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTU9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5LVxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzA6XFx0XFx0cmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MS1cXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVAgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDAwPXN0YXRpYyBpbnQgY2hlY2tfc29ja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMjItXFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMjM6XFx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMjQtXFx0XFx0dmFsaWQgPSBicGZfeGRwX3NvY2tfaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgXFx1MDAyNmluZm8pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzQ9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI3OC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI3OTpcXHRjYXNlIFBUUl9UT19YRFBfU09DSzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI4MC1cXHRcXHRwb2ludGVyX2Rlc2MgPSBcXFwieGRwX3NvY2sgXFxcIjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBzb2NrX3R5cGVzID0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNjYtXFx0XFx0UFRSX1RPX1RDUF9TT0NLLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTY3OlxcdFxcdFBUUl9UT19YRFBfU09DSyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE2OC1cXHR9LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTc2LVxcdFxcdFBUUl9UT19UQ1BfU09DSyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODE3NzpcXHRcXHRQVFJfVE9fWERQX1NPQ0ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNzgtXFx0XFx0UFRSX1RPX0JURl9JRCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk2MT1zdGF0aWMgYm9vbCByZWdfdHlwZV9taXNtYXRjaF9vayhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY3LVxcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk2ODpcXHRjYXNlIFBUUl9UT19YRFBfU09DSzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjktXFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyMS4xMTI2Mjk0OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNDE1NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFhEUCBhbmQgZUJQRiBNYXAgVHlwZXMqKlxuXG5SaWdodCwgc28gdGhpcyB0ZXN0IGlzIGxldmVyYWdpbmcgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgZ2l2ZXMgdXMgYSBgUFRSX1RPX1hEUF9TT0NLYCByZXR1cm4gdmFsdWUuIE9rYXksIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHJlbGV2YW5jZSBvZiBgWERQX1NPQ0tFVFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIFhEUCBhbmQgdHJ5aW5nIHRvIGludGVncmF0ZSBpdCB3aXRoIHNvY2tldHMgc29tZWhvdywgcHJvYmFibHkgdG8gaW1wbGVtZW50IHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIG92ZXIgWERQLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgam9nIG15IG1lbW9yeSBhbmQgc2VlIGhvdyBgUFRSX1RPX0JVRmAgZml0cyBpbnRvIGFsbCB0aGlzLiBJIHRoaW5rIGl0IGlzIHVzZWQgZm9yIGEgZGlmZmVyZW50IHB1cnBvc2UgYW5kIG1pZ2h0IGV4cGxhaW4gaG93IGRhdGEgaXMgdHJhbnNtaXR0ZWQgaW4gWERQIG9yIGluIGdlbmVyYWwgZUJQRiBmdW5jdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgcHJvZ3JhbW1hYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MjUuNzM2Nzg3NDU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM2NDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVFJfVE9fQlVGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ3PXN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OC1cXHRcXHR0eXBlID09IFBUUl9UT19YRFBfU09DSyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk6XFx0XFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2MC1cXHRcXHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDE2PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYwMC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MDE6XFx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MDItXFx0XFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwMzY9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzA3NjpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzctXFx0XFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgbWVtX3R5cGVzID0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTMtXFx0XFx0UFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk0OlxcdFxcdFBUUl9UT19CVUYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTUtXFx0XFx0UFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVELFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg1MTI9c3RhdGljIGludCBfX2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU1LVxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTU2OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU1NzpcXHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU4LVxcdGNhc2UgUFRSX1RPX0FSRU5BOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYwPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjI3LVxcdGNhc2UgUFRSX1RPX01FTTpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2Mjg6XFx0Y2FzZSBQVFJfVE9fQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyOS1cXHRjYXNlIFBUUl9UT19GVU5DOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyNS43ODQxNTcyNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NDYwMDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIGBQVFJfVE9fQlVGYCBhcHBlYXJzIHRvIGJlIGEgY29tbW9uIGJ1ZmZlciBwb2ludGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgbGFyZ2VyIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjaGVja19jb25kX2ptcF9vcGAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLiBgZG9fY2hlY2tfaW5zbmAgaXMgdGhlbiBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgYW5kIGBkb19jaGVja2AgZ2V0cyBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIFJpZ2h0LCBzbyBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyB2ZXJpZmljYXRpb24gbG9naWMuIEl0IG1ha2VzIHNlbnNlLCB0aGF0IGlzIHRoZSBCUEYgdmVyaWZpZXIgZW50cnkuXG5cbkJ1dCwgYXJlIHRoZXJlICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gSXQncyBiZXN0IHByYWN0aWNlIHRvIHJ1bGUgb3V0IG90aGVyIHBvc3NpYmxlIGFjY2VzcyBwb2ludHMsIHNvIEknbGwgZ28gZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJwZl9jaGVja2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODozMi45Mzg3NjEzMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjg3Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc2NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQwMDpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTE4PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mjc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzIuOTg5MDUxNjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjYyMDEyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIHdvcmtzLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBicGZfcHJvZ19sb2FkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYsIGFuZCBpbnRlcm5hbGx5IGl0IGNhbGxzIGBicGZfY2hlY2tgLiBBaGEsIGBicGZfY2hlY2tgISBUaGF0J3MgaXQsIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBicGZfY2hlY2tgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wuIExvb2tpbmcgYmFjaywgYGJwZl9jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfbG9hZGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAgLSB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBgYnBmX2NoZWNrYCBpcyBkZWZpbml0ZWx5IG15IHByaW1hcnkgZm9jdXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSBpZiBgYnBmX2NoZWNrYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBJJ2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCdzIG5vdCBtYXJrZWQgYHN0YXRpY2AsIHNvIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0IGFuZCBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTbywgYGJwZl9jaGVja2AgaXMgYSBwZXJmZWN0bHkgdmFsaWQgZm9jdXMgc3ltYm9sIHRvIHVzZSFcblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIFhEUCBzb2NrZXRzIGJlY2F1c2UgdGhlIHRlc3QgY29kZSB1c2VzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYC4gRG8gSSBuZWVkIGBYRFBfU09DS0VUU2AgdG8gdXNlIGBCUEZfTUFQX1RZUEVfWFNLTUFQYD8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIGlzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgZW5hYmxpbmcgYFhEUF9TT0NLRVRTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzguMjU1MjU3MDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3Nzg2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9YU0tNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTQtPT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEwLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAnZGV2bWFwJyBhbmQgJ2NwdW1hcCcuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD02Nz1SZWRpcmVjdCB0aGUgcGFja2V0IHRvIHRoZSBlbmRwb2ludCByZWZlcmVuY2VkIGJ5IGBgbWFwYGAgYXQgaW5kZXggYGBrZXlgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYncyBxdWV1ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzU9S2VybmVsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTM4OlRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTQzLVxcdHN0cnVjdCB7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0OlxcdFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXFx0XFx0X190eXBlKGtleSwgX191MzIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0PTEyPVhEUF9SRURJUkVDVCB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgbWFwIHR5cGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q6MTc6LSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYFxcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTcxPUhvdyBpcyB0aGVuIHBhY2tldHMgZGlzdHJpYnV0ZWQgZnJvbSBhbiBYRFAgcHJvZ3JhbSB0byB0aGUgWFNLcz8gVGhlcmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjI6WFNLTUFQIC8gQlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyNTpPbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yODI9cm91bmQtcm9iaW4gZXhhbXBsZSBvZiBkaXN0cmlidXRpbmcgcGFja2V0cyBpcyBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjI5MjogICAgICAgX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjAtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDE4OlxcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXFx0QlBGX01BUF9UWVBFX1NPQ0tIQVNILFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTI1OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTU9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4LVxcdFxcdFxcdHJlZy1cXHUwMDNlbWFwX3VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njk6XFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MC1cXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjU9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA4NC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA4NTpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwODYtXFx0XFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwMi1cXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkyMDM6XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwNC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mz1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY4OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg5OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2OTAtXFx0XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTc9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDcwNDpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYy00NzA1LVxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzExPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ1LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDY6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3NDctXFx0XFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDE3LVxcdEJQRl9NQVBfVFlQRV9DUFVNQVAsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XFx0QlBGX01BUF9UWVBFX1hTS01BUCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgxLVxcdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVxcdFxcdFxcdD0gXFxcImNwdW1hcFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XFx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXFx0XFx0XFx0PSBcXFwieHNrbWFwXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cXHRbQlBGX01BUF9UWVBFX1NPQ0tIQVNIXVxcdFxcdFxcdD0gXFxcInNvY2toYXNoXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTQ2Ny1cXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zNzUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVxcdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwMy1cXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XFx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgY2hlY2tfeHNrbWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVxcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXFx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVxcdF9fdWludChtYXhfZW50cmllcywgNCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM1LVxcdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcXHRcXHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVxcdFxcdFxcdFxcdFxcdHNpemVvZihpbnQpLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzkuOTUzMDQ4MTI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzA2Njk3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIHRlc3QgcmVsaWVzIG9uIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCwgd2hpY2ggaXMgZGVmaW5lZCBvbmx5IGlmIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBzbyB0byBydW4gdGhpcyB0ZXN0LCBJIGFic29sdXRlbHkgbmVlZCB0byBhZGQgYFhEUF9TT0NLRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gQWxzbywgSSBrbm93IEknbGwgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGUgQlBGIHZlcmlmaWVyJ3MgYGNoZWNrX2NvbmRfam1wX29wYCBmdW5jdGlvbi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHdheSBpdCBpbmZlcnMgcG9pbnRlciBudWxsYWJpbGl0eSB3aXRoaW4gY29uZGl0aW9uYWwganVtcHMuIEl0J3MgYWxzbyB1cGRhdGluZyBgcmVnX25vdF9udWxsYCB0byBhY2NvdW50IGZvciBgUFRSX1RPX1hEUF9TT0NLYCBhbmQgYFBUUl9UT19CVUZgIHR5cGVzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIEJQRiB2ZXJpZmllciBsb2dpYywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzdGVtIGNhbGwuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBJIGluaXRpYWxseSBwaWNrZWQgYGJwZl9jaGVja2AgYmVjYXVzZSBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgYXJlIGludGVybmFsIGFuZCBzdGF0aWMsIHNvIHRoZXkncmUgb3V0LiBZZXAsIGBicGZfY2hlY2tgIGl0IGlzLCB0aGF0J3MgdGhlIGNvcnJlY3QgY2hvaWNlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlnIG5hbWVzLiBZZXMsIGBYRFBfU09DS0VUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L3hkcC9LY29uZmlnYCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEV2ZXJ5dGhpbmcgYWxpZ25zLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzY3LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0Ny4yODM3MjA0MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA0OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjQ3LjM2Mzc3NzI4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NzI0NjE4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0Ny4zNjU1ODEwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU0NzA2NTM2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCAoZS5nLiwgYW4gdW50cnVzdGVkIHBvaW50ZXIpLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYnkgdGhlIEJQRiBwcm9ncmFtLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoT09CLCBVQUYsIE5VTEwgZGVyZWYpIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcpIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li44OTdlYzRiMzhkZWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTUsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRcbiBcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XG4gXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8XG4rXHRcdHR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8XG4rXHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fTUFQX0tFWSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19TT0NLX0NPTU1PTiB8fFxuQEAgLTE3MDg1LDcgKzE3MDg3LDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICovXG4gXHRpZiAoIWlzX2ptcDMyIFx1MDAyNlx1MDAyNiBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2XG4gXHQgICAgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSBcdTAwMjZcdTAwMjYgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGJhc2VfdHlwZShzcmNfcmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmFzZV90eXBlKGRzdF9yZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHRlcV9icmFuY2hfcmVncyA9IE5VTEw7XG5AQCAtMTcxMDEsOSArMTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGlmIChlcV9icmFuY2hfcmVncykge1xuLVx0XHRcdGlmICh0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgZHN0ICE9IE5VTEwgPVx1MDAzZSBzcmMgIT0gTlVMTCAqL1xuK1x0XHRcdGlmIChyZWdfbm90X251bGwoZW52LCBkc3RfcmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpKVxuIFx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10pO1xuLVx0XHRcdGVsc2VcbitcdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBzcmMgIT0gTlVMTCA9XHUwMDNlIGRzdCAhPSBOVUxMICovXG4rXHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IDNkMWU4ZGU0MzkwYzIuLmI0MTJhNTQyZWY3NmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMsNyArMyw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5AQCAtMTIsNiArMTQsMTMgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbiB9IG1hcF94c2ttYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbit9IG1hcF9oYXNoIFNFQyhcIi5tYXBzXCIpO1xuK1xuIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06XG4gICpcbiAgKiAgIHI2ID0gc2tiLVx1MDAzZXNrO1xuQEAgLTI2NCw0ICsyNzMsNDcgQEAgX19uYWtlZCB2b2lkIGpuZV9yZWdfcmVnX251bGxfY2hlY2sodm9pZClcbiAgICAgICAgIDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBjb21wYXJpc29uIGJldHdlZW4gUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVEIGFuZFxuKyAqIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCBzaG91bGQgbm90IGluZmVyIHRoYXQgbWFwIHBvaW50ZXIgaXMgbm90IG51bGwuXG4rICogQSBidWcgaW4gY2hlY2tfY29uZF9qbXBfb3AoKSBtYWRlIHN1Y2ggaW5mZXJlbmNlIHBvc3NpYmxlLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXCIpXG4rX19tc2coXCJcdTAwM2VcdTAwM2VcdTAwM2UgMTEgfCAoNjEpIHIwID0gKih1MzIgKikocjAgKzApXCIpXG4rX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0LyogcjYgPSBicGZfcmRvbmx5X2Nhc3QoMCwgMCk7ICovXHRcdFxcXG4rXHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0LypcdFx0XHRcdFx0XHRcXFxuK1x0ICogYnVnZ3kgdmVyaWZpZXIgYXNzdW1lZCB0aGF0IHI2IGNhbid0IGJlIG51bGxcdFxcXG4rXHQgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuXHRcdFxcXG4rXHQgKi9cdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjYgIT0gcjAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpLFxuK1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK3ZvaWQga2Z1bmNfcm9vdCh2b2lkKVxuK3tcbitcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDcuMzY1NTgyMjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDcwNjMxMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgYGNoZWNrX2NvbmRfam1wX29wKClgIGZ1bmN0aW9uLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCB0aGUgb3JpZ2luYWwgbG9naWMgaW5jb3JyZWN0bHkgaW5mZXJyZWQgcG9pbnRlciBub24tbnVsbG5lc3MgaW4gY2VydGFpbiBjb21wYXJpc29uIHNjZW5hcmlvcy4gSXQgc2VlbXMgdGhlIHZlcmlmaWVyIHdhcyBtYWtpbmcgYW4gYXNzdW1wdGlvbjogaWYgeW91IGNvbXBhcmUgdHdvIHBvaW50ZXJzIGFuZCBvbmUgKm1pZ2h0KiBiZSBudWxsLCBidXQgdGhlIG90aGVyICppc24ndCosIGFuZCB0aGV5IGFyZSBlcXVhbCwgdGhlbiB0aGUgbnVsbGFibGUgcG9pbnRlciBiZWNvbWVzIG5vbi1udWxsLiBUaGUgcHJvYmxlbSBpcywgdGhpcyBpbmZlcmVuY2Ugd2FzIGZsYXdlZCwgYmVjYXVzZSB0aGUgc2Vjb25kIHBvaW50ZXIgYWxzbyBtaWdodCBiZSBudWxsLCBidXQgbm90ICpndWFyYW50ZWVkKiB0byBiZSBub24tbnVsbC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBjaGVja2VkIGZvciB0aGUgKmRpZmZlcmVuY2UqIGluIHRoZSBgdHlwZV9tYXlfYmVfbnVsbCgpYCByZXN1bHQsIGFuZCBtaXNzZWQgY2FzZXMgd2hlcmUgYm90aCBjb3VsZCBiZSBudWxsLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBCUEYgcHJvZ3JhbSBwb3RlbnRpYWxseSBkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyLCBvciBhY2Nlc3NpbmcgbWVtb3J5IG91dC1vZi1ib3VuZHMsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGhhcyBpbmNvcnJlY3RseSBhc3Nlc3NlZCBzYWZldHkuXG5cblRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcsIHdpdGggYHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpYCwgaWYgdGhlICpvdGhlciogcG9pbnRlciBpcyBhY3R1YWxseSBub24tbnVsbCBiZWZvcmUgbWFraW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpcnN0IHBvaW50ZXIgaXMgYWxzbyBub24tbnVsbC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBhbmQgZW5zdXJlIHByb3BlciBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIHdpdGhpbiB0aGUgdmVyaWZpZXIuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgS01TQU4gbmVlZGVkIGhlcmU/IE15IGFzc2Vzc21lbnQgaXMgbm8uIFRoaXMgYnVnIGlzIGFib3V0ICpwb2ludGVyIG51bGxhYmlsaXR5Kiwgd2hpY2ggbGVhZHMgdG8gbWVtb3J5IHNhZmV0eSBpc3N1ZXM6IHBvdGVudGlhbGx5LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSB2ZXJpZmllciBpbmNvcnJlY3RseSBtYXJrcyBhIHBvaW50ZXIgYXMgc2FmZS4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGV5IGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgdmVyaWZpZXIncyBtaXNpbnRlcnByZXRhdGlvbiBvZiB0aGUgQlBGIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtzLCBvciBob3cgdGhlIHZlcmlmaWVyICpoYW5kbGVzKiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBmb2N1c2VkIGVudGlyZWx5IG9uIHRyYWNraW5nIHBvaW50ZXIgbm9uLW51bGxpdHkuIEtNU0FOIGlzIGdyZWF0LCBidXQgaXQncyBwdXJwb3NlIGlzIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBub3QgdGhlIGlzc3VlIGhlcmUuIEkgYW0gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTiA9IGZhbHNlYCBoZXJlIGlzIGNvcnJlY3QuIFRoZSByZWFzb25pbmcgYmVpbmcgdGhhdCwgYmVjYXVzZSB0aGUgaXNzdWUgaXMgb25lIHRoYXQgY2F1c2VzIGlzc3VlcywgZS5nLiBhY2Nlc3NpbmcgYSBudWxsIHBvaW50ZXIsIHRoYXQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMSwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDIuODM2MjE3NDE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbid0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCAoZS5nLiwgYW4gdW50cnVzdGVkIHBvaW50ZXIpLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYnkgdGhlIEJQRiBwcm9ncmFtLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoT09CLCBVQUYsIE5VTEwgZGVyZWYpIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcpIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjncqk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 18:40:07 +0000 UTC FinishedAt: 2026-08-26 19:09:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "XDP_SOCKETS" ], "series_id": "24b6135d-fd02-4061-8e40-c554837bd6ca" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxM2RlYjZkZGNmNWVkN2IxOTQzODBkYWY2NmFkZjE5YzcyNDU4ZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li44OTdlYzRiMzhkZWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTUsNiAmIzQzOzM1NSw4IEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XG4gXHR0eXBlID0gYmFzZV90eXBlKHR5cGUpO1xuIFx0cmV0dXJuIHR5cGUgPT0gUFRSX1RPX1NPQ0tFVCB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxuJiM0MztcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbiYjNDM7XHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fTUFQX0tFWSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19TT0NLX0NPTU1PTiB8fFxuQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0aWYgKCFpc19qbXAzMiBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNlxuIFx0ICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpICE9IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBiYXNlX3R5cGUoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGJhc2VfdHlwZShkc3RfcmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQpIHtcbiBcdFx0ZXFfYnJhbmNoX3JlZ3MgPSBOVUxMO1xuQEAgLTE3MTAxLDkgJiM0MzsxNzEwMiwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGVxX2JyYW5jaF9yZWdzKSB7XG4tXHRcdFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbiYjNDM7XHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgZHN0ICE9IE5VTEwgPVx1MDAzZSBzcmMgIT0gTlVMTCAqL1xuJiM0MztcdFx0XHRpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbiBcdFx0XHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddKTtcbi1cdFx0XHRlbHNlXG4mIzQzO1x0XHRcdC8qIHNyYyA9PSBkc3QgXHUwMDI2XHUwMDI2IHNyYyAhPSBOVUxMID1cdTAwM2UgZHN0ICE9IE5VTEwgKi9cbiYjNDM7XHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IDNkMWU4ZGU0MzkwYzIuLmI0MTJhNTQyZWY3NmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMsNyAmIzQzOzMsOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfa2Z1bmNzLmhcJiMzNDtcbiBcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xuQEAgLTEyLDYgJiM0MzsxNCwxMyBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBpbnQpO1xuIH0gbWFwX3hza21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbiYjNDM7fSBtYXBfaGFzaCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiAvKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBwcm9ncmFtOlxuICAqXG4gICogICByNiA9IHNrYi1cdTAwM2VzaztcbkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKVxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEEgY29tcGFyaXNvbiBiZXR3ZWVuIFBUUl9UT19NRU0gfCBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRCBhbmRcbiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC5cbiYjNDM7ICogQSBidWcgaW4gY2hlY2tfY29uZF9qbXBfb3AoKSBtYWRlIHN1Y2ggaW5mZXJlbmNlIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19mYWlsdXJlXG4mIzQzO19fbXNnKFwmIzM0O2Vycm9yOiBpbnZhbGlkIGRlcmVmZXJlbmNlIG9mIFIwIChhIG51bGxhYmxlIG1hcCB2YWx1ZSBwb2ludGVyKVwmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7XHUwMDNlXHUwMDNlXHUwMDNlIDExIHwgKDYxKSByMCA9ICoodTMyICopKHIwICYjNDM7MClcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCB1bnRydXN0ZWRfbWVtX2RvZXNfbm90X2luZmVyX21hcF92YWx1ZV9ub25fbnVsbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQvKiByNiA9IGJwZl9yZG9ubHlfY2FzdCgwLCAwKTsgKi9cdFx0XFxcbiYjNDM7XHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMiA9IDA7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuJiM0MztcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcdTAwMjZrZXkpOyAqL1x0XFxcbiYjNDM7XHQqKHU2NCAqKShyMTAgLSA4KSA9IDA7XHRcdFx0XHRcXFxuJiM0MztcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIyID0gcjEwO1x0XHRcdFx0XHRcXFxuJiM0MztcdHIyICYjNDM7PSAtODtcdFx0XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX21hcF9sb29rdXBfZWxlbV07XHRcdFx0XFxcbiYjNDM7XHQvKlx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICogYnVnZ3kgdmVyaWZpZXIgYXNzdW1lZCB0aGF0IHI2IGNhbiYjMzk7dCBiZSBudWxsXHRcXFxuJiM0MztcdCAqIGFuZCBtYXJrZWQgcjAgbm9uLW51bGwgYXMgd2VsbC5cdFx0XFxcbiYjNDM7XHQgKi9cdFx0XHRcdFx0XHRcXFxuJiM0MztcdGlmIHI2ICE9IHIwIGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjAgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MzsxOlx0cjAgPSAwO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXG4mIzQzO1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbiYjNDM7XHQgIF9faW1tX2FkZHIobWFwX2hhc2gpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRicGZfcmRvbmx5X2Nhc3QoMCwgMCk7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXQKIAl0eXBlID0gYmFzZV90eXBlKHR5cGUpOwogCXJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHwKIAkJdHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHwKJiM0MzsJCXR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8CiYjNDM7CQl0eXBlID09IFBUUl9UT19CVUYgfHwKIAkJdHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8CiAJCXR5cGUgPT0gUFRSX1RPX01BUF9LRVkgfHwKIAkJdHlwZSA9PSBQVFJfVE9fU09DS19DT01NT04gfHwKQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKi8KIAlpZiAoIWlzX2ptcDMyICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7CiAJICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgJmFtcDsmYW1wOyBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpICZhbXA7JmFtcDsKLQkgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKIAkgICAgYmFzZV90eXBlKHNyY19yZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgJmFtcDsmYW1wOwogCSAgICBiYXNlX3R5cGUoZHN0X3JlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX0JURl9JRCkgewogCQllcV9icmFuY2hfcmVncyA9IE5VTEw7CkBAIC0xNzEwMSw5ICYjNDM7MTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGVxX2JyYW5jaF9yZWdzKSB7Ci0JCQlpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSkKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgZHN0ICE9IE5VTEwgPSZndDsgc3JjICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O3NyY19yZWddKTsKLQkJCWVsc2UKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgc3JjICE9IE5VTEwgPSZndDsgZHN0ICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O2RzdF9yZWddKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCAzZDFlOGRlNDM5MGMyLi5iNDEyYTU0MmVmNzZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zLDcgJiM0MzszLDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2tmdW5jcy5oJiMzNDsKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7CkBAIC0xMiw2ICYjNDM7MTQsMTMgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIGludCk7CiB9IG1hcF94c2ttYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIGludCk7CiYjNDM7fSBtYXBfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06CiAgKgogICogICByNiA9IHNrYi0mZ3Q7c2s7CkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKQogICAgICAgICA6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kCiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC4KJiM0MzsgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX21zZygmIzM0OyZndDsmZ3Q7Jmd0OyAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CS8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqLwkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwlyMiA9IDA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX3Jkb25seV9jYXN0XTsJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDtrZXkpOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CS8qCQkJCQkJXAomIzQzOwkgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJiMzOTt0IGJlIG51bGwJXAomIzQzOwkgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuCQlcCiYjNDM7CSAqLwkJCQkJCVwKJiM0MzsJaWYgcjYgIT0gcjAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksCiYjNDM7CSAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksCiYjNDM7CSAgX19pbW1fYWRkcihtYXBfaGFzaCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0JiMzOTtzIGZvY3VzZWQgb24gbnVsbCBwb2ludGVyIGNoZWNrcywgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYSBpbiBCUEYuIEl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbHRlcmluZyB0aGUgYHJlZ19ub3RfbnVsbGAgZnVuY3Rpb247IGl04oCZcyBub3cgZ29pbmcgdG8gcmV0dXJuIGB0cnVlYCBmb3IgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCBwb2ludGVyIHR5cGVzLCBleHBhbmRpbmcgaXRzIHNjb3BlIGJleW9uZCB0aGUgb3JpZ2luYWwgaW50ZW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyDigJMgcGFydGljdWxhcmx5IHRoZSBjb21wYXJpc29uIG9mIHBvaW50ZXJzIHdoZXJlIG9uZSAqbWlnaHQqIGJlIG51bGwsIGFuZCB0aGUgb3RoZXIgaXMgZGVmaW5pdGVseSBub3QuIFRoZSBsb2dpYyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYCBpcyBiZWluZyByZWZpbmVkLiBJdCBhcHBlYXJzIHRoZXnigJlyZSByZW1vdmluZyBhIGNvbmRpdGlvbjogYHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy0mZ3Q7dHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLSZndDt0eXBlKWAuIEluc3RlYWQsIHRoZXkmIzM5O3JlIGFkZGluZyB0aGVzZSB0d28gY3J1Y2lhbCBjaGVja3M6IGBpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKWAgYW5kIGBpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKWAuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIHRoaXMgaXMgbGlrZWx5IGZpeGluZyBhbiBpbmZlcmVuY2UgYnVnIGluIHRoZSB2ZXJpZmllci4KCkVzc2VudGlhbGx5LCB0aGV5IGFyZSB0aWdodGVuaW5nIHVwIHRoZSB2ZXJpZmllciYjMzk7cyBudWxsYWJpbGl0eSBpbmZlcmVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggcG9pbnRlciBjb21wYXJpc29ucyB3aGVyZSBvbmUgcG9pbnRlciBpcyBrbm93biB0byBiZSBub24tbnVsbCBhbmQgdGhlIG90aGVyIG1pZ2h0IGJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBiZWNhdXNlIGluY29ycmVjdCBudWxsYWJpbGl0eSBpbmZlcmVuY2UgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHNlY3VyaXR5IGlzc3Vlcywgb3IgbW9yZSBzaW1wbHksIGluY29ycmVjdCB2ZXJpZmllciBmYWlsdXJlcyAob3Igc3VjY2VzcykuCgpGaW5hbGx5LCB0aGVyZSBpcyBhIG5ldyB0ZXN0IGNhc2UgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY2AsIHdoaWNoIGxpa2VseSBkZW1vbnN0cmF0ZXMgdGhlIGJ1ZyBhbmQgdmVyaWZpZXMgdGhlIGZpeC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IHRlc3QgdG8gZnVsbHkgZ3Jhc3AgdGhlIGlzc3VlIGFuZCBlbnN1cmUgdGhlIGZpeCBpcyBjb21wcmVoZW5zaXZlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiB0aGUgZGlyZWN0b3J5LgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIG5vdzsgSSYjMzk7bGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgY2hlY2tfY29uZF9qbXBfb3BgIGFuZCBgcmVnX25vdF9udWxsYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgdGhlIGV4YWN0IGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19jb25kX2ptcF9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAtICogUFRSX1RPX01BUF9WQUxVRSBhbmQgdGhlIHNhbWUgcmVnaXN0ZXIgY2hhbmdlcyBzdGF0ZSB0byBDT05TVF9JTU0gaW4gdGhlIGZhbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxOiAqIGJyYW5jaC4gU2VlIGNoZWNrX2NvbmRfam1wX29wKCkuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2ODQ5PXN0YXRpYyB2b2lkIHN5bmNfbGlua2VkX3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqdnN0YXRlLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjkwMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjkwNDpzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDUtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MjEyPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgyOTgtXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI5OTpcdFx0cmV0dXJuIGNoZWNrX2NvbmRfam1wX29wKGVudiwgaW5zbiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJQRiBWZXJpZmllcjogSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciwgd2hpY2ggaXMgYSBrZXJuZWwgY29tcG9uZW50LCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIGl0cyByZWFjaGFiaWxpdHkgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGlkZW50aWZ5aW5nIHNvbWUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgdGhvdWdodCBgY2hlY2tfY29uZF9qbXBfb3BgIG1pZ2h0IGJlIGEgZ29vZCBvbmUsIGJ1dCB3YWl0Li4uIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBmdXp6aW5nLiBUaGUgc2FtZSBnb2VzIGZvciBgZG9fY2hlY2tfaW5zbmAuIEJvdGggYXJlIHN0YXRpYyBhbmQgaW50ZXJuYWwuIEFscmlnaHQsIG5ldyBwbGFuOiBJIG5lZWQgdG8gZmluZCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgaW50byB0aGUgQlBGIHZlcmlmaWVyIGl0c2VsZi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0IGNhbiB0cmlnZ2VyIGl0cyBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjY0Mj1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjY1My0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI2NTQ6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjU1LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDg9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwMjEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwMjI6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwMjMtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA0NDU9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDc1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDc2Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDc3LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA1NDQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1NDU6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNTQ2LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwOTc4PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MzogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5NC0gKiBvbmNlIHRoZSBwcm9ncmFtJiMzOTtzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAwMT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMTg6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMTktXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMzItXHQvKiAmIzM5O3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JiMzOTsgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBzbWFsbCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEzMzpcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEzNC1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI0My1cdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjEyNDQ6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI2My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTI2NDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTI2NS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipBbmFseXppbmcgdGhlIEJQRiBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gR29vZCwgdGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGFydGluZyBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgYGJwZl9jaGVja2AgaXMgZGVjbGFyZWQuIElzIGl0IGV4cG9ydGVkPyBPciBpcyBpdCBzdGF0aWM/IEFoLCBhbHJpZ2h0LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBpbnQgYnBmX2NoZWNrKC4uLilgLiBOb3Qgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdmlzaWJsZSBleHRlcm5hbGx5LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LgoKSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4geWVwLCB0aGUgQlBGIHN5c2NhbGwgZmVhdHVyZSBpcyBkZWZpbmVkIGFzIGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O2xsIGJlIHVzZWZ1bCBsYXRlciBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZS4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIEJQRiBjb25maWd1cmF0aW9uIGlzIGNvbnRyb2xsZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBsaWtlbHkgc291cmNlOiBga2VybmVsL2JwZi9LY29uZmlnYC4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgY2VudHJhbCBodWIgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJZiBpdCYjMzk7cyBub3QgZGlyZWN0bHkgaW4gYEtjb25maWdgLCBJJiMzOTtsbCBzdGFydCBsb29raW5nIGZvciByZWxhdGVkIGBLY29uZmlnYCBmaWxlcyBpbiB0aGF0IGFyZWEgb2YgdGhlIGtlcm5lbCB0cmVlOyB0aGVyZSBtaWdodCBiZSBuZXN0ZWQgY29uZmlndXJhdGlvbnMgb3IgaW5jbHVkZXMgdG8gb3RoZXIgcmVsZXZhbnQgY29uZmlnIGZpbGVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgZnVuY3Rpb25zIGBjaGVja19jb25kX2ptcF9vcGAgYW5kIGByZWdfbm90X251bGxgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBpcyBsaWtlbHkgdHdlYWtpbmcgdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljIGFyb3VuZCBjb25kaXRpb25hbCBqdW1wcyBhbmQgbnVsbCByZWdpc3RlciBjaGVja3MsIHdoaWNoIGlzIGEgZmFpcmx5IGNvbW1vbiBhcmVhIGZvciBCUEYgc2VjdXJpdHkgaGFyZGVuaW5nIG9yIGJ1ZyBmaXhlcy4gTXkgcHJpbWFyeSBhcmVhIG9mIGZvY3VzIHNob3VsZCBiZSB0aGUgYGJwZl9jaGVja2Agc3ltYm9scyB3aXRoaW4gdGhpcyBjb250ZXh0LgoKQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY2hhbmdlLiBUaGUgdGVzdCBzdWl0ZSBoaW50cyBhdCB0aGUgdXNlIG9mIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCBhbmQgYEJQRl9NQVBfVFlQRV9IQVNIYC4gQ29uc2lkZXJpbmcgYFhTS01BUGAgaXMgc3Ryb25nbHkgYXNzb2NpYXRlZCB3aXRoIEFGX1hEUCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhbHNvIGEgZGVwZW5kZW5jeSBvciByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXG5uZXQveGRwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQveGRwL0tjb25maWctOS1cbm5ldC94ZHAvS2NvbmZpZzoxMDpjb25maWcgWERQX1NPQ0tFVFNfRElBR1xubmV0L3hkcC9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7WERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBYRFAgU29ja2V0IEludGVncmF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB3aXRoaW4gdGhlIGByZWdfbm90X251bGxgIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBgUFRSX1RPX1hEUF9TT0NLYCBpcyBiZWluZyBtb2RpZmllZCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN0cm9uZyBsaW5rIHRvIGBYRFBfU09DS0VUU2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHZlcmlmaWVyIHdvdWxkIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBzcGVjaWZpYyBwb2ludGVyIHR5cGVzIHdoZW4gZGVhbGluZyB3aXRoIFhEUCBzb2NrZXRzLiBDb25zZXF1ZW50bHksIGFkZGluZyBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjb3Vyc2Ugb2YgYWN0aW9uIGhlcmUuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHRoaW5nIHRvIGRvIHRvIGdldCB0aGluZ3Mgd29ya2luZyByaWdodCwgYXNzdW1pbmcgdGhlIHVzZXIgaGFzIGVuYWJsZWQgWERQX1NPQ0tFVFMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBQVFJfVE9fWERQX1NPQ0tgIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiB2ZXJpZmllciBjb2RlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoYXQgcG9pbnRlciB0eXBlIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFJfVE9fWERQX1NPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTM0Nz1zdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU3LVx0XHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1ODpcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTktXHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU1PXN0YXRpYyB2b2lkIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjktXHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3MDpcdFx0cmVnLVx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzEtXHR9IGVsc2UgaWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfU09DS01BUCB8fFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDAwPXN0YXRpYyBpbnQgY2hlY2tfc29ja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDIyLVx0XHRicmVhaztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDIzOlx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAyNC1cdFx0dmFsaWQgPSBicGZfeGRwX3NvY2tfaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgXHUwMDI2aW5mbyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzQ9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUyNzgtXHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUyNzk6XHRjYXNlIFBUUl9UT19YRFBfU09DSzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MjgwLVx0XHRwb2ludGVyX2Rlc2MgPSBcJiMzNDt4ZHBfc29jayBcJiMzNDs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIHNvY2tfdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNjYtXHRcdFBUUl9UT19UQ1BfU09DSyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTY3Olx0XHRQVFJfVE9fWERQX1NPQ0ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE2OC1cdH0sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE3Ni1cdFx0UFRSX1RPX1RDUF9TT0NLLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgxNzc6XHRcdFBUUl9UT19YRFBfU09DSyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTc4LVx0XHRQVFJfVE9fQlRGX0lELFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk2MT1zdGF0aWMgYm9vbCByZWdfdHlwZV9taXNtYXRjaF9vayhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2Ny1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY4Olx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjktXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgWERQIGFuZCBlQlBGIE1hcCBUeXBlcyoqCgpSaWdodCwgc28gdGhpcyB0ZXN0IGlzIGxldmVyYWdpbmcgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgZ2l2ZXMgdXMgYSBgUFRSX1RPX1hEUF9TT0NLYCByZXR1cm4gdmFsdWUuIE9rYXksIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHJlbGV2YW5jZSBvZiBgWERQX1NPQ0tFVFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBYRFAgYW5kIHRyeWluZyB0byBpbnRlZ3JhdGUgaXQgd2l0aCBzb2NrZXRzIHNvbWVob3csIHByb2JhYmx5IHRvIGltcGxlbWVudCB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBvdmVyIFhEUC4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBqb2cgbXkgbWVtb3J5IGFuZCBzZWUgaG93IGBQVFJfVE9fQlVGYCBmaXRzIGludG8gYWxsIHRoaXMuIEkgdGhpbmsgaXQgaXMgdXNlZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZSBhbmQgbWlnaHQgZXhwbGFpbiBob3cgZGF0YSBpcyB0cmFuc21pdHRlZCBpbiBYRFAgb3IgaW4gZ2VuZXJhbCBlQlBGIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgcHJvZ3JhbW1hYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQVFJfVE9fQlVGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDc9c3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OC1cdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk6XHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2MC1cdFx0dHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY0MTY9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYwMC1cdFx0XHRcdFx0ICAgICAgdmFsdWVfcmVnbm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MDE6XHR9IGVsc2UgaWYgKGJhc2VfdHlwZShyZWctXHUwMDNldHlwZSkgPT0gUFRSX1RPX0JVRiBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjAyLVx0XHQgICAhdHlwZV9tYXlfYmVfbnVsbChyZWctXHUwMDNldHlwZSkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzAzNj1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzUtXHRcdFx0XHRcdCAgICAgICB6ZXJvX3NpemVfYWxsb3dlZCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzA3NjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MDc3LVx0XHRpZiAodHlwZV9pc19yZG9ubHlfbWVtKHJlZy1cdTAwM2V0eXBlKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBtZW1fdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTMtXHRcdFBUUl9UT19NRU0gfCBNRU1fUklOR0JVRixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk0Olx0XHRQVFJfVE9fQlVGLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTUtXHRcdFBUUl9UT19CVEZfSUQgfCBQVFJfVFJVU1RFRCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODUxMj1zdGF0aWMgaW50IF9fY2hlY2tfZnVuY19hcmdfcmVnX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU1LVx0Y2FzZSBQVFJfVE9fTUVNIHwgTUVNX1JJTkdCVUY6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU1NjpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTU3Olx0Y2FzZSBQVFJfVE9fQlVGIHwgTUVNX1JET05MWTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU4LVx0Y2FzZSBQVFJfVE9fQVJFTkE6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYwPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyNy1cdGNhc2UgUFRSX1RPX01FTTpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYyODpcdGNhc2UgUFRSX1RPX0JVRjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyOS1cdGNhc2UgUFRSX1RPX0ZVTkM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gYFBUUl9UT19CVUZgIGFwcGVhcnMgdG8gYmUgYSBjb21tb24gYnVmZmVyIHBvaW50ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBsYXJnZXIgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGNoZWNrX2NvbmRfam1wX29wYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBieSBgZG9fY2hlY2tfaW5zbmAuIGBkb19jaGVja19pbnNuYCBpcyB0aGVuIGNhbGxlZCBieSBgZG9fY2hlY2tgLCBhbmQgYGRvX2NoZWNrYCBnZXRzIGNhbGxlZCBieSBgYnBmX2NoZWNrYC4gUmlnaHQsIHNvIGBicGZfY2hlY2tgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGlzIHZlcmlmaWNhdGlvbiBsb2dpYy4gSXQgbWFrZXMgc2Vuc2UsIHRoYXQgaXMgdGhlIEJQRiB2ZXJpZmllciBlbnRyeS4KCkJ1dCwgYXJlIHRoZXJlICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcuIEl0JiMzOTtzIGJlc3QgcHJhY3RpY2UgdG8gcnVsZSBvdXQgb3RoZXIgcG9zc2libGUgYWNjZXNzIHBvaW50cywgc28gSSYjMzk7bGwgZ28gZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJwZl9jaGVja2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MTc9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEzMi1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjM0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzY3Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc2OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTEzLVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTExNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM5OS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NDAwOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDY4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDcwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDc2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ4Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0ODc6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MTg9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUyNzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzExLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTMtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMjMtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzI0Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyNS1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmllciBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEJQRiB2ZXJpZmllciB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBlbnRyeSBwb2ludC4gSXQgbG9va3MgbGlrZSBgYnBmX3Byb2dfbG9hZGAgaXMgdGhlIGtleSBmdW5jdGlvbiB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLCBhbmQgaW50ZXJuYWxseSBpdCBjYWxscyBgYnBmX2NoZWNrYC4gQWhhLCBgYnBmX2NoZWNrYCEgVGhhdCYjMzk7cyBpdCwgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBicGZfY2hlY2tgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wuIExvb2tpbmcgYmFjaywgYGJwZl9jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfbG9hZGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAgLSB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBgYnBmX2NoZWNrYCBpcyBkZWZpbml0ZWx5IG15IHByaW1hcnkgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIGlmIGBicGZfY2hlY2tgIGlzIGFjdHVhbGx5IGFjY2Vzc2libGUuIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCYjMzk7cyBub3QgbWFya2VkIGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB2aXNpYmxlIG91dHNpZGUgaXRzIGNvbXBpbGF0aW9uIHVuaXQgYW5kIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNvLCBgYnBmX2NoZWNrYCBpcyBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2wgdG8gdXNlIQoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIFhEUCBzb2NrZXRzIGJlY2F1c2UgdGhlIHRlc3QgY29kZSB1c2VzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYC4gRG8gSSBuZWVkIGBYRFBfU09DS0VUU2AgdG8gdXNlIGBCUEZfTUFQX1RZUEVfWFNLTUFQYD8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIGlzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgZW5hYmxpbmcgYFhEUF9TT0NLRVRTYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX01BUF9UWVBFX1hTS01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC00LT09PT09PT09PT09PT09PT09PT1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNi09PT09PT09PT09PT09PT09PT09XG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0Ojk6ICAgLSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCB3YXMgaW50cm9kdWNlZCBpbiBrZXJuZWwgdmVyc2lvbiA0LjE4XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMC1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMi1jYWxsIGBgYnBmX3JlZGlyZWN0X21hcCgpYGAgYW5kIGBgWERQX1JFRElSRUNUYGAgYWN0aW9uLCBsaWtlICYjMzk7ZGV2bWFwJiMzOTsgYW5kICYjMzk7Y3B1bWFwJiMzOTsuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9Njc9UmVkaXJlY3QgdGhlIHBhY2tldCB0byB0aGUgZW5kcG9pbnQgcmVmZXJlbmNlZCBieSBgYG1hcGBgIGF0IGluZGV4IGBga2V5YGAuXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC02OS1mb3Igc29ja2V0cyBhdHRhY2hlZCB0byBhIG5ldGRldiYjMzk7cyBxdWV1ZXMuXG4tLVxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q9MTM1PUtlcm5lbFxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEzNy1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjEzODpUaGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCBzaG93cyBob3cgdG8gZGVjbGFyZSBhIGBgQlBGX01BUF9UWVBFX1hTS01BUGBgIGNhbGxlZFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE0My1cdHN0cnVjdCB7XG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDoxNDQ6XHRcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTE0NS1cdFx0X190eXBlKGtleSwgX191MzIpO1xuLS1cbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdD0xMj1YRFBfUkVESVJFQ1Qgd29ya3Mgd2l0aCB0aGUgZm9sbG93aW5nIG1hcCB0eXBlczpcbi0tXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3QtMTYtLSBgYEJQRl9NQVBfVFlQRV9DUFVNQVBgYFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0OjE3Oi0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGBcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD03MT1Ib3cgaXMgdGhlbiBwYWNrZXRzIGRpc3RyaWJ1dGVkIGZyb20gYW4gWERQIHByb2dyYW0gdG8gdGhlIFhTS3M/IFRoZXJlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC03My11c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGNhbiBwbGFjZSBhbiBYU0sgYXQgYW4gYXJiaXRyYXJ5IHBsYWNlIGluIHRoaXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjIxLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q6MjIyOlhTS01BUCAvIEJQRl9NQVBfVFlQRV9YU0tNQVBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjQtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjU6T24gWERQIHNpZGUgdGhlcmUgaXMgYSBCUEYgbWFwIHR5cGUgQlBGX01BUF9UWVBFX1hTS01BUCAoWFNLTUFQKSB0aGF0XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3Q9MjgyPXJvdW5kLXJvYmluIGV4YW1wbGUgb2YgZGlzdHJpYnV0aW5nIHBhY2tldHMgaXMgc2hvd24gYmVsb3c6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjkxLSAgIHN0cnVjdCB7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyOTI6ICAgICAgIF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTE3PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjcHVfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTE5OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfWFNLTUFQLCB4c2tfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTIwLSNlbmRpZlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cdEJQRl9NQVBfVFlQRV9DUFVNQVAsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTAxODpcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cdEJQRl9NQVBfVFlQRV9TT0NLSEFTSCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMzgyPXN0YXRpYyBpbnQgbWFwX2NyZWF0ZV9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cdGNhc2UgQlBGX01BUF9UWVBFX0RFVk1BUF9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTUyNTpcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE1MjYtXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU1PXN0YXRpYyB2b2lkIHJlZmluZV9tYXBfbG9va3VwX3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgtXHRcdFx0cmVnLVx1MDAzZW1hcF91aWQgPSByZWctXHUwMDNlaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTpcdH0gZWxzZSBpZiAobWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTcwLVx0XHRyZWctXHUwMDNldHlwZSA9IFBUUl9UT19YRFBfU09DSyB8IG1heWJlX251bGw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjU9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwODQtXHRcdGJyZWFrO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwODU6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA4Ni1cdFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MjAyLVx0XHQgICAgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9DUFVNQVAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTIwMzpcdFx0ICAgIG1hcC1cdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkyMDQtXHRcdFx0Z290byBlcnJvcjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz00NjgzPWludCB4ZHBfZG9fcmVkaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhkcF9idWZmICp4ZHAsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNDY4OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjQ2ODk6XHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2OTAtXHRcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NDY5Nz1pbnQgeGRwX2RvX3JlZGlyZWN0X2ZyYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDMtXG5uZXQvY29yZS9maWx0ZXIuYzo0NzA0Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApXG5uZXQvY29yZS9maWx0ZXIuYy00NzA1LVx0XHRyZXR1cm4gX194ZHBfZG9fcmVkaXJlY3RfeHNrKHJpLCBkZXYsIHhkcCwgeGRwX3Byb2cpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTQ3MTE9c3RhdGljIGludCB4ZHBfZG9fZ2VuZXJpY19yZWRpcmVjdF9tYXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ1LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDY6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG5uZXQvY29yZS9maWx0ZXIuYy00NzQ3LVx0XHRlcnIgPSB4c2tfZ2VuZXJpY19yY3YoZndkLCB4ZHApO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cdEJQRl9NQVBfVFlQRV9DUFVNQVAsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTAxODpcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cdEJQRl9NQVBfVFlQRV9TT0NLSEFTSCxcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4MS1cdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVx0XHRcdD0gXCYjMzQ7Y3B1bWFwXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XHRbQlBGX01BUF9UWVBFX1hTS01BUF1cdFx0XHQ9IFwmIzM0O3hza21hcFwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgzLVx0W0JQRl9NQVBfVFlQRV9TT0NLSEFTSF1cdFx0XHQ9IFwmIzM0O3NvY2toYXNoXCYjMzQ7LFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjctXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XG50b29scy9saWIvYnBmL2xpYmJwZi5jOjU0Njg6XHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXHRjYXNlIEJQRl9NQVBfVFlQRV9TT0NLTUFQOlxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc1LVx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM6Mzc2Olx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS0hBU0g6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jOjQ3NjpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9FTlRSSUVTKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy03MDMtXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jOjcwNDpcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9YU0tNQVAsIGNoZWNrX3hza21hcCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1NPQ0tIQVNILCBjaGVja19zb2NraGFzaCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmM6MTE6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM6MzA6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9od19tZXRhZGF0YS5jOjk6XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXHRfX3VpbnQobWF4X2VudHJpZXMsIDI1Nik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfbWV0YWRhdGEuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVx0X191aW50KG1heF9lbnRyaWVzLCA0KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jOjEyOlx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmMtMTEzNS1cdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYzoxMTM2Olx0XHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF92ZXJpZmllci5jLTExMzctXHRcdFx0XHRcdHNpemVvZihpbnQpLCAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjcKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSB0ZXN0IHJlbGllcyBvbiBgQlBGX01BUF9UWVBFX1hTS01BUGAsIHdoaWNoIGlzIGRlZmluZWQgb25seSBpZiBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4sIHNvIHRvIHJ1biB0aGlzIHRlc3QsIEkgYWJzb2x1dGVseSBuZWVkIHRvIGFkZCBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gQWxzbywgSSBrbm93IEkmIzM5O2xsIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgLCBvZiBjb3Vyc2UuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYGNoZWNrX2NvbmRfam1wX29wYCBmdW5jdGlvbi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHdheSBpdCBpbmZlcnMgcG9pbnRlciBudWxsYWJpbGl0eSB3aXRoaW4gY29uZGl0aW9uYWwganVtcHMuIEl0JiMzOTtzIGFsc28gdXBkYXRpbmcgYHJlZ19ub3RfbnVsbGAgdG8gYWNjb3VudCBmb3IgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB0eXBlcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXN0ZW0gY2FsbC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgcGlja2VkIGBicGZfY2hlY2tgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgYXJlIGludGVybmFsIGFuZCBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIG91dC4gWWVwLCBgYnBmX2NoZWNrYCBpdCBpcywgdGhhdCYjMzk7cyB0aGUgY29ycmVjdCBjaG9pY2UuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlnIG5hbWVzLiBZZXMsIGBYRFBfU09DS0VUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L3hkcC9LY29uZmlnYCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEV2ZXJ5dGhpbmcgYWxpZ25zLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgbG9naWMgZm9yIGluZmVycmluZyBudWxsYWJpbGl0eSBvZiBwb2ludGVycyBpbiBjb25kaXRpb25hbCBqdW1wIG9wZXJhdGlvbnMgKGNoZWNrX2NvbmRfam1wX29wKS4gSXQgYWxzbyB1cGRhdGVzIHJlZ19ub3RfbnVsbCB0byBpbmNsdWRlIFBUUl9UT19YRFBfU09DSyBhbmQgUFRSX1RPX0JVRi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgcmVhY2hhYmxlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbiYjMzk7dCBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsIChlLmcuLCBhbiB1bnRydXN0ZWQgcG9pbnRlcikuIFRoaXMgY291bGQgbGVhZCB0byBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBieSB0aGUgQlBGIHByb2dyYW0uIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIChPT0IsIFVBRiwgTlVMTCBkZXJlZikgYXJlIGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgb3IgcGFkZGluZykgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTM1NSw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXQKIAl0eXBlID0gYmFzZV90eXBlKHR5cGUpOwogCXJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHwKIAkJdHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHwKJiM0MzsJCXR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8CiYjNDM7CQl0eXBlID09IFBUUl9UT19CVUYgfHwKIAkJdHlwZSA9PSBQVFJfVE9fTUFQX1ZBTFVFIHx8CiAJCXR5cGUgPT0gUFRSX1RPX01BUF9LRVkgfHwKIAkJdHlwZSA9PSBQVFJfVE9fU09DS19DT01NT04gfHwKQEAgLTE3MDg1LDcgJiM0MzsxNzA4Nyw2IEBAIHN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAkgKi8KIAlpZiAoIWlzX2ptcDMyICZhbXA7JmFtcDsgQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfWCAmYW1wOyZhbXA7CiAJICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgJmFtcDsmYW1wOyBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpICZhbXA7JmFtcDsKLQkgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpICZhbXA7JmFtcDsKIAkgICAgYmFzZV90eXBlKHNyY19yZWctJmd0O3R5cGUpICE9IFBUUl9UT19CVEZfSUQgJmFtcDsmYW1wOwogCSAgICBiYXNlX3R5cGUoZHN0X3JlZy0mZ3Q7dHlwZSkgIT0gUFRSX1RPX0JURl9JRCkgewogCQllcV9icmFuY2hfcmVncyA9IE5VTEw7CkBAIC0xNzEwMSw5ICYjNDM7MTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKGVxX2JyYW5jaF9yZWdzKSB7Ci0JCQlpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLSZndDt0eXBlKSkKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgZHN0ICE9IE5VTEwgPSZndDsgc3JjICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKHNyY19yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O3NyY19yZWddKTsKLQkJCWVsc2UKJiM0MzsJCQkvKiBzcmMgPT0gZHN0ICZhbXA7JmFtcDsgc3JjICE9IE5VTEwgPSZndDsgZHN0ICE9IE5VTEwgKi8KJiM0MzsJCQlpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgJmFtcDsmYW1wOyB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctJmd0O3R5cGUpKQogCQkJCW1hcmtfcHRyX25vdF9udWxsX3JlZygmYW1wO2VxX2JyYW5jaF9yZWdzW2luc24tJmd0O2RzdF9yZWddKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYwppbmRleCAzZDFlOGRlNDM5MGMyLi5iNDEyYTU0MmVmNzZmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jCkBAIC0zLDcgJiM0MzszLDkgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2tmdW5jcy5oJiMzNDsKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7CkBAIC0xMiw2ICYjNDM7MTQsMTMgQEAgc3RydWN0IHsKIAlfX3R5cGUodmFsdWUsIGludCk7CiB9IG1hcF94c2ttYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIGludCk7CiYjNDM7fSBtYXBfaGFzaCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06CiAgKgogICogICByNiA9IHNrYi0mZ3Q7c2s7CkBAIC0yNjQsNCAmIzQzOzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKQogICAgICAgICA6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kCiYjNDM7ICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC4KJiM0MzsgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19mYWlsdXJlCiYjNDM7X19tc2coJiMzNDtlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcikmIzM0OykKJiM0MztfX21zZygmIzM0OyZndDsmZ3Q7Jmd0OyAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCAmIzQzOzApJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CS8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqLwkJXAomIzQzOwlyMSA9IDA7CQkJCQkJXAomIzQzOwlyMiA9IDA7CQkJCQkJXAomIzQzOwljYWxsICVbYnBmX3Jkb25seV9jYXN0XTsJCQlcCiYjNDM7CXI2ID0gcjA7CQkJCQlcCiYjNDM7CS8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgJmFtcDtrZXkpOyAqLwlcCiYjNDM7CSoodTY0ICopKHIxMCAtIDgpID0gMDsJCQkJXAomIzQzOwlyMSA9ICVbbWFwX2hhc2hdIGxsOwkJCQlcCiYjNDM7CXIyID0gcjEwOwkJCQkJXAomIzQzOwlyMiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CWNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTsJCQlcCiYjNDM7CS8qCQkJCQkJXAomIzQzOwkgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJiMzOTt0IGJlIG51bGwJXAomIzQzOwkgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuCQlcCiYjNDM7CSAqLwkJCQkJCVwKJiM0MzsJaWYgcjYgIT0gcjAgZ290byAxZjsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIwICYjNDM7IDApOwkJCQlcCiYjNDM7MToJcjAgPSAwOwkJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksCiYjNDM7CSAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksCiYjNDM7CSAgX19pbW1fYWRkcihtYXBfaGFzaCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrZnVuY19yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfcmRvbmx5X2Nhc3QoMCwgMCk7CiYjNDM7fQomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMQoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiAxMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkJQRiBWZXJpZmllciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBgY2hlY2tfY29uZF9qbXBfb3AoKWAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMsIHRoZSBvcmlnaW5hbCBsb2dpYyBpbmNvcnJlY3RseSBpbmZlcnJlZCBwb2ludGVyIG5vbi1udWxsbmVzcyBpbiBjZXJ0YWluIGNvbXBhcmlzb24gc2NlbmFyaW9zLiBJdCBzZWVtcyB0aGUgdmVyaWZpZXIgd2FzIG1ha2luZyBhbiBhc3N1bXB0aW9uOiBpZiB5b3UgY29tcGFyZSB0d28gcG9pbnRlcnMgYW5kIG9uZSAqbWlnaHQqIGJlIG51bGwsIGJ1dCB0aGUgb3RoZXIgKmlzbiYjMzk7dCosIGFuZCB0aGV5IGFyZSBlcXVhbCwgdGhlbiB0aGUgbnVsbGFibGUgcG9pbnRlciBiZWNvbWVzIG5vbi1udWxsLiBUaGUgcHJvYmxlbSBpcywgdGhpcyBpbmZlcmVuY2Ugd2FzIGZsYXdlZCwgYmVjYXVzZSB0aGUgc2Vjb25kIHBvaW50ZXIgYWxzbyBtaWdodCBiZSBudWxsLCBidXQgbm90ICpndWFyYW50ZWVkKiB0byBiZSBub24tbnVsbC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBjaGVja2VkIGZvciB0aGUgKmRpZmZlcmVuY2UqIGluIHRoZSBgdHlwZV9tYXlfYmVfbnVsbCgpYCByZXN1bHQsIGFuZCBtaXNzZWQgY2FzZXMgd2hlcmUgYm90aCBjb3VsZCBiZSBudWxsLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBCUEYgcHJvZ3JhbSBwb3RlbnRpYWxseSBkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyLCBvciBhY2Nlc3NpbmcgbWVtb3J5IG91dC1vZi1ib3VuZHMsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGhhcyBpbmNvcnJlY3RseSBhc3Nlc3NlZCBzYWZldHkuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBleHBsaWNpdGx5IGNoZWNraW5nLCB3aXRoIGByZWdfbm90X251bGwoZW52LCBkc3RfcmVnKWAsIGlmIHRoZSAqb3RoZXIqIHBvaW50ZXIgaXMgYWN0dWFsbHkgbm9uLW51bGwgYmVmb3JlIG1ha2luZyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaXJzdCBwb2ludGVyIGlzIGFsc28gbm9uLW51bGwuIFRoaXMgaXMgYSBjcnVjaWFsIGZpeCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMgYW5kIGVuc3VyZSBwcm9wZXIgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyB3aXRoaW4gdGhlIHZlcmlmaWVyLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyBLTVNBTiBuZWVkZWQgaGVyZT8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBidWcgaXMgYWJvdXQgKnBvaW50ZXIgbnVsbGFiaWxpdHkqLCB3aGljaCBsZWFkcyB0byBtZW1vcnkgc2FmZXR5IGlzc3VlczogcG90ZW50aWFsbHksIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIHZlcmlmaWVyIGluY29ycmVjdGx5IG1hcmtzIGEgcG9pbnRlciBhcyBzYWZlLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFRoZXkgYXJlIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZSB2ZXJpZmllciYjMzk7cyBtaXNpbnRlcnByZXRhdGlvbiBvZiB0aGUgQlBGIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFrcywgb3IgaG93IHRoZSB2ZXJpZmllciAqaGFuZGxlcyogcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGZvY3VzZWQgZW50aXJlbHkgb24gdHJhY2tpbmcgcG9pbnRlciBub24tbnVsbGl0eS4gS01TQU4gaXMgZ3JlYXQsIGJ1dCBpdCYjMzk7cyBwdXJwb3NlIGlzIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBub3QgdGhlIGlzc3VlIGhlcmUuIEkgYW0gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTiA9IGZhbHNlYCBoZXJlIGlzIGNvcnJlY3QuIFRoZSByZWFzb25pbmcgYmVpbmcgdGhhdCwgYmVjYXVzZSB0aGUgaXNzdWUgaXMgb25lIHRoYXQgY2F1c2VzIGlzc3VlcywgZS5nLiBhY2Nlc3NpbmcgYSBudWxsIHBvaW50ZXIsIHRoYXQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJiMzOTt0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMC40ODU5MTA1MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIzNTAzMzc5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbid0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMC40ODU5MTU3NTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTMyODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzZGViNmRkY2Y1ZWQ3YjE5NDM4MGRhZjY2YWRmMTljNzI0NThlZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTAzNmFlMjBiZjZiOS4uODk3ZWM0YjM4ZGVhYiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzU1LDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0XFxuIFxcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XFxuIFxcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcXG4gXFx0XFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcXG4rXFx0XFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcXG4rXFx0XFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XFxuIFxcdFxcdHR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSB8fFxcbiBcXHRcXHR0eXBlID09IFBUUl9UT19NQVBfS0VZIHx8XFxuIFxcdFxcdHR5cGUgPT0gUFRSX1RPX1NPQ0tfQ09NTU9OIHx8XFxuQEAgLTE3MDg1LDcgKzE3MDg3LDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc19qbXAzMiBcXHUwMDI2XFx1MDAyNiBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgYmFzZV90eXBlKHNyY19yZWctXFx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGJhc2VfdHlwZShkc3RfcmVnLVxcdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEKSB7XFxuIFxcdFxcdGVxX2JyYW5jaF9yZWdzID0gTlVMTDtcXG5AQCAtMTcxMDEsOSArMTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXFfYnJhbmNoX3JlZ3MpIHtcXG4tXFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxuK1xcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgZHN0ICE9IE5VTEwgPVxcdTAwM2Ugc3JjICE9IE5VTEwgKi9cXG4rXFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxuIFxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10pO1xcbi1cXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdC8qIHNyYyA9PSBkc3QgXFx1MDAyNlxcdTAwMjYgc3JjICE9IE5VTEwgPVxcdTAwM2UgZHN0ICE9IE5VTEwgKi9cXG4rXFx0XFx0XFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cXHUwMDNldHlwZSkpXFxuIFxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXFxuaW5kZXggM2QxZThkZTQzOTBjMi4uYjQxMmE1NDJlZjc2ZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcXG5AQCAtMyw3ICszLDkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkYm9vbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImJwZl9rZnVuY3MuaFxcXCJcXG4gXFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5AQCAtMTIsNiArMTQsMTMgQEAgc3RydWN0IHtcXG4gXFx0X190eXBlKHZhbHVlLCBpbnQpO1xcbiB9IG1hcF94c2ttYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBpbnQpO1xcbit9IG1hcF9oYXNoIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06XFxuICAqXFxuICAqICAgcjYgPSBza2ItXFx1MDAzZXNrO1xcbkBAIC0yNjQsNCArMjczLDQ3IEBAIF9fbmFrZWQgdm9pZCBqbmVfcmVnX3JlZ19udWxsX2NoZWNrKHZvaWQpXFxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQSBjb21wYXJpc29uIGJldHdlZW4gUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVEIGFuZFxcbisgKiBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgc2hvdWxkIG5vdCBpbmZlciB0aGF0IG1hcCBwb2ludGVyIGlzIG5vdCBudWxsLlxcbisgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZmFpbHVyZVxcbitfX21zZyhcXFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXFxcIilcXG4rX19tc2coXFxcIlxcdTAwM2VcXHUwMDNlXFx1MDAzZSAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCArMClcXFwiKVxcbitfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC8qIHI2ID0gYnBmX3Jkb25seV9jYXN0KDAsIDApOyAqL1xcdFxcdFxcXFxcXG4rXFx0cjEgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjIgPSAwO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07XFx0XFx0XFx0XFxcXFxcbitcXHRyNiA9IHIwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LyogcjAgPSBicGZfbWFwX2xvb2t1cF9lbGVtKG1hcF9oYXNoLCBcXHUwMDI2a2V5KTsgKi9cXHRcXFxcXFxuK1xcdCoodTY0ICopKHIxMCAtIDgpID0gMDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIxID0gJVttYXBfaGFzaF0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMiA9IHIxMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIyICs9IC04O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1xcdFxcdFxcdFxcXFxcXG4rXFx0LypcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAqIGJ1Z2d5IHZlcmlmaWVyIGFzc3VtZWQgdGhhdCByNiBjYW4ndCBiZSBudWxsXFx0XFxcXFxcbitcXHQgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuXFx0XFx0XFxcXFxcbitcXHQgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIHI2ICE9IHIwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHIwICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbisxOlxcdHIwID0gMDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXFxuK1xcdCAgX19pbW0oYnBmX21hcF9sb29rdXBfZWxlbSksXFxuK1xcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rdm9pZCBrZnVuY19yb290KHZvaWQpXFxuK3tcXG4rXFx0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xcbit9XFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MjEuMDUyMDUxODA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ2MzExNzIxMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJYRFBfU09DS0VUU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBsb2dpYyBmb3IgaW5mZXJyaW5nIG51bGxhYmlsaXR5IG9mIHBvaW50ZXJzIGluIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyAoY2hlY2tfY29uZF9qbXBfb3ApLiBJdCBhbHNvIHVwZGF0ZXMgcmVnX25vdF9udWxsIHRvIGluY2x1ZGUgUFRSX1RPX1hEUF9TT0NLIGFuZCBQVFJfVE9fQlVGLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCByZWFjaGFibGUgdmlhIHRoZSBicGYoKSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxM2RlYjZkZGNmNWVkN2IxOTQzODBkYWY2NmFkZjE5YzcyNDU4ZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDY6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGUwMzZhZTIwYmY2YjkuLjg5N2VjNGIzOGRlYWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTM1NSw2ICszNTUsOCBAQCBzdGF0aWMgYm9vbCByZWdfbm90X251bGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdFxuIFx0dHlwZSA9IGJhc2VfdHlwZSh0eXBlKTtcbiBcdHJldHVybiB0eXBlID09IFBUUl9UT19TT0NLRVQgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fVENQX1NPQ0sgfHxcbitcdFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcbitcdFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX01BUF9WQUxVRSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfS0VZIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1NPQ0tfQ09NTU9OIHx8XG5AQCAtMTcwODUsNyArMTcwODcsNiBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHQgKi9cbiBcdGlmICghaXNfam1wMzIgXHUwMDI2XHUwMDI2IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmFzZV90eXBlKHNyY19yZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBiYXNlX3R5cGUoZHN0X3JlZy1cdTAwM2V0eXBlKSAhPSBQVFJfVE9fQlRGX0lEKSB7XG4gXHRcdGVxX2JyYW5jaF9yZWdzID0gTlVMTDtcbkBAIC0xNzEwMSw5ICsxNzEwMiwxMSBAQCBzdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0aWYgKGVxX2JyYW5jaF9yZWdzKSB7XG4tXHRcdFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlcbitcdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBkc3QgIT0gTlVMTCA9XHUwMDNlIHNyYyAhPSBOVUxMICovXG4rXHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSk7XG4tXHRcdFx0ZWxzZVxuK1x0XHRcdC8qIHNyYyA9PSBkc3QgXHUwMDI2XHUwMDI2IHNyYyAhPSBOVUxMID1cdTAwM2UgZHN0ICE9IE5VTEwgKi9cbitcdFx0XHRpZiAocmVnX25vdF9udWxsKGVudiwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSlcbiBcdFx0XHRcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcdTAwMjZlcV9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuaW5kZXggM2QxZThkZTQzOTBjMi4uYjQxMmE1NDJlZjc2ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jXG5AQCAtMyw3ICszLDkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImJwZl9rZnVuY3MuaFwiXG4gXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbkBAIC0xMiw2ICsxNCwxMyBAQCBzdHJ1Y3Qge1xuIFx0X190eXBlKHZhbHVlLCBpbnQpO1xuIH0gbWFwX3hza21hcCBTRUMoXCIubWFwc1wiKTtcbiBcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rXHRfX3R5cGUoa2V5LCBpbnQpO1xuK1x0X190eXBlKHZhbHVlLCBpbnQpO1xuK30gbWFwX2hhc2ggU0VDKFwiLm1hcHNcIik7XG4rXG4gLyogVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbTpcbiAgKlxuICAqICAgcjYgPSBza2ItXHUwMDNlc2s7XG5AQCAtMjY0LDQgKzI3Myw0NyBAQCBfX25ha2VkIHZvaWQgam5lX3JlZ19yZWdfbnVsbF9jaGVjayh2b2lkKVxuICAgICAgICAgOiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLypcbisgKiBBIGNvbXBhcmlzb24gYmV0d2VlbiBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQgYW5kXG4rICogUFRSX1RPX01BUF9WQUxVRV9PUl9OVUxMIHNob3VsZCBub3QgaW5mZXIgdGhhdCBtYXAgcG9pbnRlciBpcyBub3QgbnVsbC5cbisgKiBBIGJ1ZyBpbiBjaGVja19jb25kX2ptcF9vcCgpIG1hZGUgc3VjaCBpbmZlcmVuY2UgcG9zc2libGUuXG4rICovXG4rU0VDKFwicmF3X3RwXCIpXG4rX19mYWlsdXJlXG4rX19tc2coXCJlcnJvcjogaW52YWxpZCBkZXJlZmVyZW5jZSBvZiBSMCAoYSBudWxsYWJsZSBtYXAgdmFsdWUgcG9pbnRlcilcIilcbitfX21zZyhcIlx1MDAzZVx1MDAzZVx1MDAzZSAxMSB8ICg2MSkgcjAgPSAqKHUzMiAqKShyMCArMClcIilcbitfX25ha2VkIHZvaWQgdW50cnVzdGVkX21lbV9kb2VzX25vdF9pbmZlcl9tYXBfdmFsdWVfbm9uX251bGwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHQvKiByNiA9IGJwZl9yZG9ubHlfY2FzdCgwLCAwKTsgKi9cdFx0XFxcbitcdHIxID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0cjIgPSAwO1x0XHRcdFx0XHRcdFxcXG4rXHRjYWxsICVbYnBmX3Jkb25seV9jYXN0XTtcdFx0XHRcXFxuK1x0cjYgPSByMDtcdFx0XHRcdFx0XFxcbitcdC8qIHIwID0gYnBmX21hcF9sb29rdXBfZWxlbShtYXBfaGFzaCwgXHUwMDI2a2V5KTsgKi9cdFxcXG4rXHQqKHU2NCAqKShyMTAgLSA4KSA9IDA7XHRcdFx0XHRcXFxuK1x0cjEgPSAlW21hcF9oYXNoXSBsbDtcdFx0XHRcdFxcXG4rXHRyMiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHIyICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9tYXBfbG9va3VwX2VsZW1dO1x0XHRcdFxcXG4rXHQvKlx0XHRcdFx0XHRcdFxcXG4rXHQgKiBidWdneSB2ZXJpZmllciBhc3N1bWVkIHRoYXQgcjYgY2FuJ3QgYmUgbnVsbFx0XFxcbitcdCAqIGFuZCBtYXJrZWQgcjAgbm9uLW51bGwgYXMgd2VsbC5cdFx0XFxcbitcdCAqL1x0XHRcdFx0XHRcdFxcXG4rXHRpZiByNiAhPSByMCBnb3RvIDFmO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjAgKyAwKTtcdFx0XHRcdFxcXG4rMTpcdHIwID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tKGJwZl9yZG9ubHlfY2FzdCksXG4rXHQgIF9faW1tKGJwZl9tYXBfbG9va3VwX2VsZW0pLFxuK1x0ICBfX2ltbV9hZGRyKG1hcF9oYXNoKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rdm9pZCBrZnVuY19yb290KHZvaWQpXG4re1xuK1x0YnBmX3Jkb25seV9jYXN0KDAsIDApO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyMS4wNTIwNTI5OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU2MTI0ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgdGhlIEJQRiB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIGl0J3MgZm9jdXNlZCBvbiBudWxsIHBvaW50ZXIgY2hlY2tzLCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIGluIEJQRi4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBgcmVnX25vdF9udWxsYCBmdW5jdGlvbjsgaXTigJlzIG5vdyBnb2luZyB0byByZXR1cm4gYHRydWVgIGZvciBgUFRSX1RPX1hEUF9TT0NLYCBhbmQgYFBUUl9UT19CVUZgIHBvaW50ZXIgdHlwZXMsIGV4cGFuZGluZyBpdHMgc2NvcGUgYmV5b25kIHRoZSBvcmlnaW5hbCBpbnRlbnQuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucy5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGp1bXAgb3BlcmF0aW9ucyDigJMgcGFydGljdWxhcmx5IHRoZSBjb21wYXJpc29uIG9mIHBvaW50ZXJzIHdoZXJlIG9uZSAqbWlnaHQqIGJlIG51bGwsIGFuZCB0aGUgb3RoZXIgaXMgZGVmaW5pdGVseSBub3QuIFRoZSBsb2dpYyB3aXRoaW4gYGNoZWNrX2NvbmRfam1wX29wYCBpcyBiZWluZyByZWZpbmVkLiBJdCBhcHBlYXJzIHRoZXnigJlyZSByZW1vdmluZyBhIGNvbmRpdGlvbjogYHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSAhPSB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSlgLiBJbnN0ZWFkLCB0aGV5J3JlIGFkZGluZyB0aGVzZSB0d28gY3J1Y2lhbCBjaGVja3M6IGBpZiAocmVnX25vdF9udWxsKGVudiwgZHN0X3JlZykgXHUwMDI2XHUwMDI2IHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cdTAwM2V0eXBlKSlgIGFuZCBgaWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpYC4gVGhpcyBpcyBtYWtpbmcgbWUgdGhpbmsgdGhpcyBpcyBsaWtlbHkgZml4aW5nIGFuIGluZmVyZW5jZSBidWcgaW4gdGhlIHZlcmlmaWVyLlxuXG5Fc3NlbnRpYWxseSwgdGhleSBhcmUgdGlnaHRlbmluZyB1cCB0aGUgdmVyaWZpZXIncyBudWxsYWJpbGl0eSBpbmZlcmVuY2Ugd2hlbiBkZWFsaW5nIHdpdGggcG9pbnRlciBjb21wYXJpc29ucyB3aGVyZSBvbmUgcG9pbnRlciBpcyBrbm93biB0byBiZSBub24tbnVsbCBhbmQgdGhlIG90aGVyIG1pZ2h0IGJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGltcHJvdmVtZW50LCBiZWNhdXNlIGluY29ycmVjdCBudWxsYWJpbGl0eSBpbmZlcmVuY2UgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHNlY3VyaXR5IGlzc3Vlcywgb3IgbW9yZSBzaW1wbHksIGluY29ycmVjdCB2ZXJpZmllciBmYWlsdXJlcyAob3Igc3VjY2VzcykuXG5cbkZpbmFsbHksIHRoZXJlIGlzIGEgbmV3IHRlc3QgY2FzZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jYCwgd2hpY2ggbGlrZWx5IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGFuZCB2ZXJpZmllcyB0aGUgZml4LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCB0ZXN0IHRvIGZ1bGx5IGdyYXNwIHRoZSBpc3N1ZSBhbmQgZW5zdXJlIHRoZSBmaXggaXMgY29tcHJlaGVuc2l2ZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiB0aGUgZGlyZWN0b3J5LlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgbm93OyBJJ2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNjoyOC43MDgxODAyMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0NTQxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfY29uZF9qbXBfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwLSAqIFBUUl9UT19NQVBfVkFMVUUgYW5kIHRoZSBzYW1lIHJlZ2lzdGVyIGNoYW5nZXMgc3RhdGUgdG8gQ09OU1RfSU1NIGluIHRoZSBmYWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE6ICogYnJhbmNoLiBTZWUgY2hlY2tfY29uZF9qbXBfb3AoKS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyLSAqXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTY4NDk9c3RhdGljIHZvaWQgc3luY19saW5rZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2OTA0OnN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY5MDUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCAqaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyMTI9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Mjk4LVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyOTk6XFx0XFx0cmV0dXJuIGNoZWNrX2NvbmRfam1wX29wKGVudiwgaW5zbiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODMwMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA2OjI4Ljc1ODYzODg2NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDYxNzIwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIFZlcmlmaWVyOiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIsIHdoaWNoIGlzIGEga2VybmVsIGNvbXBvbmVudCwgbWFraW5nIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiBpdHMgcmVhY2hhYmlsaXR5IHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCwgaXQncyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGlkZW50aWZ5aW5nIHNvbWUgZm9jdXMgc3ltYm9scy4gSSBpbml0aWFsbHkgdGhvdWdodCBgY2hlY2tfY29uZF9qbXBfb3BgIG1pZ2h0IGJlIGEgZ29vZCBvbmUsIGJ1dCB3YWl0Li4uIGl0J3Mgc3RhdGljLiBUaGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgZnV6emluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGRvX2NoZWNrX2luc25gLiBCb3RoIGFyZSBzdGF0aWMgYW5kIGludGVybmFsLiBBbHJpZ2h0LCBuZXcgcGxhbjogSSBuZWVkIHRvIGZpbmQgdGhlIG1haW4gZW50cnkgcG9pbnRzIGludG8gdGhlIEJQRiB2ZXJpZmllciBpdHNlbGYuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9ucyB0aGF0IGNhbiB0cmlnZ2VyIGl0cyBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzMuNTY0ODEzODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2Mzc3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MS0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjY0Mj1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNjUzLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI2NTQ6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjY1NS0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwMDg9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDAyMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwMjI6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDIzLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA0NDU9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0NzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDc2OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0NzctXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU0NC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA1NDU6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDU0Ni1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDk3OD1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItLypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5OTM6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTk0LSAqIG9uY2UgdGhlIHByb2dyYW0ncyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMTAwMT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTExNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMTg6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTE5LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTMyLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEzMzpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTM0LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMjQzLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjQ0OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNjMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMjY0OlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjEyNjUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA2OjMzLjYxMzQ1ODUyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTAwMDcxMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgQlBGIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyB0aGUgZW50cnkgcG9pbnQuIEl0IGxvb2tzIGxpa2UgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoLiBHb29kLCB0aGF0J3MgYSBzdHJhaWdodGZvcndhcmQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyBgYnBmX2NoZWNrYCBpcyBkZWNsYXJlZC4gSXMgaXQgZXhwb3J0ZWQ/IE9yIGlzIGl0IHN0YXRpYz8gQWgsIGFscmlnaHQsIGl0J3MgZGVmaW5lZCBhcyBgaW50IGJwZl9jaGVjayguLi4pYC4gTm90IHN0YXRpYywgc28gaXQgc2hvdWxkIGJlIHZpc2libGUgZXh0ZXJuYWxseS4gVGhhdCdzIGdvb2QgdG8ga25vdyBmb3IgdW5kZXJzdGFuZGluZyBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBpbnRlcmFjdCB3aXRoIGl0LlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4gTGV0J3Mgc2VlLi4uIHllcCwgdGhlIEJQRiBzeXNjYWxsIGZlYXR1cmUgaXMgZGVmaW5lZCBhcyBgQlBGX1NZU0NBTExgLiBUaGF0J2xsIGJlIHVzZWZ1bCBsYXRlciBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIHRvIGtub3cgd2hlcmUgdGhlIGhvb2tzIGFyZS4gR290IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDkwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzcuOTAzNDY4MzE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTkxMTAxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDY6MzguMTMzMzg2NzM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NzY4OTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgQlBGIGNvbmZpZ3VyYXRpb24gaXMgY29udHJvbGxlZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGxpa2VseSBzb3VyY2U6IGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCdzIGFsbW9zdCBhbHdheXMgdGhlIGNlbnRyYWwgaHViIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkga25vdyB0aGF0J3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJZiBpdCdzIG5vdCBkaXJlY3RseSBpbiBgS2NvbmZpZ2AsIEknbGwgc3RhcnQgbG9va2luZyBmb3IgcmVsYXRlZCBgS2NvbmZpZ2AgZmlsZXMgaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwgdHJlZTsgdGhlcmUgbWlnaHQgYmUgbmVzdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGluY2x1ZGVzIHRvIG90aGVyIHJlbGV2YW50IGNvbmZpZyBmaWxlcy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDAxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDcuODEwMjc5NTY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3OTUzNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODowOS42MjgyNDIwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM1MDA1NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gYEJQRl9TWVNDQUxMYCDigJMgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBmdW5jdGlvbnMgYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGxpa2VseSB0d2Vha2luZyB0aGUgdmVyaWZpZXIncyBsb2dpYyBhcm91bmQgY29uZGl0aW9uYWwganVtcHMgYW5kIG51bGwgcmVnaXN0ZXIgY2hlY2tzLCB3aGljaCBpcyBhIGZhaXJseSBjb21tb24gYXJlYSBmb3IgQlBGIHNlY3VyaXR5IGhhcmRlbmluZyBvciBidWcgZml4ZXMuIE15IHByaW1hcnkgYXJlYSBvZiBmb2N1cyBzaG91bGQgYmUgdGhlIGBicGZfY2hlY2tgIHN5bWJvbHMgd2l0aGluIHRoaXMgY29udGV4dC5cblxuQmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgY2hhbmdlLiBUaGUgdGVzdCBzdWl0ZSBoaW50cyBhdCB0aGUgdXNlIG9mIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCBhbmQgYEJQRl9NQVBfVFlQRV9IQVNIYC4gQ29uc2lkZXJpbmcgYFhTS01BUGAgaXMgc3Ryb25nbHkgYXNzb2NpYXRlZCB3aXRoIEFGX1hEUCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBhbHNvIGEgZGVwZW5kZW5jeSBvciByZWxldmFudC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE1LjM2MzI1MDU5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4Nzc3NjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjE3LjI1MTAzMjc0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEzNTM5NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2gncyBJbXBhY3Qgb24gWERQIFNvY2tldCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFBUUl9UT19YRFBfU09DS2AgYW5kIGBQVFJfVE9fQlVGYCB3aXRoaW4gdGhlIGByZWdfbm90X251bGxgIGZ1bmN0aW9uLCBpbnRlcmVzdGluZy4gVGhlIGZhY3QgdGhhdCBgUFRSX1RPX1hEUF9TT0NLYCBpcyBiZWluZyBtb2RpZmllZCBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHN0cm9uZyBsaW5rIHRvIGBYRFBfU09DS0VUU2AuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIHZlcmlmaWVyIHdvdWxkIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVzZSBzcGVjaWZpYyBwb2ludGVyIHR5cGVzIHdoZW4gZGVhbGluZyB3aXRoIFhEUCBzb2NrZXRzLiBDb25zZXF1ZW50bHksIGFkZGluZyBgWERQX1NPQ0tFVFNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjb3Vyc2Ugb2YgYWN0aW9uIGhlcmUuIEl0J3MgdGhlIGxvZ2ljYWwgdGhpbmcgdG8gZG8gdG8gZ2V0IHRoaW5ncyB3b3JraW5nIHJpZ2h0LCBhc3N1bWluZyB0aGUgdXNlciBoYXMgZW5hYmxlZCBYRFBfU09DS0VUUy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYFBUUl9UT19YRFBfU09DS2Agd2l0aGluIHRoZSBrZXJuZWwncyBCUEYgdmVyaWZpZXIgY29kZSBpdHNlbGYuIFNwZWNpZmljYWxseSwgSSdsbCBkaXZlIGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCdzIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGF0IHBvaW50ZXIgdHlwZSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjIxLjA2NDU3NDczOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDcyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRSX1RPX1hEUF9TT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ3PXN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1Ny1cXHRcXHR0eXBlID09IFBUUl9UT19UQ1BfU09DSyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTg6XFx0XFx0dHlwZSA9PSBQVFJfVE9fWERQX1NPQ0sgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU5LVxcdFxcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTU9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5LVxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzA6XFx0XFx0cmVnLVxcdTAwM2V0eXBlID0gUFRSX1RPX1hEUF9TT0NLIHwgbWF5YmVfbnVsbDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MS1cXHR9IGVsc2UgaWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1NPQ0tNQVAgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDAwPXN0YXRpYyBpbnQgY2hlY2tfc29ja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMjItXFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMjM6XFx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMjQtXFx0XFx0dmFsaWQgPSBicGZfeGRwX3NvY2tfaXNfdmFsaWRfYWNjZXNzKG9mZiwgc2l6ZSwgdCwgXFx1MDAyNmluZm8pO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUyMzQ9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI3OC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTI3OTpcXHRjYXNlIFBUUl9UT19YRFBfU09DSzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTI4MC1cXHRcXHRwb2ludGVyX2Rlc2MgPSBcXFwieGRwX3NvY2sgXFxcIjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz04MTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBzb2NrX3R5cGVzID0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNjYtXFx0XFx0UFRSX1RPX1RDUF9TT0NLLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTY3OlxcdFxcdFBUUl9UT19YRFBfU09DSyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtODE2OC1cXHR9LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgxNzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MTc2LVxcdFxcdFBUUl9UT19UQ1BfU09DSyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODE3NzpcXHRcXHRQVFJfVE9fWERQX1NPQ0ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxNzgtXFx0XFx0UFRSX1RPX0JURl9JRCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzk2MT1zdGF0aWMgYm9vbCByZWdfdHlwZV9taXNtYXRjaF9vayhlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY3LVxcdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk2ODpcXHRjYXNlIFBUUl9UT19YRFBfU09DSzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjktXFx0Y2FzZSBQVFJfVE9fQlRGX0lEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyMS4xMTI2Mjk0OTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyNDE1NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFhEUCBhbmQgZUJQRiBNYXAgVHlwZXMqKlxuXG5SaWdodCwgc28gdGhpcyB0ZXN0IGlzIGxldmVyYWdpbmcgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgZ2l2ZXMgdXMgYSBgUFRSX1RPX1hEUF9TT0NLYCByZXR1cm4gdmFsdWUuIE9rYXksIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlIHJlbGV2YW5jZSBvZiBgWERQX1NPQ0tFVFNgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIFhEUCBhbmQgdHJ5aW5nIHRvIGludGVncmF0ZSBpdCB3aXRoIHNvY2tldHMgc29tZWhvdywgcHJvYmFibHkgdG8gaW1wbGVtZW50IHVzZXIgc3BhY2UgYXBwbGljYXRpb25zIG92ZXIgWERQLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgam9nIG15IG1lbW9yeSBhbmQgc2VlIGhvdyBgUFRSX1RPX0JVRmAgZml0cyBpbnRvIGFsbCB0aGlzLiBJIHRoaW5rIGl0IGlzIHVzZWQgZm9yIGEgZGlmZmVyZW50IHB1cnBvc2UgYW5kIG1pZ2h0IGV4cGxhaW4gaG93IGRhdGEgaXMgdHJhbnNtaXR0ZWQgaW4gWERQIG9yIGluIGdlbmVyYWwgZUJQRiBmdW5jdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgYW5kIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG5ldHdvcmsgcHJvZ3JhbW1hYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MjUuNzM2Nzg3NDU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM2NDg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQVFJfVE9fQlVGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQ3PXN0YXRpYyBib29sIHJlZ19ub3RfbnVsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1OC1cXHRcXHR0eXBlID09IFBUUl9UT19YRFBfU09DSyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNTk6XFx0XFx0dHlwZSA9PSBQVFJfVE9fQlVGIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM2MC1cXHRcXHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDE2PXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYwMC1cXHRcXHRcXHRcXHRcXHQgICAgICB2YWx1ZV9yZWdubyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2MDE6XFx0fSBlbHNlIGlmIChiYXNlX3R5cGUocmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fQlVGIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MDItXFx0XFx0ICAgIXR5cGVfbWF5X2JlX251bGwocmVnLVxcdTAwM2V0eXBlKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTcwMzY9c3RhdGljIGludCBjaGVja19oZWxwZXJfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHplcm9fc2l6ZV9hbGxvd2VkKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzA3NjpcXHRjYXNlIFBUUl9UT19CVUY6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcwNzctXFx0XFx0aWYgKHR5cGVfaXNfcmRvbmx5X21lbShyZWctXFx1MDAzZXR5cGUpKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgbWVtX3R5cGVzID0ge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTMtXFx0XFx0UFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4MTk0OlxcdFxcdFBUUl9UT19CVUYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgxOTUtXFx0XFx0UFRSX1RPX0JURl9JRCB8IFBUUl9UUlVTVEVELFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTg1MTI9c3RhdGljIGludCBfX2NoZWNrX2Z1bmNfYXJnX3JlZ19vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU1LVxcdGNhc2UgUFRSX1RPX01FTSB8IE1FTV9SSU5HQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo4NTU2OlxcdGNhc2UgUFRSX1RPX0JVRjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODU1NzpcXHRjYXNlIFBUUl9UT19CVUYgfCBNRU1fUkRPTkxZOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04NTU4LVxcdGNhc2UgUFRSX1RPX0FSRU5BOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0NTYwPXN0YXRpYyBpbnQgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjI3LVxcdGNhc2UgUFRSX1RPX01FTTpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ2Mjg6XFx0Y2FzZSBQVFJfVE9fQlVGOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYyOS1cXHRjYXNlIFBUUl9UT19GVU5DOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyNS43ODQxNTcyNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE1NDYwMDk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIGBQVFJfVE9fQlVGYCBhcHBlYXJzIHRvIGJlIGEgY29tbW9uIGJ1ZmZlciBwb2ludGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgYWZmZWN0cyB0aGUgbGFyZ2VyIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBjaGVja19jb25kX2ptcF9vcGAsIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLiBgZG9fY2hlY2tfaW5zbmAgaXMgdGhlbiBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgYW5kIGBkb19jaGVja2AgZ2V0cyBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIFJpZ2h0LCBzbyBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyB2ZXJpZmljYXRpb24gbG9naWMuIEl0IG1ha2VzIHNlbnNlLCB0aGF0IGlzIHRoZSBCUEYgdmVyaWZpZXIgZW50cnkuXG5cbkJ1dCwgYXJlIHRoZXJlICpvdGhlciogcG90ZW50aWFsIGVudHJ5IHBvaW50cz8gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZy4gSXQncyBiZXN0IHByYWN0aWNlIHRvIHJ1bGUgb3V0IG90aGVyIHBvc3NpYmxlIGFjY2VzcyBwb2ludHMsIHNvIEknbGwgZ28gZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYGJwZl9jaGVja2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODozMi45Mzg3NjEzMjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjg3Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc2NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQwMDpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTE4PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mjc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzIuOTg5MDUxNjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjYyMDEyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIHdvcmtzLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBicGZfcHJvZ19sb2FkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYsIGFuZCBpbnRlcm5hbGx5IGl0IGNhbGxzIGBicGZfY2hlY2tgLiBBaGEsIGBicGZfY2hlY2tgISBUaGF0J3MgaXQsIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGl0c2VsZi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBicGZfY2hlY2tgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBzeW1ib2wuIExvb2tpbmcgYmFjaywgYGJwZl9jaGVja2AgZ2V0cyBjYWxsZWQgZnJvbSBgYnBmX3Byb2dfbG9hZGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAgLSB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBgYnBmX2NoZWNrYCBpcyBkZWZpbml0ZWx5IG15IHByaW1hcnkgZm9jdXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSBpZiBgYnBmX2NoZWNrYCBpcyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBJJ2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uLiBPa2F5LCBpdCdzIG5vdCBtYXJrZWQgYHN0YXRpY2AsIHNvIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0IGFuZCBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTbywgYGJwZl9jaGVja2AgaXMgYSBwZXJmZWN0bHkgdmFsaWQgZm9jdXMgc3ltYm9sIHRvIHVzZSFcblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIFhEUCBzb2NrZXRzIGJlY2F1c2UgdGhlIHRlc3QgY29kZSB1c2VzIGBCUEZfTUFQX1RZUEVfWFNLTUFQYC4gRG8gSSBuZWVkIGBYRFBfU09DS0VUU2AgdG8gdXNlIGBCUEZfTUFQX1RZUEVfWFNLTUFQYD8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgYEJQRl9NQVBfVFlQRV9YU0tNQVBgIGlzIGF2YWlsYWJsZSBldmVuIHdpdGhvdXQgZW5hYmxpbmcgYFhEUF9TT0NLRVRTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNjYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzguMjU1MjU3MDY3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3Nzg2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9YU0tNQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTQtPT09PT09PT09PT09PT09PT09PVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjU6QlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTYtPT09PT09PT09PT09PT09PT09PVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtOC0uLiBub3RlOjpcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo5OiAgIC0gYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgd2FzIGludHJvZHVjZWQgaW4ga2VybmVsIHZlcnNpb24gNC4xOFxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0LTEwLVxcbkRvY3VtZW50YXRpb24vYnBmL21hcF94c2ttYXAucnN0OjExOlRoZSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYCBpcyB1c2VkIGFzIGEgYmFja2VuZCBtYXAgZm9yIFhEUCBCUEYgaGVscGVyXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTItY2FsbCBgYGJwZl9yZWRpcmVjdF9tYXAoKWBgIGFuZCBgYFhEUF9SRURJUkVDVGBgIGFjdGlvbiwgbGlrZSAnZGV2bWFwJyBhbmQgJ2NwdW1hcCcuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD02Nz1SZWRpcmVjdCB0aGUgcGFja2V0IHRvIHRoZSBlbmRwb2ludCByZWZlcmVuY2VkIGJ5IGBgbWFwYGAgYXQgaW5kZXggYGBrZXlgYC5cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdDo2ODpGb3IgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgdGhpcyBtYXAgY29udGFpbnMgcmVmZXJlbmNlcyB0byBYU0sgRkRzXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtNjktZm9yIHNvY2tldHMgYXR0YWNoZWQgdG8gYSBuZXRkZXYncyBxdWV1ZXMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdD0xMzU9S2VybmVsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xMzctXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTM4OlRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHNob3dzIGhvdyB0byBkZWNsYXJlIGEgYGBCUEZfTUFQX1RZUEVfWFNLTUFQYGAgY2FsbGVkXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTM5LWBgeHNrc19tYXBgYCBhbmQgaG93IHRvIHJlZGlyZWN0IHBhY2tldHMgdG8gYW4gWFNLLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3QtMTQzLVxcdHN0cnVjdCB7XFxuRG9jdW1lbnRhdGlvbi9icGYvbWFwX3hza21hcC5yc3Q6MTQ0OlxcdFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG5Eb2N1bWVudGF0aW9uL2JwZi9tYXBfeHNrbWFwLnJzdC0xNDUtXFx0XFx0X190eXBlKGtleSwgX191MzIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0PTEyPVhEUF9SRURJUkVDVCB3b3JrcyB3aXRoIHRoZSBmb2xsb3dpbmcgbWFwIHR5cGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvcmVkaXJlY3QucnN0LTE2LS0gYGBCUEZfTUFQX1RZUEVfQ1BVTUFQYGBcXG5Eb2N1bWVudGF0aW9uL2JwZi9yZWRpcmVjdC5yc3Q6MTc6LSBgYEJQRl9NQVBfVFlQRV9YU0tNQVBgYFxcbkRvY3VtZW50YXRpb24vYnBmL3JlZGlyZWN0LnJzdC0xOC1cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0PTcxPUhvdyBpcyB0aGVuIHBhY2tldHMgZGlzdHJpYnV0ZWQgZnJvbSBhbiBYRFAgcHJvZ3JhbSB0byB0aGUgWFNLcz8gVGhlcmVcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDo3MjppcyBhIEJQRiBtYXAgY2FsbGVkIFhTS01BUCAob3IgQlBGX01BUF9UWVBFX1hTS01BUCBpbiBmdWxsKS4gVGhlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtNzMtdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBjYW4gcGxhY2UgYW4gWFNLIGF0IGFuIGFyYml0cmFyeSBwbGFjZSBpbiB0aGlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yMjA9dXNlci4gSXQgd2lsbCBtYWtlIHlvdXIgcHJvZ3JhbSBhIGxvdCBzaW1wbGVyLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdDoyMjI6WFNLTUFQIC8gQlBGX01BUF9UWVBFX1hTS01BUFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTIyMy09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QtMjI0LVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjIyNTpPbiBYRFAgc2lkZSB0aGVyZSBpcyBhIEJQRiBtYXAgdHlwZSBCUEZfTUFQX1RZUEVfWFNLTUFQIChYU0tNQVApIHRoYXRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdC0yMjYtaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJwZl9yZWRpcmVjdF9tYXAoKSB0byBwYXNzIHRoZSBpbmdyZXNzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZfeGRwLnJzdD0yODI9cm91bmQtcm9iaW4gZXhhbXBsZSBvZiBkaXN0cmlidXRpbmcgcGFja2V0cyBpcyBzaG93biBiZWxvdzpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5MS0gICBzdHJ1Y3Qge1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0OjI5MjogICAgICAgX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0LTI5My0gICAgICAgX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS1MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMTc9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9DUFVNQVAsIGNwdV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTE4LSNpZiBkZWZpbmVkKENPTkZJR19YRFBfU09DS0VUUylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjExOTpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgeHNrX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMjAtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxNy1cXHRCUEZfTUFQX1RZUEVfQ1BVTUFQLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDE4OlxcdEJQRl9NQVBfVFlQRV9YU0tNQVAsXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwMTktXFx0QlBGX01BUF9UWVBFX1NPQ0tIQVNILFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTUyNC1cXHRjYXNlIEJQRl9NQVBfVFlQRV9ERVZNQVBfSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNTI1OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNTI2LVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUodG9rZW4sIENBUF9ORVRfQURNSU4pKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTU9c3RhdGljIHZvaWQgcmVmaW5lX21hcF9sb29rdXBfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4LVxcdFxcdFxcdHJlZy1cXHUwMDNlbWFwX3VpZCA9IHJlZy1cXHUwMDNlaWQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njk6XFx0fSBlbHNlIGlmIChtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9YU0tNQVApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3MC1cXHRcXHRyZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fWERQX1NPQ0sgfCBtYXliZV9udWxsO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwMjU9c3RhdGljIGludCBjaGVja19tYXBfZnVuY19jb21wYXRpYmlsaXR5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTA4NC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTA4NTpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwODYtXFx0XFx0aWYgKGZ1bmNfaWQgIT0gQlBGX0ZVTkNfcmVkaXJlY3RfbWFwIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwMi1cXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfQ1BVTUFQIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkyMDM6XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTIwNC1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NDY4Mz1pbnQgeGRwX2RvX3JlZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNDY4OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo0Njg5OlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfWFNLTUFQKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ2OTAtXFx0XFx0cmV0dXJuIF9feGRwX2RvX3JlZGlyZWN0X3hzayhyaSwgZGV2LCB4ZHAsIHhkcF9wcm9nKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTQ2OTc9aW50IHhkcF9kb19yZWRpcmVjdF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3MDMtXFxubmV0L2NvcmUvZmlsdGVyLmM6NDcwNDpcXHRpZiAobWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1hTS01BUClcXG5uZXQvY29yZS9maWx0ZXIuYy00NzA1LVxcdFxcdHJldHVybiBfX3hkcF9kb19yZWRpcmVjdF94c2socmksIGRldiwgeGRwLCB4ZHBfcHJvZyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz00NzExPXN0YXRpYyBpbnQgeGRwX2RvX2dlbmVyaWNfcmVkaXJlY3RfbWFwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy00NzQ1LVxcdFxcdGJyZWFrO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjQ3NDY6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfWFNLTUFQOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTQ3NDctXFx0XFx0ZXJyID0geHNrX2dlbmVyaWNfcmN2KGZ3ZCwgeGRwKTtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDE3LVxcdEJQRl9NQVBfVFlQRV9DUFVNQVAsXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwMTg6XFx0QlBGX01BUF9UWVBFX1hTS01BUCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTAxOS1cXHRCUEZfTUFQX1RZUEVfU09DS0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTgxLVxcdFtCUEZfTUFQX1RZUEVfQ1BVTUFQXVxcdFxcdFxcdD0gXFxcImNwdW1hcFxcXCIsXFxudG9vbHMvbGliL2JwZi9saWJicGYuYzoxODI6XFx0W0JQRl9NQVBfVFlQRV9YU0tNQVBdXFx0XFx0XFx0PSBcXFwieHNrbWFwXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTE4My1cXHRbQlBGX01BUF9UWVBFX1NPQ0tIQVNIXVxcdFxcdFxcdD0gXFxcInNvY2toYXNoXFxcIixcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM9NTQwMz1zdGF0aWMgaW50IGJwZl9vYmplY3RfX2NyZWF0ZV9tYXAoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBpc19pbm5lcilcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNTQ2Ny1cXHRjYXNlIEJQRl9NQVBfVFlQRV9DUFVNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGYuYzo1NDY4OlxcdGNhc2UgQlBGX01BUF9UWVBFX1hTS01BUDpcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTU0NjktXFx0Y2FzZSBCUEZfTUFQX1RZUEVfU09DS01BUDpcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jPTI5Mj1zdGF0aWMgaW50IHByb2JlX21hcF9jcmVhdGUoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYy0zNzUtXFx0Y2FzZSBCUEZfTUFQX1RZUEVfQ1BVTUFQOlxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jOjM3NjpcXHRjYXNlIEJQRl9NQVBfVFlQRV9YU0tNQVA6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzc3LVxcdGNhc2UgQlBGX01BUF9UWVBFX1NPQ0tIQVNIOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jPTQ3NT1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo0NzY6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9YU0tNQVApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYy00NzctXFx0X191aW50KG1heF9lbnRyaWVzLCBNQVhfRU5UUklFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmM9Njg2PWludCBjZ19za2Iodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jLTcwMy1cXHRWRVJJRllfVFlQRShCUEZfTUFQX1RZUEVfQ1BVTUFQLCBjaGVja19jcHVtYXApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYzo3MDQ6XFx0VkVSSUZZX1RZUEUoQlBGX01BUF9UWVBFX1hTS01BUCwgY2hlY2tfeHNrbWFwKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMtNzA1LVxcdFZFUklGWV9UWVBFKEJQRl9NQVBfVFlQRV9TT0NLSEFTSCwgY2hlY2tfc29ja2hhc2gpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jPTEwPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2plcV9pbmZlcl9ub3RfbnVsbC5jOjExOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMtMTItXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zb2NrLmM9Mjk9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jOjMwOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc29jay5jLTMxLVxcdF9fdWludChtYXhfZW50cmllcywgMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmM9OD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfaHdfbWV0YWRhdGEuYzo5OlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2h3X21ldGFkYXRhLmMtMTAtXFx0X191aW50KG1heF9lbnRyaWVzLCAyNTYpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX21ldGFkYXRhLmM6OTpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9tZXRhZGF0YS5jLTEwLVxcdF9fdWludChtYXhfZW50cmllcywgNCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jPTExPXN0cnVjdCB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYzoxMjpcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYy0xMy1cXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYz0xMDA3PXN0YXRpYyB2b2lkIGRvX3Rlc3RfZml4dXAoc3RydWN0IGJwZl90ZXN0ICp0ZXN0LCBlbnVtIGJwZl9wcm9nX3R5cGUgcHJvZ190eXBlLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM1LVxcdGlmICgqZml4dXBfbWFwX3hza21hcCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3ZlcmlmaWVyLmM6MTEzNjpcXHRcXHRtYXBfZmRzWzExXSA9IGNyZWF0ZV9tYXAoQlBGX01BUF9UWVBFX1hTS01BUCwgc2l6ZW9mKGludCksXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfdmVyaWZpZXIuYy0xMTM3LVxcdFxcdFxcdFxcdFxcdHNpemVvZihpbnQpLCAxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MzkuOTUzMDQ4MTI0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzA2Njk3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIHRlc3QgcmVsaWVzIG9uIGBCUEZfTUFQX1RZUEVfWFNLTUFQYCwgd2hpY2ggaXMgZGVmaW5lZCBvbmx5IGlmIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLCBzbyB0byBydW4gdGhpcyB0ZXN0LCBJIGFic29sdXRlbHkgbmVlZCB0byBhZGQgYFhEUF9TT0NLRVRTYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gQWxzbywgSSBrbm93IEknbGwgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCB0aGUgQlBGIHZlcmlmaWVyJ3MgYGNoZWNrX2NvbmRfam1wX29wYCBmdW5jdGlvbi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIHdheSBpdCBpbmZlcnMgcG9pbnRlciBudWxsYWJpbGl0eSB3aXRoaW4gY29uZGl0aW9uYWwganVtcHMuIEl0J3MgYWxzbyB1cGRhdGluZyBgcmVnX25vdF9udWxsYCB0byBhY2NvdW50IGZvciBgUFRSX1RPX1hEUF9TT0NLYCBhbmQgYFBUUl9UT19CVUZgIHR5cGVzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIEJQRiB2ZXJpZmllciBsb2dpYywgbWVhbmluZyBpdCdzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzdGVtIGNhbGwuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBmb2N1cyBzeW1ib2xzLiBJIGluaXRpYWxseSBwaWNrZWQgYGJwZl9jaGVja2AgYmVjYXVzZSBpdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgdmVyaWZpZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gYGNoZWNrX2NvbmRfam1wX29wYCBhbmQgYHJlZ19ub3RfbnVsbGAgYXJlIGludGVybmFsIGFuZCBzdGF0aWMsIHNvIHRoZXkncmUgb3V0LiBZZXAsIGBicGZfY2hlY2tgIGl0IGlzLCB0aGF0J3MgdGhlIGNvcnJlY3QgY2hvaWNlLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlnIG5hbWVzLiBZZXMsIGBYRFBfU09DS0VUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L3hkcC9LY29uZmlnYCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEV2ZXJ5dGhpbmcgYWxpZ25zLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzY3LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0Ny4yODM3MjA0MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA0OTI4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIlhEUF9TT0NLRVRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGxvZ2ljIGZvciBpbmZlcnJpbmcgbnVsbGFiaWxpdHkgb2YgcG9pbnRlcnMgaW4gY29uZGl0aW9uYWwganVtcCBvcGVyYXRpb25zIChjaGVja19jb25kX2ptcF9vcCkuIEl0IGFsc28gdXBkYXRlcyByZWdfbm90X251bGwgdG8gaW5jbHVkZSBQVFJfVE9fWERQX1NPQ0sgYW5kIFBUUl9UT19CVUYuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIHJlYWNoYWJsZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjQ3LjM2Mzc3NzI4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NzI0NjE4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODo0Ny4zNjU1ODEwMTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU0NzA2NTM2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCAoZS5nLiwgYW4gdW50cnVzdGVkIHBvaW50ZXIpLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYnkgdGhlIEJQRiBwcm9ncmFtLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoT09CLCBVQUYsIE5VTEwgZGVyZWYpIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcpIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTNkZWI2ZGRjZjVlZDdiMTk0MzgwZGFmNjZhZGYxOWM3MjQ1OGVmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA2OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li44OTdlYzRiMzhkZWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0zNTUsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgcmVnX25vdF9udWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcmVnX3N0YXRcbiBcdHR5cGUgPSBiYXNlX3R5cGUodHlwZSk7XG4gXHRyZXR1cm4gdHlwZSA9PSBQVFJfVE9fU09DS0VUIHx8XG4gXHRcdHR5cGUgPT0gUFRSX1RPX1RDUF9TT0NLIHx8XG4rXHRcdHR5cGUgPT0gUFRSX1RPX1hEUF9TT0NLIHx8XG4rXHRcdHR5cGUgPT0gUFRSX1RPX0JVRiB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19NQVBfVkFMVUUgfHxcbiBcdFx0dHlwZSA9PSBQVFJfVE9fTUFQX0tFWSB8fFxuIFx0XHR0eXBlID09IFBUUl9UT19TT0NLX0NPTU1PTiB8fFxuQEAgLTE3MDg1LDcgKzE3MDg3LDYgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0ICovXG4gXHRpZiAoIWlzX2ptcDMyIFx1MDAyNlx1MDAyNiBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2XG4gXHQgICAgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSBcdTAwMjZcdTAwMjYgX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGJhc2VfdHlwZShzcmNfcmVnLVx1MDAzZXR5cGUpICE9IFBUUl9UT19CVEZfSUQgXHUwMDI2XHUwMDI2XG4gXHQgICAgYmFzZV90eXBlKGRzdF9yZWctXHUwMDNldHlwZSkgIT0gUFRSX1RPX0JURl9JRCkge1xuIFx0XHRlcV9icmFuY2hfcmVncyA9IE5VTEw7XG5AQCAtMTcxMDEsOSArMTcxMDIsMTEgQEAgc3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGlmIChlcV9icmFuY2hfcmVncykge1xuLVx0XHRcdGlmICh0eXBlX21heV9iZV9udWxsKHNyY19yZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0Lyogc3JjID09IGRzdCBcdTAwMjZcdTAwMjYgZHN0ICE9IE5VTEwgPVx1MDAzZSBzcmMgIT0gTlVMTCAqL1xuK1x0XHRcdGlmIChyZWdfbm90X251bGwoZW52LCBkc3RfcmVnKSBcdTAwMjZcdTAwMjYgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpKVxuIFx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10pO1xuLVx0XHRcdGVsc2VcbitcdFx0XHQvKiBzcmMgPT0gZHN0IFx1MDAyNlx1MDAyNiBzcmMgIT0gTlVMTCA9XHUwMDNlIGRzdCAhPSBOVUxMICovXG4rXHRcdFx0aWYgKHJlZ19ub3RfbnVsbChlbnYsIHNyY19yZWcpIFx1MDAyNlx1MDAyNiB0eXBlX21heV9iZV9udWxsKGRzdF9yZWctXHUwMDNldHlwZSkpXG4gXHRcdFx0XHRtYXJrX3B0cl9ub3RfbnVsbF9yZWcoXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbmluZGV4IDNkMWU4ZGU0MzkwYzIuLmI0MTJhNTQyZWY3NmYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfamVxX2luZmVyX25vdF9udWxsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9qZXFfaW5mZXJfbm90X251bGwuY1xuQEAgLTMsNyArMyw5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXCJicGZfa2Z1bmNzLmhcIlxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG5AQCAtMTIsNiArMTQsMTMgQEAgc3RydWN0IHtcbiBcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbiB9IG1hcF94c2ttYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgaW50KTtcbit9IG1hcF9oYXNoIFNFQyhcIi5tYXBzXCIpO1xuK1xuIC8qIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIHByb2dyYW06XG4gICpcbiAgKiAgIHI2ID0gc2tiLVx1MDAzZXNrO1xuQEAgLTI2NCw0ICsyNzMsNDcgQEAgX19uYWtlZCB2b2lkIGpuZV9yZWdfcmVnX251bGxfY2hlY2sodm9pZClcbiAgICAgICAgIDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuKy8qXG4rICogQSBjb21wYXJpc29uIGJldHdlZW4gUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVEIGFuZFxuKyAqIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTCBzaG91bGQgbm90IGluZmVyIHRoYXQgbWFwIHBvaW50ZXIgaXMgbm90IG51bGwuXG4rICogQSBidWcgaW4gY2hlY2tfY29uZF9qbXBfb3AoKSBtYWRlIHN1Y2ggaW5mZXJlbmNlIHBvc3NpYmxlLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fZmFpbHVyZVxuK19fbXNnKFwiZXJyb3I6IGludmFsaWQgZGVyZWZlcmVuY2Ugb2YgUjAgKGEgbnVsbGFibGUgbWFwIHZhbHVlIHBvaW50ZXIpXCIpXG4rX19tc2coXCJcdTAwM2VcdTAwM2VcdTAwM2UgMTEgfCAoNjEpIHIwID0gKih1MzIgKikocjAgKzApXCIpXG4rX19uYWtlZCB2b2lkIHVudHJ1c3RlZF9tZW1fZG9lc19ub3RfaW5mZXJfbWFwX3ZhbHVlX25vbl9udWxsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0LyogcjYgPSBicGZfcmRvbmx5X2Nhc3QoMCwgMCk7ICovXHRcdFxcXG4rXHRyMSA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdHIyID0gMDtcdFx0XHRcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9yZG9ubHlfY2FzdF07XHRcdFx0XFxcbitcdHI2ID0gcjA7XHRcdFx0XHRcdFxcXG4rXHQvKiByMCA9IGJwZl9tYXBfbG9va3VwX2VsZW0obWFwX2hhc2gsIFx1MDAyNmtleSk7ICovXHRcXFxuK1x0Kih1NjQgKikocjEwIC0gOCkgPSAwO1x0XHRcdFx0XFxcbitcdHIxID0gJVttYXBfaGFzaF0gbGw7XHRcdFx0XHRcXFxuK1x0cjIgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyMiArPSAtODtcdFx0XHRcdFx0XFxcbitcdGNhbGwgJVticGZfbWFwX2xvb2t1cF9lbGVtXTtcdFx0XHRcXFxuK1x0LypcdFx0XHRcdFx0XHRcXFxuK1x0ICogYnVnZ3kgdmVyaWZpZXIgYXNzdW1lZCB0aGF0IHI2IGNhbid0IGJlIG51bGxcdFxcXG4rXHQgKiBhbmQgbWFya2VkIHIwIG5vbi1udWxsIGFzIHdlbGwuXHRcdFxcXG4rXHQgKi9cdFx0XHRcdFx0XHRcXFxuK1x0aWYgcjYgIT0gcjAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHIwICsgMCk7XHRcdFx0XHRcXFxuKzE6XHRyMCA9IDA7XHRcdFx0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbShicGZfcmRvbmx5X2Nhc3QpLFxuK1x0ICBfX2ltbShicGZfbWFwX2xvb2t1cF9lbGVtKSxcbitcdCAgX19pbW1fYWRkcihtYXBfaGFzaClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK3ZvaWQga2Z1bmNfcm9vdCh2b2lkKVxuK3tcbitcdGJwZl9yZG9ubHlfY2FzdCgwLCAwKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6NDcuMzY1NTgyMjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NDcwNjMxMDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBCdWcgYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgYGNoZWNrX2NvbmRfam1wX29wKClgIGZ1bmN0aW9uLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCB0aGUgb3JpZ2luYWwgbG9naWMgaW5jb3JyZWN0bHkgaW5mZXJyZWQgcG9pbnRlciBub24tbnVsbG5lc3MgaW4gY2VydGFpbiBjb21wYXJpc29uIHNjZW5hcmlvcy4gSXQgc2VlbXMgdGhlIHZlcmlmaWVyIHdhcyBtYWtpbmcgYW4gYXNzdW1wdGlvbjogaWYgeW91IGNvbXBhcmUgdHdvIHBvaW50ZXJzIGFuZCBvbmUgKm1pZ2h0KiBiZSBudWxsLCBidXQgdGhlIG90aGVyICppc24ndCosIGFuZCB0aGV5IGFyZSBlcXVhbCwgdGhlbiB0aGUgbnVsbGFibGUgcG9pbnRlciBiZWNvbWVzIG5vbi1udWxsLiBUaGUgcHJvYmxlbSBpcywgdGhpcyBpbmZlcmVuY2Ugd2FzIGZsYXdlZCwgYmVjYXVzZSB0aGUgc2Vjb25kIHBvaW50ZXIgYWxzbyBtaWdodCBiZSBudWxsLCBidXQgbm90ICpndWFyYW50ZWVkKiB0byBiZSBub24tbnVsbC4gVGhlIG9yaWdpbmFsIGNvZGUganVzdCBjaGVja2VkIGZvciB0aGUgKmRpZmZlcmVuY2UqIGluIHRoZSBgdHlwZV9tYXlfYmVfbnVsbCgpYCByZXN1bHQsIGFuZCBtaXNzZWQgY2FzZXMgd2hlcmUgYm90aCBjb3VsZCBiZSBudWxsLiBUaGlzIGNvdWxkIGxlYWQgdG8gYSBCUEYgcHJvZ3JhbSBwb3RlbnRpYWxseSBkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyLCBvciBhY2Nlc3NpbmcgbWVtb3J5IG91dC1vZi1ib3VuZHMsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGhhcyBpbmNvcnJlY3RseSBhc3Nlc3NlZCBzYWZldHkuXG5cblRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGV4cGxpY2l0bHkgY2hlY2tpbmcsIHdpdGggYHJlZ19ub3RfbnVsbChlbnYsIGRzdF9yZWcpYCwgaWYgdGhlICpvdGhlciogcG9pbnRlciBpcyBhY3R1YWxseSBub24tbnVsbCBiZWZvcmUgbWFraW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZpcnN0IHBvaW50ZXIgaXMgYWxzbyBub24tbnVsbC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcyBhbmQgZW5zdXJlIHByb3BlciBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIHdpdGhpbiB0aGUgdmVyaWZpZXIuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgS01TQU4gbmVlZGVkIGhlcmU/IE15IGFzc2Vzc21lbnQgaXMgbm8uIFRoaXMgYnVnIGlzIGFib3V0ICpwb2ludGVyIG51bGxhYmlsaXR5Kiwgd2hpY2ggbGVhZHMgdG8gbWVtb3J5IHNhZmV0eSBpc3N1ZXM6IHBvdGVudGlhbGx5LCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSB2ZXJpZmllciBpbmNvcnJlY3RseSBtYXJrcyBhIHBvaW50ZXIgYXMgc2FmZS4gVGhlc2UgYXJlIHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBUaGV5IGFyZSBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgdmVyaWZpZXIncyBtaXNpbnRlcnByZXRhdGlvbiBvZiB0aGUgQlBGIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtzLCBvciBob3cgdGhlIHZlcmlmaWVyICpoYW5kbGVzKiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQncyBmb2N1c2VkIGVudGlyZWx5IG9uIHRyYWNraW5nIHBvaW50ZXIgbm9uLW51bGxpdHkuIEtNU0FOIGlzIGdyZWF0LCBidXQgaXQncyBwdXJwb3NlIGlzIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCBpcyBub3QgdGhlIGlzc3VlIGhlcmUuIEkgYW0gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTiA9IGZhbHNlYCBoZXJlIGlzIGNvcnJlY3QuIFRoZSByZWFzb25pbmcgYmVpbmcgdGhhdCwgYmVjYXVzZSB0aGUgaXNzdWUgaXMgb25lIHRoYXQgY2F1c2VzIGlzc3VlcywgZS5nLiBhY2Nlc3NpbmcgYSBudWxsIHBvaW50ZXIsIHRoYXQgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMSwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDIuODM2MjE3NDE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgcG9pbnRlciBudWxsYWJpbGl0eSB0cmFja2luZyAoYGNoZWNrX2NvbmRfam1wX29wKClgKS4gVGhlIGJ1ZyBhbGxvd2VkIHRoZSB2ZXJpZmllciB0byBpbmNvcnJlY3RseSBpbmZlciB0aGF0IGEgbnVsbGFibGUgcG9pbnRlciBpcyBub3QgbnVsbCB3aGVuIGNvbXBhcmVkIHRvIGFub3RoZXIgcG9pbnRlciB0aGF0IGlzbid0IGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgKGUuZy4sIGFuIHVudHJ1c3RlZCBwb2ludGVyKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGJ5IHRoZSBCUEYgcHJvZ3JhbS4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKE9PQiwgVUFGLCBOVUxMIGRlcmVmKSBhcmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nKSBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIncyBwb2ludGVyIG51bGxhYmlsaXR5IHRyYWNraW5nIChgY2hlY2tfY29uZF9qbXBfb3AoKWApLiBUaGUgYnVnIGFsbG93ZWQgdGhlIHZlcmlmaWVyIHRvIGluY29ycmVjdGx5IGluZmVyIHRoYXQgYSBudWxsYWJsZSBwb2ludGVyIGlzIG5vdCBudWxsIHdoZW4gY29tcGFyZWQgdG8gYW5vdGhlciBwb2ludGVyIHRoYXQgaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCAoZS5nLiwgYW4gdW50cnVzdGVkIHBvaW50ZXIpLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYnkgdGhlIEJQRiBwcm9ncmFtLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoT09CLCBVQUYsIE5VTEwgZGVyZWYpIGFyZSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcpIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowjncqk[1] Phase: Succeeded StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 19:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 19:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2] Phase: Succeeded StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 19:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 19:09:14 +0000 UTC FinishedAt: 2026-08-26 19:09:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjncqk/series-workflowjncqk-convert-artifact-3589672571/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 19:09:24 +0000 UTC FinishedAt: 2026-08-26 19:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 19:09:24 +0000 UTC FinishedAt: 2026-08-26 19:29:50 +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:*ff7476c4-b342-4b59-9d58-6df5a9ecc0a4,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-workflowjncqk/series-workflowjncqk-convert-artifact-3589672571/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": "284e4d52-748e-4824-8546-ad739224e19e", "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-workflowjncqk/series-workflowjncqk-build-action-3925392825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:09:24 +0000 UTC FinishedAt: 2026-08-26 19:29:40 +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:*ff7476c4-b342-4b59-9d58-6df5a9ecc0a4,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-workflowjncqk/series-workflowjncqk-convert-artifact-3589672571/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": "284e4d52-748e-4824-8546-ad739224e19e", "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-workflowjncqk/series-workflowjncqk-build-action-3925392825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 19:29:50 +0000 UTC FinishedAt: 2026-08-26 19:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 19:29:50 +0000 UTC FinishedAt: 2026-08-26 19:29:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 19:29:50 +0000 UTC FinishedAt: 2026-08-26 19:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 19:29:50 +0000 UTC FinishedAt: 2026-08-26 19:29:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjncqk/series-workflowjncqk-convert-artifact-131523026/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 19:30:00 +0000 UTC FinishedAt: 2026-08-26 19:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 19:30:00 +0000 UTC FinishedAt: 2026-08-26 19:32:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*284e4d52-748e-4824-8546-ad739224e19e,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-workflowjncqk/series-workflowjncqk-build-action-3925392825/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-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 19:32:10 +0000 UTC FinishedAt: 2026-08-26 19:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:32:10 +0000 UTC FinishedAt: 2026-08-26 19:32:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 19:32:10 +0000 UTC FinishedAt: 2026-08-26 19:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 19:32:10 +0000 UTC FinishedAt: 2026-08-26 19:47:59 +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:*ff7476c4-b342-4b59-9d58-6df5a9ecc0a4,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-workflowjncqk/series-workflowjncqk-convert-artifact-131523026/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": "2884daf4-f2fb-40ae-bbcb-269633f5ceaf", "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-workflowjncqk/series-workflowjncqk-build-action-1278566502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:32:10 +0000 UTC FinishedAt: 2026-08-26 19:47:49 +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:*ff7476c4-b342-4b59-9d58-6df5a9ecc0a4,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-workflowjncqk/series-workflowjncqk-convert-artifact-131523026/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": "2884daf4-f2fb-40ae-bbcb-269633f5ceaf", "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-workflowjncqk/series-workflowjncqk-build-action-1278566502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 19:47:59 +0000 UTC FinishedAt: 2026-08-26 19:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 19:47:59 +0000 UTC FinishedAt: 2026-08-26 19:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 19:47:59 +0000 UTC FinishedAt: 2026-08-26 19:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 19:47:59 +0000 UTC FinishedAt: 2026-08-26 19:49:42 +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:*2884daf4-f2fb-40ae-bbcb-269633f5ceaf,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-workflowjncqk/series-workflowjncqk-build-action-1278566502/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-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"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:*284e4d52-748e-4824-8546-ad739224e19e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2884daf4-f2fb-40ae-bbcb-269633f5ceaf,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-workflowjncqk/series-workflowjncqk-build-action-3925392825/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-workflowjncqk/series-workflowjncqk-build-action-1278566502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 19:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 19:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"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-workflowjncqk/series-workflowjncqk-convert-artifact-167225127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 19:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 19:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:49:52 +0000 UTC FinishedAt: 2026-08-26 19:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 19:50:02 +0000 UTC FinishedAt: 2026-08-26 22:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjncqk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1555de33018fad06ca5dfa2fad5d3d1c6a6eb2fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","XDP_SOCKETS"],"series_id":"24b6135d-fd02-4061-8e40-c554837bd6ca","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 19:50:02 +0000 UTC FinishedAt: 2026-08-26 22:55:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*284e4d52-748e-4824-8546-ad739224e19e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2884daf4-f2fb-40ae-bbcb-269633f5ceaf,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-workflowjncqk/series-workflowjncqk-build-action-3925392825/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-workflowjncqk/series-workflowjncqk-build-action-1278566502/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-workflowjncqk/series-workflowjncqk-convert-artifact-167225127/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,}