Name: series-workflow7d7dw Phase: Succeeded StartedAt: 2026-08-13 09:08:26 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[0] Phase: Succeeded StartedAt: 2026-08-13 09:08:26 +0000 UTC FinishedAt: 2026-08-13 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:08:26 +0000 UTC FinishedAt: 2026-08-13 10:05:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7925U", "NL80211_TESTMODE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7925U", "NL80211_TESTMODE" ], "series_id": "2c92199d-ff67-4a78-983d-776403a57280" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7925_testmode_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzkyNVUmIzM0OywKICAgICYjMzQ7Tkw4MDIxMV9URVNUTU9ERSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzkyNV90ZXN0bW9kZV9kdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxuXG5TdGFuZGFyZCBLQVNBTiBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncywgYnV0IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIChib3RoIHRvIHVzZXIgc3BhY2UgYW5kIHRvIGhhcmR3YXJlIGRldmljZXMpLiBTaW5jZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0IGluIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgbXQ3OTI1IHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIE1UNzkyNSBVU0Igd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbmluZGV4IDIyYThmMWRkYzMyMWQuLmRiZjExNTllZmZlYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG5AQCAtODcsMTMgJiM0Mzs4NywxNCBAQCBzdGF0aWMgaW50XG4gbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRcdGNoYXIgKmV2dF9yZXNwKVxuIHtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuLVx0Y2hhciAqcGNtZCA9IChjaGFyICopXHUwMDI2Y21kO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFx1MDAyNmNtZDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuLVx0aW50IHJldCA9IDE7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcbi1cdG1lbWNweShwY21kICYjNDM7IDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4gXG4gXHRpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTClcbiBcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcbkBAIC0xMDEsMTYgJiM0MzsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFx1MDAyNnNrYik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KSB7XG4mIzQzO1x0aWYgKCFza2JfcHVsbChza2IsIGhkcikpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXHUwMDNlZGF0YSAmIzQzOyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pO1xuJiM0MztcdG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XG4gXG4gb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuQEAgLTE5MCw3ICYjNDM7MTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIFxuIFx0XHRkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTtcbiBcdFx0aWYgKGRhdGEpIHtcbi1cdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XG4mIzQzO1x0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuIFxuIFx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbiBcdFx0XHRcdFx0ICAgICAgZXZ0X3Jlc3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWU0ZWE2YmJlY2Y0NTFlNmRlYzcwMDIxZDU2ZGI5MTlhNDU5Yzg0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEwOjAyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMKaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jCkBAIC04NywxMyAmIzQzOzg3LDE0IEBAIHN0YXRpYyBpbnQKIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLAogCQljaGFyICpldnRfcmVzcCkKIHsKJiM0MzsJY29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpOwogCXN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWQ7Ci0JY2hhciAqcGNtZCA9IChjaGFyICopJmFtcDtjbWQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9ICZhbXA7Y21kOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCWludCByZXQgPSAxOwomIzQzOwlpbnQgcmV0OwogCiAJbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpOwotCW1lbWNweShwY21kICYjNDM7IDQsIChjaGFyICopJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CiYjNDM7CW1lbWNweSgmYW1wO3BjbWQtJmd0O2N0cmwsICZhbXA7cmVxLSZndDtjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpOwogCiAJaWYgKCooKHVpbnQxNl90ICopcmVxLSZndDtwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKQogCQlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLApAQCAtMTAxLDE2ICYjNDM7MTAyLDE4IEBAIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLAogCWVsc2UgaWYgKCooKHVpbnQxNl90ICopcmVxLSZndDtwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKQogCQlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLAogCQkJCQkJJmFtcDtjbWQsIHNpemVvZihjbWQpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWlmIChza2ItJmd0O2xlbiAmbHQ7IE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KSB7CiYjNDM7CWlmICghc2tiX3B1bGwoc2tiLCBoZHIpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSgoY2hhciAqKWV2dF9yZXNwLCAoY2hhciAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pOwomIzQzOwltZW1jcHkoZXZ0X3Jlc3AsIHNrYi0mZ3Q7ZGF0YSwgbWluX3QodTMyLCBza2ItJmd0O2xlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7CiAKIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xOTAsNyAmIzQzOzE5Myw3IEBAIGludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZywKIAogCQlkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTsKIAkJaWYgKGRhdGEpIHsKLQkJCWNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXTsKJiM0MzsJCQljaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTsKIAogCQkJZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS0mZ3Q7ZGV2LCBubGFfZGF0YShkYXRhKSwKIAkJCQkJICAgICAgZXZ0X3Jlc3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgdGhlIE1UNzkyNSBUZXN0IE1vZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGZpZGRsaW5nIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwY21kYCBhbmQgdGhlIHBhcnNpbmcgb2YgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayBmb3IgdGhlIHJlc3VsdHMgb2YgYHNrYl9wdWxsYCBhcyB3ZWxsIGFzIGEgbmV3IGNhbGwgdG8gYG1pbl90KHUzMiwgc2tiLSZndDtsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGFuZCB0aGV5JiMzOTtyZSBpbml0aWFsaXppbmcgYGV2dF9yZXNwYCB0byB6ZXJvLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMWAgdGVzdCBtb2RlIGZvciB0aGUgbXQ3OTI1IGNoaXBzZXQuIFJpZ2h0LCB0aGUgbXQ3OTI1IGRyaXZlciBpcyBmb3IgTWVkaWFUZWsmIzM5O3MgTVQ3OTI1IHdpcmVsZXNzIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhlc2UgZGV2aWNlcyBhcmUgcHJpbWFyaWx5IFBDSWUgb3IgVVNCIGJhc2VkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7ZGVidWdmcy5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDttYWMuYyYjMzQ7LAogICAgJiMzNDttYWMuaCYjMzQ7LAogICAgJiMzNDttYWluLmMmIzM0OywKICAgICYjMzQ7bWN1LmMmIzM0OywKICAgICYjMzQ7bWN1LmgmIzM0OywKICAgICYjMzQ7bXQ3OTI1LmgmIzM0OywKICAgICYjMzQ7bmFuLmMmIzM0OywKICAgICYjMzQ7bmFuLmgmIzM0OywKICAgICYjMzQ7cGNpLmMmIzM0OywKICAgICYjMzQ7cGNpX21hYy5jJiMzNDssCiAgICAmIzM0O3BjaV9tY3UuYyYjMzQ7LAogICAgJiMzNDtyZWdkLmMmIzM0OywKICAgICYjMzQ7cmVnZC5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDt0ZXN0bW9kZS5jJiMzNDssCiAgICAmIzM0O3VzYi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSYjMzk7cyBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYHVzYi5jYCBhbmQgYHBjaS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGNvdWxkIGJlIGEgVVNCIGRldmljZSwgcmlnaHQ/IEFuZCBpZiBpdCYjMzk7cyBhIFVTQiBkZXZpY2UsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgYSBVU0IgZ2FkZ2V0IGxpa2UgYGR1bW15X2hjZGAgb3IgYHZoY2lgLiBCdXQgdGhlbiwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2lja2VyLgoKV2FpdCwgaXQgaXMhIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYW4gbGV2ZXJhZ2UgYHZoY2lgIHRvIGZ1enogVVNCIGRldmljZXMsIHNvIGl0IHNob3VsZCBiZSByZWFjaGFibGUgYWZ0ZXIgYWxsLiBPa2F5LCBzbyBpZiBpdCYjMzk7cyBhIFVTQiBkZXZpY2UsIHdlIGNhbiBhYnNvbHV0ZWx5IGhpdCB0aGlzIGNvZGUuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gYmVjb21lczogaXMgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgdGVzdG1vZGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW4gdHVybiBoaW5nZXMgb24gYENPTkZJR19OTDgwMjExX1RFU1RNT0RFYC4gVGltZSB0byBnbyBkaWdnaW5nIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnYCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1UNzkyNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzoyOmNvbmZpZyBNVDc5MjVfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6Nzpjb25maWcgTVQ3OTI1RVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1RSAoUENJZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjE5OmNvbmZpZyBNVDc5MjVVXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgVVNCIEludGVncmF0aW9uKioKClJpZ2h0LCBgTVQ3OTI1VWAuLi4gdGhhdCYjMzk7cyB0aGUgVVNCIHZhcmlhbnQuIEdvdCBpdC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBkcml2ZXJzIGlzIHRoaXMgdGhpbmcgbGVhbmluZyBvbj8gSSYjMzk7dmUgZ290IHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb3RoZXIgc3Vic3lzdGVtcy4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYSBjcml0aWNhbCBsaW5rLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGZyYW1ld29yayBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb25mbGljdHMgb3Igb3Zlcmxvb2tlZCByZXF1aXJlbWVudHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjcyBhbmQgZG9jdW1lbnRhdGlvbiB0byBtYXAgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIE1UNzkyNV9DT01NT05cbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgTVQ3OTJ4X0xJQlxuICAgNTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gICA2Olx0XG4gICA3Olx0Y29uZmlnIE1UNzkyNUVcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzkyNUUgKFBDSWUpIHN1cHBvcnRcJiMzNDtcbiAgIDk6XHRcdHNlbGVjdCBNVDc5MjVfQ09NTU9OXG4gIDEwOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDExOlx0XHRkZXBlbmRzIG9uIFBDSVxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgTVQ3OTI1LWJhc2VkIHdpcmVsZXNzIFBDSWUgZGV2aWNlcyxcbiAgMTQ6XHRcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXG4gIDE1Olx0XHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTVQ3OTI1VVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRzZWxlY3QgTVQ3OTJ4X1VTQlxuICAyMjpcdFx0c2VsZWN0IE1UNzkyNV9DT01NT05cbiAgMjM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgMjQ6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc5MjUtYmFzZWQgd2lyZWxlc3MgVVNCIGRldmljZXMsXG4gIDI3Olx0XHQgIHdoaWNoIHN1cHBvcnQgb3BlcmF0aW9uIGF0IDZHSHosIDVHSHosIGFuZCAyLjRHSHogSUVFRSA4MDIuMTFiZVxuICAyODpcdFx0ICAyeDI6MlNTIDQwOTYtUUFNLCAxNjBNSHogY2hhbm5lbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2OAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3OTI1VSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBNVDc5MjVVYCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IHJlbGllcyBvbiBgTUFDODAyMTFgIGFuZCBgVVNCYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgYSB3aXJlbGVzcyBVU0IgZGV2aWNlLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYE1UNzkyNV9DT01NT05gIGlzIGFsc28gc2VsZWN0ZWQ7IHRoYXQmIzM5O3MgcHJvYmFibHkgZ290IHNvbWUgY29yZSBkZWZpbml0aW9ucy4gSSBzdXNwZWN0IHRoYXQgdGhlIGB0ZXN0bW9kZS5jYCBmaWxlIGlzIG9ubHkgYnVpbHQgaWYgdGhlIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAgb3B0aW9uIGlzIHR1cm5lZCBvbjsgdGhhdCYjMzk7cyBwcmV0dHkgY29tbW9uIGZvciBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eS4gVG8gY29uZmlybSB0aGVzZSBpbmZlcmVuY2VzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlYCBmaWxlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfTVQ3OTI1RSkgJiM0Mzs9IG10NzkyNWUub1xuICAgNTpcdG9iai0kKENPTkZJR19NVDc5MjVVKSAmIzQzOz0gbXQ3OTI1dS5vXG4gICA2Olx0XG4gICA3Olx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuICAgODpcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiAgIDk6XHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuICAxMDpcdG10NzkyNXUteSA6PSB1c2Iub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTI5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTVQ3OTI1IFRlc3QgTW9kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaGVyZS4gSSBzZWUgdGhhdCBgbXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub2AuIEFscmlnaHQsIHNvIHRoZSBgdGVzdG1vZGUub2AgbW9kdWxlIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5MODAyMTFfVEVTVE1PREVgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgTVQ3OTI1VWAgd2hpY2ggSSBrbm93IGlzIHJlbGV2YW50LiBCdXQsIHdoYXQgYWJvdXQgdGhlIG1vcmUgZ2VuZXJpYyBhc3BlY3RzLCBsaWtlIGBNQUM4MDIxMWAgYW5kIGBVU0JgPyBUaG9zZSBhcmUgcHJldHR5IG11Y2ggZXhwZWN0ZWQgYXMgYmFzZSBkZXBlbmRlbmNpZXMsIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhvc2UsIGl0JiMzOTtzIHRoZSBtb3JlIHNwZWNpYWxpemVkIGRlcGVuZGVuY2llcyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4KCkhvbGQgb24sIEkgc2VlIHRoYXQgYE1UNzkyNV9DT01NT05gIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBNVDc5MjVVYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gU28sIHVsdGltYXRlbHksIHRvIGdldCB0aGlzIGB0ZXN0bW9kZS5vYCBtb2R1bGUgYW5kIHRoZXJlZm9yZSB0ZXN0IG1vZGUgd29ya2luZyBmb3IgdGhpcyBNVDc5MjVVIHdpcmVsZXNzIGRyaXZlciwgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGFyZSBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYC4gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IGJ5IGxvb2tpbmcgYXQgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgZnVuY3Rpb24sIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbW9kdWxlLiBUaW1lIHRvIGNoZWNrIGB0ZXN0bW9kZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTI1X3Rlc3Rtb2RlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jPTI3MTY9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3OTI1X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmMtMjc1NS1cdENGRzgwMjExX1RFU1RNT0RFX0NNRChtdDc5MjVfdGVzdG1vZGVfY21kKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jOjI3NTY6XHRDRkc4MDIxMV9URVNUTU9ERV9EVU1QKG10NzkyNV90ZXN0bW9kZV9kdW1wKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jLTI3NTctI2lmZGVmIENPTkZJR19QTVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oPTQxMT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oLTQxMi1cdFx0XHR2b2lkICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oOjQxMzppbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTQtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgdm9pZCAqZGF0YSwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz0xMjQ9aW50IG10NzkyNV90ZXN0bW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjE2MTppbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE2Mi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCB2b2lkICpkYXRhLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjgwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyB0ZXN0IG1vZGUgZHVtcCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgTVQ3OTI1LiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gVGhhdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHB1cnBvc2UuIFJpZ2h0LCBzbyBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHRlc3QgbW9kZSBkdW1wIGlzIHRyaWdnZXJlZC4KCk5vdyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gU28sIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgY2FsbHMgYG10NzkyNV90bV9xdWVyeWAgYW5kIHRoYXQgZ2V0cyBjaGFuZ2VkLiBCdXQgd2FpdCwgYG10NzkyNV90bV9xdWVyeWAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhlIHN0YXRpYyBrZXl3b3JkIGltcGxpZXMgc2NvcGUuIElzIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgdGhlIE9OTFkgZnVuY3Rpb24gdGhhdCBjYWxscyBpdD8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoaXMuIElmIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoZSBzY29wZSBJJiMzOTtsbCBrbm93IHdoZXJlIHRvIGZvY3VzIHRoZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTI1X3RtX3F1ZXJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo4NzptdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtODgtXHRcdGNoYXIgKmV2dF9yZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9MTYxPWludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk4Olx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTk5LVx0XHRcdFx0XHQgICAgICBldnRfcmVzcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjcKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgZ3JlcCBzaG93cyB0aGF0IG9ubHkgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBjYWxscyBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gVGhlcmVmb3JlLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZXhhbWluZSBpbiBkZXRhaWwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYE1UNzkyNVVgIGRlcGVuZHMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAsIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFgLiBTbyBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYCBzZWVtIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZCwgYWx0aG91Z2ggSSBhbHJlYWR5IGtuZXcgYE1BQzgwMjExYCB3b3VsZCBiZSBuZWVkZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgaXNuJiMzOTt0IHN0YXRpYywgYW5kIHN1cmUgZW5vdWdoLCBpdCBpc24mIzM5O3QuIEl0JiMzOTtzIGV4cG9ydGVkIGluIGBtdDc5MjUuaGAgYW5kIHVzZWQgaW4gYG1haW4uY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoaXMgaXMgZ29vZDsgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkFoLCBidXQgd2FpdC4uLiB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbXQ3OTI1X3RtX3F1ZXJ5YC4gVGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIGdldCBvdmVybG9va2VkLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KClRoZSBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgYSBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gKlRoYXQqIG1ha2VzIGl0IGluY3JlZGlibHkgaW50ZXJlc3RpbmcsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgZ29vZC4gVGhlIGNvZGUgaXRzZWxmIHNob3dzIHRoZSBgbWVtY3B5YCB2dWxuZXJhYmlsaXR5OiBgbWVtY3B5KGV2dF9yZXNwLCBza2ItJmd0O2RhdGEsIG1pbl90KHUzMiwgc2tiLSZndDtsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTikpO2AgVGhpcyBpcyBhbiBvYnZpb3VzIGZ1bmN0aW9uYWwgY2hhbmdlLCBmaXhpbmcgYSBnZW51aW5lIGJ1Zzogc3BlY2lmaWNhbGx5LCBhIHBvdGVudGlhbCByZWFkIG92ZXJmbG93IGluIGBldnRfcmVzcGAgZHVlIHRvIHRoZSBsYWNrIG9mIGFuIGluaXRpYWxpemF0aW9uIG9mIGBldnRfcmVzcGAgYW5kIGEgcG9zc2libGUgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCgpUaGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBleHBsb2l0YXRpb24gaGVyZSBzZWVtcyBoaWdoIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYXMgd2VsbC4gTm93IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYE1UNzkyNV9FVlRfUlNQX0xFTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01UNzkyNV9FVlRfUlNQX0xFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjY6I2RlZmluZSBNVDc5MjVfRVZUX1JTUF9MRU4gNTEyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04Nz1tdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTExNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTE2Olx0bWVtY3B5KGV2dF9yZXNwLCBza2ItXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXHUwMDNlbGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9MTYxPWludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5NS1cdFx0aWYgKGRhdGEpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk2Olx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xOTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MDAKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBNVDc5MjUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBgTVQ3OTI1YCBkcml2ZXIgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBMZXQmIzM5O3Mgc2VlLCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAuIFdhaXQsIGBNVDc5MjVfQ09NTU9OYCBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJlY2F1c2UgYE1UNzkyNVVgIGFuZCBgTVQ3OTI1RWAgZW5hYmxlIGl0LiBTaG91bGQgSSBib3RoZXIgaW5jbHVkaW5nIGBNVDc5MjVFYD8gTmFoLCB0aGF0JiMzOTtzIGEgUENJZSBkZXZpY2U7IFBDSWUgZGV2aWNlcyBhcmUgZ2VuZXJhbGx5IG11Y2ggbW9yZSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG1vcmUgY29tcGxleCB0byBlbXVsYXRlLiBUaGUgYE1UNzkyNVVgIGlzIGEgVVNCIGRldmljZSwgYW5kIHRoYXQmIzM5O3MgKm11Y2gqIGVhc2llciB0byB0YXJnZXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgdmhjaS4gU28sIGVuYWJsaW5nIGp1c3QgYE1UNzkyNVVgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhbmQgZnJhbmtseSwgYmV0dGVyIGZvciBmdXp6aW5nLgoKTm93LCBpcyBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYCBlbm91Z2ggdG8gZ2V0IG1lIHdoZXJlIEkgbmVlZCB0byBiZT8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiAgYE5MODAyMTFfVEVTVE1PREVgIGlzIGVub3VnaC4gWWVzLCBgJiMzNDttdDc5MjUtY29tbW9uLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICYjNDM7PSB0ZXN0bW9kZS5vJiMzNDtgLgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYG10NzkyNV90bV9xdWVyeWAgYW5kIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBBbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gYmUgZnV6emluZy4KCkFscmlnaHQsIHRpbWUgdG8gY3JlYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uICBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEkmIzM5O2xsIHNldCB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gYFsmIzM0O210NzkyNV90ZXN0bW9kZV9kdW1wJiMzNDtdYCwgYW5kIGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7TVQ3OTI1VSYjMzQ7LCAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0O11gLiBUaGUgYFJlYXNvbmluZ2Agc2hvdWxkIGJlIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIGBtdDc5MjVgIHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSB2dWxuZXJhYmxlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbmw4MDIxMWAgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBgTVQ3OTI1YCBVU0Igd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhhdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxuXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVzcG9uc2UgaGFuZGxpbmcgdG8gYWxsb3cgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBUbyBwcmV2ZW50IGxlYWtpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXQoKWAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyB0aGUgYGV2dF9yZXNwYCBidWZmZXIgKGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgKS5cblxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYwppbmRleCAyMmE4ZjFkZGMzMjFkLi5kYmYxMTU5ZWZmZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMKQEAgLTg3LDEzICYjNDM7ODcsMTQgQEAgc3RhdGljIGludAogbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsCiAJCWNoYXIgKmV2dF9yZXNwKQogewomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7CiAJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDsKLQljaGFyICpwY21kID0gKGNoYXIgKikmYW1wO2NtZDsKJiM0MzsJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gJmFtcDtjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHJldCA9IDE7CiYjNDM7CWludCByZXQ7CiAKIAltZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7Ci0JbWVtY3B5KHBjbWQgJiM0MzsgNCwgKGNoYXIgKikmYW1wO3JlcS0mZ3Q7Yywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTsKJiM0MzsJbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CiAKIAlpZiAoKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpCiAJCXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksCkBAIC0xMDEsMTYgJiM0MzsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsCiAJZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVQpCiAJCXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksCiAJCQkJCQkmYW1wO2NtZCwgc2l6ZW9mKGNtZCksIHRydWUsICZhbXA7c2tiKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gLUVJTlZBTDsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpIHsKJiM0MzsJaWYgKCFza2JfcHVsbChza2IsIGhkcikpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtY3B5KChjaGFyICopZXZ0X3Jlc3AsIChjaGFyICopc2tiLSZndDtkYXRhICYjNDM7IDgsIE1UNzkyNV9FVlRfUlNQX0xFTik7CiYjNDM7CW1lbWNweShldnRfcmVzcCwgc2tiLSZndDtkYXRhLCBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTsKIAogb3V0OgogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE5MCw3ICYjNDM7MTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAogCiAJCWRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldOwogCQlpZiAoZGF0YSkgewotCQkJY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dOwomIzQzOwkJCWNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9OwogCiAJCQllcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LSZndDtkZXYsIG5sYV9kYXRhKGRhdGEpLAogCQkJCQkgICAgICBldnRfcmVzcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzkyNSBUZXN0bW9kZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIGBtdDc5MjVfdG1fcXVlcnlgIGFuZCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHdpdGhpbiB0aGUgTVQ3NiBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSByZWZpbmVtZW50cywgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4KCkluIGBtdDc5MjVfdG1fcXVlcnlgLCB0aGUgZmlyc3QgY2hhbmdlIGlzIHF1aXRlIGNsZWFyLiBJbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBgY21kYCBhcyBhIHJhdyBieXRlIGFycmF5IChgY2hhciAqcGNtZGApLCB3ZSYjMzk7cmUgbm93IGNvcnJlY3RseSB1c2luZyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSAoYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZGApLiBUaGlzIGlzIGNsZWFuZXIgYW5kIHNhZmVyOyBpdCBhdm9pZHMgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXMgYW5kIG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuICBUaGUgb2xkIGBtZW1jcHkocGNtZCAmIzQzOyA0LCAuLi4pYCB1c2luZyBhIGBjaGFyICpgIGFuZCBhbiBvZmZzZXQgaXMgbm93IGBtZW1jcHkoJmFtcDtwY21kLSZndDtjdHJsLCAuLi4pYCB3aGljaCBpcyBtdWNoIHByZWZlcnJlZC4gQWxzbywgdGhlcmUmIzM5O3MgYSBuZXcgYGVsc2UgcmV0ID0gLUVJTlZBTDtgIHdoaWNoIGFkZHMgYSBsaXR0bGUgbW9yZSBlcnJvciBjaGVja2luZyBpbiB0aGUgY29udHJvbCBmbG93LgoKVGhlIG5leHQgY2hhbmdlIGludm9sdmVzIGhvdyB0aGUgcmVzcG9uc2UgZGF0YSBpcyBoYW5kbGVkLiAgVGhlIG9sZCBjb2RlIGNvcGllZCAqZXhhY3RseSogYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSBgc2tiLSZndDtkYXRhICYjNDM7IDhgIGludG8gYGV2dF9yZXNwYC4gIFRoZSBuZXcgY29kZSB1c2VzIGBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYCBpbnN0ZWFkLiBUaGF0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gZ3JhY2VmdWxseSBoYW5kbGUgc2hvcnRlci10aGFuLWV4cGVjdGVkIHJlc3BvbnNlcyBmcm9tIHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb24gdGhlIHJlY2VpdmluZyBlbmQuIFRoZSBwcmV2aW91cyBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpYCBjaGVjayBpcyBub3cgcmVwbGFjZWQgd2l0aCBgIXNrYl9wdWxsKHNrYiwgaGRyKWAgd2hpY2ggaXMgYSBiZXR0ZXIgd2F5IHRvIGNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIHNrX2J1ZmYgYnVmZmVyLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBUaGUgb2xkIGNvZGUgZGVjbGFyZWQgYGV2dF9yZXNwYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSXQgdGhlbiBwYXNzZWQgdGhpcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlciB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gIElmIGBtdDc5MjVfdG1fcXVlcnlgIGZhaWxlZCBmb3IgKmFueSogcmVhc29uLCBgZXZ0X3Jlc3BgIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gVGhlIG5ldyBjb2RlIHJlbWVkaWVzIHRoaXMgd2l0aCBgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YC4gVGhpcyBpcyBrZXkuIEJ5IGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHRvIHplcm8sIGFueSB1bndyaXR0ZW4gcG9ydGlvbnMgb2YgdGhlIGJ1ZmZlciBhZnRlciBgbXQ3OTI1X3RtX3F1ZXJ5YCByZXR1cm5zIHdpbGwgYmUgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBDb3VwbGVkIHdpdGggdGhlIGBtaW5fdGAgbG9naWMsIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBtb3JlIHByZWRpY3RhYmxlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGlmIGEgc2hvcnRlciByZXNwb25zZSBpcyByZWNlaXZlZC4gVGhlIG9sZCBjb2RlIHJpc2tlZCBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBvbndhcmRzIGlmIGBtdDc5MjVfdG1fcXVlcnlgIGZhaWxlZCBvciByZXR1cm5lZCBhIHBhcnRpYWwgcmVzcG9uc2UuCgpJIHJlYWxseSBuZWVkIHRvIHNlZSB3aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgKmRvZXMqIHdpdGggYGV2dF9yZXNwYCBhZnRlciB0aGUgY2FsbCB0byBgbXQ3OTI1X3RtX3F1ZXJ5YCB0byBiZSBjZXJ0YWluLiBCdXQgZnJvbSB0aGlzIGltbWVkaWF0ZSBhbmFseXNpcywgaXQgbG9va3MgbGlrZSBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gaW1wcm92ZSBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSwgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGlzIG1vcmUgcm9idXN0IHdoZW4gZGVhbGluZyB3aXRoIHVuZXhwZWN0ZWQgcmVzcG9uc2VzIGZyb20gdGhlIGhhcmR3YXJlLCBvciBwb3RlbnRpYWwgZmFpbHVyZSBzdGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdFx0cmV0dXJuIGVycjtcbiAxODE6XHRcbiAxODI6XHRcdGlmICh0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdKSB7XG4gMTgzOlx0XHRcdHN0cnVjdCBubGF0dHIgKmRydl90YltOVU1fTVQ3OTI1X1RNX0FUVFJTXSwgKmRhdGE7XG4gMTg0Olx0XHRcdGludCByZXQ7XG4gMTg1Olx0XG4gMTg2Olx0XHRcdGRhdGEgPSB0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdO1xuIDE4NzpcdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoZHJ2X3RiLFxuIDE4ODpcdFx0XHRcdFx0XHRcdCAgTVQ3OTI1X1RNX0FUVFJfTUFYLFxuIDE4OTpcdFx0XHRcdFx0XHRcdCAgZGF0YSwgbXQ3OTI1X3RtX3BvbGljeSxcbiAxOTA6XHRcdFx0XHRcdFx0XHQgIE5VTEwpO1xuIDE5MTpcdFx0XHRpZiAocmV0KVxuIDE5MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTkzOlx0XG4gMTk0Olx0XHRcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xuIDE5NTpcdFx0XHRpZiAoZGF0YSkge1xuIDE5NjpcdFx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuIDE5NzpcdFxuIDE5ODpcdFx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbiAxOTk6XHRcdFx0XHRcdFx0ICAgICAgZXZ0X3Jlc3ApO1xuIDIwMDpcdFx0XHRcdGlmIChlcnIpXG4gMjAxOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDIwMjpcdFxuIDIwMzpcdFx0XHRcdHJldHVybiBubGFfcHV0KG1zZywgTVQ3OTI1X1RNX0FUVFJfUlNQLFxuIDIwNDpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihldnRfcmVzcCksIGV2dF9yZXNwKTtcbiAyMDU6XHRcdFx0fVxuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRlc3QgTW9kZSBSZXNwb25zZSBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZXZ0X3Jlc3BgIGdldHMgc2VudCB0byB1c2VyIHNwYWNlIHVzaW5nIGBubGFfcHV0YC4gUHJldmlvdXNseSwgaW4gdGhlIG9sZGVyIGNvZGUsIGlmIGBtdDc5MjVfdG1fcXVlcnlgIHdhcyBzdWNjZXNzZnVsLCBpdCByZWxpYWJseSBjb3BpZWQgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMsIHNvIGBldnRfcmVzcGAgd2FzIGZ1bGx5IGluaXRpYWxpemVkLiBIb3dldmVyLCB0aGUgb2xkIGNvZGUgaGFkIGFuIGltcG9ydGFudCBjaGVjazogaWYgYHNrYi0mZ3Q7bGVuYCB3YXMgbGVzcyB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU4gJiM0MzsgOGAsIGl0IHJldHVybmVkIGAtRUlOVkFMYCwgcHJldmVudGluZyB0aGUgYG5sYV9wdXRgIGNhbGwuIFRoZSBvbGQgbG9naWMgYWxzbyBvbmx5IHNlbnQgYSByZXNwb25zZSBpZiBgcmVxLSZndDtwYWRkaW5nYCB3YXMgZWl0aGVyIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAgYW5kIGluaXRpYWxpemVkIGByZXRgIHRvIGAxYCBvdGhlcndpc2UsIHByZXZlbnRpbmcgYW55IHJlc3BvbnNlLgoKTm93LCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJuZWQgMCAoc3VjY2VzcykgYW5kIGBza2ItJmd0O2xlbmAgd2FzIGxhcmdlIGVub3VnaCwgdGhlIG9sZCBjb2RlIGNvcGllZCBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBzdGFydGluZyBhdCBhbiBvZmZzZXQgb2YgOCwgdGhlcmVieSBmdWxseSBpbml0aWFsaXppbmcgYGV2dF9yZXNwYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2h5IGRpZCB0aGUgcGF0Y2ggY2hhbmdlIGBldnRfcmVzcGAgdG8gYmUgemVyby1pbml0aWFsaXplZD8gSXQgYXBwZWFycyB0aGF0IHRoZSBuZXcgY29kZSBub3cgdXNlcyBgc2tiX3B1bGxgIGFuZCB0aGVuIGNvcGllcyBhIG51bWJlciBvZiBieXRlcyBkZXRlcm1pbmVkIGJ5IGBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYC4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIGl0IGNvcGllcyBmZXdlciBieXRlcy4gVGhpcyBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgd2hlcmUgdGhlIHVuY29waWVkIGJ5dGVzIG9mIGBldnRfcmVzcGAgd291bGQgYmUgdW5pbml0aWFsaXplZCBpZiB0aGV5IHdlcmVuJiMzOTt0IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIHRoZW4gYmUgbGVha2VkIHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0YC4gVGhpcyBpcyBhICpmaXgqIHRvIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgd2FzICppbnRyb2R1Y2VkKiBieSB0aGUgY29kZSBjaGFuZ2UhCgpIb3dldmVyLCB0aGUgb2xkIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGlmIGBza2ItJmd0O2xlbmAgd2FzIGF0IGxlYXN0IGBNVDc5MjVfRVZUX1JTUF9MRU4gJiM0MzsgOGAgYmVmb3JlIGNvcHlpbmcuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBndWFyYW50ZWVkIGZ1bGwgaW5pdGlhbGl6YXRpb24gdW5kZXIgdGhlIG5vcm1hbCBmbG93IGFuZCBlcnJvciBjb25kaXRpb25zLgoKVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSBtYXkgYmUgdGhhdCB0aGUgYHNrYmAgbGVuZ3RoICpjYW4qIGJlIGxlc3MgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDhgLCBhbmQgdGhleSAqd2FudCogdG8gc3VwcG9ydCBzaG9ydGVyIHJlc3BvbnNlcyBub3cuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9wdWxsKHNrYiwgaGRyKWAgc3VnZ2VzdHMgdGhhdCB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGluZyB0aGlzLiBTaW5jZSBgc2tiLSZndDtsZW5gIGNhbiBiZSBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAgYWZ0ZXIgcHVsbGluZyB0aGUgaGVhZGVyLCB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGBldnRfcmVzcGAgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuCgpTbywgdGhlIHBhdGNoICpwcmV2ZW50cyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdoaWNoIGl0ICppbnRyb2R1Y2VkKiBieSB0aGlzIGxvZ2ljIGNoYW5nZS4KCldhaXQsIGlzIHRoZXJlICphbm90aGVyKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZT8gTGV0JiMzOTtzIGNoZWNrIGBtdDc5MjVfdG1fcXVlcnlgLiBUaGUgb2xkIGNvZGUgd2FzIHVzaW5nIGBtZW1jcHkocGNtZCAmIzQzOyA0LCAuLi4pYCB3aGVyZSBgcGNtZGAgd2FzIGEgYGNoYXIgKmAuIFRoaXMgb2Zmc2V0IGJ5IGZvdXIgYnl0ZXMsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3RydWN0IGxheW91dC4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg9NjYyPXN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTY2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oOjY3MDpzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtNjcxLVx0dTggcGFkZGluZ1s0XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1NgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbXQ3OTI1X3JmdGVzdF9jbWQgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBNVDc5MjUgZHJpdmVyIGFnYWluLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgb3V0IHRoZSBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgcmZ0ZXN0LCBzbyByYWRpbyBmcmVxdWVuY3kgdGVzdGluZyBjb21tYW5kLiYjMzQ7IEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBjb250cm9sbGluZyB0aGUgcmFkaW8mIzM5O3Mgb3BlcmF0aW9uIGZvciBkaWFnbm9zdGljcyBhbmQgY2FsaWJyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZpZWxkcywgaG93IGl0JiMzOTtzIHBhY2tlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTVQ3NiBNQ1UuIElzIHRoaXMgc29tZXRoaW5nIHdoZXJlIEkgbmVlZCB0byBjaGVjayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHRoYXQgY29ycmVzcG9uZD8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmFibGU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgYSBjZXJ0YWluIHZhbHVlPyBEb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBwb3dlciBhbXBsaWZpZXIgaW4gYW55IHdheT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoaXMgY29tbWFuZCBpcyBjb25zdHJ1Y3RlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgZHJpdmVyIGFuZCB0aGUgTVQ3NiBmaXJtd2FyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYWRlciBmaWxlIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHR9O1xuIDY2MTpcdFxuIDY2MjpcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xuIDY2MzpcdFx0dTE2IHRhZztcbiA2NjQ6XHRcdHUxNiBsZW5ndGg7XG4gNjY1Olx0XHR1OCBhY3Rpb247XG4gNjY2Olx0XHR1OCByZXNlcnZlZFszXTtcbiA2Njc6XHRcdHVuaW9uIHRlc3Rtb2RlX2RhdGEgZGF0YTtcbiA2Njg6XHR9IF9fcGFja2VkO1xuIDY2OTpcdFxuIDY3MDpcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCB7XG4gNjcxOlx0XHR1OCBwYWRkaW5nWzRdO1xuIDY3MjpcdFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCBjdHJsO1xuIDY3MzpcdH0gX19wYWNrZWQ7XG4gNjc0Olx0XG4gNjc1Olx0c3RhdGljIGlubGluZSBlbnVtIGNvbm5hYzNfbWN1X2NpcGhlcl90eXBlXG4gNjc2Olx0bXQ3OTI1X21jdV9nZXRfY2lwaGVyKGludCBjaXBoZXIpXG4gNjc3Olx0e1xuIDY3ODpcdFx0c3dpdGNoIChjaXBoZXIpIHtcbiA2Nzk6XHRcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgVGVzdG1vZGUgQ29tbWFuZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIEl0IGhhcyBzb21lIHBhZGRpbmcsIGB1OCBwYWRkaW5nWzRdYCwgYW5kIHRoZW4gYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgY3RybGAuIFRoZSBvbGRlciBjb2RlIGRvZXMgYSBgbWVtY3B5YCB0byB3cml0ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUsIGJ1dCBvZmZzZXRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIGJ5IDQgYnl0ZXM6IGBtZW1jcHkocGNtZCAmIzQzOyA0LCAoY2hhciAqKSZhbXA7cmVxLSZndDtjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO2AuIEkgcmVjb2duaXplIHRoaXMgaW1tZWRpYXRlbHkuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlLCBgbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YCwgaXMgY2xlYXJseSBhIG1vcmUgZGlyZWN0IGFuZCBjbGVhbmVyIHdheSB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLiBJdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIG9mZnNldCBpbiB0aGUgb3JpZ2luYWwganVzdCB0YWtlcyBjYXJlIG9mIHRoZSBwYWRkaW5nLiBUaGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgY2xlYW51cCDigJMgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBhdm9pZGluZyB0aGUgbWFudWFsIGJ5dGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBOb3RoaW5nIHJldm9sdXRpb25hcnkgaGVyZSwganVzdCBzb2xpZCwgbWFpbnRhaW5hYmxlIGNvZGUuCgpCdXQgd2hhdCBhYm91dCBgcmVxYD8gSSBzaG91bGQgZXhhbWluZSB0aGF0IG1vcmUgY2xvc2VseS4gVGhlIGNvbnRleHQgb2YgdGhpcyB3aG9sZSB0aGluZyBpcyB0aGF0IGByZXFgIGlzIGEgYHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXFgLCBzbyBsZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04PWVudW0gbXQ3OTI1X3Rlc3Rtb2RlX2F0dHIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjE5OnN0cnVjdCBtdDc5MjVfdG1fY21kIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMjAtXHR1OCBwYWRkaW5nWzRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzA1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IG10NzkyNV90bV9jbWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gSW1tZWRpYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBNVDc5MjUgYXJjaGl0ZWN0dXJlLiBJcyB0aGlzIGNvbW1hbmQtc3BlY2lmaWMsIGNvbmZpZ3VyYXRpb24tb3JpZW50ZWQsIG9yIGRhdGEtdHJhbnNmZXIgcmVsYXRlZD8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY29tbWFuZCBzdHJ1Y3R1cmUsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZmllbGRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRyYW5zbGF0ZXMgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBBcmUgd2UgdGFsa2luZyByZWdpc3RlcnMsIERNQSBkZXNjcmlwdG9ycywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpNeSBicmFpbiYjMzk7cyBpbnN0YW50bHkgZ29pbmcgdG8gdGhlIHR5cGljYWwgc3VzcGVjdHM6IGEgY29tbWFuZCBvcGNvZGUsIHBvdGVudGlhbGx5IHN1Yi1vcGNvZGVzIGZvciBmaW5lciBncmFudWxhcml0eSwgc29tZSBmb3JtIG9mIGFkZHJlc3Npbmcgb3IgaWRlbnRpZmllciB0byB0YXJnZXQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGVudGl0eSAoYSBzcGVjaWZpYyBNQUMsIGEgc3BlY2lmaWMgcXVldWUsIGEgc3BlY2lmaWMgY2hhbm5lbCksIGxlbmd0aCBmaWVsZHMgdG8gaW5kaWNhdGUgZGF0YSBzaXplcywgYW5kIG1heWJlIGEgc3RhdHVzL3Jlc3BvbnNlIGZpZWxkIHRvIHRyYWNrIGNvbW1hbmQgY29tcGxldGlvbiBvciBlcnJvcnMuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zIGltbWVkaWF0ZWx5IOKAkyBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjYWNoZSBsaW5lIGltcGxpY2F0aW9ucyB3aXRoIGhvdyB0aGUgaGFyZHdhcmUgYWNjZXNzZXMgdGhpcz8gUGFkZGluZyBpcyBhbHdheXMgYSBnaXZlYXdheS4KClRoZW4sIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkYXRhIHBheWxvYWRzLCBpZiBhbnkuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHBhc3NlZCB3aXRoIHRoaXMgY29tbWFuZD8gSXMgdGhpcyBmb3IgcmF0ZSBjb250cm9sLCB0cmFmZmljIHNoYXBpbmcsIHBvd2VyIG1hbmFnZW1lbnQgcGFyYW1ldGVycywgb3IgbWF5YmUgZXZlbiBmaXJtd2FyZSBjb250cm9sPyBUaGF0IHdpbGwgaW5mbHVlbmNlIG15IGV4cGVjdGF0aW9ucyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiwgYW5kIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZS4uLiBhaGEuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0TlVNX01UNzkyNV9UTV9BVFRSUyxcbiAgMTY6XHRcdE1UNzkyNV9UTV9BVFRSX01BWCA9IE5VTV9NVDc5MjVfVE1fQVRUUlMgLSAxLFxuICAxNzpcdH07XG4gIDE4Olx0XG4gIDE5Olx0c3RydWN0IG10NzkyNV90bV9jbWQge1xuICAyMDpcdFx0dTggcGFkZGluZ1s0XTtcbiAgMjE6XHRcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgYztcbiAgMjI6XHR9IF9fcGFja2VkO1xuICAyMzpcdFxuICAyNDpcdHN0cnVjdCBtdDc5MjVfdG1fZXZ0IHtcbiAgMjU6XHRcdHUzMiBwYXJhbTA7XG4gIDI2Olx0XHR1MzIgcGFyYW0xO1xuICAyNzpcdH0gX19wYWNrZWQ7XG4gIDI4Olx0XG4gIDI5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG10NzkyNV90bV9wb2xpY3lbTlVNX01UNzkyNV9UTV9BVFRSU10gPSB7XG4gIDMwOlx0XHRbTVQ3OTI1X1RNX0FUVFJfU0VUXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCkpLFxuICAzMTpcdFx0W01UNzkyNV9UTV9BVFRSX1FVRVJZXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCkpLFxuICAzMjpcdH07XG4gIDMzOlx0XG4gIDM0Olx0c3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIHRoZSBUZXN0bW9kZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgcmVxYCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZGAuIFRoZSBjb2RlIGNoZWNrcyBgKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpYC4gYHJlcS0mZ3Q7cGFkZGluZ2AgaXMgYSBgdTggcGFkZGluZ1s0XWAsIHNvIHRoaXMgcmVhZHMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiB0aGF0IHBhZGRpbmcgZmllbGQuIGByZXFgIGNvbWVzIGZyb20gdXNlciBzcGFjZSB2aWEgYG5sYV9kYXRhKGRhdGEpYCwgd2hlcmUgYGRhdGFgIGNvbWVzIGZyb20gYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGVuZm9yY2VzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAsIG1lYW5pbmcgdGhlIHNpemUgb2YgYHJlcWAgaXMgZXhhY3RseSB3aGF0IHRoZSBzdHJ1Y3QgZGljdGF0ZXMuIFNpbmNlIHRoaXMgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV0bGluayBsYXllciBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLgoKTm93LCB3aGF0IGFib3V0IGBldnRfcmVzcGA/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYGV2dF9yZXNwYCBpcyB1c2VkIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgYW5kIGlzIGV2ZW50dWFsbHkgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dGAuIFByZXZpb3VzbHksIGlmIGBtdDc5MjVfdG1fcXVlcnlgIHJldHVybmVkIDAsIGl0IHdvdWxkIGhhdmUgY29waWVkIGV4YWN0bHkgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgaW50byBgZXZ0X3Jlc3BgLiBCdXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgY29uZGl0aW9ucyB0byBjb25zaWRlci4KCkxldCYjMzk7cyByZXZpc2l0IHRoZSBvbGQgYG10NzkyNV90bV9xdWVyeWAgZnVuY3Rpb24uIElmIGByZXEtJmd0O3BhZGRpbmdgIGRvZXNuJiMzOTt0IG1hdGNoIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAsIGByZXRgIGJlY29tZXMgMSwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIEluIHRoaXMgY2FzZSwgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aWxsIHJldHVybiAxLCBhbmQgY3J1Y2lhbGx5LCBpdCAqd29uJiMzOTt0KiBjYWxsIGBubGFfcHV0YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXRzIGxlYWtlZCBpbiB0aGF0IHNjZW5hcmlvLgoKV2hhdCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJucyAwIGJ1dCBgc2tiYCBpcyBOVUxMPyBXZWxsLCB0aGUgZnVuY3Rpb24gc2V0cyBgc2tiYCBpZiBpdCByZXR1cm5zIDAuIElmIGBza2ItJmd0O2xlbmAgaXMgdG9vIHNob3J0LCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyBzdWZmaWNpZW50LCB0aGUgY29kZSBjb3BpZXMgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgaW50byBgZXZ0X3Jlc3BgLiBTbywgdGhlIG9sZCBjb2RlIHNlZW1zIHNhZmU7IGBldnRfcmVzcGAgKnNob3VsZCogYmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gdGhlIHN1Y2Nlc3NmdWwgY2FzZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGVyZSBhbnkgcGF0aCB3aGVyZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBjb3VsZCByZXR1cm4gMCwgYnV0IGBldnRfcmVzcGAgaXMgbm90IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gSW4gdGhlIG9sZCBjb2RlLCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBpdCAqbXVzdCogaGF2ZSBjb3BpZWQgdGhlIGRhdGEgdmlhIGBtZW1jcHlgLCBtZWFuaW5nIGl0IGlzIGluaXRpYWxpemVkLgoKV2hhdCBhYm91dCBhIHNpemUgbWlzbWF0Y2g/IFdoYXQgaWYgYE1UNzkyNV9FVlRfUlNQX0xFTmAgaXMgZ3JlYXRlciB0aGFuIGBza2ItJmd0O2RhdGEgJiM0MzsgOGAgY29udGFpbnM/IFRoZSBjaGVjayBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpYCBwcmV2ZW50cyB0aGF0LiBPa2F5LCB3aGF0IGlmIGBza2ItJmd0O2xlbmAgaXMgbGFyZ2UgZW5vdWdoLCBidXQgdGhlIGFjdHVhbCBkYXRhIGZyb20gdGhlIE1DVSBpcyBnYXJiYWdlPyBUaGF0IGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkICprZXJuZWwqIG1lbW9yeSBpc3N1ZS4gSXQmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIE1DVSBwcm92aWRpbmcgYmFkIGRhdGEsIHdoaWNoIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2gsIGxldCYjMzk7cyBzZWUgaG93IHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgY2hlY2sgYGlmIChza2ItJmd0O2xlbiAmbHQ7IE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KWAgaXMgcmVwbGFjZWQgd2l0aCBgaWYgKCFza2JfcHVsbChza2IsIGhkcikpYC4gU28gYGhkcmAgaXMgYG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpYC4gTGV0JiMzOTtzIGNvbmZpcm0gd2hhdCBgaGRyYCBhY3R1YWxseSBpcy4gQWZ0ZXIgdGhhdCwgVGhlIGBtZW1jcHlgIGlzIGNoYW5nZWQgdG8gYG1lbWNweShldnRfcmVzcCwgc2tiLSZndDtkYXRhLCBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTtgLiBTbywgaWYgYHNrYi0mZ3Q7bGVuYCBpcyBzbWFsbGVyIHRoYW4gd2hhdCBpcyBleHBlY3RlZCwgYSBzbWFsbGVyIGFtb3VudCBvZiBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIGBza2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD02NTY9dW5pb24gdGVzdG1vZGVfZXZ0IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaDo2NjI6c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjMtXHR1MTYgdGFnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyMwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHVuaV9jbWRfdGVzdG1vZGVfY3RybGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmxgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgYSBzcGVjaWZpYyBwaWVjZSBvZiBpdCBpcyBjb250cm9sbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCB3aGF0IGl0JiMzOTtzIGludGVuZGVkIHRvIGRvLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBzdXNwZWN0IHRoaXMgc3RydWN0IGxpa2VseSBjb250YWlucyB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB3aGF0ZXZlciB0ZXN0aW5nIG1vZGUgaXMgaW1wbGVtZW50ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBhcyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgd2lsbCBiZSB3aGVyZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcG9zc2libGUgdmFsdWVzIGl0IGNhbiB0YWtlIGFyZSwgYXMgd2VsbCBhcyB0aGUgZXhwZWN0ZWQgcmFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIFRoZW4sIGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgdHJhY2luZyB0aGUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYyOlx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XG4gNjYzOlx0XHR1MTYgdGFnO1xuIDY2NDpcdFx0dTE2IGxlbmd0aDtcbiA2NjU6XHRcdHU4IGFjdGlvbjtcbiA2NjY6XHRcdHU4IHJlc2VydmVkWzNdO1xuIDY2NzpcdFx0dW5pb24gdGVzdG1vZGVfZGF0YSBkYXRhO1xuIDY2ODpcdH0gX19wYWNrZWQ7XG4gNjY5Olx0XG4gNjcwOlx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcbiA2NzE6XHRcdHU4IHBhZGRpbmdbNF07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogOTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBhbmQgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSlgIGV2YWx1YXRlcyB0byA4LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGBoZHJgIHZhbHVlIGlzIDguIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgc2tiLSZndDtkYXRhICYjNDM7IDhgLCBhbmQgdGhlIG5ldyBjb2RlIHV0aWxpemVzIGBza2JfcHVsbChza2IsIGhkcilgLiBgc2tiX3B1bGxgIHNoaWZ0cyBgc2tiLSZndDtkYXRhYCBmb3J3YXJkIGJ5IDggYnl0ZXMgYW5kIGRlY3JlbWVudHMgYHNrYi0mZ3Q7bGVuYCBieSA4LiBUaGVuIGl0IGNvcGllcyBieXRlcyB1c2luZyBgbWluX3QodTMyLCBza2ItJmd0O2xlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaWYgYHNrYi0mZ3Q7bGVuYCB3YXMgc21hbGxlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gIChhZnRlciB0aGUgcHVsbCksIHRoZSBjb3B5IHdvdWxkIHdyaXRlIGZld2VyIGJ5dGVzIHRoYW4gYWxsb2NhdGVkIGluIGBldnRfcmVzcGAuIFNpbmNlIGBldnRfcmVzcGAgaXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYHNpemVvZihldnRfcmVzcClgIChlcXVhbCB0byBgTVQ3OTI1X0VWVF9SU1BfTEVOYCksIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZC4gSG93ZXZlciwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgYGV2dF9yZXNwYCB3aXRoIGB7fWAuCgpTbywgdGhpcyBwYXRjaCBhY3R1YWxseSAqaW50cm9kdWNlcyogYSBjYXNlIHdoZXJlIHRoZSBjb3B5IG1pZ2h0IGJlIHNob3J0ZXIsIGFuZCAqZml4ZXMqIHRoZSBwb3NzaWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gQnV0IGRpZCB0aGUgb3JpZ2luYWwgY29kZSBoYXZlIGEgbGVhaz8gTm8sIGJlY2F1c2UsIHdpdGggdGhlIG9sZCBjb2RlLCBpZiBgc2tiLSZndDtsZW5gIHdhcyBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4YCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGAtRUlOVkFMYC4gVGhpcyB3b3VsZCB0aGVuIHByb3BhZ2F0ZSB0byBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHdoaWNoIGFsc28gd291bGQgcmV0dXJuIGAtRUlOVkFMYCBhbmQgd291bGQgbm90IGNhbGwgYG5sYV9wdXRgLiBUaGlzIGluZGljYXRlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgbGVha2VkIGluIHRoZSBvbGRlciBjb2RlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoZXJlIGFyZSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdoYXQgYWJvdXQgYHJlcS0mZ3Q7cGFkZGluZ2A/IExldCYjMzk7cyBjaGVjazoKCmBgYGMKCWlmICgqKCh1aW50MTZfdCAqKXJlcS0mZ3Q7cGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTCkKYGBgCgpIZXJlLCBgcmVxYCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxYCwgd2hpY2ggY29tZXMgZnJvbSBgbmxhX2RhdGEoZGF0YSlgLiBgZGF0YWAgaXMgYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGlzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAuIFRoaXMgbWVhbnMgYHJlcWAgaXMgZXhhY3RseSB0aGUgc2l6ZSBvZiBgc3RydWN0IG10NzkyNV90bV9jbWRgLiBJcyBgcmVxLSZndDtwYWRkaW5nYCB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBpdCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoZSBuZXRsaW5rIGxheWVyLiBLTVNBTiB0cmFja3Mga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBpbml0aWFsaXplIGl0LCBpdCYjMzk7cyBub3QgYSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBjbWRgOgpgYGBjCiAJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDsKLQljaGFyICpwY21kID0gKGNoYXIgKikmYW1wO2NtZDsKJiM0MzsJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gJmFtcDtjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHJldCA9IDE7CiYjNDM7CWludCByZXQ7CiAKIAltZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7Ci0JbWVtY3B5KHBjbWQgJiM0MzsgNCwgKGNoYXIgKikmYW1wO3JlcS0mZ3Q7Yywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTsKJiM0MzsJbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CmBgYApJbiB0aGUgb2xkIGNvZGUsIGBwY21kYCB3YXMgYSBgY2hhciAqYC4gVGhlbiBgc2l6ZW9mKCpwY21kKWAgd291bGQgZXF1YWwgYHNpemVvZihjaGFyKWAgb3IgYDFgLiBUaGlzIG1lYW5zIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7YCBvbmx5IHplcm9lZCBvbmUgYnl0ZSBvZiBgY21kYCEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJ1Zy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XG4gIDg2Olx0c3RhdGljIGludFxuICA4NzpcdG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuICA4ODpcdFx0XHRjaGFyICpldnRfcmVzcClcbiAgODk6XHR7XG4gIDkwOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gIDkxOlx0XHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuICA5MjpcdFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gXHUwMDI2Y21kO1xuICA5MzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gIDk0Olx0XHRpbnQgcmV0O1xuICA5NTpcdFxuICA5NjpcdFx0bWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpO1xuICA5NzpcdFx0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTClcbiAxMDA6XHRcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcbiAxMDE6XHRcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuIDEwMjpcdFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcbiAxMDM6XHRcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9SWF9TVEFUKSxcbiAxMDQ6XHRcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayBpbiBMZWdhY3kgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG9sZGVyIEMgY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcmVkIGZsYWcuIFRoZXkmIzM5O3JlIHVzaW5nIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSlgIHdoZXJlIGBwY21kYCBpcyBjYXN0IHRvIGEgYGNoYXIgKmAgYW5kIGlzIHBvaW50aW5nIHRvIGBjbWRgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWRgLiBTaW5jZSBgc2l6ZW9mKGNoYXIpYCBpcyAxLCB0aGV5JiMzOTtyZSBvbmx5IHplcm9pbmcgdGhlICpmaXJzdCBieXRlKiBvZiBgY21kYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcm9va2llIG1pc3Rha2UhCgpUaGVuLCB0aGV5JiMzOTtyZSB1c2luZyBgbWVtY3B5YCB0byBjb3B5IGRhdGEgdG8gYGNtZCAmIzQzOyA0YCwgd2hpY2ggZWZmZWN0aXZlbHkgb3ZlcndyaXRlcyBvbmx5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gVGhlIGJ5dGVzIGF0IG9mZnNldHMgMSwgMiwgYW5kIDMgYXJlIGxlZnQgY29tcGxldGVseSB1bmluaXRpYWxpemVkLiBUaGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY29tZSBwYXJ0IG9mIHRoZSBgY21kYCBzdHJ1Y3QgdGhhdCYjMzk7cyBzZW50IHRvIHRoZSBNQ1UsIHdoaWNoIGlzIGNvbmNlcm5pbmcuCgpMb29raW5nIGRlZXBlciwgYGNtZGAgaXMgaW5kZWVkIGEgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAsIHdoaWNoIGNvbnRhaW5zIHBhZGRpbmcgYW5kIGEgY29udHJvbCBzdHJ1Y3R1cmUuIFNvLCB0aGF0IGluaXRpYWwgYG1lbXNldGAgb25seSB6ZXJvcyBvdXQgYHBhZGRpbmdbMF1gLCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSBwYWRkaW5nIHBvdGVudGlhbGx5IGhvbGRpbmcgZ2FyYmFnZSBkYXRhLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGFuIGV4dGVybmFsIGRldmljZSwgaW4gdGhpcyBjYXNlLCB0aGUgTUNVLCBhbiBpbmZvcm1hdGlvbiBsZWFrPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU2VuZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZXh0ZXJuYWwgZGV2aWNlIGlzIGEgZGlyZWN0IGluZm8tbGVhay4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSEKCk5vdywgZG9lcyBLTVNBTiBjYXRjaCB0aGlzPyBUaGFua2Z1bGx5LCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgZXhhY3RseSB0aGlzIGtpbmQgb2Ygc2NlbmFyaW86IHBhc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gRE1BIG9yIGV4dGVybmFsIGRldmljZXMsIGlmIHRoZSBkcml2ZXIgdXNlcyBzdGFuZGFyZCBETUEgQVBJcyBvciBpZiB0aGUgbWVtb3J5IGlzIGNvcGllZCB0byBhIGJ1ZmZlciBzZW50IHRvIHRoZSBkZXZpY2UuIFNvLCB0aGUgY2hhbmNlcyBhcmUgaGlnaCB0aGF0IEtNU0FOIHdvdWxkIGZsYWcgdGhpcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhhdCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzZfbWN1X3NlbmRfYW5kX2dldF9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYz01ND1FWFBPUlRfU1lNQk9MX0dQTChtdDc2X21jdV9yeF9ldmVudCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYzo1NjppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNTctXHRcdFx0ICAgICAgaW50IGxlbiwgYm9vbCB3YWl0X3Jlc3AsIHN0cnVjdCBza19idWZmICoqcmV0X3NrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTY5LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmM6NzA6RVhQT1JUX1NZTUJPTF9HUEwobXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTcxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oPTE5MjM9c3RydWN0IHNrX2J1ZmYgKm10NzZfbWN1X2dldF9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5MjQtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg6MTkyNTppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5MjYtXHRcdFx0ICAgICAgaW50IGxlbiwgYm9vbCB3YWl0X3Jlc3AsIHN0cnVjdCBza19idWZmICoqcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaD0xOTQxPW10NzZfbWN1X3NlbmRfbXNnKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBpbnQgY21kLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5NDMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg6MTk0NDpcdHJldHVybiBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKGRldiwgY21kLCBkYXRhLCBsZW4sIHdhaXRfcmVzcCwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaC0xOTQ1LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMjMyPWludCBtdDc5MTVfbWN1X211cnVfZGVidWdfZ2V0KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIyNDc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChNVVJVX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0OC1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTIwPWludCBtdDc5MTVfbWN1X2dldF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnJlYWRfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5MzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTMxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5MzItXHRcdFx0XHRcdE1DVV9FWFRfUVVFUlkoRUZVU0VfQUNDRVNTKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTU0PWludCBtdDc5MTVfbWN1X2dldF9lZXByb21fZnJlZV9ibG9jayhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1OCAqYmxvY2tfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTY3Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjgtXHRcdFx0XHRcdE1DVV9FWFRfUVVFUlkoRUZVU0VfRlJFRV9CTE9DSyksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9MzE3OD1pbnQgbXQ3OTE1X21jdV9nZXRfY2hhbl9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBib29sIGNoYW5fc3dpdGNoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzozMjE4Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX0VYVF9DTUQoR0VUX01JQl9JTkZPKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTktXHRcdFx0XHRcdHJlcSwgbGVuICogc2l6ZW9mKHJlcVswXSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9MzU0Mz1pbnQgbXQ3OTE1X21jdV9nZXRfdHhwb3dlcl9za3Uoc3RydWN0IG10NzkxNV9waHkgKnBoeSwgczggKnR4cG93ZXIsIGludCBsZW4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM1NjE6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2Mi1cdFx0XHRcdFx0TUNVX0VYVF9DTUQoVFhfUE9XRVJfRkVBVFVSRV9DVFJMKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0zODk1PWludCBtdDc5MTVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzkxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM5MTc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChQSFlfU1RBVF9JTkZPKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTM5MTgtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9NDEzNj1pbnQgbXQ3OTE1X21jdV93ZWRfd2FfdHhfc3RhdHMoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTE2IHdsYW5faWR4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzo0MTcwOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1dBX1BBUkFNX0NNRChRVUVSWSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy00MTcxLVx0XHRcdFx0XHRcdTAwMjZyZXEsIGxlbiwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz00MjA0PWludCBtdDc5MTVfbWN1X3JmX3JlZ3ZhbChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjQyMjI6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMy1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz03NT1zdGF0aWMgaW50IG10NzkyMV9tY3VfcmVhZF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnZhbClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy04My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjg0Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX0VYVF9RVUVSWShFRlVTRV9BQ0NFU1MpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtODUtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM9NTc2PXN0YXRpYyBpbnQgbXQ3OTIxX21jdV9nZXRfbmljX2NhcGFiaWxpdHkoc3RydWN0IG10NzkyeF9waHkgKm1waHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6NTg2Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhwaHktXHUwMDNlZGV2LCBNQ1VfQ0VfQ01EKEdFVF9OSUNfQ0FQQUIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg3LVx0XHRcdFx0XHROVUxMLCAwLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTExMjg9aW50IG10NzkyMV9nZXRfdHhwd3JfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTIxX3R4cHdyICp0eHB3cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6MTEzNzpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9DRV9DTUQoR0VUX1RYUFdSKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTExMzgtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jPTE3Nz1tdDc5MjFfcmVnZF9xdWVyeV9yZWdkYihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3JlZ2QuYzoyMzI6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmMtMjMzLVx0XHRcdFx0XHRcdE1DVV9DRV9DTUQoU0VUX1JFR0RfQ0gpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmM9ODU9bXQ3OTIxX3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjFfdG1fY21kICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYy05Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmM6OTc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfQ0VfQ01EKFRFU1RfQ1RSTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS90ZXN0bW9kZS5jLTk4LVx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTc3PWludCBtdDc5MjVfbWN1X3JlZ3ZhbChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTIxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEyMi1cdFx0XHRcdFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoUkVHX0FDQ0VTUyksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9ODI2PXN0YXRpYyBpbnQgbXQ3OTI1X21jdV9yZWFkX2VlcHJvbShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgb2Zmc2V0LCB1OCAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTg2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjg2MTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEVGVVNFX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtODYyLVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTk2ND1pbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtOTgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6OTgxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoV1NZU19DT05GSUcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtOTgyLVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz05ODY9aW50IG10NzkyNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTAwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwMDY6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTAwNy1cdFx0XHRcdFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoVEhFUk1BTCksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MTA3MD1tdDc5MjVfbWN1X2dldF9uaWNfY2FwYWJpbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEwODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMDg5Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTA5MC1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xNjExPWludCBtdDc5MjVfbWN1X3NldF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xNjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTYyOTpcdHJldHVybiBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChFRlVTRV9DVFJMKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTE2MzAtXHRcdFx0XHRcdCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0yMjM5PWludCBtdDc5MjVfZ2V0X3R4cHdyX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsIHN0cnVjdCBtdDc5MjVfdHhwd3IgKnR4cHdyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTIyNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoyMjUzOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoVFhQT1dFUiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0yMjU0LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTQwNzk9aW50IG10NzkyNV9tY3Vfd2ZfcmZfcGluX2N0cmwoc3RydWN0IG10NzkyeF9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6NDEwMTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAyLVx0XHRcdFx0XHRNQ1VfVU5JX0NNRChSQURJT19TVEFUVVMpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz0yMjM9bXQ3OTI1X3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYy0yNzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6MjgwOlx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI4MS1cdFx0XHRcdFx0XHRNQ1VfVU5JX0NNRChTRVRfUE9XRVJfTElNSVQpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODc9bXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy05OS1cdGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDA6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwMS1cdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMDItXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDM6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwNC1cdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQzNjM9aW50IG10Nzk5Nl9tY3VfZ2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTk2X2RldiAqZGV2LCB1MzIgb2Zmc2V0LCB1OCAqYnVmLCB1MzIgYnVmX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00MzkwLVx0cmVxLmluZm8uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDM5MTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIGNtZCwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQzOTItXHRcdFx0XHRcdHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDQzOT1pbnQgbXQ3OTk2X21jdV9nZXRfZWZ1c2VfZnJlZV9ibG9jayhzdHJ1Y3QgbXQ3OTk2X2RldiAqZGV2LCB1OCAqYmxvY2tfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NDU4Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoRUZVU0VfQ1RSTCksIFx1MDAyNnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTktXHRcdFx0XHRcdHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ0Njk9aW50IG10Nzk5Nl9tY3VfZ2V0X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiAqY2FwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NDg1Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODYtXHRcdFx0XHRcdE1DVV9XTV9VTklfQ01EX1FVRVJZKENISVBfQ09ORklHKSwgXHUwMDI2cmVxLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ1MjQ9aW50IG10Nzk5Nl9tY3VfZ2V0X2NoYW5fbWliX2luZm8oc3RydWN0IG10Nzk5Nl9waHkgKnBoeSwgYm9vbCBjaGFuX3N3aXRjaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDU2NTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEdFVF9NSUJfSU5GTyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY2LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ2MDM9aW50IG10Nzk5Nl9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5OTZfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDYzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ2MzY6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNnBoeS1cdTAwM2VkZXYtXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTUQoVEhFUk1BTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NjM3LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTUyODI9aW50IG10Nzk5Nl9tY3VfcmZfcmVndmFsKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiByZWdpZHgsIHUzMiAqdmFsLCBib29sIHNldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NTMwODpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA5LVx0XHRcdFx0XHRNQ1VfV01fVU5JX0NNRF9RVUVSWShSRUdfQUNDRVNTKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0OTMKCQkJCQkJCW91dHB1dDogMzY3CgkJCQkJCQl0aG91Z2h0czogMjYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXRpZXMgaW4gbXQ3OTI1IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCBldmVudHVhbGx5IGNvcGllcyBkYXRhIHRvIGEgRE1BLW1hcHBlZCBidWZmZXIsIGFuZCBLTVNBTiB3b3VsZCBhYnNvbHV0ZWx5IGNhdGNoIGEgcHJvYmxlbSBpZiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBnZXRzIHNlbnQgdG8gdGhlIE1DVS4KClRoZSBjb2RlIGRlZmluZXMgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWRgIG9uIHRoZSBzdGFjaywgd2hpY2ggaXMgZmluZSwgYnV0IHRoZSBvbGQgY29kZSB1c2VkIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSlgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEJlY2F1c2UgYHBjbWRgIHdhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIHplcm9pbmcgb25seSB0aGUgKmZpcnN0KiBieXRlIG9mIHRoZSBgY21kYCBzdHJ1Y3R1cmUuIFRoaXMgbGVmdCB0aGUgYGNtZC5wYWRkaW5nYCBmaWVsZCwgc3BlY2lmaWNhbGx5IDMgYnl0ZXMsIHVuaW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGVuIHdyb3RlIHRvIG90aGVyIHBhcnRzIG9mIGBjbWRgLCBidXQgdGhvc2UgMyB1bmluaXRpYWxpemVkIGJ5dGVzIHdlcmUgc3RpbGwgc2VudCB0byB0aGUgTUNVLCBhIGNsZWFyIGluZm8tbGVhay4gS01TQU4gaXMgdGFpbG9yLW1hZGUgdG8gY2F0Y2ggdGhpcywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgY2hhbmdpbmcgYHBjbWRgIHRvIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKmAsIGVuc3VyaW5nIGBtZW1zZXRgIHplcm9lcyB0aGUgKmVudGlyZSogc3RydWN0dXJlLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBLTVNBTi1zcGVjaWZpYyBmaXguIEkgdGhlbiBkb3VibGUtY2hlY2tlZCB0aGUgbG9naWMgaW4gYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLiBZZXMsIHRoZSBmdW5jdGlvbiBjYWxscyBgbXQ3Nl9tY3Vfc2VuZF9tc2dgLCB3aGljaCBhbGxvY2F0ZXMgYW4gc2tiLCAqY29waWVzKiB0aGUgZGF0YSwgYW5kIHNlbmRzIGl0IG91dCB0byB0aGUgZGV2aWNlIHRocm91Z2ggRE1BIG9yIFVTQi4gVGhpcyBjb3B5aW5nIHByb2Nlc3Mgd2lsbCBwcm9wYWdhdGUgdGhlIHVuaW5pdGlhbGl6ZWQgYml0cyBhbmQgS01TQU4gd2lsbCBmbGFnIGl0IGF0IHRoZSBza2IgY29weSBvciBhdCB0aGUgc2VuZCB0byB0aGUgZGV2aWNlLgoKTm93LCBJIG1vdmVkIG9uIHRvIGEgc2Vjb25kIHBvdGVudGlhbCBpc3N1ZS4gSW4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCwgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dYC4gQSBuZXcgY29kZSBwYXRoIGluIHRoZSBwYXRjaCBhbGxvd3Mgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBJZiB0aGUgcmVzcG9uc2UgZnJvbSBgbXQ3OTI1X3RtX3F1ZXJ5YCB3YXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBldnRfcmVzcGAgd291bGQgYmUgdW5pbml0aWFsaXplZC4gVGhlc2UgYnl0ZXMgd2VyZSB0aGVuIGNvcGllZCB0byB1c2VyIHNwYWNlIHVzaW5nIGBubGFfcHV0YCwgbGVhZGluZyB0byBhbm90aGVyIGluZm8tbGVhay4gVGhlIHBhdGNoIGNsZXZlcmx5IHByZXZlbnRzIHRoaXMgYnkgemVyby1pbml0aWFsaXppbmcgYGV2dF9yZXNwYCB3aXRoIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgLgoKSSB3ZW50IGJhY2sgYW5kIGNoZWNrZWQgdGhlIG9sZCBjb2RlLiBBY3R1YWxseSwgdGhlIG9sZCBjb2RlJiMzOTtzIGxvZ2ljIG9mIGBtdDc5MjVfdG1fcXVlcnlgIGFsd2F5cyByZXF1ZXN0ZWQgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGZ1bGwgYnVmZmVyIHdhcyBhbHdheXMgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBwYXRjaCAqaW50cm9kdWNlZCogdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBzZWNvbmQgaW5mby1sZWFrIHRoYXQgaXQgZml4ZXMgdmlhIHRoZSB6ZXJvIGluaXRpYWxpemF0aW9uLgoKQ3J1Y2lhbGx5LCBzdGFuZGFyZCBLQVNBTiBkb2VzbiYjMzk7dCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzICpzcGVjaWZpY2FsbHkqIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgS0FTQU4gaXMgZnVuZGFtZW50YWxseSBibGluZC4gVGhlIHBhdGNoIGlzIG5vdyB0d28tZm9sZDogYWRkcmVzc2luZyB0aGUgYG1lbXNldGAgYnVnLCB3aGljaCBsZWFkcyB0byB0aGUgaW5mby1sZWFrIHRvIHRoZSBkZXZpY2UsIGFuZCBmaXhpbmcgYSBuZXcgY29kZSBwYXRoIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSB0ZXh0Ym9vayBLTVNBTiBmaXggYW5kIHJlcXVpcmVzIGRlZGljYXRlZCB0ZXN0aW5nIHdpdGggS01TQU4uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBmaXhlcyB0aGUgYG1lbXNldGAgYnVnIGFuZCBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgdG8gcmVzcG9uc2UgaGFuZGxpbmcuCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgdGhhdCBgTmVlZHNLTVNBTj10cnVlYCBhbmQgdGhhdCBhIHRob3JvdWdoIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gY29uZmlybSB0aGUgZml4IGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxuXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVzcG9uc2UgaGFuZGxpbmcgdG8gYWxsb3cgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBUbyBwcmV2ZW50IGxlYWtpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXQoKWAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyB0aGUgYGV2dF9yZXNwYCBidWZmZXIgKGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgKS5cblxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxuXG5TdGFuZGFyZCBLQVNBTiBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncywgYnV0IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIChib3RoIHRvIHVzZXIgc3BhY2UgYW5kIHRvIGhhcmR3YXJlIGRldmljZXMpLiBTaW5jZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0IGluIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAyOjQ0LjE3MzY1NTQzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzM1NDczMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxcblxcbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxcblxcblN0YW5kYXJkIEtBU0FOIGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLCBidXQgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgKGJvdGggdG8gdXNlciBzcGFjZSBhbmQgdG8gaGFyZHdhcmUgZGV2aWNlcykuIFNpbmNlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QgaW4gdGhpcyBjb2RlIHBhdGguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NC4xNzM2NjQxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjIwNTM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDEwOjAyOjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXFxuaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xcbkBAIC04NywxMyArODcsMTQgQEAgc3RhdGljIGludFxcbiBtdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG4gXFx0XFx0Y2hhciAqZXZ0X3Jlc3ApXFxuIHtcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpO1xcbiBcXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xcbi1cXHRjaGFyICpwY21kID0gKGNoYXIgKilcXHUwMDI2Y21kO1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKnBjbWQgPSBcXHUwMDI2Y21kO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDE7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7XFxuLVxcdG1lbWNweShwY21kICsgNCwgKGNoYXIgKilcXHUwMDI2cmVxLVxcdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xcbitcXHRtZW1jcHkoXFx1MDAyNnBjbWQtXFx1MDAzZWN0cmwsIFxcdTAwMjZyZXEtXFx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XFxuIFxcbiBcXHRpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXFxuIFxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcXG5AQCAtMTAxLDE2ICsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXFxuIFxcdGVsc2UgaWYgKCooKHVpbnQxNl90ICopcmVxLVxcdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxcbiBcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KSB7XFxuK1xcdGlmICghc2tiX3B1bGwoc2tiLCBoZHIpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXFx1MDAzZWRhdGEgKyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pO1xcbitcXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXFx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XFxuIFxcbiBvdXQ6XFxuIFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG5AQCAtMTkwLDcgKzE5Myw3IEBAIGludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4gXFxuIFxcdFxcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xcbiBcXHRcXHRpZiAoZGF0YSkge1xcbi1cXHRcXHRcXHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XFxuK1xcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgZXZ0X3Jlc3ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NS41MzYzODM3MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTE3NDAyMjYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbkBAIC04NywxMyArODcsMTQgQEAgc3RhdGljIGludFxuIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuIFx0XHRjaGFyICpldnRfcmVzcClcbiB7XG4rXHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuLVx0Y2hhciAqcGNtZCA9IChjaGFyICopXHUwMDI2Y21kO1xuK1x0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gXHUwMDI2Y21kO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMTtcbitcdGludCByZXQ7XG4gXG4gXHRtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7XG4tXHRtZW1jcHkocGNtZCArIDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4rXHRtZW1jcHkoXHUwMDI2cGNtZC1cdTAwM2VjdHJsLCBcdTAwMjZyZXEtXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcbiBcbiBcdGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxuQEAgLTEwMSwxNiArMTAyLDE4IEBAIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuIFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcbiBcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9SWF9TVEFUKSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuIFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOCkge1xuK1x0aWYgKCFza2JfcHVsbChza2IsIGhkcikpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXHUwMDNlZGF0YSArIDgsIE1UNzkyNV9FVlRfUlNQX0xFTik7XG4rXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cdTAwM2VkYXRhLCBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTikpO1xuIFxuIG91dDpcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbkBAIC0xOTAsNyArMTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIFxuIFx0XHRkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTtcbiBcdFx0aWYgKGRhdGEpIHtcbi1cdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XG4rXHRcdFx0Y2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307XG4gXG4gXHRcdFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cdTAwM2VkZXYsIG5sYV9kYXRhKGRhdGEpLFxuIFx0XHRcdFx0XHQgICAgICBldnRfcmVzcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NS41MzYzODQ5NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk4NTY1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgdGhlIE1UNzkyNSBUZXN0IE1vZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgZmlkZGxpbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBjbWRgIGFuZCB0aGUgcGFyc2luZyBvZiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSByZXN1bHRzIG9mIGBza2JfcHVsbGAgYXMgd2VsbCBhcyBhIG5ldyBjYWxsIHRvIGBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGFuZCB0aGV5J3JlIGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHRvIHplcm8uIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiB1c2VkLiBMZXQncyBzZWUuLi4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMWAgdGVzdCBtb2RlIGZvciB0aGUgbXQ3OTI1IGNoaXBzZXQuIFJpZ2h0LCB0aGUgbXQ3OTI1IGRyaXZlciBpcyBmb3IgTWVkaWFUZWsncyBNVDc5MjUgd2lyZWxlc3MgZGV2aWNlcy4gTm93IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiB0aGVzZSBkZXZpY2VzIGFyZSBwcmltYXJpbHkgUENJZSBvciBVU0IgYmFzZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkgYC9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9gIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDI6NTAuNzM0OTUyOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWN1LmNcIixcbiAgICBcIm1jdS5oXCIsXG4gICAgXCJtdDc5MjUuaFwiLFxuICAgIFwibmFuLmNcIixcbiAgICBcIm5hbi5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpX21hYy5jXCIsXG4gICAgXCJwY2lfbWN1LmNcIixcbiAgICBcInJlZ2QuY1wiLFxuICAgIFwicmVnZC5oXCIsXG4gICAgXCJyZWdzLmhcIixcbiAgICBcInRlc3Rtb2RlLmNcIixcbiAgICBcInVzYi5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAyOjUwLjczNTA0NDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwOTcxOTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGB1c2IuY2AgYW5kIGBwY2kuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBjb3VsZCBiZSBhIFVTQiBkZXZpY2UsIHJpZ2h0PyBBbmQgaWYgaXQncyBhIFVTQiBkZXZpY2UsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgYSBVU0IgZ2FkZ2V0IGxpa2UgYGR1bW15X2hjZGAgb3IgYHZoY2lgLiBCdXQgdGhlbiwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgVGhhdCdzIHRoZSBraWNrZXIuXG5cbldhaXQsIGl0IGlzISBTeXprYWxsZXIncyBVU0IgZnV6emluZyBjYW4gbGV2ZXJhZ2UgYHZoY2lgIHRvIGZ1enogVVNCIGRldmljZXMsIHNvIGl0IHNob3VsZCBiZSByZWFjaGFibGUgYWZ0ZXIgYWxsLiBPa2F5LCBzbyBpZiBpdCdzIGEgVVNCIGRldmljZSwgd2UgY2FuIGFic29sdXRlbHkgaGl0IHRoaXMgY29kZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHJlYWNoYWJsZT8gSXQgbG9va3MgbGlrZSBpdCdzIHBhcnQgb2YgdGhlIHRlc3Rtb2RlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGluIHR1cm4gaGluZ2VzIG9uIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ2AgYW5kIHNlZSBpZiB3ZSBjYW4gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1Ni40NDQ3NjYzODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzUzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVDc5MjVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzoyOmNvbmZpZyBNVDc5MjVfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzo3OmNvbmZpZyBNVDc5MjVFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVFIChQQ0llKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjE5OmNvbmZpZyBNVDc5MjVVXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1Ni41NTI1MjM1NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIxNDI5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgVVNCIEludGVncmF0aW9uKipcblxuUmlnaHQsIGBNVDc5MjVVYC4uLiB0aGF0J3MgdGhlIFVTQiB2YXJpYW50LiBHb3QgaXQuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZHJpdmVycyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/IEkndmUgZ290IHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb3RoZXIgc3Vic3lzdGVtcy4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhIGNyaXRpY2FsIGxpbmsuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBmcmFtZXdvcmsgZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIG9yIG92ZXJsb29rZWQgcmVxdWlyZW1lbnRzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY3MgYW5kIGRvY3VtZW50YXRpb24gdG8gbWFwIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDI6NTkuNjczOTU2NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIE1UNzkyNV9DT01NT05cXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgTVQ3OTJ4X0xJQlxcbiAgIDU6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAgNjpcXHRcXG4gICA3OlxcdGNvbmZpZyBNVDc5MjVFXFxuICAgODpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3OTI1RSAoUENJZSkgc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdHNlbGVjdCBNVDc5MjVfQ09NTU9OXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgTVQ3OTI1LWJhc2VkIHdpcmVsZXNzIFBDSWUgZGV2aWNlcyxcXG4gIDE0OlxcdFxcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXFxuICAxNTpcXHRcXHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTVQ3OTI1VVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzkyNVUgKFVTQikgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBNVDc5MnhfVVNCXFxuICAyMjpcXHRcXHRzZWxlY3QgTVQ3OTI1X0NPTU1PTlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzkyNS1iYXNlZCB3aXJlbGVzcyBVU0IgZGV2aWNlcyxcXG4gIDI3OlxcdFxcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXFxuICAyODpcXHRcXHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1OS42NzQwNzI2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzg0ODk0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNVDc5MjVVIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBNVDc5MjVVYCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IHJlbGllcyBvbiBgTUFDODAyMTFgIGFuZCBgVVNCYC4gVGhhdCdzIHN0YW5kYXJkIGZvciBhIHdpcmVsZXNzIFVTQiBkZXZpY2UsIHNvIG5vIHN1cnByaXNlcyB0aGVyZS4gTGV0J3MgbWFrZSBzdXJlIGBNVDc5MjVfQ09NTU9OYCBpcyBhbHNvIHNlbGVjdGVkOyB0aGF0J3MgcHJvYmFibHkgZ290IHNvbWUgY29yZSBkZWZpbml0aW9ucy4gSSBzdXNwZWN0IHRoYXQgdGhlIGB0ZXN0bW9kZS5jYCBmaWxlIGlzIG9ubHkgYnVpbHQgaWYgdGhlIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAgb3B0aW9uIGlzIHR1cm5lZCBvbjsgdGhhdCdzIHByZXR0eSBjb21tb24gZm9yIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LiBUbyBjb25maXJtIHRoZXNlIGluZmVyZW5jZXMsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZWAgZmlsZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MDMuMTUyNTY0NTk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19NVDc5MjVfQ09NTU9OKSArPSBtdDc5MjUtY29tbW9uLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19NVDc5MjVVKSArPSBtdDc5MjV1Lm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xcbiAgIDg6XFx0bXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuICAgOTpcXHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xcbiAgMTA6XFx0bXQ3OTI1dS15IDo9IHVzYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjAzLjE1MjYyNTc2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk4NDA1NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTVQ3OTI1IFRlc3QgTW9kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhlcmUuIEkgc2VlIHRoYXQgYG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub2AuIEFscmlnaHQsIHNvIHRoZSBgdGVzdG1vZGUub2AgbW9kdWxlIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5MODAyMTFfVEVTVE1PREVgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBNVDc5MjVVYCB3aGljaCBJIGtub3cgaXMgcmVsZXZhbnQuIEJ1dCwgd2hhdCBhYm91dCB0aGUgbW9yZSBnZW5lcmljIGFzcGVjdHMsIGxpa2UgYE1BQzgwMjExYCBhbmQgYFVTQmA/IFRob3NlIGFyZSBwcmV0dHkgbXVjaCBleHBlY3RlZCBhcyBiYXNlIGRlcGVuZGVuY2llcywgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRob3NlLCBpdCdzIHRoZSBtb3JlIHNwZWNpYWxpemVkIGRlcGVuZGVuY2llcyBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLlxuXG5Ib2xkIG9uLCBJIHNlZSB0aGF0IGBNVDc5MjVfQ09NTU9OYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgTVQ3OTI1VWAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFNvLCB1bHRpbWF0ZWx5LCB0byBnZXQgdGhpcyBgdGVzdG1vZGUub2AgbW9kdWxlIGFuZCB0aGVyZWZvcmUgdGVzdCBtb2RlIHdvcmtpbmcgZm9yIHRoaXMgTVQ3OTI1VSB3aXJlbGVzcyBkcml2ZXIsIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBhcmUgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAuIFRoYXQncyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgYnkgbG9va2luZyBhdCB0aGUgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBmdW5jdGlvbiwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgYHRlc3Rtb2RlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MDguMzUxMDQ5NjU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MjA3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21haW4uYz0yNzE2PWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzkyNV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmMtMjc1NS1cXHRDRkc4MDIxMV9URVNUTU9ERV9DTUQobXQ3OTI1X3Rlc3Rtb2RlX2NtZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmM6Mjc1NjpcXHRDRkc4MDIxMV9URVNUTU9ERV9EVU1QKG10NzkyNV90ZXN0bW9kZV9kdW1wKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21haW4uYy0yNzU3LSNpZmRlZiBDT05GSUdfUE1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oPTQxMT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTItXFx0XFx0XFx0dm9pZCAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1Lmg6NDEzOmludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTQtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgdm9pZCAqZGF0YSwgaW50IGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTEyND1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTYxOmludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE2Mi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCB2b2lkICpkYXRhLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzowOC40NjU5NzkyMTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDQzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHRlc3QgbW9kZSBkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBNVDc5MjUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgLiBUaGF0J3MgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwdXJwb3NlLiBSaWdodCwgc28gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSB0ZXN0IG1vZGUgZHVtcCBpcyB0cmlnZ2VyZWQuXG5cbk5vdyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gU28sIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgY2FsbHMgYG10NzkyNV90bV9xdWVyeWAgYW5kIHRoYXQgZ2V0cyBjaGFuZ2VkLiBCdXQgd2FpdCwgYG10NzkyNV90bV9xdWVyeWAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhlIHN0YXRpYyBrZXl3b3JkIGltcGxpZXMgc2NvcGUuIElzIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgdGhlIE9OTFkgZnVuY3Rpb24gdGhhdCBjYWxscyBpdD8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcy4gSWYgSSdtIGNvbmZpZGVudCBhYm91dCB0aGUgc2NvcGUgSSdsbCBrbm93IHdoZXJlIHRvIGZvY3VzIHRoZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzoxMi41MzA0MTcxMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjgxNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzkyNV90bV9xdWVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo4NzptdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTg4LVxcdFxcdGNoYXIgKmV2dF9yZXNwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz0xNjE9aW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xOTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxOTg6XFx0XFx0XFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5OS1cXHRcXHRcXHRcXHRcXHQgICAgICBldnRfcmVzcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjEyLjYyMTcwNDEwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQwOTY5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZ3JlcCBzaG93cyB0aGF0IG9ubHkgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBjYWxscyBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gVGhlcmVmb3JlLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZXhhbWluZSBpbiBkZXRhaWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBNVDc5MjVVYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAgYW5kIGBVU0JgLCBhbmQgYE5MODAyMTFfVEVTVE1PREVgIGRlcGVuZHMgb24gYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYC4gU28gYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgc2VlbSBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIEkgYWxyZWFkeSBrbmV3IGBNQUM4MDIxMWAgd291bGQgYmUgbmVlZGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgaXNuJ3Qgc3RhdGljLCBhbmQgc3VyZSBlbm91Z2gsIGl0IGlzbid0LiBJdCdzIGV4cG9ydGVkIGluIGBtdDc5MjUuaGAgYW5kIHVzZWQgaW4gYG1haW4uY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoaXMgaXMgZ29vZDsgaXQncyBhY2Nlc3NpYmxlLlxuXG5BaCwgYnV0IHdhaXQuLi4gdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG10NzkyNV90bV9xdWVyeWAuIFRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gZ2V0IG92ZXJsb29rZWQuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50LlxuXG5UaGUgZGVzY3JpcHRpb24gaW5kaWNhdGVzIGEgZml4IGZvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuICpUaGF0KiBtYWtlcyBpdCBpbmNyZWRpYmx5IGludGVyZXN0aW5nLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGdvb2QuIFRoZSBjb2RlIGl0c2VsZiBzaG93cyB0aGUgYG1lbWNweWAgdnVsbmVyYWJpbGl0eTogYG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7YCBUaGlzIGlzIGFuIG9idmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UsIGZpeGluZyBhIGdlbnVpbmUgYnVnOiBzcGVjaWZpY2FsbHksIGEgcG90ZW50aWFsIHJlYWQgb3ZlcmZsb3cgaW4gYGV2dF9yZXNwYCBkdWUgdG8gdGhlIGxhY2sgb2YgYW4gaW5pdGlhbGl6YXRpb24gb2YgYGV2dF9yZXNwYCBhbmQgYSBwb3NzaWJsZSBzaXplIG1pc21hdGNoIGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci5cblxuVGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gVGhlIGxpa2VsaWhvb2Qgb2YgZXhwbG9pdGF0aW9uIGhlcmUgc2VlbXMgaGlnaCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGluaXRpYWxpemF0aW9uIGFzIHdlbGwuIE5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYE1UNzkyNV9FVlRfUlNQX0xFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MTkuMDYyNjc1ODU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyODMyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVQ3OTI1X0VWVF9SU1BfTEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo2OiNkZWZpbmUgTVQ3OTI1X0VWVF9SU1BfTEVOIDUxMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODc9bXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTExNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjExNjpcXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXFx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMTctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTE2MT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5NS1cXHRcXHRpZiAoZGF0YSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk2OlxcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzoxOS4zMDE5NjUwMjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE5MzE1Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgTVQ3OTI1IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGBNVDc5MjVgIGRyaXZlciB2dWxuZXJhYmlsaXR5LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIExldCdzIHNlZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNVDc5MjVVYCBhbmQgYE5MODAyMTFfVEVTVE1PREVgLiBXYWl0LCBgTVQ3OTI1X0NPTU1PTmAgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBiZWNhdXNlIGBNVDc5MjVVYCBhbmQgYE1UNzkyNUVgIGVuYWJsZSBpdC4gU2hvdWxkIEkgYm90aGVyIGluY2x1ZGluZyBgTVQ3OTI1RWA/IE5haCwgdGhhdCdzIGEgUENJZSBkZXZpY2U7IFBDSWUgZGV2aWNlcyBhcmUgZ2VuZXJhbGx5IG11Y2ggbW9yZSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG1vcmUgY29tcGxleCB0byBlbXVsYXRlLiBUaGUgYE1UNzkyNVVgIGlzIGEgVVNCIGRldmljZSwgYW5kIHRoYXQncyAqbXVjaCogZWFzaWVyIHRvIHRhcmdldCB1c2luZyBzb21ldGhpbmcgbGlrZSB2aGNpLiBTbywgZW5hYmxpbmcganVzdCBgTVQ3OTI1VWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFuZCBmcmFua2x5LCBiZXR0ZXIgZm9yIGZ1enppbmcuXG5cbk5vdywgaXMgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgZW5vdWdoIHRvIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmU/IExldCBtZSBjaGVjayB0byBzZWUgaWYgIGBOTDgwMjExX1RFU1RNT0RFYCBpcyBlbm91Z2guIFllcywgYFwibXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXCJgLlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYG10NzkyNV90bV9xdWVyeWAgYW5kIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBBbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIFRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBiZSBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyZWF0ZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLiAgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEknbGwgc2V0IHRoZSBgRm9jdXNTeW1ib2xzYCB0byBgW1wibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIl1gLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJNVDc5MjVVXCIsIFwiTkw4MDIxMV9URVNUTU9ERVwiXWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgYG10NzkyNWAgdGVzdG1vZGUgcXVlcnkgaGFuZGxlci4gVGhlIHZ1bG5lcmFibGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGBubDgwMjExYCB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIGBNVDc5MjVgIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGFuZCB0aGF0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGVtdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMCwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MjYuNDk1MTIyNjYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjU4ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk5MODAyMTFfVEVTVE1PREVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc5MjVfdGVzdG1vZGVfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgbXQ3OTI1IHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIE1UNzkyNSBVU0Igd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjI2LjcxMDQxMzI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODE3OTYwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MjYuNzExNDgzMDk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNDgxNjg4NDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc3BvbnNlIGhhbmRsaW5nIHRvIGFsbG93IHNob3J0ZXIgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gVG8gcHJldmVudCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0KClgIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHNob3J0ZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBldnRfcmVzcGAgYnVmZmVyIChgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YCkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllNGVhNmJiZWNmNDUxZTZkZWM3MDAyMWQ1NmRiOTE5YTQ1OWM4NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMDowMjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG5pbmRleCAyMmE4ZjFkZGMzMjFkLi5kYmYxMTU5ZWZmZWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuQEAgLTg3LDEzICs4NywxNCBAQCBzdGF0aWMgaW50XG4gbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRcdGNoYXIgKmV2dF9yZXNwKVxuIHtcbitcdGNvbnN0IHVuc2lnbmVkIGludCBoZHIgPSBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKTtcbiBcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWQ7XG4tXHRjaGFyICpwY21kID0gKGNoYXIgKilcdTAwMjZjbWQ7XG4rXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKnBjbWQgPSBcdTAwMjZjbWQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi1cdGludCByZXQgPSAxO1xuK1x0aW50IHJldDtcbiBcbiBcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcbi1cdG1lbWNweShwY21kICsgNCwgKGNoYXIgKilcdTAwMjZyZXEtXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcbitcdG1lbWNweShcdTAwMjZwY21kLVx1MDAzZWN0cmwsIFx1MDAyNnJlcS1cdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xuIFxuIFx0aWYgKCooKHVpbnQxNl90ICopcmVxLVx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXG4gXHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksXG5AQCAtMTAxLDE2ICsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFx1MDAyNnNrYik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KSB7XG4rXHRpZiAoIXNrYl9wdWxsKHNrYiwgaGRyKSkge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdG1lbWNweSgoY2hhciAqKWV2dF9yZXNwLCAoY2hhciAqKXNrYi1cdTAwM2VkYXRhICsgOCwgTVQ3OTI1X0VWVF9SU1BfTEVOKTtcbitcdG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XG4gXG4gb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuQEAgLTE5MCw3ICsxOTMsNyBAQCBpbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG4gXG4gXHRcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xuIFx0XHRpZiAoZGF0YSkge1xuLVx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXTtcbitcdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtcbiBcbiBcdFx0XHRlcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LVx1MDAzZWRldiwgbmxhX2RhdGEoZGF0YSksXG4gXHRcdFx0XHRcdCAgICAgIGV2dF9yZXNwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjI2LjcxMTQ4NDM5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU0NDc4OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzkyNSBUZXN0bW9kZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byBgbXQ3OTI1X3RtX3F1ZXJ5YCBhbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aXRoaW4gdGhlIE1UNzYgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgcmVmaW5lbWVudHMsIGFpbWluZyBmb3IgaW5jcmVhc2VkIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgaW5pdGlhbGl6YXRpb24gaXNzdWUuXG5cbkluIGBtdDc5MjVfdG1fcXVlcnlgLCB0aGUgZmlyc3QgY2hhbmdlIGlzIHF1aXRlIGNsZWFyLiBJbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBgY21kYCBhcyBhIHJhdyBieXRlIGFycmF5IChgY2hhciAqcGNtZGApLCB3ZSdyZSBub3cgY29ycmVjdGx5IHVzaW5nIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIChgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kYCkuIFRoaXMgaXMgY2xlYW5lciBhbmQgc2FmZXI7IGl0IGF2b2lkcyBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyBhbmQgbWFrZXMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gIFRoZSBvbGQgYG1lbWNweShwY21kICsgNCwgLi4uKWAgdXNpbmcgYSBgY2hhciAqYCBhbmQgYW4gb2Zmc2V0IGlzIG5vdyBgbWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgLi4uKWAgd2hpY2ggaXMgbXVjaCBwcmVmZXJyZWQuIEFsc28sIHRoZXJlJ3MgYSBuZXcgYGVsc2UgcmV0ID0gLUVJTlZBTDtgIHdoaWNoIGFkZHMgYSBsaXR0bGUgbW9yZSBlcnJvciBjaGVja2luZyBpbiB0aGUgY29udHJvbCBmbG93LlxuXG5UaGUgbmV4dCBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZXNwb25zZSBkYXRhIGlzIGhhbmRsZWQuICBUaGUgb2xkIGNvZGUgY29waWVkICpleGFjdGx5KiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBmcm9tIGBza2ItXHUwMDNlZGF0YSArIDhgIGludG8gYGV2dF9yZXNwYC4gIFRoZSBuZXcgY29kZSB1c2VzIGBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGluc3RlYWQuIFRoYXQgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBncmFjZWZ1bGx5IGhhbmRsZSBzaG9ydGVyLXRoYW4tZXhwZWN0ZWQgcmVzcG9uc2VzIGZyb20gdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4gVGhlIHByZXZpb3VzIGBpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOClgIGNoZWNrIGlzIG5vdyByZXBsYWNlZCB3aXRoIGAhc2tiX3B1bGwoc2tiLCBoZHIpYCB3aGljaCBpcyBhIGJldHRlciB3YXkgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgc2tfYnVmZiBidWZmZXIuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFRoZSBvbGQgY29kZSBkZWNsYXJlZCBgZXZ0X3Jlc3BgIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBJdCB0aGVuIHBhc3NlZCB0aGlzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHRvIGBtdDc5MjVfdG1fcXVlcnlgLiAgSWYgYG10NzkyNV90bV9xdWVyeWAgZmFpbGVkIGZvciAqYW55KiByZWFzb24sIGBldnRfcmVzcGAgd291bGQgY29udGFpbiBnYXJiYWdlLiBUaGUgbmV3IGNvZGUgcmVtZWRpZXMgdGhpcyB3aXRoIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgLiBUaGlzIGlzIGtleS4gQnkgaW5pdGlhbGl6aW5nIGBldnRfcmVzcGAgdG8gemVybywgYW55IHVud3JpdHRlbiBwb3J0aW9ucyBvZiB0aGUgYnVmZmVyIGFmdGVyIGBtdDc5MjVfdG1fcXVlcnlgIHJldHVybnMgd2lsbCBiZSBndWFyYW50ZWVkIHRvIGJlIHplcm8uIENvdXBsZWQgd2l0aCB0aGUgYG1pbl90YCBsb2dpYywgdGhpcyBzaG91bGQgcmVzdWx0IGluIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgYSBzaG9ydGVyIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiBUaGUgb2xkIGNvZGUgcmlza2VkIHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9ud2FyZHMgaWYgYG10NzkyNV90bV9xdWVyeWAgZmFpbGVkIG9yIHJldHVybmVkIGEgcGFydGlhbCByZXNwb25zZS5cblxuSSByZWFsbHkgbmVlZCB0byBzZWUgd2hhdCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgICpkb2VzKiB3aXRoIGBldnRfcmVzcGAgYWZ0ZXIgdGhlIGNhbGwgdG8gYG10NzkyNV90bV9xdWVyeWAgdG8gYmUgY2VydGFpbi4gQnV0IGZyb20gdGhpcyBpbW1lZGlhdGUgYW5hbHlzaXMsIGl0IGxvb2tzIGxpa2UgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBzYWZldHksIGVuc3VyaW5nIHRoYXQgdGhlIGRyaXZlciBpcyBtb3JlIHJvYnVzdCB3aGVuIGRlYWxpbmcgd2l0aCB1bmV4cGVjdGVkIHJlc3BvbnNlcyBmcm9tIHRoZSBoYXJkd2FyZSwgb3IgcG90ZW50aWFsIGZhaWx1cmUgc3RhdGVzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzozOS4yNTYyNzgzODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdKSB7XFxuIDE4MzpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpkcnZfdGJbTlVNX01UNzkyNV9UTV9BVFRSU10sICpkYXRhO1xcbiAxODQ6XFx0XFx0XFx0aW50IHJldDtcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0XFx0ZGF0YSA9IHRiW01UNzZfVE1fQVRUUl9EUlZfREFUQV07XFxuIDE4NzpcXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoZHJ2X3RiLFxcbiAxODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBNVDc5MjVfVE1fQVRUUl9NQVgsXFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRhdGEsIG10NzkyNV90bV9wb2xpY3ksXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbiAxOTE6XFx0XFx0XFx0aWYgKHJldClcXG4gMTkyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdFxcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xcbiAxOTU6XFx0XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTk2OlxcdFxcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRcXHRlcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LVxcdTAwM2VkZXYsIG5sYV9kYXRhKGRhdGEpLFxcbiAxOTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZXZ0X3Jlc3ApO1xcbiAyMDA6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gMjAxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdFxcdFxcdHJldHVybiBubGFfcHV0KG1zZywgTVQ3OTI1X1RNX0FUVFJfUlNQLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihldnRfcmVzcCksIGV2dF9yZXNwKTtcXG4gMjA1OlxcdFxcdFxcdH1cXG4gMjA2OlxcdFxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjM5LjI1NjQwMTcyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTM0ODE0ODQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRlc3QgTW9kZSBSZXNwb25zZSBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGV2dF9yZXNwYCBnZXRzIHNlbnQgdG8gdXNlciBzcGFjZSB1c2luZyBgbmxhX3B1dGAuIFByZXZpb3VzbHksIGluIHRoZSBvbGRlciBjb2RlLCBpZiBgbXQ3OTI1X3RtX3F1ZXJ5YCB3YXMgc3VjY2Vzc2Z1bCwgaXQgcmVsaWFibHkgY29waWVkIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzLCBzbyBgZXZ0X3Jlc3BgIHdhcyBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIG9sZCBjb2RlIGhhZCBhbiBpbXBvcnRhbnQgY2hlY2s6IGlmIGBza2ItXHUwMDNlbGVuYCB3YXMgbGVzcyB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4YCwgaXQgcmV0dXJuZWQgYC1FSU5WQUxgLCBwcmV2ZW50aW5nIHRoZSBgbmxhX3B1dGAgY2FsbC4gVGhlIG9sZCBsb2dpYyBhbHNvIG9ubHkgc2VudCBhIHJlc3BvbnNlIGlmIGByZXEtXHUwMDNlcGFkZGluZ2Agd2FzIGVpdGhlciBgTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTGAgb3IgYE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVRgIGFuZCBpbml0aWFsaXplZCBgcmV0YCB0byBgMWAgb3RoZXJ3aXNlLCBwcmV2ZW50aW5nIGFueSByZXNwb25zZS5cblxuTm93LCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJuZWQgMCAoc3VjY2VzcykgYW5kIGBza2ItXHUwMDNlbGVuYCB3YXMgbGFyZ2UgZW5vdWdoLCB0aGUgb2xkIGNvZGUgY29waWVkIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiA4LCB0aGVyZWJ5IGZ1bGx5IGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoeSBkaWQgdGhlIHBhdGNoIGNoYW5nZSBgZXZ0X3Jlc3BgIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQ/IEl0IGFwcGVhcnMgdGhhdCB0aGUgbmV3IGNvZGUgbm93IHVzZXMgYHNrYl9wdWxsYCBhbmQgdGhlbiBjb3BpZXMgYSBudW1iZXIgb2YgYnl0ZXMgZGV0ZXJtaW5lZCBieSBgbWluX3QodTMyLCBza2ItXHUwMDNlbGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYC4gSWYgYHNrYi1cdTAwM2VsZW5gIGlzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgaXQgY29waWVzIGZld2VyIGJ5dGVzLiBUaGlzIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB3aGVyZSB0aGUgdW5jb3BpZWQgYnl0ZXMgb2YgYGV2dF9yZXNwYCB3b3VsZCBiZSB1bmluaXRpYWxpemVkIGlmIHRoZXkgd2VyZW4ndCB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCB0aGVuIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dGAuIFRoaXMgaXMgYSAqZml4KiB0byBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB0aGF0IHdhcyAqaW50cm9kdWNlZCogYnkgdGhlIGNvZGUgY2hhbmdlIVxuXG5Ib3dldmVyLCB0aGUgb2xkIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGlmIGBza2ItXHUwMDNlbGVuYCB3YXMgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTiArIDhgIGJlZm9yZSBjb3B5aW5nLiBTbywgdGhlIG9yaWdpbmFsIGNvZGUgZ3VhcmFudGVlZCBmdWxsIGluaXRpYWxpemF0aW9uIHVuZGVyIHRoZSBub3JtYWwgZmxvdyBhbmQgZXJyb3IgY29uZGl0aW9ucy5cblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSBtYXkgYmUgdGhhdCB0aGUgYHNrYmAgbGVuZ3RoICpjYW4qIGJlIGxlc3MgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOGAsIGFuZCB0aGV5ICp3YW50KiB0byBzdXBwb3J0IHNob3J0ZXIgcmVzcG9uc2VzIG5vdy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc2tiX3B1bGwoc2tiLCBoZHIpYCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIHNwZWNpZmljYWxseSBhY2NvbW1vZGF0aW5nIHRoaXMuIFNpbmNlIGBza2ItXHUwMDNlbGVuYCBjYW4gYmUgc21hbGxlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGFmdGVyIHB1bGxpbmcgdGhlIGhlYWRlciwgemVyby1pbml0aWFsaXphdGlvbiBvZiBgZXZ0X3Jlc3BgIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLlxuXG5TbywgdGhlIHBhdGNoICpwcmV2ZW50cyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdoaWNoIGl0ICppbnRyb2R1Y2VkKiBieSB0aGlzIGxvZ2ljIGNoYW5nZS5cblxuV2FpdCwgaXMgdGhlcmUgKmFub3RoZXIqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlPyBMZXQncyBjaGVjayBgbXQ3OTI1X3RtX3F1ZXJ5YC4gVGhlIG9sZCBjb2RlIHdhcyB1c2luZyBgbWVtY3B5KHBjbWQgKyA0LCAuLi4pYCB3aGVyZSBgcGNtZGAgd2FzIGEgYGNoYXIgKmAuIFRoaXMgb2Zmc2V0IGJ5IGZvdXIgYnl0ZXMsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3RydWN0IGxheW91dC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6NTQuNjA0NTUyODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzE0MTM0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG10NzkyNV9yZnRlc3RfY21kIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oPTY2Mj1zdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTY2OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaDo2NzA6c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NzEtXFx0dTggcGFkZGluZ1s0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MDAuMjM1OTcyMjczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzczMDY5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgbXQ3OTI1X3JmdGVzdF9jbWQgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgTVQ3OTI1IGRyaXZlciBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIG91dCB0aGUgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHJmdGVzdCwgc28gcmFkaW8gZnJlcXVlbmN5IHRlc3RpbmcgY29tbWFuZC5cIiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHN0cnVjdHVyZSBmb3IgY29udHJvbGxpbmcgdGhlIHJhZGlvJ3Mgb3BlcmF0aW9uIGZvciBkaWFnbm9zdGljcyBhbmQgY2FsaWJyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZpZWxkcywgaG93IGl0J3MgcGFja2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBNVDc2IE1DVS4gSXMgdGhpcyBzb21ldGhpbmcgd2hlcmUgSSBuZWVkIHRvIGNoZWNrIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBjb3JyZXNwb25kPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyYWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIGNlcnRhaW4gdmFsdWU/IERvZXMgdGhpcyByZWxhdGUgdG8gdGhlIHBvd2VyIGFtcGxpZmllciBpbiBhbnkgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjb21tYW5kIGlzIGNvbnN0cnVjdGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBNVDc2IGZpcm13YXJlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSBhbmQgZ28gZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjAzLjc3MzI4MzEzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdH07XFxuIDY2MTpcXHRcXG4gNjYyOlxcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xcbiA2NjM6XFx0XFx0dTE2IHRhZztcXG4gNjY0OlxcdFxcdHUxNiBsZW5ndGg7XFxuIDY2NTpcXHRcXHR1OCBhY3Rpb247XFxuIDY2NjpcXHRcXHR1OCByZXNlcnZlZFszXTtcXG4gNjY3OlxcdFxcdHVuaW9uIHRlc3Rtb2RlX2RhdGEgZGF0YTtcXG4gNjY4OlxcdH0gX19wYWNrZWQ7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCB7XFxuIDY3MTpcXHRcXHR1OCBwYWRkaW5nWzRdO1xcbiA2NzI6XFx0XFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCBjdHJsO1xcbiA2NzM6XFx0fSBfX3BhY2tlZDtcXG4gNjc0OlxcdFxcbiA2NzU6XFx0c3RhdGljIGlubGluZSBlbnVtIGNvbm5hYzNfbWN1X2NpcGhlcl90eXBlXFxuIDY3NjpcXHRtdDc5MjVfbWN1X2dldF9jaXBoZXIoaW50IGNpcGhlcilcXG4gNjc3OlxcdHtcXG4gNjc4OlxcdFxcdHN3aXRjaCAoY2lwaGVyKSB7XFxuIDY3OTpcXHRcXHRjYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowMy43NzM0MDYzOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNzc2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBUZXN0bW9kZSBDb21tYW5kIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIEl0IGhhcyBzb21lIHBhZGRpbmcsIGB1OCBwYWRkaW5nWzRdYCwgYW5kIHRoZW4gYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgY3RybGAuIFRoZSBvbGRlciBjb2RlIGRvZXMgYSBgbWVtY3B5YCB0byB3cml0ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUsIGJ1dCBvZmZzZXRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIGJ5IDQgYnl0ZXM6IGBtZW1jcHkocGNtZCArIDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YC4gSSByZWNvZ25pemUgdGhpcyBpbW1lZGlhdGVseS5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlLCBgbWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YCwgaXMgY2xlYXJseSBhIG1vcmUgZGlyZWN0IGFuZCBjbGVhbmVyIHdheSB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLiBJdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIG9mZnNldCBpbiB0aGUgb3JpZ2luYWwganVzdCB0YWtlcyBjYXJlIG9mIHRoZSBwYWRkaW5nLiBUaGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgY2xlYW51cCDigJMgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBhdm9pZGluZyB0aGUgbWFudWFsIGJ5dGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBOb3RoaW5nIHJldm9sdXRpb25hcnkgaGVyZSwganVzdCBzb2xpZCwgbWFpbnRhaW5hYmxlIGNvZGUuXG5cbkJ1dCB3aGF0IGFib3V0IGByZXFgPyBJIHNob3VsZCBleGFtaW5lIHRoYXQgbW9yZSBjbG9zZWx5LiBUaGUgY29udGV4dCBvZiB0aGlzIHdob2xlIHRoaW5nIGlzIHRoYXQgYHJlcWAgaXMgYSBgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcWAsIHNvIGxldCdzIGRlbHZlIGludG8gdGhhdCBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjA4Ljc5MTE3Mjk5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MjgxNjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTg9ZW51bSBtdDc5MjVfdGVzdG1vZGVfYXR0ciB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk6c3RydWN0IG10NzkyNV90bV9jbWQge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMjAtXFx0dTggcGFkZGluZ1s0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTQuMTU0MDE0NzQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjA4MzEyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBtdDc5MjVfdG1fY21kYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBgc3RydWN0IG10NzkyNV90bV9jbWRgLiBJbW1lZGlhdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIE1UNzkyNSBhcmNoaXRlY3R1cmUuIElzIHRoaXMgY29tbWFuZC1zcGVjaWZpYywgY29uZmlndXJhdGlvbi1vcmllbnRlZCwgb3IgZGF0YS10cmFuc2ZlciByZWxhdGVkPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQncyBhIGNvbW1hbmQgc3RydWN0dXJlLCBidXQgdGhhdCdzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmaWVsZHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdHJhbnNsYXRlcyB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIEFyZSB3ZSB0YWxraW5nIHJlZ2lzdGVycywgRE1BIGRlc2NyaXB0b3JzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuTXkgYnJhaW4ncyBpbnN0YW50bHkgZ29pbmcgdG8gdGhlIHR5cGljYWwgc3VzcGVjdHM6IGEgY29tbWFuZCBvcGNvZGUsIHBvdGVudGlhbGx5IHN1Yi1vcGNvZGVzIGZvciBmaW5lciBncmFudWxhcml0eSwgc29tZSBmb3JtIG9mIGFkZHJlc3Npbmcgb3IgaWRlbnRpZmllciB0byB0YXJnZXQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGVudGl0eSAoYSBzcGVjaWZpYyBNQUMsIGEgc3BlY2lmaWMgcXVldWUsIGEgc3BlY2lmaWMgY2hhbm5lbCksIGxlbmd0aCBmaWVsZHMgdG8gaW5kaWNhdGUgZGF0YSBzaXplcywgYW5kIG1heWJlIGEgc3RhdHVzL3Jlc3BvbnNlIGZpZWxkIHRvIHRyYWNrIGNvbW1hbmQgY29tcGxldGlvbiBvciBlcnJvcnMuIEknZCBiZSBsb29raW5nIGZvciBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMgaW1tZWRpYXRlbHkg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhY2hlIGxpbmUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoZSBoYXJkd2FyZSBhY2Nlc3NlcyB0aGlzPyBQYWRkaW5nIGlzIGFsd2F5cyBhIGdpdmVhd2F5LlxuXG5UaGVuLCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgZGF0YSBwYXlsb2FkcywgaWYgYW55LiBXaGF0IGtpbmQgb2YgZGF0YSBpcyBiZWluZyBwYXNzZWQgd2l0aCB0aGlzIGNvbW1hbmQ/IElzIHRoaXMgZm9yIHJhdGUgY29udHJvbCwgdHJhZmZpYyBzaGFwaW5nLCBwb3dlciBtYW5hZ2VtZW50IHBhcmFtZXRlcnMsIG9yIG1heWJlIGV2ZW4gZmlybXdhcmUgY29udHJvbD8gVGhhdCB3aWxsIGluZmx1ZW5jZSBteSBleHBlY3RhdGlvbnMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4sIGFuZCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgaW1wbGljYXRpb25zLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZS4uLiBhaGEuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjE4LjQ3NDg1MDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdE5VTV9NVDc5MjVfVE1fQVRUUlMsXFxuICAxNjpcXHRcXHRNVDc5MjVfVE1fQVRUUl9NQVggPSBOVU1fTVQ3OTI1X1RNX0FUVFJTIC0gMSxcXG4gIDE3OlxcdH07XFxuICAxODpcXHRcXG4gIDE5OlxcdHN0cnVjdCBtdDc5MjVfdG1fY21kIHtcXG4gIDIwOlxcdFxcdHU4IHBhZGRpbmdbNF07XFxuICAyMTpcXHRcXHRzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIGM7XFxuICAyMjpcXHR9IF9fcGFja2VkO1xcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgbXQ3OTI1X3RtX2V2dCB7XFxuICAyNTpcXHRcXHR1MzIgcGFyYW0wO1xcbiAgMjY6XFx0XFx0dTMyIHBhcmFtMTtcXG4gIDI3OlxcdH0gX19wYWNrZWQ7XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBtdDc5MjVfdG1fcG9saWN5W05VTV9NVDc5MjVfVE1fQVRUUlNdID0ge1xcbiAgMzA6XFx0XFx0W01UNzkyNV9UTV9BVFRSX1NFVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKSxcXG4gIDMxOlxcdFxcdFtNVDc5MjVfVE1fQVRUUl9RVUVSWV0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKSxcXG4gIDMyOlxcdH07XFxuICAzMzpcXHRcXG4gIDM0OlxcdHN0YXRpYyBpbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguNDc1MDExMjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxODU3NzU5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiB0aGUgVGVzdG1vZGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGByZXFgIGlzIGEgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gVGhlIGNvZGUgY2hlY2tzIGAqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKWAuIGByZXEtXHUwMDNlcGFkZGluZ2AgaXMgYSBgdTggcGFkZGluZ1s0XWAsIHNvIHRoaXMgcmVhZHMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiB0aGF0IHBhZGRpbmcgZmllbGQuIGByZXFgIGNvbWVzIGZyb20gdXNlciBzcGFjZSB2aWEgYG5sYV9kYXRhKGRhdGEpYCwgd2hlcmUgYGRhdGFgIGNvbWVzIGZyb20gYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGVuZm9yY2VzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAsIG1lYW5pbmcgdGhlIHNpemUgb2YgYHJlcWAgaXMgZXhhY3RseSB3aGF0IHRoZSBzdHJ1Y3QgZGljdGF0ZXMuIFNpbmNlIHRoaXMgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV0bGluayBsYXllciBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCBgZXZ0X3Jlc3BgPyBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBldnRfcmVzcGAgaXMgdXNlZCBpbiBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIGFuZCBpcyBldmVudHVhbGx5IHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXRgLiBQcmV2aW91c2x5LCBpZiBgbXQ3OTI1X3RtX3F1ZXJ5YCByZXR1cm5lZCAwLCBpdCB3b3VsZCBoYXZlIGNvcGllZCBleGFjdGx5IGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzIGludG8gYGV2dF9yZXNwYC4gQnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGNvbmRpdGlvbnMgdG8gY29uc2lkZXIuXG5cbkxldCdzIHJldmlzaXQgdGhlIG9sZCBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbi4gSWYgYHJlcS1cdTAwM2VwYWRkaW5nYCBkb2Vzbid0IG1hdGNoIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAsIGByZXRgIGJlY29tZXMgMSwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIEluIHRoaXMgY2FzZSwgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aWxsIHJldHVybiAxLCBhbmQgY3J1Y2lhbGx5LCBpdCAqd29uJ3QqIGNhbGwgYG5sYV9wdXRgLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGdldHMgbGVha2VkIGluIHRoYXQgc2NlbmFyaW8uXG5cbldoYXQgaWYgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIHJldHVybnMgMCBidXQgYHNrYmAgaXMgTlVMTD8gV2VsbCwgdGhlIGZ1bmN0aW9uIHNldHMgYHNrYmAgaWYgaXQgcmV0dXJucyAwLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgdG9vIHNob3J0LCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gSWYgYHNrYi1cdTAwM2VsZW5gIGlzIHN1ZmZpY2llbnQsIHRoZSBjb2RlIGNvcGllcyBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBpbnRvIGBldnRfcmVzcGAuIFNvLCB0aGUgb2xkIGNvZGUgc2VlbXMgc2FmZTsgYGV2dF9yZXNwYCAqc2hvdWxkKiBiZSBmdWxseSBpbml0aWFsaXplZCBpbiB0aGUgc3VjY2Vzc2Z1bCBjYXNlcy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhlcmUgYW55IHBhdGggd2hlcmUgYG10NzkyNV90bV9xdWVyeWAgY291bGQgcmV0dXJuIDAsIGJ1dCBgZXZ0X3Jlc3BgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZD8gTm8uIEluIHRoZSBvbGQgY29kZSwgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgaXQgKm11c3QqIGhhdmUgY29waWVkIHRoZSBkYXRhIHZpYSBgbWVtY3B5YCwgbWVhbmluZyBpdCBpcyBpbml0aWFsaXplZC5cblxuV2hhdCBhYm91dCBhIHNpemUgbWlzbWF0Y2g/IFdoYXQgaWYgYE1UNzkyNV9FVlRfUlNQX0xFTmAgaXMgZ3JlYXRlciB0aGFuIGBza2ItXHUwMDNlZGF0YSArIDhgIGNvbnRhaW5zPyBUaGUgY2hlY2sgYGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KWAgcHJldmVudHMgdGhhdC4gT2theSwgd2hhdCBpZiBgc2tiLVx1MDAzZWxlbmAgaXMgbGFyZ2UgZW5vdWdoLCBidXQgdGhlIGFjdHVhbCBkYXRhIGZyb20gdGhlIE1DVSBpcyBnYXJiYWdlPyBUaGF0IGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgKmtlcm5lbCogbWVtb3J5IGlzc3VlLiBJdCdzIGEgcHJvYmxlbSB3aXRoIHRoZSBNQ1UgcHJvdmlkaW5nIGJhZCBkYXRhLCB3aGljaCBLTVNBTiB3b3VsZG4ndCBjYXRjaC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCwgbGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIGNoZWNrIGBpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOClgIGlzIHJlcGxhY2VkIHdpdGggYGlmICghc2tiX3B1bGwoc2tiLCBoZHIpKWAuIFNvIGBoZHJgIGlzIGBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKWAuIExldCdzIGNvbmZpcm0gd2hhdCBgaGRyYCBhY3R1YWxseSBpcy4gQWZ0ZXIgdGhhdCwgVGhlIGBtZW1jcHlgIGlzIGNoYW5nZWQgdG8gYG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7YC4gU28sIGlmIGBza2ItXHUwMDNlbGVuYCBpcyBzbWFsbGVyIHRoYW4gd2hhdCBpcyBleHBlY3RlZCwgYSBzbWFsbGVyIGFtb3VudCBvZiBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIGBza2JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjM0LjY2MDc5MDU0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzODE1NzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oPTY1Nj11bmlvbiB0ZXN0bW9kZV9ldnQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtNjYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oOjY2MjpzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjMtXFx0dTE2IHRhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzkuNjk4OTU2ODY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzg4NjY2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHVuaV9jbWRfdGVzdG1vZGVfY3RybGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCB3aGVyZSBhIHNwZWNpZmljIHBpZWNlIG9mIGl0IGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIHdoYXQgaXQncyBpbnRlbmRlZCB0byBkbywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgc3VzcGVjdCB0aGlzIHN0cnVjdCBsaWtlbHkgY29udGFpbnMgdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBmb3Igd2hhdGV2ZXIgdGVzdGluZyBtb2RlIGlzIGltcGxlbWVudGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgYXMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgd2lsbCBiZSB3aGVyZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBpcyBsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgaXQgY2FuIHRha2UgYXJlLCBhcyB3ZWxsIGFzIHRoZSBleHBlY3RlZCByYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gVGhlbiwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjIzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDIuODc3ODc2MDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjI6XFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XFxuIDY2MzpcXHRcXHR1MTYgdGFnO1xcbiA2NjQ6XFx0XFx0dTE2IGxlbmd0aDtcXG4gNjY1OlxcdFxcdHU4IGFjdGlvbjtcXG4gNjY2OlxcdFxcdHU4IHJlc2VydmVkWzNdO1xcbiA2Njc6XFx0XFx0dW5pb24gdGVzdG1vZGVfZGF0YSBkYXRhO1xcbiA2Njg6XFx0fSBfX3BhY2tlZDtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcXG4gNjcxOlxcdFxcdHU4IHBhZGRpbmdbNF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjQyLjg3ODAwODI4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTIzMjA4OTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKWAgZXZhbHVhdGVzIHRvIDguIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgYGhkcmAgdmFsdWUgaXMgOC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBza2ItXHUwMDNlZGF0YSArIDhgLCBhbmQgdGhlIG5ldyBjb2RlIHV0aWxpemVzIGBza2JfcHVsbChza2IsIGhkcilgLiBgc2tiX3B1bGxgIHNoaWZ0cyBgc2tiLVx1MDAzZWRhdGFgIGZvcndhcmQgYnkgOCBieXRlcyBhbmQgZGVjcmVtZW50cyBgc2tiLVx1MDAzZWxlbmAgYnkgOC4gVGhlbiBpdCBjb3BpZXMgYnl0ZXMgdXNpbmcgYG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCAoYWZ0ZXIgdGhlIHB1bGwpLCB0aGUgY29weSB3b3VsZCB3cml0ZSBmZXdlciBieXRlcyB0aGFuIGFsbG9jYXRlZCBpbiBgZXZ0X3Jlc3BgLiBTaW5jZSBgZXZ0X3Jlc3BgIGlzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBzaXplb2YoZXZ0X3Jlc3ApYCAoZXF1YWwgdG8gYE1UNzkyNV9FVlRfUlNQX0xFTmApLCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIGBldnRfcmVzcGAgd2l0aCBge31gLlxuXG5TbywgdGhpcyBwYXRjaCBhY3R1YWxseSAqaW50cm9kdWNlcyogYSBjYXNlIHdoZXJlIHRoZSBjb3B5IG1pZ2h0IGJlIHNob3J0ZXIsIGFuZCAqZml4ZXMqIHRoZSBwb3NzaWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gQnV0IGRpZCB0aGUgb3JpZ2luYWwgY29kZSBoYXZlIGEgbGVhaz8gTm8sIGJlY2F1c2UsIHdpdGggdGhlIG9sZCBjb2RlLCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOGAsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBgLUVJTlZBTGAuIFRoaXMgd291bGQgdGhlbiBwcm9wYWdhdGUgdG8gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aGljaCBhbHNvIHdvdWxkIHJldHVybiBgLUVJTlZBTGAgYW5kIHdvdWxkIG5vdCBjYWxsIGBubGFfcHV0YC4gVGhpcyBpbmRpY2F0ZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGxlYWtlZCBpbiB0aGUgb2xkZXIgY29kZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoZXJlIGFyZSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdoYXQgYWJvdXQgYHJlcS1cdTAwM2VwYWRkaW5nYD8gTGV0J3MgY2hlY2s6XG5cbmBgYGNcblx0aWYgKCooKHVpbnQxNl90ICopcmVxLVx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXG5gYGBcblxuSGVyZSwgYHJlcWAgaXMgYSBgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcWAsIHdoaWNoIGNvbWVzIGZyb20gYG5sYV9kYXRhKGRhdGEpYC4gYGRhdGFgIGlzIGBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldYC4gVGhlIHBvbGljeSBpcyBgTkxBX1BPTElDWV9FWEFDVF9MRU4oc2l6ZW9mKHN0cnVjdCBtdDc5MjVfdG1fY21kKSlgLiBUaGlzIG1lYW5zIGByZXFgIGlzIGV4YWN0bHkgdGhlIHNpemUgb2YgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gSXMgYHJlcS1cdTAwM2VwYWRkaW5nYCB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBpdCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoZSBuZXRsaW5rIGxheWVyLiBLTVNBTiB0cmFja3Mga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBpbml0aWFsaXplIGl0LCBpdCdzIG5vdCBhIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cblxuTm93IGxldCdzIGNoZWNrIGBjbWRgOlxuYGBgY1xuIFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDtcbi1cdGNoYXIgKnBjbWQgPSAoY2hhciAqKVx1MDAyNmNtZDtcbitcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFx1MDAyNmNtZDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuLVx0aW50IHJldCA9IDE7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpO1xuLVx0bWVtY3B5KHBjbWQgKyA0LCAoY2hhciAqKVx1MDAyNnJlcS1cdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xuK1x0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG5gYGBcbkluIHRoZSBvbGQgY29kZSwgYHBjbWRgIHdhcyBhIGBjaGFyICpgLiBUaGVuIGBzaXplb2YoKnBjbWQpYCB3b3VsZCBlcXVhbCBgc2l6ZW9mKGNoYXIpYCBvciBgMWAuIFRoaXMgbWVhbnMgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtgIG9ubHkgemVyb2VkIG9uZSBieXRlIG9mIGBjbWRgISBUaGF0J3MgYSBkZWZpbml0ZSBidWcuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDo1NC4xMTAxMDEzNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgaW50XFxuICA4NzpcXHRtdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG4gIDg4OlxcdFxcdFxcdGNoYXIgKmV2dF9yZXNwKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpO1xcbiAgOTE6XFx0XFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDtcXG4gIDkyOlxcdFxcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFxcdTAwMjZjbWQ7XFxuICA5MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gIDk0OlxcdFxcdGludCByZXQ7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcXG4gIDk3OlxcdFxcdG1lbWNweShcXHUwMDI2cGNtZC1cXHUwMDNlY3RybCwgXFx1MDAyNnJlcS1cXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0aWYgKCooKHVpbnQxNl90ICopcmVxLVxcdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxcbiAxMDA6XFx0XFx0XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFxcdTAwMjZza2IpO1xcbiAxMDI6XFx0XFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVQpXFxuIDEwMzpcXHRcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuIDEwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU0LjExMDIyNDIxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc5NDU5ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrIGluIExlZ2FjeSBDb2RlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIG9sZGVyIEMgY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcmVkIGZsYWcuIFRoZXkncmUgdXNpbmcgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2hlcmUgYHBjbWRgIGlzIGNhc3QgdG8gYSBgY2hhciAqYCBhbmQgaXMgcG9pbnRpbmcgdG8gYGNtZGAsIHdoaWNoIGlzIGEgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIFNpbmNlIGBzaXplb2YoY2hhcilgIGlzIDEsIHRoZXkncmUgb25seSB6ZXJvaW5nIHRoZSAqZmlyc3QgYnl0ZSogb2YgYGNtZGAuIFRoYXQncyBhIGNsYXNzaWMgcm9va2llIG1pc3Rha2UhXG5cblRoZW4sIHRoZXkncmUgdXNpbmcgYG1lbWNweWAgdG8gY29weSBkYXRhIHRvIGBjbWQgKyA0YCwgd2hpY2ggZWZmZWN0aXZlbHkgb3ZlcndyaXRlcyBvbmx5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gVGhlIGJ5dGVzIGF0IG9mZnNldHMgMSwgMiwgYW5kIDMgYXJlIGxlZnQgY29tcGxldGVseSB1bmluaXRpYWxpemVkLiBUaGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY29tZSBwYXJ0IG9mIHRoZSBgY21kYCBzdHJ1Y3QgdGhhdCdzIHNlbnQgdG8gdGhlIE1DVSwgd2hpY2ggaXMgY29uY2VybmluZy5cblxuTG9va2luZyBkZWVwZXIsIGBjbWRgIGlzIGluZGVlZCBhIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWRgLCB3aGljaCBjb250YWlucyBwYWRkaW5nIGFuZCBhIGNvbnRyb2wgc3RydWN0dXJlLiBTbywgdGhhdCBpbml0aWFsIGBtZW1zZXRgIG9ubHkgemVyb3Mgb3V0IGBwYWRkaW5nWzBdYCwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgcGFkZGluZyBwb3RlbnRpYWxseSBob2xkaW5nIGdhcmJhZ2UgZGF0YS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGFuIGV4dGVybmFsIGRldmljZSwgaW4gdGhpcyBjYXNlLCB0aGUgTUNVLCBhbiBpbmZvcm1hdGlvbiBsZWFrPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU2VuZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZXh0ZXJuYWwgZGV2aWNlIGlzIGEgZGlyZWN0IGluZm8tbGVhay4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSFcblxuTm93LCBkb2VzIEtNU0FOIGNhdGNoIHRoaXM/IFRoYW5rZnVsbHksIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBleGFjdGx5IHRoaXMga2luZCBvZiBzY2VuYXJpbzogcGFzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBETUEgb3IgZXh0ZXJuYWwgZGV2aWNlcywgaWYgdGhlIGRyaXZlciB1c2VzIHN0YW5kYXJkIERNQSBBUElzIG9yIGlmIHRoZSBtZW1vcnkgaXMgY29waWVkIHRvIGEgYnVmZmVyIHNlbnQgdG8gdGhlIGRldmljZS4gU28sIHRoZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXQgS01TQU4gd291bGQgZmxhZyB0aGlzLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgdG8gc2VlIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoYXQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjAxLjU4OTY4NzcwOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MDIzNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmM9NTQ9RVhQT1JUX1NZTUJPTF9HUEwobXQ3Nl9tY3VfcnhfZXZlbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYzo1NjppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTU3LVxcdFxcdFxcdCAgICAgIGludCBsZW4sIGJvb2wgd2FpdF9yZXNwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnJldF9za2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTY5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jOjcwOkVYUE9SVF9TWU1CT0xfR1BMKG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNzEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaD0xOTIzPXN0cnVjdCBza19idWZmICptdDc2X21jdV9nZXRfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmgtMTkyNC1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZXMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oOjE5MjU6aW50IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coc3RydWN0IG10NzZfZGV2ICpkZXYsIGludCBjbWQsIGNvbnN0IHZvaWQgKmRhdGEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmgtMTkyNi1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBib29sIHdhaXRfcmVzcCwgc3RydWN0IHNrX2J1ZmYgKipyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg9MTk0MT1tdDc2X21jdV9zZW5kX21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5NDMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oOjE5NDQ6XFx0cmV0dXJuIG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coZGV2LCBjbWQsIGRhdGEsIGxlbiwgd2FpdF9yZXNwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaC0xOTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTIyMzI9aW50IG10NzkxNV9tY3VfbXVydV9kZWJ1Z19nZXQoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIyNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6MjI0NzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfQ01EKE1VUlVfQ1RSTCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0OC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTIwPWludCBtdDc5MTVfbWN1X2dldF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnJlYWRfYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjkzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTMxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yOTMyLVxcdFxcdFxcdFxcdFxcdE1DVV9FWFRfUVVFUlkoRUZVU0VfQUNDRVNTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTI5NTQ9aW50IG10NzkxNV9tY3VfZ2V0X2VlcHJvbV9mcmVlX2Jsb2NrKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4ICpibG9ja19udW0pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yOTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjI5Njc6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjgtXFx0XFx0XFx0XFx0XFx0TUNVX0VYVF9RVUVSWShFRlVTRV9GUkVFX0JMT0NLKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTMxNzg9aW50IG10NzkxNV9tY3VfZ2V0X2NoYW5fbWliX2luZm8oc3RydWN0IG10NzkxNV9waHkgKnBoeSwgYm9vbCBjaGFuX3N3aXRjaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6MzIxODpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfQ01EKEdFVF9NSUJfSU5GTyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzIxOS1cXHRcXHRcXHRcXHRcXHRyZXEsIGxlbiAqIHNpemVvZihyZXFbMF0pLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTM1NDM9aW50IG10NzkxNV9tY3VfZ2V0X3R4cG93ZXJfc2t1KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHM4ICp0eHBvd2VyLCBpbnQgbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzozNTYxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zNTYyLVxcdFxcdFxcdFxcdFxcdE1DVV9FWFRfQ01EKFRYX1BPV0VSX0ZFQVRVUkVfQ1RSTCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0zODk1PWludCBtdDc5MTVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zOTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM5MTc6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChQSFlfU1RBVF9JTkZPKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zOTE4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTQxMzY9aW50IG10NzkxNV9tY3Vfd2VkX3dhX3R4X3N0YXRzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6NDE3MDpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9XQV9QQVJBTV9DTUQoUVVFUlkpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNzEtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgbGVuLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTQyMDQ9aW50IG10NzkxNV9tY3VfcmZfcmVndmFsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiByZWdpZHgsIHUzMiAqdmFsLCBib29sIHNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQyMjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6NDIyMjpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfUVVFUlkoUkZfUkVHX0FDQ0VTUyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMy1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz03NT1zdGF0aWMgaW50IG10NzkyMV9tY3VfcmVhZF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjg0OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX0VYVF9RVUVSWShFRlVTRV9BQ0NFU1MpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTg1LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTU3Nj1zdGF0aWMgaW50IG10NzkyMV9tY3VfZ2V0X25pY19jYXBhYmlsaXR5KHN0cnVjdCBtdDc5MnhfcGh5ICptcGh5KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjU4NjpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKHBoeS1cXHUwMDNlZGV2LCBNQ1VfQ0VfQ01EKEdFVF9OSUNfQ0FQQUIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTU4Ny1cXHRcXHRcXHRcXHRcXHROVUxMLCAwLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTExMjg9aW50IG10NzkyMV9nZXRfdHhwd3JfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTIxX3R4cHdyICp0eHB3cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTExMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6MTEzNzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9DRV9DTUQoR0VUX1RYUFdSKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMTM4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3JlZ2QuYz0xNzc9bXQ3OTIxX3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmM6MjMyOlxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmMtMjMzLVxcdFxcdFxcdFxcdFxcdFxcdE1DVV9DRV9DTUQoU0VUX1JFR0RfQ0gpLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYz04NT1tdDc5MjFfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyMV90bV9jbWQgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmMtOTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYzo5NzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9DRV9DTUQoVEVTVF9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS90ZXN0bW9kZS5jLTk4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTc3PWludCBtdDc5MjVfbWN1X3JlZ3ZhbChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTIxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjItXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoUkVHX0FDQ0VTUyksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz04MjY9c3RhdGljIGludCBtdDc5MjVfbWN1X3JlYWRfZWVwcm9tKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHU4ICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy04NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6ODYxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoRUZVU0VfQ1RSTCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtODYyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTk2ND1pbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy05ODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6OTgxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoV1NZU19DT05GSUcpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTk4Mi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz05ODY9aW50IG10NzkyNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwMDY6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEwMDctXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoVEhFUk1BTCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMDcwPW10NzkyNV9tY3VfZ2V0X25pY19jYXBhYmlsaXR5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMDg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwODk6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xNjExPWludCBtdDc5MjVfbWN1X3NldF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTE2MjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTYyOTpcXHRyZXR1cm4gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChFRlVTRV9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xNjMwLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0yMjM5PWludCBtdDc5MjVfZ2V0X3R4cHdyX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsIHN0cnVjdCBtdDc5MjVfdHhwd3IgKnR4cHdyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMjI1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoyMjUzOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoVFhQT1dFUiksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMjI1NC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz00MDc5PWludCBtdDc5MjVfbWN1X3dmX3JmX3Bpbl9jdHJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjQxMDE6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTQxMDItXFx0XFx0XFx0XFx0XFx0TUNVX1VOSV9DTUQoUkFESU9fU1RBVFVTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz0yMjM9bXQ3OTI1X3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6MjgwOlxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjgxLVxcdFxcdFxcdFxcdFxcdFxcdE1DVV9VTklfQ01EKFNFVF9QT1dFUl9MSU1JVCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTg3PW10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy05OS1cXHRpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDA6XFx0XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTAxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwMi1cXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjEwMzpcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDM2Mz1pbnQgbXQ3OTk2X21jdV9nZXRfZWVwcm9tKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHU4ICpidWYsIHUzMiBidWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDM5MC1cXHRyZXEuaW5mby5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDM5MTpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIGNtZCwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDM5Mi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ0Mzk9aW50IG10Nzk5Nl9tY3VfZ2V0X2VmdXNlX2ZyZWVfYmxvY2soc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTggKmJsb2NrX251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDQ1ODpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEVGVVNFX0NUUkwpLCBcXHUwMDI2cmVxLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTktXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDQ2OT1pbnQgbXQ3OTk2X21jdV9nZXRfY2hpcF9jb25maWcoc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTMyICpjYXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NDg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ0ODU6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODYtXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoQ0hJUF9DT05GSUcpLCBcXHUwMDI2cmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDUyND1pbnQgbXQ3OTk2X21jdV9nZXRfY2hhbl9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTk2X3BoeSAqcGh5LCBib29sIGNoYW5fc3dpdGNoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDU2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NTY1OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoR0VUX01JQl9JTkZPKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY2LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ2MDM9aW50IG10Nzk5Nl9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5OTZfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NjM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ2MzY6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2cGh5LVxcdTAwM2VkZXYtXFx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EKFRIRVJNQUwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ2MzctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NTI4Mj1pbnQgbXQ3OTk2X21jdV9yZl9yZWd2YWwoc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTMyIHJlZ2lkeCwgdTMyICp2YWwsIGJvb2wgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNTMwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo1MzA4OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA5LVxcdFxcdFxcdFxcdFxcdE1DVV9XTV9VTklfQ01EX1FVRVJZKFJFR19BQ0NFU1MpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNTowNS41NTk5ODA3OThaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NjgzNTYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0aWVzIGluIG10NzkyNSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtdDc5MjVfdG1fcXVlcnlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3ZW50IGxpa2UgdGhpczogYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIGV2ZW50dWFsbHkgY29waWVzIGRhdGEgdG8gYSBETUEtbWFwcGVkIGJ1ZmZlciwgYW5kIEtNU0FOIHdvdWxkIGFic29sdXRlbHkgY2F0Y2ggYSBwcm9ibGVtIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGdldHMgc2VudCB0byB0aGUgTUNVLlxuXG5UaGUgY29kZSBkZWZpbmVzIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIGZpbmUsIGJ1dCB0aGUgb2xkIGNvZGUgdXNlZCBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYC4gSGVyZSdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEJlY2F1c2UgYHBjbWRgIHdhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIHplcm9pbmcgb25seSB0aGUgKmZpcnN0KiBieXRlIG9mIHRoZSBgY21kYCBzdHJ1Y3R1cmUuIFRoaXMgbGVmdCB0aGUgYGNtZC5wYWRkaW5nYCBmaWVsZCwgc3BlY2lmaWNhbGx5IDMgYnl0ZXMsIHVuaW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGVuIHdyb3RlIHRvIG90aGVyIHBhcnRzIG9mIGBjbWRgLCBidXQgdGhvc2UgMyB1bmluaXRpYWxpemVkIGJ5dGVzIHdlcmUgc3RpbGwgc2VudCB0byB0aGUgTUNVLCBhIGNsZWFyIGluZm8tbGVhay4gS01TQU4gaXMgdGFpbG9yLW1hZGUgdG8gY2F0Y2ggdGhpcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgY2hhbmdpbmcgYHBjbWRgIHRvIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKmAsIGVuc3VyaW5nIGBtZW1zZXRgIHplcm9lcyB0aGUgKmVudGlyZSogc3RydWN0dXJlLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBLTVNBTi1zcGVjaWZpYyBmaXguIEkgdGhlbiBkb3VibGUtY2hlY2tlZCB0aGUgbG9naWMgaW4gYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLiBZZXMsIHRoZSBmdW5jdGlvbiBjYWxscyBgbXQ3Nl9tY3Vfc2VuZF9tc2dgLCB3aGljaCBhbGxvY2F0ZXMgYW4gc2tiLCAqY29waWVzKiB0aGUgZGF0YSwgYW5kIHNlbmRzIGl0IG91dCB0byB0aGUgZGV2aWNlIHRocm91Z2ggRE1BIG9yIFVTQi4gVGhpcyBjb3B5aW5nIHByb2Nlc3Mgd2lsbCBwcm9wYWdhdGUgdGhlIHVuaW5pdGlhbGl6ZWQgYml0cyBhbmQgS01TQU4gd2lsbCBmbGFnIGl0IGF0IHRoZSBza2IgY29weSBvciBhdCB0aGUgc2VuZCB0byB0aGUgZGV2aWNlLlxuXG5Ob3csIEkgbW92ZWQgb24gdG8gYSBzZWNvbmQgcG90ZW50aWFsIGlzc3VlLiBJbiBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgLCB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl1gLiBBIG5ldyBjb2RlIHBhdGggaW4gdGhlIHBhdGNoIGFsbG93cyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIElmIHRoZSByZXNwb25zZSBmcm9tIGBtdDc5MjVfdG1fcXVlcnlgIHdhcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYGV2dF9yZXNwYCB3b3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVzZSBieXRlcyB3ZXJlIHRoZW4gY29waWVkIHRvIHVzZXIgc3BhY2UgdXNpbmcgYG5sYV9wdXRgLCBsZWFkaW5nIHRvIGFub3RoZXIgaW5mby1sZWFrLiBUaGUgcGF0Y2ggY2xldmVybHkgcHJldmVudHMgdGhpcyBieSB6ZXJvLWluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHdpdGggYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2AuXG5cbkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIHRoZSBvbGQgY29kZS4gQWN0dWFsbHksIHRoZSBvbGQgY29kZSdzIGxvZ2ljIG9mIGBtdDc5MjVfdG1fcXVlcnlgIGFsd2F5cyByZXF1ZXN0ZWQgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGZ1bGwgYnVmZmVyIHdhcyBhbHdheXMgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBwYXRjaCAqaW50cm9kdWNlZCogdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBzZWNvbmQgaW5mby1sZWFrIHRoYXQgaXQgZml4ZXMgdmlhIHRoZSB6ZXJvIGluaXRpYWxpemF0aW9uLlxuXG5DcnVjaWFsbHksIHN0YW5kYXJkIEtBU0FOIGRvZXNuJ3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIEtBU0FOIGlzIGZ1bmRhbWVudGFsbHkgYmxpbmQuIFRoZSBwYXRjaCBpcyBub3cgdHdvLWZvbGQ6IGFkZHJlc3NpbmcgdGhlIGBtZW1zZXRgIGJ1Zywgd2hpY2ggbGVhZHMgdG8gdGhlIGluZm8tbGVhayB0byB0aGUgZGV2aWNlLCBhbmQgZml4aW5nIGEgbmV3IGNvZGUgcGF0aCB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgdGV4dGJvb2sgS01TQU4gZml4IGFuZCByZXF1aXJlcyBkZWRpY2F0ZWQgdGVzdGluZyB3aXRoIEtNU0FOLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBmaXhlcyB0aGUgYG1lbXNldGAgYnVnIGFuZCBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgdG8gcmVzcG9uc2UgaGFuZGxpbmcuXG5cbkknbSBub3cgc2F0aXNmaWVkIHRoYXQgYE5lZWRzS01TQU49dHJ1ZWAgYW5kIHRoYXQgYSB0aG9yb3VnaCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIGNvbmZpcm0gdGhlIGZpeCBhbmQgc2VhcmNoIGZvciBhbnkgb3RoZXIgbGluZ2VyaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5MywiT3V0cHV0VG9rZW5zIjozNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjMxLjUyODM0MDQyOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc3BvbnNlIGhhbmRsaW5nIHRvIGFsbG93IHNob3J0ZXIgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gVG8gcHJldmVudCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0KClgIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHNob3J0ZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBldnRfcmVzcGAgYnVmZmVyIChgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YCkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxcblxcbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxcblxcblN0YW5kYXJkIEtBU0FOIGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLCBidXQgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgKGJvdGggdG8gdXNlciBzcGFjZSBhbmQgdG8gaGFyZHdhcmUgZGV2aWNlcykuIFNpbmNlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QgaW4gdGhpcyBjb2RlIHBhdGguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:08:26 +0000 UTC FinishedAt: 2026-08-13 10:05:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7925U", "NL80211_TESTMODE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MT7925U", "NL80211_TESTMODE" ], "series_id": "2c92199d-ff67-4a78-983d-776403a57280" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mt7925_testmode_dump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01UNzkyNVUmIzM0OywKICAgICYjMzQ7Tkw4MDIxMV9URVNUTU9ERSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O210NzkyNV90ZXN0bW9kZV9kdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxuXG5TdGFuZGFyZCBLQVNBTiBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncywgYnV0IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIChib3RoIHRvIHVzZXIgc3BhY2UgYW5kIHRvIGhhcmR3YXJlIGRldmljZXMpLiBTaW5jZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0IGluIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgbXQ3OTI1IHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIE1UNzkyNSBVU0Igd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbmluZGV4IDIyYThmMWRkYzMyMWQuLmRiZjExNTllZmZlYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG5AQCAtODcsMTMgJiM0Mzs4NywxNCBAQCBzdGF0aWMgaW50XG4gbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRcdGNoYXIgKmV2dF9yZXNwKVxuIHtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuLVx0Y2hhciAqcGNtZCA9IChjaGFyICopXHUwMDI2Y21kO1xuJiM0MztcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFx1MDAyNmNtZDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuLVx0aW50IHJldCA9IDE7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcbi1cdG1lbWNweShwY21kICYjNDM7IDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4gXG4gXHRpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTClcbiBcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcbkBAIC0xMDEsMTYgJiM0MzsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFx1MDAyNnNrYik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KSB7XG4mIzQzO1x0aWYgKCFza2JfcHVsbChza2IsIGhkcikpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXHUwMDNlZGF0YSAmIzQzOyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pO1xuJiM0MztcdG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XG4gXG4gb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuQEAgLTE5MCw3ICYjNDM7MTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIFxuIFx0XHRkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTtcbiBcdFx0aWYgKGRhdGEpIHtcbi1cdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XG4mIzQzO1x0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuIFxuIFx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbiBcdFx0XHRcdFx0ICAgICAgZXZ0X3Jlc3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWU0ZWE2YmJlY2Y0NTFlNmRlYzcwMDIxZDU2ZGI5MTlhNDU5Yzg0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEwOjAyOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMKaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jCkBAIC04NywxMyAmIzQzOzg3LDE0IEBAIHN0YXRpYyBpbnQKIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLAogCQljaGFyICpldnRfcmVzcCkKIHsKJiM0MzsJY29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpOwogCXN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWQ7Ci0JY2hhciAqcGNtZCA9IChjaGFyICopJmFtcDtjbWQ7CiYjNDM7CXN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9ICZhbXA7Y21kOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCWludCByZXQgPSAxOwomIzQzOwlpbnQgcmV0OwogCiAJbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpOwotCW1lbWNweShwY21kICYjNDM7IDQsIChjaGFyICopJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CiYjNDM7CW1lbWNweSgmYW1wO3BjbWQtJmd0O2N0cmwsICZhbXA7cmVxLSZndDtjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpOwogCiAJaWYgKCooKHVpbnQxNl90ICopcmVxLSZndDtwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKQogCQlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLApAQCAtMTAxLDE2ICYjNDM7MTAyLDE4IEBAIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLAogCWVsc2UgaWYgKCooKHVpbnQxNl90ICopcmVxLSZndDtwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKQogCQlyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKCZhbXA7ZGV2LSZndDttdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLAogCQkJCQkJJmFtcDtjbWQsIHNpemVvZihjbWQpLCB0cnVlLCAmYW1wO3NrYik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWlmIChza2ItJmd0O2xlbiAmbHQ7IE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KSB7CiYjNDM7CWlmICghc2tiX3B1bGwoc2tiLCBoZHIpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSgoY2hhciAqKWV2dF9yZXNwLCAoY2hhciAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pOwomIzQzOwltZW1jcHkoZXZ0X3Jlc3AsIHNrYi0mZ3Q7ZGF0YSwgbWluX3QodTMyLCBza2ItJmd0O2xlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7CiAKIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xOTAsNyAmIzQzOzE5Myw3IEBAIGludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZywKIAogCQlkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTsKIAkJaWYgKGRhdGEpIHsKLQkJCWNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXTsKJiM0MzsJCQljaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTsKIAogCQkJZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS0mZ3Q7ZGV2LCBubGFfZGF0YShkYXRhKSwKIAkJCQkJICAgICAgZXZ0X3Jlc3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgdGhlIE1UNzkyNSBUZXN0IE1vZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGZpZGRsaW5nIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwY21kYCBhbmQgdGhlIHBhcnNpbmcgb2YgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gSSBzZWUgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjayBmb3IgdGhlIHJlc3VsdHMgb2YgYHNrYl9wdWxsYCBhcyB3ZWxsIGFzIGEgbmV3IGNhbGwgdG8gYG1pbl90KHUzMiwgc2tiLSZndDtsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGFuZCB0aGV5JiMzOTtyZSBpbml0aWFsaXppbmcgYGV2dF9yZXNwYCB0byB6ZXJvLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMWAgdGVzdCBtb2RlIGZvciB0aGUgbXQ3OTI1IGNoaXBzZXQuIFJpZ2h0LCB0aGUgbXQ3OTI1IGRyaXZlciBpcyBmb3IgTWVkaWFUZWsmIzM5O3MgTVQ3OTI1IHdpcmVsZXNzIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhlc2UgZGV2aWNlcyBhcmUgcHJpbWFyaWx5IFBDSWUgb3IgVVNCIGJhc2VkLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7ZGVidWdmcy5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDttYWMuYyYjMzQ7LAogICAgJiMzNDttYWMuaCYjMzQ7LAogICAgJiMzNDttYWluLmMmIzM0OywKICAgICYjMzQ7bWN1LmMmIzM0OywKICAgICYjMzQ7bWN1LmgmIzM0OywKICAgICYjMzQ7bXQ3OTI1LmgmIzM0OywKICAgICYjMzQ7bmFuLmMmIzM0OywKICAgICYjMzQ7bmFuLmgmIzM0OywKICAgICYjMzQ7cGNpLmMmIzM0OywKICAgICYjMzQ7cGNpX21hYy5jJiMzNDssCiAgICAmIzM0O3BjaV9tY3UuYyYjMzQ7LAogICAgJiMzNDtyZWdkLmMmIzM0OywKICAgICYjMzQ7cmVnZC5oJiMzNDssCiAgICAmIzM0O3JlZ3MuaCYjMzQ7LAogICAgJiMzNDt0ZXN0bW9kZS5jJiMzNDssCiAgICAmIzM0O3VzYi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDMwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSYjMzk7cyBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYHVzYi5jYCBhbmQgYHBjaS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGNvdWxkIGJlIGEgVVNCIGRldmljZSwgcmlnaHQ/IEFuZCBpZiBpdCYjMzk7cyBhIFVTQiBkZXZpY2UsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgYSBVU0IgZ2FkZ2V0IGxpa2UgYGR1bW15X2hjZGAgb3IgYHZoY2lgLiBCdXQgdGhlbiwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCAmIzM0O2ltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgVGhhdCYjMzk7cyB0aGUga2lja2VyLgoKV2FpdCwgaXQgaXMhIFN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZyBjYW4gbGV2ZXJhZ2UgYHZoY2lgIHRvIGZ1enogVVNCIGRldmljZXMsIHNvIGl0IHNob3VsZCBiZSByZWFjaGFibGUgYWZ0ZXIgYWxsLiBPa2F5LCBzbyBpZiBpdCYjMzk7cyBhIFVTQiBkZXZpY2UsIHdlIGNhbiBhYnNvbHV0ZWx5IGhpdCB0aGlzIGNvZGUuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gYmVjb21lczogaXMgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCByZWFjaGFibGU/IEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgdGVzdG1vZGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW4gdHVybiBoaW5nZXMgb24gYENPTkZJR19OTDgwMjExX1RFU1RNT0RFYC4gVGltZSB0byBnbyBkaWdnaW5nIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnYCBhbmQgc2VlIGlmIHdlIGNhbiBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1UNzkyNSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzoyOmNvbmZpZyBNVDc5MjVfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWc6Nzpjb25maWcgTVQ3OTI1RVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy04LVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1RSAoUENJZSkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L0tjb25maWctMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjE5OmNvbmZpZyBNVDc5MjVVXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgVVNCIEludGVncmF0aW9uKioKClJpZ2h0LCBgTVQ3OTI1VWAuLi4gdGhhdCYjMzk7cyB0aGUgVVNCIHZhcmlhbnQuIEdvdCBpdC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBkcml2ZXJzIGlzIHRoaXMgdGhpbmcgbGVhbmluZyBvbj8gSSYjMzk7dmUgZ290IHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb3RoZXIgc3Vic3lzdGVtcy4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgYSBjcml0aWNhbCBsaW5rLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBicm9hZGVyIGZyYW1ld29yayBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb25mbGljdHMgb3Igb3Zlcmxvb2tlZCByZXF1aXJlbWVudHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjcyBhbmQgZG9jdW1lbnRhdGlvbiB0byBtYXAgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0Y29uZmlnIE1UNzkyNV9DT01NT05cbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRzZWxlY3QgTVQ3OTJ4X0xJQlxuICAgNTpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gICA2Olx0XG4gICA3Olx0Y29uZmlnIE1UNzkyNUVcbiAgIDg6XHRcdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzkyNUUgKFBDSWUpIHN1cHBvcnRcJiMzNDtcbiAgIDk6XHRcdHNlbGVjdCBNVDc5MjVfQ09NTU9OXG4gIDEwOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDExOlx0XHRkZXBlbmRzIG9uIFBDSVxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgTVQ3OTI1LWJhc2VkIHdpcmVsZXNzIFBDSWUgZGV2aWNlcyxcbiAgMTQ6XHRcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXG4gIDE1Olx0XHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgTVQ3OTI1VVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XCYjMzQ7XG4gIDIxOlx0XHRzZWxlY3QgTVQ3OTJ4X1VTQlxuICAyMjpcdFx0c2VsZWN0IE1UNzkyNV9DT01NT05cbiAgMjM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgMjQ6XHRcdGRlcGVuZHMgb24gVVNCXG4gIDI1Olx0XHRoZWxwXG4gIDI2Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBNVDc5MjUtYmFzZWQgd2lyZWxlc3MgVVNCIGRldmljZXMsXG4gIDI3Olx0XHQgIHdoaWNoIHN1cHBvcnQgb3BlcmF0aW9uIGF0IDZHSHosIDVHSHosIGFuZCAyLjRHSHogSUVFRSA4MDIuMTFiZVxuICAyODpcdFx0ICAyeDI6MlNTIDQwOTYtUUFNLCAxNjBNSHogY2hhbm5lbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2OAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVQ3OTI1VSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBNVDc5MjVVYCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IHJlbGllcyBvbiBgTUFDODAyMTFgIGFuZCBgVVNCYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBmb3IgYSB3aXJlbGVzcyBVU0IgZGV2aWNlLCBzbyBubyBzdXJwcmlzZXMgdGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYE1UNzkyNV9DT01NT05gIGlzIGFsc28gc2VsZWN0ZWQ7IHRoYXQmIzM5O3MgcHJvYmFibHkgZ290IHNvbWUgY29yZSBkZWZpbml0aW9ucy4gSSBzdXNwZWN0IHRoYXQgdGhlIGB0ZXN0bW9kZS5jYCBmaWxlIGlzIG9ubHkgYnVpbHQgaWYgdGhlIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAgb3B0aW9uIGlzIHR1cm5lZCBvbjsgdGhhdCYjMzk7cyBwcmV0dHkgY29tbW9uIGZvciBkZWJ1Z2dpbmcgZnVuY3Rpb25hbGl0eS4gVG8gY29uZmlybSB0aGVzZSBpbmZlcmVuY2VzLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlYCBmaWxlIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGRpcmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG4gICAyOlx0XG4gICAzOlx0b2JqLSQoQ09ORklHX01UNzkyNV9DT01NT04pICYjNDM7PSBtdDc5MjUtY29tbW9uLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfTVQ3OTI1RSkgJiM0Mzs9IG10NzkyNWUub1xuICAgNTpcdG9iai0kKENPTkZJR19NVDc5MjVVKSAmIzQzOz0gbXQ3OTI1dS5vXG4gICA2Olx0XG4gICA3Olx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xuICAgODpcdG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbiAgIDk6XHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xuICAxMDpcdG10NzkyNXUteSA6PSB1c2Iub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTI5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTVQ3OTI1IFRlc3QgTW9kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaGVyZS4gSSBzZWUgdGhhdCBgbXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub2AuIEFscmlnaHQsIHNvIHRoZSBgdGVzdG1vZGUub2AgbW9kdWxlIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5MODAyMTFfVEVTVE1PREVgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgTVQ3OTI1VWAgd2hpY2ggSSBrbm93IGlzIHJlbGV2YW50LiBCdXQsIHdoYXQgYWJvdXQgdGhlIG1vcmUgZ2VuZXJpYyBhc3BlY3RzLCBsaWtlIGBNQUM4MDIxMWAgYW5kIGBVU0JgPyBUaG9zZSBhcmUgcHJldHR5IG11Y2ggZXhwZWN0ZWQgYXMgYmFzZSBkZXBlbmRlbmNpZXMsIEkgZG9uJiMzOTt0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhvc2UsIGl0JiMzOTtzIHRoZSBtb3JlIHNwZWNpYWxpemVkIGRlcGVuZGVuY2llcyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4KCkhvbGQgb24sIEkgc2VlIHRoYXQgYE1UNzkyNV9DT01NT05gIGlzIGFjdHVhbGx5IHNlbGVjdGVkIGJ5IGBNVDc5MjVVYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gU28sIHVsdGltYXRlbHksIHRvIGdldCB0aGlzIGB0ZXN0bW9kZS5vYCBtb2R1bGUgYW5kIHRoZXJlZm9yZSB0ZXN0IG1vZGUgd29ya2luZyBmb3IgdGhpcyBNVDc5MjVVIHdpcmVsZXNzIGRyaXZlciwgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGFyZSBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYC4gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IGJ5IGxvb2tpbmcgYXQgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgZnVuY3Rpb24sIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbW9kdWxlLiBUaW1lIHRvIGNoZWNrIGB0ZXN0bW9kZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTI1X3Rlc3Rtb2RlX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jPTI3MTY9Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3OTI1X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmMtMjc1NS1cdENGRzgwMjExX1RFU1RNT0RFX0NNRChtdDc5MjVfdGVzdG1vZGVfY21kKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jOjI3NTY6XHRDRkc4MDIxMV9URVNUTU9ERV9EVU1QKG10NzkyNV90ZXN0bW9kZV9kdW1wKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWFpbi5jLTI3NTctI2lmZGVmIENPTkZJR19QTVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oPTQxMT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oLTQxMi1cdFx0XHR2b2lkICpkYXRhLCBpbnQgbGVuKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oOjQxMzppbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTQtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgdm9pZCAqZGF0YSwgaW50IGxlbik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz0xMjQ9aW50IG10NzkyNV90ZXN0bW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjE2MTppbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE2Mi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCB2b2lkICpkYXRhLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjgwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyB0ZXN0IG1vZGUgZHVtcCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgTVQ3OTI1LiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gVGhhdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHB1cnBvc2UuIFJpZ2h0LCBzbyBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHRlc3QgbW9kZSBkdW1wIGlzIHRyaWdnZXJlZC4KCk5vdyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gU28sIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgY2FsbHMgYG10NzkyNV90bV9xdWVyeWAgYW5kIHRoYXQgZ2V0cyBjaGFuZ2VkLiBCdXQgd2FpdCwgYG10NzkyNV90bV9xdWVyeWAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhlIHN0YXRpYyBrZXl3b3JkIGltcGxpZXMgc2NvcGUuIElzIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgdGhlIE9OTFkgZnVuY3Rpb24gdGhhdCBjYWxscyBpdD8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoaXMuIElmIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHRoZSBzY29wZSBJJiMzOTtsbCBrbm93IHdoZXJlIHRvIGZvY3VzIHRoZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTI1X3RtX3F1ZXJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo4NzptdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtODgtXHRcdGNoYXIgKmV2dF9yZXNwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9MTYxPWludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk4Olx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTk5LVx0XHRcdFx0XHQgICAgICBldnRfcmVzcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjcKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIGluaXRpYWwgZ3JlcCBzaG93cyB0aGF0IG9ubHkgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBjYWxscyBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gVGhlcmVmb3JlLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZXhhbWluZSBpbiBkZXRhaWwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYE1UNzkyNVVgIGRlcGVuZHMgb24gYE1BQzgwMjExYCBhbmQgYFVTQmAsIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFgLiBTbyBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYCBzZWVtIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZCwgYWx0aG91Z2ggSSBhbHJlYWR5IGtuZXcgYE1BQzgwMjExYCB3b3VsZCBiZSBuZWVkZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgaXNuJiMzOTt0IHN0YXRpYywgYW5kIHN1cmUgZW5vdWdoLCBpdCBpc24mIzM5O3QuIEl0JiMzOTtzIGV4cG9ydGVkIGluIGBtdDc5MjUuaGAgYW5kIHVzZWQgaW4gYG1haW4uY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoaXMgaXMgZ29vZDsgaXQmIzM5O3MgYWNjZXNzaWJsZS4KCkFoLCBidXQgd2FpdC4uLiB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbXQ3OTI1X3RtX3F1ZXJ5YC4gVGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIGdldCBvdmVybG9va2VkLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KClRoZSBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgYSBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZC93cml0ZSBvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gKlRoYXQqIG1ha2VzIGl0IGluY3JlZGlibHkgaW50ZXJlc3RpbmcsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgZ29vZC4gVGhlIGNvZGUgaXRzZWxmIHNob3dzIHRoZSBgbWVtY3B5YCB2dWxuZXJhYmlsaXR5OiBgbWVtY3B5KGV2dF9yZXNwLCBza2ItJmd0O2RhdGEsIG1pbl90KHUzMiwgc2tiLSZndDtsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTikpO2AgVGhpcyBpcyBhbiBvYnZpb3VzIGZ1bmN0aW9uYWwgY2hhbmdlLCBmaXhpbmcgYSBnZW51aW5lIGJ1Zzogc3BlY2lmaWNhbGx5LCBhIHBvdGVudGlhbCByZWFkIG92ZXJmbG93IGluIGBldnRfcmVzcGAgZHVlIHRvIHRoZSBsYWNrIG9mIGFuIGluaXRpYWxpemF0aW9uIG9mIGBldnRfcmVzcGAgYW5kIGEgcG9zc2libGUgc2l6ZSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCgpUaGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBleHBsb2l0YXRpb24gaGVyZSBzZWVtcyBoaWdoIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgaW5pdGlhbGl6YXRpb24gYXMgd2VsbC4gTm93IGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYE1UNzkyNV9FVlRfUlNQX0xFTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01UNzkyNV9FVlRfUlNQX0xFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjY6I2RlZmluZSBNVDc5MjVfRVZUX1JTUF9MRU4gNTEyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04Nz1tdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTExNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTE2Olx0bWVtY3B5KGV2dF9yZXNwLCBza2ItXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXHUwMDNlbGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTE3LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9MTYxPWludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5NS1cdFx0aWYgKGRhdGEpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk2Olx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xOTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MDAKCQkJCQkJCW91dHB1dDogMTI1CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIHRoZSBNVDc5MjUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBgTVQ3OTI1YCBkcml2ZXIgdnVsbmVyYWJpbGl0eS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBMZXQmIzM5O3Mgc2VlLCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAuIFdhaXQsIGBNVDc5MjVfQ09NTU9OYCBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJlY2F1c2UgYE1UNzkyNVVgIGFuZCBgTVQ3OTI1RWAgZW5hYmxlIGl0LiBTaG91bGQgSSBib3RoZXIgaW5jbHVkaW5nIGBNVDc5MjVFYD8gTmFoLCB0aGF0JiMzOTtzIGEgUENJZSBkZXZpY2U7IFBDSWUgZGV2aWNlcyBhcmUgZ2VuZXJhbGx5IG11Y2ggbW9yZSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG1vcmUgY29tcGxleCB0byBlbXVsYXRlLiBUaGUgYE1UNzkyNVVgIGlzIGEgVVNCIGRldmljZSwgYW5kIHRoYXQmIzM5O3MgKm11Y2gqIGVhc2llciB0byB0YXJnZXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgdmhjaS4gU28sIGVuYWJsaW5nIGp1c3QgYE1UNzkyNVVgIHNob3VsZCBiZSBzdWZmaWNpZW50LCBhbmQgZnJhbmtseSwgYmV0dGVyIGZvciBmdXp6aW5nLgoKTm93LCBpcyBgTVQ3OTI1VWAgYW5kIGBOTDgwMjExX1RFU1RNT0RFYCBlbm91Z2ggdG8gZ2V0IG1lIHdoZXJlIEkgbmVlZCB0byBiZT8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiAgYE5MODAyMTFfVEVTVE1PREVgIGlzIGVub3VnaC4gWWVzLCBgJiMzNDttdDc5MjUtY29tbW9uLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpICYjNDM7PSB0ZXN0bW9kZS5vJiMzNDtgLgoKT2theSwgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYG10NzkyNV90bV9xdWVyeWAgYW5kIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBBbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIFRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gYmUgZnV6emluZy4KCkFscmlnaHQsIHRpbWUgdG8gY3JlYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uICBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEkmIzM5O2xsIHNldCB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gYFsmIzM0O210NzkyNV90ZXN0bW9kZV9kdW1wJiMzNDtdYCwgYW5kIGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7TVQ3OTI1VSYjMzQ7LCAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0O11gLiBUaGUgYFJlYXNvbmluZ2Agc2hvdWxkIGJlIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIGBtdDc5MjVgIHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSB2dWxuZXJhYmxlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgbmw4MDIxMWAgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBgTVQ3OTI1YCBVU0Igd2lyZWxlc3MgZHJpdmVyLCBhbmQgdGhhdCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNVDc5MjVVJiMzNDssCiAgICAmIzM0O05MODAyMTFfVEVTVE1PREUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdDc5MjVfdGVzdG1vZGVfZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxuXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVzcG9uc2UgaGFuZGxpbmcgdG8gYWxsb3cgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBUbyBwcmV2ZW50IGxlYWtpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXQoKWAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyB0aGUgYGV2dF9yZXNwYCBidWZmZXIgKGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgKS5cblxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYwppbmRleCAyMmE4ZjFkZGMzMjFkLi5kYmYxMTU5ZWZmZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMKQEAgLTg3LDEzICYjNDM7ODcsMTQgQEAgc3RhdGljIGludAogbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsCiAJCWNoYXIgKmV2dF9yZXNwKQogewomIzQzOwljb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7CiAJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDsKLQljaGFyICpwY21kID0gKGNoYXIgKikmYW1wO2NtZDsKJiM0MzsJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gJmFtcDtjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHJldCA9IDE7CiYjNDM7CWludCByZXQ7CiAKIAltZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7Ci0JbWVtY3B5KHBjbWQgJiM0MzsgNCwgKGNoYXIgKikmYW1wO3JlcS0mZ3Q7Yywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTsKJiM0MzsJbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CiAKIAlpZiAoKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpCiAJCXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksCkBAIC0xMDEsMTYgJiM0MzsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsCiAJZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVQpCiAJCXJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coJmFtcDtkZXYtJmd0O210NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksCiAJCQkJCQkmYW1wO2NtZCwgc2l6ZW9mKGNtZCksIHRydWUsICZhbXA7c2tiKTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0ID0gLUVJTlZBTDsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpIHsKJiM0MzsJaWYgKCFza2JfcHVsbChza2IsIGhkcikpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtY3B5KChjaGFyICopZXZ0X3Jlc3AsIChjaGFyICopc2tiLSZndDtkYXRhICYjNDM7IDgsIE1UNzkyNV9FVlRfUlNQX0xFTik7CiYjNDM7CW1lbWNweShldnRfcmVzcCwgc2tiLSZndDtkYXRhLCBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTsKIAogb3V0OgogCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE5MCw3ICYjNDM7MTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAogCiAJCWRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldOwogCQlpZiAoZGF0YSkgewotCQkJY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dOwomIzQzOwkJCWNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9OwogCiAJCQllcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LSZndDtkZXYsIG5sYV9kYXRhKGRhdGEpLAogCQkJCQkgICAgICBldnRfcmVzcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzEwCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1UNzkyNSBUZXN0bW9kZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIGBtdDc5MjVfdG1fcXVlcnlgIGFuZCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHdpdGhpbiB0aGUgTVQ3NiBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSByZWZpbmVtZW50cywgYWltaW5nIGZvciBpbmNyZWFzZWQgcm9idXN0bmVzcyBhbmQgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBhIHN1YnRsZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4KCkluIGBtdDc5MjVfdG1fcXVlcnlgLCB0aGUgZmlyc3QgY2hhbmdlIGlzIHF1aXRlIGNsZWFyLiBJbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBgY21kYCBhcyBhIHJhdyBieXRlIGFycmF5IChgY2hhciAqcGNtZGApLCB3ZSYjMzk7cmUgbm93IGNvcnJlY3RseSB1c2luZyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSAoYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZGApLiBUaGlzIGlzIGNsZWFuZXIgYW5kIHNhZmVyOyBpdCBhdm9pZHMgcG90ZW50aWFsIGFsaWdubWVudCBpc3N1ZXMgYW5kIG1ha2VzIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuICBUaGUgb2xkIGBtZW1jcHkocGNtZCAmIzQzOyA0LCAuLi4pYCB1c2luZyBhIGBjaGFyICpgIGFuZCBhbiBvZmZzZXQgaXMgbm93IGBtZW1jcHkoJmFtcDtwY21kLSZndDtjdHJsLCAuLi4pYCB3aGljaCBpcyBtdWNoIHByZWZlcnJlZC4gQWxzbywgdGhlcmUmIzM5O3MgYSBuZXcgYGVsc2UgcmV0ID0gLUVJTlZBTDtgIHdoaWNoIGFkZHMgYSBsaXR0bGUgbW9yZSBlcnJvciBjaGVja2luZyBpbiB0aGUgY29udHJvbCBmbG93LgoKVGhlIG5leHQgY2hhbmdlIGludm9sdmVzIGhvdyB0aGUgcmVzcG9uc2UgZGF0YSBpcyBoYW5kbGVkLiAgVGhlIG9sZCBjb2RlIGNvcGllZCAqZXhhY3RseSogYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSBgc2tiLSZndDtkYXRhICYjNDM7IDhgIGludG8gYGV2dF9yZXNwYC4gIFRoZSBuZXcgY29kZSB1c2VzIGBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYCBpbnN0ZWFkLiBUaGF0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gZ3JhY2VmdWxseSBoYW5kbGUgc2hvcnRlci10aGFuLWV4cGVjdGVkIHJlc3BvbnNlcyBmcm9tIHRoZSBoYXJkd2FyZSwgcHJldmVudGluZyBhIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgb24gdGhlIHJlY2VpdmluZyBlbmQuIFRoZSBwcmV2aW91cyBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpYCBjaGVjayBpcyBub3cgcmVwbGFjZWQgd2l0aCBgIXNrYl9wdWxsKHNrYiwgaGRyKWAgd2hpY2ggaXMgYSBiZXR0ZXIgd2F5IHRvIGNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIHNrX2J1ZmYgYnVmZmVyLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBUaGUgb2xkIGNvZGUgZGVjbGFyZWQgYGV2dF9yZXNwYCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSXQgdGhlbiBwYXNzZWQgdGhpcyBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGJ1ZmZlciB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gIElmIGBtdDc5MjVfdG1fcXVlcnlgIGZhaWxlZCBmb3IgKmFueSogcmVhc29uLCBgZXZ0X3Jlc3BgIHdvdWxkIGNvbnRhaW4gZ2FyYmFnZS4gVGhlIG5ldyBjb2RlIHJlbWVkaWVzIHRoaXMgd2l0aCBgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YC4gVGhpcyBpcyBrZXkuIEJ5IGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHRvIHplcm8sIGFueSB1bndyaXR0ZW4gcG9ydGlvbnMgb2YgdGhlIGJ1ZmZlciBhZnRlciBgbXQ3OTI1X3RtX3F1ZXJ5YCByZXR1cm5zIHdpbGwgYmUgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLiBDb3VwbGVkIHdpdGggdGhlIGBtaW5fdGAgbG9naWMsIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBtb3JlIHByZWRpY3RhYmxlIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGlmIGEgc2hvcnRlciByZXNwb25zZSBpcyByZWNlaXZlZC4gVGhlIG9sZCBjb2RlIHJpc2tlZCBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBvbndhcmRzIGlmIGBtdDc5MjVfdG1fcXVlcnlgIGZhaWxlZCBvciByZXR1cm5lZCBhIHBhcnRpYWwgcmVzcG9uc2UuCgpJIHJlYWxseSBuZWVkIHRvIHNlZSB3aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgKmRvZXMqIHdpdGggYGV2dF9yZXNwYCBhZnRlciB0aGUgY2FsbCB0byBgbXQ3OTI1X3RtX3F1ZXJ5YCB0byBiZSBjZXJ0YWluLiBCdXQgZnJvbSB0aGlzIGltbWVkaWF0ZSBhbmFseXNpcywgaXQgbG9va3MgbGlrZSBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gaW1wcm92ZSBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IHNhZmV0eSwgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGlzIG1vcmUgcm9idXN0IHdoZW4gZGVhbGluZyB3aXRoIHVuZXhwZWN0ZWQgcmVzcG9uc2VzIGZyb20gdGhlIGhhcmR3YXJlLCBvciBwb3RlbnRpYWwgZmFpbHVyZSBzdGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdFx0cmV0dXJuIGVycjtcbiAxODE6XHRcbiAxODI6XHRcdGlmICh0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdKSB7XG4gMTgzOlx0XHRcdHN0cnVjdCBubGF0dHIgKmRydl90YltOVU1fTVQ3OTI1X1RNX0FUVFJTXSwgKmRhdGE7XG4gMTg0Olx0XHRcdGludCByZXQ7XG4gMTg1Olx0XG4gMTg2Olx0XHRcdGRhdGEgPSB0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdO1xuIDE4NzpcdFx0XHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoZHJ2X3RiLFxuIDE4ODpcdFx0XHRcdFx0XHRcdCAgTVQ3OTI1X1RNX0FUVFJfTUFYLFxuIDE4OTpcdFx0XHRcdFx0XHRcdCAgZGF0YSwgbXQ3OTI1X3RtX3BvbGljeSxcbiAxOTA6XHRcdFx0XHRcdFx0XHQgIE5VTEwpO1xuIDE5MTpcdFx0XHRpZiAocmV0KVxuIDE5MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTkzOlx0XG4gMTk0Olx0XHRcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xuIDE5NTpcdFx0XHRpZiAoZGF0YSkge1xuIDE5NjpcdFx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xuIDE5NzpcdFxuIDE5ODpcdFx0XHRcdGVyciA9IG10NzkyNV90bV9xdWVyeShwaHktXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcbiAxOTk6XHRcdFx0XHRcdFx0ICAgICAgZXZ0X3Jlc3ApO1xuIDIwMDpcdFx0XHRcdGlmIChlcnIpXG4gMjAxOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDIwMjpcdFxuIDIwMzpcdFx0XHRcdHJldHVybiBubGFfcHV0KG1zZywgTVQ3OTI1X1RNX0FUVFJfUlNQLFxuIDIwNDpcdFx0XHRcdFx0ICAgICAgIHNpemVvZihldnRfcmVzcCksIGV2dF9yZXNwKTtcbiAyMDU6XHRcdFx0fVxuIDIwNjpcdFx0fVxuIDIwNzpcdFxuIDIwODpcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRlc3QgTW9kZSBSZXNwb25zZSBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgZXZ0X3Jlc3BgIGdldHMgc2VudCB0byB1c2VyIHNwYWNlIHVzaW5nIGBubGFfcHV0YC4gUHJldmlvdXNseSwgaW4gdGhlIG9sZGVyIGNvZGUsIGlmIGBtdDc5MjVfdG1fcXVlcnlgIHdhcyBzdWNjZXNzZnVsLCBpdCByZWxpYWJseSBjb3BpZWQgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMsIHNvIGBldnRfcmVzcGAgd2FzIGZ1bGx5IGluaXRpYWxpemVkLiBIb3dldmVyLCB0aGUgb2xkIGNvZGUgaGFkIGFuIGltcG9ydGFudCBjaGVjazogaWYgYHNrYi0mZ3Q7bGVuYCB3YXMgbGVzcyB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU4gJiM0MzsgOGAsIGl0IHJldHVybmVkIGAtRUlOVkFMYCwgcHJldmVudGluZyB0aGUgYG5sYV9wdXRgIGNhbGwuIFRoZSBvbGQgbG9naWMgYWxzbyBvbmx5IHNlbnQgYSByZXNwb25zZSBpZiBgcmVxLSZndDtwYWRkaW5nYCB3YXMgZWl0aGVyIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAgYW5kIGluaXRpYWxpemVkIGByZXRgIHRvIGAxYCBvdGhlcndpc2UsIHByZXZlbnRpbmcgYW55IHJlc3BvbnNlLgoKTm93LCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJuZWQgMCAoc3VjY2VzcykgYW5kIGBza2ItJmd0O2xlbmAgd2FzIGxhcmdlIGVub3VnaCwgdGhlIG9sZCBjb2RlIGNvcGllZCBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBzdGFydGluZyBhdCBhbiBvZmZzZXQgb2YgOCwgdGhlcmVieSBmdWxseSBpbml0aWFsaXppbmcgYGV2dF9yZXNwYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2h5IGRpZCB0aGUgcGF0Y2ggY2hhbmdlIGBldnRfcmVzcGAgdG8gYmUgemVyby1pbml0aWFsaXplZD8gSXQgYXBwZWFycyB0aGF0IHRoZSBuZXcgY29kZSBub3cgdXNlcyBgc2tiX3B1bGxgIGFuZCB0aGVuIGNvcGllcyBhIG51bWJlciBvZiBieXRlcyBkZXRlcm1pbmVkIGJ5IGBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYC4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIGl0IGNvcGllcyBmZXdlciBieXRlcy4gVGhpcyBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgd2hlcmUgdGhlIHVuY29waWVkIGJ5dGVzIG9mIGBldnRfcmVzcGAgd291bGQgYmUgdW5pbml0aWFsaXplZCBpZiB0aGV5IHdlcmVuJiMzOTt0IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIHRoZW4gYmUgbGVha2VkIHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0YC4gVGhpcyBpcyBhICpmaXgqIHRvIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHRoYXQgd2FzICppbnRyb2R1Y2VkKiBieSB0aGUgY29kZSBjaGFuZ2UhCgpIb3dldmVyLCB0aGUgb2xkIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGlmIGBza2ItJmd0O2xlbmAgd2FzIGF0IGxlYXN0IGBNVDc5MjVfRVZUX1JTUF9MRU4gJiM0MzsgOGAgYmVmb3JlIGNvcHlpbmcuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSBndWFyYW50ZWVkIGZ1bGwgaW5pdGlhbGl6YXRpb24gdW5kZXIgdGhlIG5vcm1hbCBmbG93IGFuZCBlcnJvciBjb25kaXRpb25zLgoKVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSBtYXkgYmUgdGhhdCB0aGUgYHNrYmAgbGVuZ3RoICpjYW4qIGJlIGxlc3MgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDhgLCBhbmQgdGhleSAqd2FudCogdG8gc3VwcG9ydCBzaG9ydGVyIHJlc3BvbnNlcyBub3cuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9wdWxsKHNrYiwgaGRyKWAgc3VnZ2VzdHMgdGhhdCB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgYWNjb21tb2RhdGluZyB0aGlzLiBTaW5jZSBgc2tiLSZndDtsZW5gIGNhbiBiZSBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAgYWZ0ZXIgcHVsbGluZyB0aGUgaGVhZGVyLCB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGBldnRfcmVzcGAgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuCgpTbywgdGhlIHBhdGNoICpwcmV2ZW50cyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdoaWNoIGl0ICppbnRyb2R1Y2VkKiBieSB0aGlzIGxvZ2ljIGNoYW5nZS4KCldhaXQsIGlzIHRoZXJlICphbm90aGVyKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZT8gTGV0JiMzOTtzIGNoZWNrIGBtdDc5MjVfdG1fcXVlcnlgLiBUaGUgb2xkIGNvZGUgd2FzIHVzaW5nIGBtZW1jcHkocGNtZCAmIzQzOyA0LCAuLi4pYCB3aGVyZSBgcGNtZGAgd2FzIGEgYGNoYXIgKmAuIFRoaXMgb2Zmc2V0IGJ5IGZvdXIgYnl0ZXMsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3RydWN0IGxheW91dC4gCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1Lmg9NjYyPXN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTY2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oOjY3MDpzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtNjcxLVx0dTggcGFkZGluZ1s0XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1NgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgbXQ3OTI1X3JmdGVzdF9jbWQgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBNVDc5MjUgZHJpdmVyIGFnYWluLCBzcGVjaWZpY2FsbHkgY2hlY2tpbmcgb3V0IHRoZSBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kYCBkZWZpbml0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgcmZ0ZXN0LCBzbyByYWRpbyBmcmVxdWVuY3kgdGVzdGluZyBjb21tYW5kLiYjMzQ7IEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgc3RydWN0dXJlIGZvciBjb250cm9sbGluZyB0aGUgcmFkaW8mIzM5O3Mgb3BlcmF0aW9uIGZvciBkaWFnbm9zdGljcyBhbmQgY2FsaWJyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZpZWxkcywgaG93IGl0JiMzOTtzIHBhY2tlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTVQ3NiBNQ1UuIElzIHRoaXMgc29tZXRoaW5nIHdoZXJlIEkgbmVlZCB0byBjaGVjayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHRoYXQgY29ycmVzcG9uZD8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmFibGU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdpbmcgYSBjZXJ0YWluIHZhbHVlPyBEb2VzIHRoaXMgcmVsYXRlIHRvIHRoZSBwb3dlciBhbXBsaWZpZXIgaW4gYW55IHdheT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoaXMgY29tbWFuZCBpcyBjb25zdHJ1Y3RlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgZHJpdmVyIGFuZCB0aGUgTVQ3NiBmaXJtd2FyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGhlYWRlciBmaWxlIGFuZCBnbyBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHR9O1xuIDY2MTpcdFxuIDY2MjpcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xuIDY2MzpcdFx0dTE2IHRhZztcbiA2NjQ6XHRcdHUxNiBsZW5ndGg7XG4gNjY1Olx0XHR1OCBhY3Rpb247XG4gNjY2Olx0XHR1OCByZXNlcnZlZFszXTtcbiA2Njc6XHRcdHVuaW9uIHRlc3Rtb2RlX2RhdGEgZGF0YTtcbiA2Njg6XHR9IF9fcGFja2VkO1xuIDY2OTpcdFxuIDY3MDpcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCB7XG4gNjcxOlx0XHR1OCBwYWRkaW5nWzRdO1xuIDY3MjpcdFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCBjdHJsO1xuIDY3MzpcdH0gX19wYWNrZWQ7XG4gNjc0Olx0XG4gNjc1Olx0c3RhdGljIGlubGluZSBlbnVtIGNvbm5hYzNfbWN1X2NpcGhlcl90eXBlXG4gNjc2Olx0bXQ3OTI1X21jdV9nZXRfY2lwaGVyKGludCBjaXBoZXIpXG4gNjc3Olx0e1xuIDY3ODpcdFx0c3dpdGNoIChjaXBoZXIpIHtcbiA2Nzk6XHRcdGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgVGVzdG1vZGUgQ29tbWFuZCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIEl0IGhhcyBzb21lIHBhZGRpbmcsIGB1OCBwYWRkaW5nWzRdYCwgYW5kIHRoZW4gYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgY3RybGAuIFRoZSBvbGRlciBjb2RlIGRvZXMgYSBgbWVtY3B5YCB0byB3cml0ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUsIGJ1dCBvZmZzZXRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIGJ5IDQgYnl0ZXM6IGBtZW1jcHkocGNtZCAmIzQzOyA0LCAoY2hhciAqKSZhbXA7cmVxLSZndDtjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO2AuIEkgcmVjb2duaXplIHRoaXMgaW1tZWRpYXRlbHkuCgpUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlLCBgbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YCwgaXMgY2xlYXJseSBhIG1vcmUgZGlyZWN0IGFuZCBjbGVhbmVyIHdheSB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLiBJdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIG9mZnNldCBpbiB0aGUgb3JpZ2luYWwganVzdCB0YWtlcyBjYXJlIG9mIHRoZSBwYWRkaW5nLiBUaGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgY2xlYW51cCDigJMgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBhdm9pZGluZyB0aGUgbWFudWFsIGJ5dGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBOb3RoaW5nIHJldm9sdXRpb25hcnkgaGVyZSwganVzdCBzb2xpZCwgbWFpbnRhaW5hYmxlIGNvZGUuCgpCdXQgd2hhdCBhYm91dCBgcmVxYD8gSSBzaG91bGQgZXhhbWluZSB0aGF0IG1vcmUgY2xvc2VseS4gVGhlIGNvbnRleHQgb2YgdGhpcyB3aG9sZSB0aGluZyBpcyB0aGF0IGByZXFgIGlzIGEgYHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXFgLCBzbyBsZXQmIzM5O3MgZGVsdmUgaW50byB0aGF0IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04PWVudW0gbXQ3OTI1X3Rlc3Rtb2RlX2F0dHIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjE5OnN0cnVjdCBtdDc5MjVfdG1fY21kIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMjAtXHR1OCBwYWRkaW5nWzRdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzA1CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgc3RydWN0IG10NzkyNV90bV9jbWRgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gSW1tZWRpYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBNVDc5MjUgYXJjaGl0ZWN0dXJlLiBJcyB0aGlzIGNvbW1hbmQtc3BlY2lmaWMsIGNvbmZpZ3VyYXRpb24tb3JpZW50ZWQsIG9yIGRhdGEtdHJhbnNmZXIgcmVsYXRlZD8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY29tbWFuZCBzdHJ1Y3R1cmUsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZmllbGRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRyYW5zbGF0ZXMgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBBcmUgd2UgdGFsa2luZyByZWdpc3RlcnMsIERNQSBkZXNjcmlwdG9ycywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/CgpNeSBicmFpbiYjMzk7cyBpbnN0YW50bHkgZ29pbmcgdG8gdGhlIHR5cGljYWwgc3VzcGVjdHM6IGEgY29tbWFuZCBvcGNvZGUsIHBvdGVudGlhbGx5IHN1Yi1vcGNvZGVzIGZvciBmaW5lciBncmFudWxhcml0eSwgc29tZSBmb3JtIG9mIGFkZHJlc3Npbmcgb3IgaWRlbnRpZmllciB0byB0YXJnZXQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGVudGl0eSAoYSBzcGVjaWZpYyBNQUMsIGEgc3BlY2lmaWMgcXVldWUsIGEgc3BlY2lmaWMgY2hhbm5lbCksIGxlbmd0aCBmaWVsZHMgdG8gaW5kaWNhdGUgZGF0YSBzaXplcywgYW5kIG1heWJlIGEgc3RhdHVzL3Jlc3BvbnNlIGZpZWxkIHRvIHRyYWNrIGNvbW1hbmQgY29tcGxldGlvbiBvciBlcnJvcnMuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zIGltbWVkaWF0ZWx5IOKAkyBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjYWNoZSBsaW5lIGltcGxpY2F0aW9ucyB3aXRoIGhvdyB0aGUgaGFyZHdhcmUgYWNjZXNzZXMgdGhpcz8gUGFkZGluZyBpcyBhbHdheXMgYSBnaXZlYXdheS4KClRoZW4sIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkYXRhIHBheWxvYWRzLCBpZiBhbnkuIFdoYXQga2luZCBvZiBkYXRhIGlzIGJlaW5nIHBhc3NlZCB3aXRoIHRoaXMgY29tbWFuZD8gSXMgdGhpcyBmb3IgcmF0ZSBjb250cm9sLCB0cmFmZmljIHNoYXBpbmcsIHBvd2VyIG1hbmFnZW1lbnQgcGFyYW1ldGVycywgb3IgbWF5YmUgZXZlbiBmaXJtd2FyZSBjb250cm9sPyBUaGF0IHdpbGwgaW5mbHVlbmNlIG15IGV4cGVjdGF0aW9ucyBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHdpdGhpbiwgYW5kIHRoZSBleHBlY3RlZCBoYXJkd2FyZSBpbXBsaWNhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZS4uLiBhaGEuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFx0TlVNX01UNzkyNV9UTV9BVFRSUyxcbiAgMTY6XHRcdE1UNzkyNV9UTV9BVFRSX01BWCA9IE5VTV9NVDc5MjVfVE1fQVRUUlMgLSAxLFxuICAxNzpcdH07XG4gIDE4Olx0XG4gIDE5Olx0c3RydWN0IG10NzkyNV90bV9jbWQge1xuICAyMDpcdFx0dTggcGFkZGluZ1s0XTtcbiAgMjE6XHRcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgYztcbiAgMjI6XHR9IF9fcGFja2VkO1xuICAyMzpcdFxuICAyNDpcdHN0cnVjdCBtdDc5MjVfdG1fZXZ0IHtcbiAgMjU6XHRcdHUzMiBwYXJhbTA7XG4gIDI2Olx0XHR1MzIgcGFyYW0xO1xuICAyNzpcdH0gX19wYWNrZWQ7XG4gIDI4Olx0XG4gIDI5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG10NzkyNV90bV9wb2xpY3lbTlVNX01UNzkyNV9UTV9BVFRSU10gPSB7XG4gIDMwOlx0XHRbTVQ3OTI1X1RNX0FUVFJfU0VUXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCkpLFxuICAzMTpcdFx0W01UNzkyNV9UTV9BVFRSX1FVRVJZXSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCkpLFxuICAzMjpcdH07XG4gIDMzOlx0XG4gIDM0Olx0c3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIHRoZSBUZXN0bW9kZSBDb2RlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgcmVxYCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZGAuIFRoZSBjb2RlIGNoZWNrcyBgKigodWludDE2X3QgKilyZXEtJmd0O3BhZGRpbmcpYC4gYHJlcS0mZ3Q7cGFkZGluZ2AgaXMgYSBgdTggcGFkZGluZ1s0XWAsIHNvIHRoaXMgcmVhZHMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiB0aGF0IHBhZGRpbmcgZmllbGQuIGByZXFgIGNvbWVzIGZyb20gdXNlciBzcGFjZSB2aWEgYG5sYV9kYXRhKGRhdGEpYCwgd2hlcmUgYGRhdGFgIGNvbWVzIGZyb20gYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGVuZm9yY2VzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAsIG1lYW5pbmcgdGhlIHNpemUgb2YgYHJlcWAgaXMgZXhhY3RseSB3aGF0IHRoZSBzdHJ1Y3QgZGljdGF0ZXMuIFNpbmNlIHRoaXMgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV0bGluayBsYXllciBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUgc2hvdWxkbiYjMzk7dCBiZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLgoKTm93LCB3aGF0IGFib3V0IGBldnRfcmVzcGA/IFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYGV2dF9yZXNwYCBpcyB1c2VkIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgYW5kIGlzIGV2ZW50dWFsbHkgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dGAuIFByZXZpb3VzbHksIGlmIGBtdDc5MjVfdG1fcXVlcnlgIHJldHVybmVkIDAsIGl0IHdvdWxkIGhhdmUgY29waWVkIGV4YWN0bHkgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgaW50byBgZXZ0X3Jlc3BgLiBCdXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgY29uZGl0aW9ucyB0byBjb25zaWRlci4KCkxldCYjMzk7cyByZXZpc2l0IHRoZSBvbGQgYG10NzkyNV90bV9xdWVyeWAgZnVuY3Rpb24uIElmIGByZXEtJmd0O3BhZGRpbmdgIGRvZXNuJiMzOTt0IG1hdGNoIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAsIGByZXRgIGJlY29tZXMgMSwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIEluIHRoaXMgY2FzZSwgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aWxsIHJldHVybiAxLCBhbmQgY3J1Y2lhbGx5LCBpdCAqd29uJiMzOTt0KiBjYWxsIGBubGFfcHV0YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBnZXRzIGxlYWtlZCBpbiB0aGF0IHNjZW5hcmlvLgoKV2hhdCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJucyAwIGJ1dCBgc2tiYCBpcyBOVUxMPyBXZWxsLCB0aGUgZnVuY3Rpb24gc2V0cyBgc2tiYCBpZiBpdCByZXR1cm5zIDAuIElmIGBza2ItJmd0O2xlbmAgaXMgdG9vIHNob3J0LCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyBzdWZmaWNpZW50LCB0aGUgY29kZSBjb3BpZXMgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgaW50byBgZXZ0X3Jlc3BgLiBTbywgdGhlIG9sZCBjb2RlIHNlZW1zIHNhZmU7IGBldnRfcmVzcGAgKnNob3VsZCogYmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gdGhlIHN1Y2Nlc3NmdWwgY2FzZXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGVyZSBhbnkgcGF0aCB3aGVyZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBjb3VsZCByZXR1cm4gMCwgYnV0IGBldnRfcmVzcGAgaXMgbm90IGZ1bGx5IGluaXRpYWxpemVkPyBOby4gSW4gdGhlIG9sZCBjb2RlLCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLCBpdCAqbXVzdCogaGF2ZSBjb3BpZWQgdGhlIGRhdGEgdmlhIGBtZW1jcHlgLCBtZWFuaW5nIGl0IGlzIGluaXRpYWxpemVkLgoKV2hhdCBhYm91dCBhIHNpemUgbWlzbWF0Y2g/IFdoYXQgaWYgYE1UNzkyNV9FVlRfUlNQX0xFTmAgaXMgZ3JlYXRlciB0aGFuIGBza2ItJmd0O2RhdGEgJiM0MzsgOGAgY29udGFpbnM/IFRoZSBjaGVjayBgaWYgKHNrYi0mZ3Q7bGVuICZsdDsgTVQ3OTI1X0VWVF9SU1BfTEVOICYjNDM7IDgpYCBwcmV2ZW50cyB0aGF0LiBPa2F5LCB3aGF0IGlmIGBza2ItJmd0O2xlbmAgaXMgbGFyZ2UgZW5vdWdoLCBidXQgdGhlIGFjdHVhbCBkYXRhIGZyb20gdGhlIE1DVSBpcyBnYXJiYWdlPyBUaGF0IGlzbiYjMzk7dCBhbiB1bmluaXRpYWxpemVkICprZXJuZWwqIG1lbW9yeSBpc3N1ZS4gSXQmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIE1DVSBwcm92aWRpbmcgYmFkIGRhdGEsIHdoaWNoIEtNU0FOIHdvdWxkbiYjMzk7dCBjYXRjaC4KCk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2gsIGxldCYjMzk7cyBzZWUgaG93IHRoaW5ncyBhcmUgZGlmZmVyZW50LiBUaGUgY2hlY2sgYGlmIChza2ItJmd0O2xlbiAmbHQ7IE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4KWAgaXMgcmVwbGFjZWQgd2l0aCBgaWYgKCFza2JfcHVsbChza2IsIGhkcikpYC4gU28gYGhkcmAgaXMgYG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpYC4gTGV0JiMzOTtzIGNvbmZpcm0gd2hhdCBgaGRyYCBhY3R1YWxseSBpcy4gQWZ0ZXIgdGhhdCwgVGhlIGBtZW1jcHlgIGlzIGNoYW5nZWQgdG8gYG1lbWNweShldnRfcmVzcCwgc2tiLSZndDtkYXRhLCBtaW5fdCh1MzIsIHNrYi0mZ3Q7bGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pKTtgLiBTbywgaWYgYHNrYi0mZ3Q7bGVuYCBpcyBzbWFsbGVyIHRoYW4gd2hhdCBpcyBleHBlY3RlZCwgYSBzbWFsbGVyIGFtb3VudCBvZiBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIGBza2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaD02NTY9dW5pb24gdGVzdG1vZGVfZXZ0IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaDo2NjI6c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjMtXHR1MTYgdGFnO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyMwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHVuaV9jbWRfdGVzdG1vZGVfY3RybGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmxgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgd2hlcmUgYSBzcGVjaWZpYyBwaWVjZSBvZiBpdCBpcyBjb250cm9sbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCB3aGF0IGl0JiMzOTtzIGludGVuZGVkIHRvIGRvLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBzdXNwZWN0IHRoaXMgc3RydWN0IGxpa2VseSBjb250YWlucyB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIGZvciB3aGF0ZXZlciB0ZXN0aW5nIG1vZGUgaXMgaW1wbGVtZW50ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBhcyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoaXMgd2lsbCBiZSB3aGVyZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcG9zc2libGUgdmFsdWVzIGl0IGNhbiB0YWtlIGFyZSwgYXMgd2VsbCBhcyB0aGUgZXhwZWN0ZWQgcmFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIFRoZW4sIGl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgdHJhY2luZyB0aGUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNvbnRyb2wgcGFyYW1ldGVycyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYyOlx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XG4gNjYzOlx0XHR1MTYgdGFnO1xuIDY2NDpcdFx0dTE2IGxlbmd0aDtcbiA2NjU6XHRcdHU4IGFjdGlvbjtcbiA2NjY6XHRcdHU4IHJlc2VydmVkWzNdO1xuIDY2NzpcdFx0dW5pb24gdGVzdG1vZGVfZGF0YSBkYXRhO1xuIDY2ODpcdH0gX19wYWNrZWQ7XG4gNjY5Olx0XG4gNjcwOlx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcbiA2NzE6XHRcdHU4IHBhZGRpbmdbNF07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjMxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogOTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29kZSBhbmQgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSlgIGV2YWx1YXRlcyB0byA4LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGBoZHJgIHZhbHVlIGlzIDguIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgc2tiLSZndDtkYXRhICYjNDM7IDhgLCBhbmQgdGhlIG5ldyBjb2RlIHV0aWxpemVzIGBza2JfcHVsbChza2IsIGhkcilgLiBgc2tiX3B1bGxgIHNoaWZ0cyBgc2tiLSZndDtkYXRhYCBmb3J3YXJkIGJ5IDggYnl0ZXMgYW5kIGRlY3JlbWVudHMgYHNrYi0mZ3Q7bGVuYCBieSA4LiBUaGVuIGl0IGNvcGllcyBieXRlcyB1c2luZyBgbWluX3QodTMyLCBza2ItJmd0O2xlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKWAuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaWYgYHNrYi0mZ3Q7bGVuYCB3YXMgc21hbGxlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gIChhZnRlciB0aGUgcHVsbCksIHRoZSBjb3B5IHdvdWxkIHdyaXRlIGZld2VyIGJ5dGVzIHRoYW4gYWxsb2NhdGVkIGluIGBldnRfcmVzcGAuIFNpbmNlIGBldnRfcmVzcGAgaXMgcGFzc2VkIHRvIHVzZXJzcGFjZSB2aWEgYHNpemVvZihldnRfcmVzcClgIChlcXVhbCB0byBgTVQ3OTI1X0VWVF9SU1BfTEVOYCksIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGxlYWtlZC4gSG93ZXZlciwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgYGV2dF9yZXNwYCB3aXRoIGB7fWAuCgpTbywgdGhpcyBwYXRjaCBhY3R1YWxseSAqaW50cm9kdWNlcyogYSBjYXNlIHdoZXJlIHRoZSBjb3B5IG1pZ2h0IGJlIHNob3J0ZXIsIGFuZCAqZml4ZXMqIHRoZSBwb3NzaWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gQnV0IGRpZCB0aGUgb3JpZ2luYWwgY29kZSBoYXZlIGEgbGVhaz8gTm8sIGJlY2F1c2UsIHdpdGggdGhlIG9sZCBjb2RlLCBpZiBgc2tiLSZndDtsZW5gIHdhcyBzbWFsbGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTiAmIzQzOyA4YCwgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGAtRUlOVkFMYC4gVGhpcyB3b3VsZCB0aGVuIHByb3BhZ2F0ZSB0byBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHdoaWNoIGFsc28gd291bGQgcmV0dXJuIGAtRUlOVkFMYCBhbmQgd291bGQgbm90IGNhbGwgYG5sYV9wdXRgLiBUaGlzIGluZGljYXRlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgbGVha2VkIGluIHRoZSBvbGRlciBjb2RlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoZXJlIGFyZSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdoYXQgYWJvdXQgYHJlcS0mZ3Q7cGFkZGluZ2A/IExldCYjMzk7cyBjaGVjazoKCmBgYGMKCWlmICgqKCh1aW50MTZfdCAqKXJlcS0mZ3Q7cGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTCkKYGBgCgpIZXJlLCBgcmVxYCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxYCwgd2hpY2ggY29tZXMgZnJvbSBgbmxhX2RhdGEoZGF0YSlgLiBgZGF0YWAgaXMgYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGlzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAuIFRoaXMgbWVhbnMgYHJlcWAgaXMgZXhhY3RseSB0aGUgc2l6ZSBvZiBgc3RydWN0IG10NzkyNV90bV9jbWRgLiBJcyBgcmVxLSZndDtwYWRkaW5nYCB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBpdCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoZSBuZXRsaW5rIGxheWVyLiBLTVNBTiB0cmFja3Mga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBpbml0aWFsaXplIGl0LCBpdCYjMzk7cyBub3QgYSBrZXJuZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBjbWRgOgpgYGBjCiAJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDsKLQljaGFyICpwY21kID0gKGNoYXIgKikmYW1wO2NtZDsKJiM0MzsJc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gJmFtcDtjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHJldCA9IDE7CiYjNDM7CWludCByZXQ7CiAKIAltZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7Ci0JbWVtY3B5KHBjbWQgJiM0MzsgNCwgKGNoYXIgKikmYW1wO3JlcS0mZ3Q7Yywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTsKJiM0MzsJbWVtY3B5KCZhbXA7cGNtZC0mZ3Q7Y3RybCwgJmFtcDtyZXEtJmd0O2MsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7CmBgYApJbiB0aGUgb2xkIGNvZGUsIGBwY21kYCB3YXMgYSBgY2hhciAqYC4gVGhlbiBgc2l6ZW9mKCpwY21kKWAgd291bGQgZXF1YWwgYHNpemVvZihjaGFyKWAgb3IgYDFgLiBUaGlzIG1lYW5zIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7YCBvbmx5IHplcm9lZCBvbmUgYnl0ZSBvZiBgY21kYCEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJ1Zy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XG4gIDg2Olx0c3RhdGljIGludFxuICA4NzpcdG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuICA4ODpcdFx0XHRjaGFyICpldnRfcmVzcClcbiAgODk6XHR7XG4gIDkwOlx0XHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gIDkxOlx0XHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuICA5MjpcdFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gXHUwMDI2Y21kO1xuICA5MzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gIDk0Olx0XHRpbnQgcmV0O1xuICA5NTpcdFxuICA5NjpcdFx0bWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpO1xuICA5NzpcdFx0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4gIDk4Olx0XG4gIDk5Olx0XHRpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTClcbiAxMDA6XHRcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcbiAxMDE6XHRcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuIDEwMjpcdFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcbiAxMDM6XHRcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9SWF9TVEFUKSxcbiAxMDQ6XHRcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkwNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayBpbiBMZWdhY3kgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG9sZGVyIEMgY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcmVkIGZsYWcuIFRoZXkmIzM5O3JlIHVzaW5nIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSlgIHdoZXJlIGBwY21kYCBpcyBjYXN0IHRvIGEgYGNoYXIgKmAgYW5kIGlzIHBvaW50aW5nIHRvIGBjbWRgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWRgLiBTaW5jZSBgc2l6ZW9mKGNoYXIpYCBpcyAxLCB0aGV5JiMzOTtyZSBvbmx5IHplcm9pbmcgdGhlICpmaXJzdCBieXRlKiBvZiBgY21kYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcm9va2llIG1pc3Rha2UhCgpUaGVuLCB0aGV5JiMzOTtyZSB1c2luZyBgbWVtY3B5YCB0byBjb3B5IGRhdGEgdG8gYGNtZCAmIzQzOyA0YCwgd2hpY2ggZWZmZWN0aXZlbHkgb3ZlcndyaXRlcyBvbmx5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gVGhlIGJ5dGVzIGF0IG9mZnNldHMgMSwgMiwgYW5kIDMgYXJlIGxlZnQgY29tcGxldGVseSB1bmluaXRpYWxpemVkLiBUaGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY29tZSBwYXJ0IG9mIHRoZSBgY21kYCBzdHJ1Y3QgdGhhdCYjMzk7cyBzZW50IHRvIHRoZSBNQ1UsIHdoaWNoIGlzIGNvbmNlcm5pbmcuCgpMb29raW5nIGRlZXBlciwgYGNtZGAgaXMgaW5kZWVkIGEgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAsIHdoaWNoIGNvbnRhaW5zIHBhZGRpbmcgYW5kIGEgY29udHJvbCBzdHJ1Y3R1cmUuIFNvLCB0aGF0IGluaXRpYWwgYG1lbXNldGAgb25seSB6ZXJvcyBvdXQgYHBhZGRpbmdbMF1gLCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSBwYWRkaW5nIHBvdGVudGlhbGx5IGhvbGRpbmcgZ2FyYmFnZSBkYXRhLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGFuIGV4dGVybmFsIGRldmljZSwgaW4gdGhpcyBjYXNlLCB0aGUgTUNVLCBhbiBpbmZvcm1hdGlvbiBsZWFrPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU2VuZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZXh0ZXJuYWwgZGV2aWNlIGlzIGEgZGlyZWN0IGluZm8tbGVhay4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSEKCk5vdywgZG9lcyBLTVNBTiBjYXRjaCB0aGlzPyBUaGFua2Z1bGx5LCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgZXhhY3RseSB0aGlzIGtpbmQgb2Ygc2NlbmFyaW86IHBhc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gRE1BIG9yIGV4dGVybmFsIGRldmljZXMsIGlmIHRoZSBkcml2ZXIgdXNlcyBzdGFuZGFyZCBETUEgQVBJcyBvciBpZiB0aGUgbWVtb3J5IGlzIGNvcGllZCB0byBhIGJ1ZmZlciBzZW50IHRvIHRoZSBkZXZpY2UuIFNvLCB0aGUgY2hhbmNlcyBhcmUgaGlnaCB0aGF0IEtNU0FOIHdvdWxkIGZsYWcgdGhpcy4gVGltZSB0byBkb3VibGUtY2hlY2sgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhhdCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzZfbWN1X3NlbmRfYW5kX2dldF9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYz01ND1FWFBPUlRfU1lNQk9MX0dQTChtdDc2X21jdV9yeF9ldmVudCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYzo1NjppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNTctXHRcdFx0ICAgICAgaW50IGxlbiwgYm9vbCB3YWl0X3Jlc3AsIHN0cnVjdCBza19idWZmICoqcmV0X3NrYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTY5LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmM6NzA6RVhQT1JUX1NZTUJPTF9HUEwobXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTcxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oPTE5MjM9c3RydWN0IHNrX2J1ZmYgKm10NzZfbWN1X2dldF9yZXNwb25zZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5MjQtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg6MTkyNTppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5MjYtXHRcdFx0ICAgICAgaW50IGxlbiwgYm9vbCB3YWl0X3Jlc3AsIHN0cnVjdCBza19idWZmICoqcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaD0xOTQxPW10NzZfbWN1X3NlbmRfbXNnKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBpbnQgY21kLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5NDMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg6MTk0NDpcdHJldHVybiBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKGRldiwgY21kLCBkYXRhLCBsZW4sIHdhaXRfcmVzcCwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaC0xOTQ1LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yMjMyPWludCBtdDc5MTVfbWN1X211cnVfZGVidWdfZ2V0KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjIyNDc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChNVVJVX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0OC1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTIwPWludCBtdDc5MTVfbWN1X2dldF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnJlYWRfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5MzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTMxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5MzItXHRcdFx0XHRcdE1DVV9FWFRfUVVFUlkoRUZVU0VfQUNDRVNTKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTU0PWludCBtdDc5MTVfbWN1X2dldF9lZXByb21fZnJlZV9ibG9jayhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1OCAqYmxvY2tfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTY3Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjgtXHRcdFx0XHRcdE1DVV9FWFRfUVVFUlkoRUZVU0VfRlJFRV9CTE9DSyksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9MzE3OD1pbnQgbXQ3OTE1X21jdV9nZXRfY2hhbl9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBib29sIGNoYW5fc3dpdGNoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzozMjE4Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX0VYVF9DTUQoR0VUX01JQl9JTkZPKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTktXHRcdFx0XHRcdHJlcSwgbGVuICogc2l6ZW9mKHJlcVswXSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9MzU0Mz1pbnQgbXQ3OTE1X21jdV9nZXRfdHhwb3dlcl9za3Uoc3RydWN0IG10NzkxNV9waHkgKnBoeSwgczggKnR4cG93ZXIsIGludCBsZW4sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM1NjE6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2Mi1cdFx0XHRcdFx0TUNVX0VYVF9DTUQoVFhfUE9XRVJfRkVBVFVSRV9DVFJMKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0zODk1PWludCBtdDc5MTVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzkxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM5MTc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChQSFlfU1RBVF9JTkZPKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTM5MTgtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM9NDEzNj1pbnQgbXQ3OTE1X21jdV93ZWRfd2FfdHhfc3RhdHMoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTE2IHdsYW5faWR4KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzo0MTcwOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1dBX1BBUkFNX0NNRChRVUVSWSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy00MTcxLVx0XHRcdFx0XHRcdTAwMjZyZXEsIGxlbiwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz00MjA0PWludCBtdDc5MTVfbWN1X3JmX3JlZ3ZhbChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjQyMjI6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfRVhUX1FVRVJZKFJGX1JFR19BQ0NFU1MpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMy1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz03NT1zdGF0aWMgaW50IG10NzkyMV9tY3VfcmVhZF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnZhbClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy04My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjg0Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX0VYVF9RVUVSWShFRlVTRV9BQ0NFU1MpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtODUtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM9NTc2PXN0YXRpYyBpbnQgbXQ3OTIxX21jdV9nZXRfbmljX2NhcGFiaWxpdHkoc3RydWN0IG10NzkyeF9waHkgKm1waHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6NTg2Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhwaHktXHUwMDNlZGV2LCBNQ1VfQ0VfQ01EKEdFVF9OSUNfQ0FQQUIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg3LVx0XHRcdFx0XHROVUxMLCAwLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTExMjg9aW50IG10NzkyMV9nZXRfdHhwd3JfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTIxX3R4cHdyICp0eHB3cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6MTEzNzpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9DRV9DTUQoR0VUX1RYUFdSKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTExMzgtXHRcdFx0XHRcdFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jPTE3Nz1tdDc5MjFfcmVnZF9xdWVyeV9yZWdkYihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3JlZ2QuYzoyMzI6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmMtMjMzLVx0XHRcdFx0XHRcdE1DVV9DRV9DTUQoU0VUX1JFR0RfQ0gpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmM9ODU9bXQ3OTIxX3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjFfdG1fY21kICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYy05Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmM6OTc6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfQ0VfQ01EKFRFU1RfQ1RSTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS90ZXN0bW9kZS5jLTk4LVx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTc3PWludCBtdDc5MjVfbWN1X3JlZ3ZhbChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTIwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTIxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEyMi1cdFx0XHRcdFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoUkVHX0FDQ0VTUyksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9ODI2PXN0YXRpYyBpbnQgbXQ3OTI1X21jdV9yZWFkX2VlcHJvbShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgb2Zmc2V0LCB1OCAqdmFsKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTg2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjg2MTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEVGVVNFX0NUUkwpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtODYyLVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTk2ND1pbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtOTgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6OTgxOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoV1NZU19DT05GSUcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtOTgyLVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz05ODY9aW50IG10NzkyNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTAwNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwMDY6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTAwNy1cdFx0XHRcdFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoVEhFUk1BTCksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM9MTA3MD1tdDc5MjVfbWN1X2dldF9uaWNfY2FwYWJpbGl0eShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEwODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoxMDg5Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoQ0hJUF9DT05GSUcpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTA5MC1cdFx0XHRcdFx0XHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXHUwMDI2c2tiKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xNjExPWludCBtdDc5MjVfbWN1X3NldF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xNjI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTYyOTpcdHJldHVybiBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChFRlVTRV9DVFJMKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTE2MzAtXHRcdFx0XHRcdCBcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0yMjM5PWludCBtdDc5MjVfZ2V0X3R4cHdyX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsIHN0cnVjdCBtdDc5MjVfdHhwd3IgKnR4cHdyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTIyNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoyMjUzOlx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoVFhQT1dFUiksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0yMjU0LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTQwNzk9aW50IG10NzkyNV9tY3Vfd2ZfcmZfcGluX2N0cmwoc3RydWN0IG10NzkyeF9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6NDEwMTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAyLVx0XHRcdFx0XHRNQ1VfVU5JX0NNRChSQURJT19TVEFUVVMpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz0yMjM9bXQ3OTI1X3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYy0yNzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6MjgwOlx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI4MS1cdFx0XHRcdFx0XHRNQ1VfVU5JX0NNRChTRVRfUE9XRVJfTElNSVQpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODc9bXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy05OS1cdGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDA6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwMS1cdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMDItXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDM6XHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwNC1cdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQzNjM9aW50IG10Nzk5Nl9tY3VfZ2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTk2X2RldiAqZGV2LCB1MzIgb2Zmc2V0LCB1OCAqYnVmLCB1MzIgYnVmX2xlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00MzkwLVx0cmVxLmluZm8uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDM5MTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIGNtZCwgXHUwMDI2cmVxLCBzaXplb2YocmVxKSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQzOTItXHRcdFx0XHRcdHRydWUsIFx1MDAyNnNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDQzOT1pbnQgbXQ3OTk2X21jdV9nZXRfZWZ1c2VfZnJlZV9ibG9jayhzdHJ1Y3QgbXQ3OTk2X2RldiAqZGV2LCB1OCAqYmxvY2tfbnVtKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NDU4Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoRUZVU0VfQ1RSTCksIFx1MDAyNnJlcSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTktXHRcdFx0XHRcdHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ0Njk9aW50IG10Nzk5Nl9tY3VfZ2V0X2NoaXBfY29uZmlnKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiAqY2FwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NDg1Olx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODYtXHRcdFx0XHRcdE1DVV9XTV9VTklfQ01EX1FVRVJZKENISVBfQ09ORklHKSwgXHUwMDI2cmVxLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ1MjQ9aW50IG10Nzk5Nl9tY3VfZ2V0X2NoYW5fbWliX2luZm8oc3RydWN0IG10Nzk5Nl9waHkgKnBoeSwgYm9vbCBjaGFuX3N3aXRjaClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDU2NTpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEdFVF9NSUJfSU5GTyksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY2LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ2MDM9aW50IG10Nzk5Nl9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5OTZfcGh5ICpwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDYzNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ2MzY6XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNnBoeS1cdTAwM2VkZXYtXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTUQoVEhFUk1BTCksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NjM3LVx0XHRcdFx0XHRcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcdTAwMjZza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTUyODI9aW50IG10Nzk5Nl9tY3VfcmZfcmVndmFsKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiByZWdpZHgsIHUzMiAqdmFsLCBib29sIHNldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NTMwODpcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA5LVx0XHRcdFx0XHRNQ1VfV01fVU5JX0NNRF9RVUVSWShSRUdfQUNDRVNTKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0OTMKCQkJCQkJCW91dHB1dDogMzY3CgkJCQkJCQl0aG91Z2h0czogMjYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXRpZXMgaW4gbXQ3OTI1IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2VudCBsaWtlIHRoaXM6IGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnYCBldmVudHVhbGx5IGNvcGllcyBkYXRhIHRvIGEgRE1BLW1hcHBlZCBidWZmZXIsIGFuZCBLTVNBTiB3b3VsZCBhYnNvbHV0ZWx5IGNhdGNoIGEgcHJvYmxlbSBpZiB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBnZXRzIHNlbnQgdG8gdGhlIE1DVS4KClRoZSBjb2RlIGRlZmluZXMgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWRgIG9uIHRoZSBzdGFjaywgd2hpY2ggaXMgZmluZSwgYnV0IHRoZSBvbGQgY29kZSB1c2VkIGBtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSlgLiBIZXJlJiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEJlY2F1c2UgYHBjbWRgIHdhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIHplcm9pbmcgb25seSB0aGUgKmZpcnN0KiBieXRlIG9mIHRoZSBgY21kYCBzdHJ1Y3R1cmUuIFRoaXMgbGVmdCB0aGUgYGNtZC5wYWRkaW5nYCBmaWVsZCwgc3BlY2lmaWNhbGx5IDMgYnl0ZXMsIHVuaW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGVuIHdyb3RlIHRvIG90aGVyIHBhcnRzIG9mIGBjbWRgLCBidXQgdGhvc2UgMyB1bmluaXRpYWxpemVkIGJ5dGVzIHdlcmUgc3RpbGwgc2VudCB0byB0aGUgTUNVLCBhIGNsZWFyIGluZm8tbGVhay4gS01TQU4gaXMgdGFpbG9yLW1hZGUgdG8gY2F0Y2ggdGhpcywgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgY2hhbmdpbmcgYHBjbWRgIHRvIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKmAsIGVuc3VyaW5nIGBtZW1zZXRgIHplcm9lcyB0aGUgKmVudGlyZSogc3RydWN0dXJlLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBLTVNBTi1zcGVjaWZpYyBmaXguIEkgdGhlbiBkb3VibGUtY2hlY2tlZCB0aGUgbG9naWMgaW4gYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLiBZZXMsIHRoZSBmdW5jdGlvbiBjYWxscyBgbXQ3Nl9tY3Vfc2VuZF9tc2dgLCB3aGljaCBhbGxvY2F0ZXMgYW4gc2tiLCAqY29waWVzKiB0aGUgZGF0YSwgYW5kIHNlbmRzIGl0IG91dCB0byB0aGUgZGV2aWNlIHRocm91Z2ggRE1BIG9yIFVTQi4gVGhpcyBjb3B5aW5nIHByb2Nlc3Mgd2lsbCBwcm9wYWdhdGUgdGhlIHVuaW5pdGlhbGl6ZWQgYml0cyBhbmQgS01TQU4gd2lsbCBmbGFnIGl0IGF0IHRoZSBza2IgY29weSBvciBhdCB0aGUgc2VuZCB0byB0aGUgZGV2aWNlLgoKTm93LCBJIG1vdmVkIG9uIHRvIGEgc2Vjb25kIHBvdGVudGlhbCBpc3N1ZS4gSW4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCwgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dYC4gQSBuZXcgY29kZSBwYXRoIGluIHRoZSBwYXRjaCBhbGxvd3Mgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBJZiB0aGUgcmVzcG9uc2UgZnJvbSBgbXQ3OTI1X3RtX3F1ZXJ5YCB3YXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGBldnRfcmVzcGAgd291bGQgYmUgdW5pbml0aWFsaXplZC4gVGhlc2UgYnl0ZXMgd2VyZSB0aGVuIGNvcGllZCB0byB1c2VyIHNwYWNlIHVzaW5nIGBubGFfcHV0YCwgbGVhZGluZyB0byBhbm90aGVyIGluZm8tbGVhay4gVGhlIHBhdGNoIGNsZXZlcmx5IHByZXZlbnRzIHRoaXMgYnkgemVyby1pbml0aWFsaXppbmcgYGV2dF9yZXNwYCB3aXRoIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgLgoKSSB3ZW50IGJhY2sgYW5kIGNoZWNrZWQgdGhlIG9sZCBjb2RlLiBBY3R1YWxseSwgdGhlIG9sZCBjb2RlJiMzOTtzIGxvZ2ljIG9mIGBtdDc5MjVfdG1fcXVlcnlgIGFsd2F5cyByZXF1ZXN0ZWQgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGZ1bGwgYnVmZmVyIHdhcyBhbHdheXMgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBwYXRjaCAqaW50cm9kdWNlZCogdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBzZWNvbmQgaW5mby1sZWFrIHRoYXQgaXQgZml4ZXMgdmlhIHRoZSB6ZXJvIGluaXRpYWxpemF0aW9uLgoKQ3J1Y2lhbGx5LCBzdGFuZGFyZCBLQVNBTiBkb2VzbiYjMzk7dCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIGlzICpzcGVjaWZpY2FsbHkqIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgS0FTQU4gaXMgZnVuZGFtZW50YWxseSBibGluZC4gVGhlIHBhdGNoIGlzIG5vdyB0d28tZm9sZDogYWRkcmVzc2luZyB0aGUgYG1lbXNldGAgYnVnLCB3aGljaCBsZWFkcyB0byB0aGUgaW5mby1sZWFrIHRvIHRoZSBkZXZpY2UsIGFuZCBmaXhpbmcgYSBuZXcgY29kZSBwYXRoIHRoYXQgY291bGQgbGVhZCB0byBhbiBpbmZvLWxlYWsgdG8gdXNlciBzcGFjZS4gSXQgaXMgYSB0ZXh0Ym9vayBLTVNBTiBmaXggYW5kIHJlcXVpcmVzIGRlZGljYXRlZCB0ZXN0aW5nIHdpdGggS01TQU4uIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBmaXhlcyB0aGUgYG1lbXNldGAgYnVnIGFuZCBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgdG8gcmVzcG9uc2UgaGFuZGxpbmcuCgpJJiMzOTttIG5vdyBzYXRpc2ZpZWQgdGhhdCBgTmVlZHNLTVNBTj10cnVlYCBhbmQgdGhhdCBhIHRob3JvdWdoIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBuZWNlc3NhcnkgdG8gY29uZmlybSB0aGUgZml4IGFuZCBzZWFyY2ggZm9yIGFueSBvdGhlciBsaW5nZXJpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVncyBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxuXG5BZGRpdGlvbmFsbHksIHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcmVzcG9uc2UgaGFuZGxpbmcgdG8gYWxsb3cgc2hvcnRlciByZXNwb25zZXMgZnJvbSB0aGUgTUNVLiBUbyBwcmV2ZW50IGxlYWtpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXQoKWAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgc2hvcnRlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gLCB0aGUgcGF0Y2ggemVyby1pbml0aWFsaXplcyB0aGUgYGV2dF9yZXNwYCBidWZmZXIgKGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgKS5cblxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXG5cbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxuXG5TdGFuZGFyZCBLQVNBTiBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncywgYnV0IGl0IGRvZXMgbm90IHRyYWNrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIChib3RoIHRvIHVzZXIgc3BhY2UgYW5kIHRvIGhhcmR3YXJlIGRldmljZXMpLiBTaW5jZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBsZWFrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkIHRvIHZlcmlmeSB0aGUgZml4IGFuZCBlbnN1cmUgbm8gb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGV4aXN0IGluIHRoaXMgY29kZSBwYXRoLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAyOjQ0LjE3MzY1NTQzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzM1NDczMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxcblxcbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxcblxcblN0YW5kYXJkIEtBU0FOIGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLCBidXQgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgKGJvdGggdG8gdXNlciBzcGFjZSBhbmQgdG8gaGFyZHdhcmUgZGV2aWNlcykuIFNpbmNlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QgaW4gdGhpcyBjb2RlIHBhdGguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NC4xNzM2NjQxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjIwNTM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDEwOjAyOjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXFxuaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xcbkBAIC04NywxMyArODcsMTQgQEAgc3RhdGljIGludFxcbiBtdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG4gXFx0XFx0Y2hhciAqZXZ0X3Jlc3ApXFxuIHtcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpO1xcbiBcXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xcbi1cXHRjaGFyICpwY21kID0gKGNoYXIgKilcXHUwMDI2Y21kO1xcbitcXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKnBjbWQgPSBcXHUwMDI2Y21kO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDE7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7XFxuLVxcdG1lbWNweShwY21kICsgNCwgKGNoYXIgKilcXHUwMDI2cmVxLVxcdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xcbitcXHRtZW1jcHkoXFx1MDAyNnBjbWQtXFx1MDAzZWN0cmwsIFxcdTAwMjZyZXEtXFx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XFxuIFxcbiBcXHRpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXFxuIFxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9DVFJMKSxcXG5AQCAtMTAxLDE2ICsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXFxuIFxcdGVsc2UgaWYgKCooKHVpbnQxNl90ICopcmVxLVxcdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxcbiBcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KSB7XFxuK1xcdGlmICghc2tiX3B1bGwoc2tiLCBoZHIpKSB7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXFx1MDAzZWRhdGEgKyA4LCBNVDc5MjVfRVZUX1JTUF9MRU4pO1xcbitcXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXFx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XFxuIFxcbiBvdXQ6XFxuIFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG5AQCAtMTkwLDcgKzE5Myw3IEBAIGludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4gXFxuIFxcdFxcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xcbiBcXHRcXHRpZiAoZGF0YSkge1xcbi1cXHRcXHRcXHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XFxuK1xcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgZXZ0X3Jlc3ApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NS41MzYzODM3MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTE3NDAyMjYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTRlYTZiYmVjZjQ1MWU2ZGVjNzAwMjFkNTZkYjkxOWE0NTljODRmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDI6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuaW5kZXggMjJhOGYxZGRjMzIxZC4uZGJmMTE1OWVmZmViOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcbkBAIC04NywxMyArODcsMTQgQEAgc3RhdGljIGludFxuIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuIFx0XHRjaGFyICpldnRfcmVzcClcbiB7XG4rXHRjb25zdCB1bnNpZ25lZCBpbnQgaGRyID0gb2Zmc2V0b2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCwgZGF0YSk7XG4gXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kO1xuLVx0Y2hhciAqcGNtZCA9IChjaGFyICopXHUwMDI2Y21kO1xuK1x0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kID0gXHUwMDI2Y21kO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMTtcbitcdGludCByZXQ7XG4gXG4gXHRtZW1zZXQocGNtZCwgMCwgc2l6ZW9mKCpwY21kKSk7XG4tXHRtZW1jcHkocGNtZCArIDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG4rXHRtZW1jcHkoXHUwMDI2cGNtZC1cdTAwM2VjdHJsLCBcdTAwMjZyZXEtXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcbiBcbiBcdGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxuQEAgLTEwMSwxNiArMTAyLDE4IEBAIG10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxuIFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcbiBcdFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcdTAwMjZkZXYtXHUwMDNlbXQ3NiwgTUNVX1VOSV9RVUVSWShURVNUTU9ERV9SWF9TVEFUKSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcdTAwMjZza2IpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuIFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOCkge1xuK1x0aWYgKCFza2JfcHVsbChza2IsIGhkcikpIHtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRtZW1jcHkoKGNoYXIgKilldnRfcmVzcCwgKGNoYXIgKilza2ItXHUwMDNlZGF0YSArIDgsIE1UNzkyNV9FVlRfUlNQX0xFTik7XG4rXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cdTAwM2VkYXRhLCBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTikpO1xuIFxuIG91dDpcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbkBAIC0xOTAsNyArMTkzLDcgQEAgaW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuIFxuIFx0XHRkYXRhID0gZHJ2X3RiW01UNzkyNV9UTV9BVFRSX1FVRVJZXTtcbiBcdFx0aWYgKGRhdGEpIHtcbi1cdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl07XG4rXHRcdFx0Y2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307XG4gXG4gXHRcdFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cdTAwM2VkZXYsIG5sYV9kYXRhKGRhdGEpLFxuIFx0XHRcdFx0XHQgICAgICBldnRfcmVzcCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo0NS41MzYzODQ5NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk4NTY1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgdGhlIE1UNzkyNSBUZXN0IE1vZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIHRoZSBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgZmlkZGxpbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHBjbWRgIGFuZCB0aGUgcGFyc2luZyBvZiB0aGUgYHNrYmAgKHNvY2tldCBidWZmZXIpLiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSByZXN1bHRzIG9mIGBza2JfcHVsbGAgYXMgd2VsbCBhcyBhIG5ldyBjYWxsIHRvIGBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGFuZCB0aGV5J3JlIGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHRvIHplcm8uIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiB1c2VkLiBMZXQncyBzZWUuLi4gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyBwYXJ0IG9mIHRoZSBgbmw4MDIxMWAgdGVzdCBtb2RlIGZvciB0aGUgbXQ3OTI1IGNoaXBzZXQuIFJpZ2h0LCB0aGUgbXQ3OTI1IGRyaXZlciBpcyBmb3IgTWVkaWFUZWsncyBNVDc5MjUgd2lyZWxlc3MgZGV2aWNlcy4gTm93IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBpZiB0aGVzZSBkZXZpY2VzIGFyZSBwcmltYXJpbHkgUENJZSBvciBVU0IgYmFzZWQuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkgYC9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9gIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDI6NTAuNzM0OTUyOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWN1LmNcIixcbiAgICBcIm1jdS5oXCIsXG4gICAgXCJtdDc5MjUuaFwiLFxuICAgIFwibmFuLmNcIixcbiAgICBcIm5hbi5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpX21hYy5jXCIsXG4gICAgXCJwY2lfbWN1LmNcIixcbiAgICBcInJlZ2QuY1wiLFxuICAgIFwicmVnZC5oXCIsXG4gICAgXCJyZWdzLmhcIixcbiAgICBcInRlc3Rtb2RlLmNcIixcbiAgICBcInVzYi5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAyOjUwLjczNTA0NDY4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwOTcxOTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUncyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGB1c2IuY2AgYW5kIGBwY2kuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBjb3VsZCBiZSBhIFVTQiBkZXZpY2UsIHJpZ2h0PyBBbmQgaWYgaXQncyBhIFVTQiBkZXZpY2UsIHdlIGNvdWxkIHBvdGVudGlhbGx5IGVtdWxhdGUgaXQgdXNpbmcgYSBVU0IgZ2FkZ2V0IGxpa2UgYGR1bW15X2hjZGAgb3IgYHZoY2lgLiBCdXQgdGhlbiwgaGFuZyBvbiBhIHNlY29uZCwgdGhhdCBwcm9tcHQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgVGhhdCdzIHRoZSBraWNrZXIuXG5cbldhaXQsIGl0IGlzISBTeXprYWxsZXIncyBVU0IgZnV6emluZyBjYW4gbGV2ZXJhZ2UgYHZoY2lgIHRvIGZ1enogVVNCIGRldmljZXMsIHNvIGl0IHNob3VsZCBiZSByZWFjaGFibGUgYWZ0ZXIgYWxsLiBPa2F5LCBzbyBpZiBpdCdzIGEgVVNCIGRldmljZSwgd2UgY2FuIGFic29sdXRlbHkgaGl0IHRoaXMgY29kZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIHJlYWNoYWJsZT8gSXQgbG9va3MgbGlrZSBpdCdzIHBhcnQgb2YgdGhlIHRlc3Rtb2RlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGluIHR1cm4gaGluZ2VzIG9uIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ2AgYW5kIHNlZSBpZiB3ZSBjYW4gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1Ni40NDQ3NjYzODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzUzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNVDc5MjVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzoyOmNvbmZpZyBNVDc5MjVfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnLTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZzo3OmNvbmZpZyBNVDc5MjVFXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy04LVxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBNVDc5MjVFIChQQ0llKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0xOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9LY29uZmlnOjE5OmNvbmZpZyBNVDc5MjVVXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3OTI1VSAoVVNCKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1Ni41NTI1MjM1NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIxNDI5MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgVVNCIEludGVncmF0aW9uKipcblxuUmlnaHQsIGBNVDc5MjVVYC4uLiB0aGF0J3MgdGhlIFVTQiB2YXJpYW50LiBHb3QgaXQuIE5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIGNvbXBvbmVudHMgb3IgZHJpdmVycyBpcyB0aGlzIHRoaW5nIGxlYW5pbmcgb24/IEkndmUgZ290IHRvIGRpZyBpbnRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgb3RoZXIgc3Vic3lzdGVtcy4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhIGNyaXRpY2FsIGxpbmsuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnJvYWRlciBmcmFtZXdvcmsgZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIG9yIG92ZXJsb29rZWQgcmVxdWlyZW1lbnRzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc3BlY3MgYW5kIGRvY3VtZW50YXRpb24gdG8gbWFwIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDI6NTkuNjczOTU2NDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIE1UNzkyNV9DT01NT05cXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRzZWxlY3QgTVQ3OTJ4X0xJQlxcbiAgIDU6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAgNjpcXHRcXG4gICA3OlxcdGNvbmZpZyBNVDc5MjVFXFxuICAgODpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgTVQ3OTI1RSAoUENJZSkgc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdHNlbGVjdCBNVDc5MjVfQ09NTU9OXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgTVQ3OTI1LWJhc2VkIHdpcmVsZXNzIFBDSWUgZGV2aWNlcyxcXG4gIDE0OlxcdFxcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXFxuICAxNTpcXHRcXHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgTVQ3OTI1VVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzkyNVUgKFVTQikgc3VwcG9ydFxcXCJcXG4gIDIxOlxcdFxcdHNlbGVjdCBNVDc5MnhfVVNCXFxuICAyMjpcXHRcXHRzZWxlY3QgTVQ3OTI1X0NPTU1PTlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gIDI1OlxcdFxcdGhlbHBcXG4gIDI2OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIE1UNzkyNS1iYXNlZCB3aXJlbGVzcyBVU0IgZGV2aWNlcyxcXG4gIDI3OlxcdFxcdCAgd2hpY2ggc3VwcG9ydCBvcGVyYXRpb24gYXQgNkdIeiwgNUdIeiwgYW5kIDIuNEdIeiBJRUVFIDgwMi4xMWJlXFxuICAyODpcXHRcXHQgIDJ4MjoyU1MgNDA5Ni1RQU0sIDE2ME1IeiBjaGFubmVscy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMjo1OS42NzQwNzI2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Nzg0ODk0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNVDc5MjVVIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBNVDc5MjVVYCBkcml2ZXIgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0IHJlbGllcyBvbiBgTUFDODAyMTFgIGFuZCBgVVNCYC4gVGhhdCdzIHN0YW5kYXJkIGZvciBhIHdpcmVsZXNzIFVTQiBkZXZpY2UsIHNvIG5vIHN1cnByaXNlcyB0aGVyZS4gTGV0J3MgbWFrZSBzdXJlIGBNVDc5MjVfQ09NTU9OYCBpcyBhbHNvIHNlbGVjdGVkOyB0aGF0J3MgcHJvYmFibHkgZ290IHNvbWUgY29yZSBkZWZpbml0aW9ucy4gSSBzdXNwZWN0IHRoYXQgdGhlIGB0ZXN0bW9kZS5jYCBmaWxlIGlzIG9ubHkgYnVpbHQgaWYgdGhlIGBDT05GSUdfTkw4MDIxMV9URVNUTU9ERWAgb3B0aW9uIGlzIHR1cm5lZCBvbjsgdGhhdCdzIHByZXR0eSBjb21tb24gZm9yIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LiBUbyBjb25maXJtIHRoZXNlIGluZmVyZW5jZXMsIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9NYWtlZmlsZWAgZmlsZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2OCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MDMuMTUyNTY0NTk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai0kKENPTkZJR19NVDc5MjVfQ09NTU9OKSArPSBtdDc5MjUtY29tbW9uLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19NVDc5MjVFKSArPSBtdDc5MjVlLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19NVDc5MjVVKSArPSBtdDc5MjV1Lm9cXG4gICA2OlxcdFxcbiAgIDc6XFx0bXQ3OTI1LWNvbW1vbi15IDo9IG1hYy5vIG1jdS5vIHJlZ2QubyBtYWluLm8gaW5pdC5vIGRlYnVnZnMubyBuYW4ub1xcbiAgIDg6XFx0bXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuICAgOTpcXHRtdDc5MjVlLXkgOj0gcGNpLm8gcGNpX21hYy5vIHBjaV9tY3Uub1xcbiAgMTA6XFx0bXQ3OTI1dS15IDo9IHVzYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjAzLjE1MjYyNTc2NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk4NDA1NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTVQ3OTI1IFRlc3QgTW9kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGhlcmUuIEkgc2VlIHRoYXQgYG10NzkyNS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub2AuIEFscmlnaHQsIHNvIHRoZSBgdGVzdG1vZGUub2AgbW9kdWxlIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5MODAyMTFfVEVTVE1PREVgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBNVDc5MjVVYCB3aGljaCBJIGtub3cgaXMgcmVsZXZhbnQuIEJ1dCwgd2hhdCBhYm91dCB0aGUgbW9yZSBnZW5lcmljIGFzcGVjdHMsIGxpa2UgYE1BQzgwMjExYCBhbmQgYFVTQmA/IFRob3NlIGFyZSBwcmV0dHkgbXVjaCBleHBlY3RlZCBhcyBiYXNlIGRlcGVuZGVuY2llcywgSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRob3NlLCBpdCdzIHRoZSBtb3JlIHNwZWNpYWxpemVkIGRlcGVuZGVuY2llcyBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLlxuXG5Ib2xkIG9uLCBJIHNlZSB0aGF0IGBNVDc5MjVfQ09NTU9OYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgTVQ3OTI1VWAuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIFNvLCB1bHRpbWF0ZWx5LCB0byBnZXQgdGhpcyBgdGVzdG1vZGUub2AgbW9kdWxlIGFuZCB0aGVyZWZvcmUgdGVzdCBtb2RlIHdvcmtpbmcgZm9yIHRoaXMgTVQ3OTI1VSB3aXJlbGVzcyBkcml2ZXIsIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBhcmUgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAuIFRoYXQncyB3aGF0IEkgbmVlZCB0byBmb2N1cyBvbi5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgYnkgbG9va2luZyBhdCB0aGUgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBmdW5jdGlvbiwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtb2R1bGUuIFRpbWUgdG8gY2hlY2sgYHRlc3Rtb2RlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTI5LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MDguMzUxMDQ5NjU0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MjA3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21haW4uYz0yNzE2PWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG10NzkyNV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmMtMjc1NS1cXHRDRkc4MDIxMV9URVNUTU9ERV9DTUQobXQ3OTI1X3Rlc3Rtb2RlX2NtZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tYWluLmM6Mjc1NjpcXHRDRkc4MDIxMV9URVNUTU9ERV9EVU1QKG10NzkyNV90ZXN0bW9kZV9kdW1wKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21haW4uYy0yNzU3LSNpZmRlZiBDT05GSUdfUE1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L210NzkyNS5oPTQxMT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTItXFx0XFx0XFx0dm9pZCAqZGF0YSwgaW50IGxlbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbXQ3OTI1Lmg6NDEzOmludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tdDc5MjUuaC00MTQtXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgdm9pZCAqZGF0YSwgaW50IGxlbik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTEyND1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTYxOmludCBtdDc5MjVfdGVzdG1vZGVfZHVtcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE2Mi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCB2b2lkICpkYXRhLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzowOC40NjU5NzkyMTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NDQzNDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHRlc3QgbW9kZSBkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBNVDc5MjUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgLiBUaGF0J3MgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwdXJwb3NlLiBSaWdodCwgc28gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IGdldHMgY2FsbGVkIHdoZW4gYSB0ZXN0IG1vZGUgZHVtcCBpcyB0cmlnZ2VyZWQuXG5cbk5vdyBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgbXQ3OTI1X3RtX3F1ZXJ5YC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG10NzkyNV90ZXN0bW9kZV9kdW1wYC4gU28sIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgY2FsbHMgYG10NzkyNV90bV9xdWVyeWAgYW5kIHRoYXQgZ2V0cyBjaGFuZ2VkLiBCdXQgd2FpdCwgYG10NzkyNV90bV9xdWVyeWAgaXMgYSBgc3RhdGljYCBmdW5jdGlvbi4gVGhlIHN0YXRpYyBrZXl3b3JkIGltcGxpZXMgc2NvcGUuIElzIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgdGhlIE9OTFkgZnVuY3Rpb24gdGhhdCBjYWxscyBpdD8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcy4gSWYgSSdtIGNvbmZpZGVudCBhYm91dCB0aGUgc2NvcGUgSSdsbCBrbm93IHdoZXJlIHRvIGZvY3VzIHRoZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY4MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzoxMi41MzA0MTcxMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjgxNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzkyNV90bV9xdWVyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz04Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo4NzptdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTg4LVxcdFxcdGNoYXIgKmV2dF9yZXNwKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYz0xNjE9aW50IG10NzkyNV90ZXN0bW9kZV9kdW1wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xOTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxOTg6XFx0XFx0XFx0ZXJyID0gbXQ3OTI1X3RtX3F1ZXJ5KHBoeS1cXHUwMDNlZGV2LCBubGFfZGF0YShkYXRhKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5OS1cXHRcXHRcXHRcXHRcXHQgICAgICBldnRfcmVzcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjEyLjYyMTcwNDEwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQwOTY5MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZ3JlcCBzaG93cyB0aGF0IG9ubHkgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBjYWxscyBpdC4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIHRoZSBmb2N1cy4gVGhlcmVmb3JlLCB0aGlzIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZXhhbWluZSBpbiBkZXRhaWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBNVDc5MjVVYCBkZXBlbmRzIG9uIGBNQUM4MDIxMWAgYW5kIGBVU0JgLCBhbmQgYE5MODAyMTFfVEVTVE1PREVgIGRlcGVuZHMgb24gYENGRzgwMjExYCBhbmQgYE1BQzgwMjExYC4gU28gYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgc2VlbSBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIEkgYWxyZWFkeSBrbmV3IGBNQUM4MDIxMWAgd291bGQgYmUgbmVlZGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAgaXNuJ3Qgc3RhdGljLCBhbmQgc3VyZSBlbm91Z2gsIGl0IGlzbid0LiBJdCdzIGV4cG9ydGVkIGluIGBtdDc5MjUuaGAgYW5kIHVzZWQgaW4gYG1haW4uY2AsIHdoaWNoIG1ha2VzIGl0IGEgZ29vZCBzeW1ib2wgdG8gZm9jdXMgb24gZm9yIGZ1cnRoZXIgYW5hbHlzaXMuIFRoaXMgaXMgZ29vZDsgaXQncyBhY2Nlc3NpYmxlLlxuXG5BaCwgYnV0IHdhaXQuLi4gdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYG10NzkyNV90bV9xdWVyeWAuIFRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBiZWNhdXNlIHN0YXRpYyBmdW5jdGlvbnMgb2Z0ZW4gZ2V0IG92ZXJsb29rZWQuIFRoaXMgY291bGQgYmUgaW1wb3J0YW50LlxuXG5UaGUgZGVzY3JpcHRpb24gaW5kaWNhdGVzIGEgZml4IGZvciBhbiBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgb3IgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuICpUaGF0KiBtYWtlcyBpdCBpbmNyZWRpYmx5IGludGVyZXN0aW5nLCBhbmQgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGdvb2QuIFRoZSBjb2RlIGl0c2VsZiBzaG93cyB0aGUgYG1lbWNweWAgdnVsbmVyYWJpbGl0eTogYG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7YCBUaGlzIGlzIGFuIG9idmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UsIGZpeGluZyBhIGdlbnVpbmUgYnVnOiBzcGVjaWZpY2FsbHksIGEgcG90ZW50aWFsIHJlYWQgb3ZlcmZsb3cgaW4gYGV2dF9yZXNwYCBkdWUgdG8gdGhlIGxhY2sgb2YgYW4gaW5pdGlhbGl6YXRpb24gb2YgYGV2dF9yZXNwYCBhbmQgYSBwb3NzaWJsZSBzaXplIG1pc21hdGNoIGJldHdlZW4gdGhlIHNvdXJjZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci5cblxuVGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gVGhlIGxpa2VsaWhvb2Qgb2YgZXhwbG9pdGF0aW9uIGhlcmUgc2VlbXMgaGlnaCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGluaXRpYWxpemF0aW9uIGFzIHdlbGwuIE5vdyBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYE1UNzkyNV9FVlRfUlNQX0xFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MjcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MTkuMDYyNjc1ODU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyODMyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVQ3OTI1X0VWVF9SU1BfTEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzo2OiNkZWZpbmUgTVQ3OTI1X0VWVF9SU1BfTEVOIDUxMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM9ODc9bXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTExNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjExNjpcXHRtZW1jcHkoZXZ0X3Jlc3AsIHNrYi1cXHUwMDNlZGF0YSwgbWluX3QodTMyLCBza2ItXFx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMTctXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTE2MT1pbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE5NS1cXHRcXHRpZiAoZGF0YSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk2OlxcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzoxOS4zMDE5NjUwMjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE5MzE1Mzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgTVQ3OTI1IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIGBNVDc5MjVgIGRyaXZlciB2dWxuZXJhYmlsaXR5LiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIExldCdzIHNlZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNVDc5MjVVYCBhbmQgYE5MODAyMTFfVEVTVE1PREVgLiBXYWl0LCBgTVQ3OTI1X0NPTU1PTmAgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBiZWNhdXNlIGBNVDc5MjVVYCBhbmQgYE1UNzkyNUVgIGVuYWJsZSBpdC4gU2hvdWxkIEkgYm90aGVyIGluY2x1ZGluZyBgTVQ3OTI1RWA/IE5haCwgdGhhdCdzIGEgUENJZSBkZXZpY2U7IFBDSWUgZGV2aWNlcyBhcmUgZ2VuZXJhbGx5IG11Y2ggbW9yZSBkaWZmaWN1bHQgdG8gZnV6eiBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG1vcmUgY29tcGxleCB0byBlbXVsYXRlLiBUaGUgYE1UNzkyNVVgIGlzIGEgVVNCIGRldmljZSwgYW5kIHRoYXQncyAqbXVjaCogZWFzaWVyIHRvIHRhcmdldCB1c2luZyBzb21ldGhpbmcgbGlrZSB2aGNpLiBTbywgZW5hYmxpbmcganVzdCBgTVQ3OTI1VWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGFuZCBmcmFua2x5LCBiZXR0ZXIgZm9yIGZ1enppbmcuXG5cbk5vdywgaXMgYE1UNzkyNVVgIGFuZCBgTkw4MDIxMV9URVNUTU9ERWAgZW5vdWdoIHRvIGdldCBtZSB3aGVyZSBJIG5lZWQgdG8gYmU/IExldCBtZSBjaGVjayB0byBzZWUgaWYgIGBOTDgwMjExX1RFU1RNT0RFYCBpcyBlbm91Z2guIFllcywgYFwibXQ3OTI1LWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXCJgLlxuXG5Pa2F5LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgYG10NzkyNV90bV9xdWVyeWAgYW5kIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBBbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQuIFRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBiZSBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyZWF0ZSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLiAgSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEknbGwgc2V0IHRoZSBgRm9jdXNTeW1ib2xzYCB0byBgW1wibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIl1gLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJNVDc5MjVVXCIsIFwiTkw4MDIxMV9URVNUTU9ERVwiXWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmUgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgYG10NzkyNWAgdGVzdG1vZGUgcXVlcnkgaGFuZGxlci4gVGhlIHZ1bG5lcmFibGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGBubDgwMjExYCB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIGBNVDc5MjVgIFVTQiB3aXJlbGVzcyBkcml2ZXIsIGFuZCB0aGF0IGNhbiBiZSBmdXp6ZWQgdXNpbmcgVVNCIGVtdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMCwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MjYuNDk1MTIyNjYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MjU4ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNVDc5MjVVXCIsXG4gICAgXCJOTDgwMjExX1RFU1RNT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXQ3OTI1X3Rlc3Rtb2RlX2R1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIG10NzkyNSB0ZXN0bW9kZSBxdWVyeSBoYW5kbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5sODAyMTEgdGVzdG1vZGUgY29tbWFuZHMgZm9yIHRoZSBNVDc5MjUgVVNCIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggY2FuIGJlIGZ1enplZCB1c2luZyBVU0IgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1UNzkyNVVcIixcbiAgICBcIk5MODAyMTFfVEVTVE1PREVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdDc5MjVfdGVzdG1vZGVfZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgbXQ3OTI1IHRlc3Rtb2RlIHF1ZXJ5IGhhbmRsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kcyBmb3IgdGhlIE1UNzkyNSBVU0Igd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBjYW4gYmUgZnV6emVkIHVzaW5nIFVTQiBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjI2LjcxMDQxMzI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODE3OTYwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6MjYuNzExNDgzMDk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNDgxNjg4NDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc3BvbnNlIGhhbmRsaW5nIHRvIGFsbG93IHNob3J0ZXIgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gVG8gcHJldmVudCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0KClgIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHNob3J0ZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBldnRfcmVzcGAgYnVmZmVyIChgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YCkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDllNGVhNmJiZWNmNDUxZTZkZWM3MDAyMWQ1NmRiOTE5YTQ1OWM4NGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMDowMjo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXG5pbmRleCAyMmE4ZjFkZGMzMjFkLi5kYmYxMTU5ZWZmZWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuY1xuQEAgLTg3LDEzICs4NywxNCBAQCBzdGF0aWMgaW50XG4gbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRcdGNoYXIgKmV2dF9yZXNwKVxuIHtcbitcdGNvbnN0IHVuc2lnbmVkIGludCBoZHIgPSBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKTtcbiBcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCBjbWQ7XG4tXHRjaGFyICpwY21kID0gKGNoYXIgKilcdTAwMjZjbWQ7XG4rXHRzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKnBjbWQgPSBcdTAwMjZjbWQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbi1cdGludCByZXQgPSAxO1xuK1x0aW50IHJldDtcbiBcbiBcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcbi1cdG1lbWNweShwY21kICsgNCwgKGNoYXIgKilcdTAwMjZyZXEtXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcbitcdG1lbWNweShcdTAwMjZwY21kLVx1MDAzZWN0cmwsIFx1MDAyNnJlcS1cdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xuIFxuIFx0aWYgKCooKHVpbnQxNl90ICopcmVxLVx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXG4gXHRcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXHUwMDI2ZGV2LVx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfQ1RSTCksXG5AQCAtMTAxLDE2ICsxMDIsMTggQEAgbXQ3OTI1X3RtX3F1ZXJ5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MjVfdG1fY21kICpyZXEsXG4gXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9SWF9TVEFUKVxuIFx0XHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFx1MDAyNmRldi1cdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX1JYX1NUQVQpLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFx1MDAyNnNrYik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KSB7XG4rXHRpZiAoIXNrYl9wdWxsKHNrYiwgaGRyKSkge1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdG1lbWNweSgoY2hhciAqKWV2dF9yZXNwLCAoY2hhciAqKXNrYi1cdTAwM2VkYXRhICsgOCwgTVQ3OTI1X0VWVF9SU1BfTEVOKTtcbitcdG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7XG4gXG4gb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuQEAgLTE5MCw3ICsxOTMsNyBAQCBpbnQgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICptc2csXG4gXG4gXHRcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xuIFx0XHRpZiAoZGF0YSkge1xuLVx0XHRcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXTtcbitcdFx0XHRjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtcbiBcbiBcdFx0XHRlcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LVx1MDAzZWRldiwgbmxhX2RhdGEoZGF0YSksXG4gXHRcdFx0XHRcdCAgICAgIGV2dF9yZXNwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjI2LjcxMTQ4NDM5OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU0NDc4OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1UNzkyNSBUZXN0bW9kZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byBgbXQ3OTI1X3RtX3F1ZXJ5YCBhbmQgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aXRoaW4gdGhlIE1UNzYgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgcmVmaW5lbWVudHMsIGFpbWluZyBmb3IgaW5jcmVhc2VkIHJvYnVzdG5lc3MgYW5kIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgYSBzdWJ0bGUgaW5pdGlhbGl6YXRpb24gaXNzdWUuXG5cbkluIGBtdDc5MjVfdG1fcXVlcnlgLCB0aGUgZmlyc3QgY2hhbmdlIGlzIHF1aXRlIGNsZWFyLiBJbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjb21tYW5kIHN0cnVjdHVyZSBgY21kYCBhcyBhIHJhdyBieXRlIGFycmF5IChgY2hhciAqcGNtZGApLCB3ZSdyZSBub3cgY29ycmVjdGx5IHVzaW5nIGEgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIChgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kICpwY21kYCkuIFRoaXMgaXMgY2xlYW5lciBhbmQgc2FmZXI7IGl0IGF2b2lkcyBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyBhbmQgbWFrZXMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gIFRoZSBvbGQgYG1lbWNweShwY21kICsgNCwgLi4uKWAgdXNpbmcgYSBgY2hhciAqYCBhbmQgYW4gb2Zmc2V0IGlzIG5vdyBgbWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgLi4uKWAgd2hpY2ggaXMgbXVjaCBwcmVmZXJyZWQuIEFsc28sIHRoZXJlJ3MgYSBuZXcgYGVsc2UgcmV0ID0gLUVJTlZBTDtgIHdoaWNoIGFkZHMgYSBsaXR0bGUgbW9yZSBlcnJvciBjaGVja2luZyBpbiB0aGUgY29udHJvbCBmbG93LlxuXG5UaGUgbmV4dCBjaGFuZ2UgaW52b2x2ZXMgaG93IHRoZSByZXNwb25zZSBkYXRhIGlzIGhhbmRsZWQuICBUaGUgb2xkIGNvZGUgY29waWVkICpleGFjdGx5KiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBmcm9tIGBza2ItXHUwMDNlZGF0YSArIDhgIGludG8gYGV2dF9yZXNwYC4gIFRoZSBuZXcgY29kZSB1c2VzIGBtaW5fdCh1MzIsIHNrYi1cdTAwM2VsZW4sIE1UNzkyNV9FVlRfUlNQX0xFTilgIGluc3RlYWQuIFRoYXQgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBncmFjZWZ1bGx5IGhhbmRsZSBzaG9ydGVyLXRoYW4tZXhwZWN0ZWQgcmVzcG9uc2VzIGZyb20gdGhlIGhhcmR3YXJlLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4gVGhlIHByZXZpb3VzIGBpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOClgIGNoZWNrIGlzIG5vdyByZXBsYWNlZCB3aXRoIGAhc2tiX3B1bGwoc2tiLCBoZHIpYCB3aGljaCBpcyBhIGJldHRlciB3YXkgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgc2tfYnVmZiBidWZmZXIuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIGBtdDc5MjVfdGVzdG1vZGVfZHVtcGAuICBIZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIFRoZSBvbGQgY29kZSBkZWNsYXJlZCBgZXZ0X3Jlc3BgIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBJdCB0aGVuIHBhc3NlZCB0aGlzIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHRvIGBtdDc5MjVfdG1fcXVlcnlgLiAgSWYgYG10NzkyNV90bV9xdWVyeWAgZmFpbGVkIGZvciAqYW55KiByZWFzb24sIGBldnRfcmVzcGAgd291bGQgY29udGFpbiBnYXJiYWdlLiBUaGUgbmV3IGNvZGUgcmVtZWRpZXMgdGhpcyB3aXRoIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl0gPSB7fTtgLiBUaGlzIGlzIGtleS4gQnkgaW5pdGlhbGl6aW5nIGBldnRfcmVzcGAgdG8gemVybywgYW55IHVud3JpdHRlbiBwb3J0aW9ucyBvZiB0aGUgYnVmZmVyIGFmdGVyIGBtdDc5MjVfdG1fcXVlcnlgIHJldHVybnMgd2lsbCBiZSBndWFyYW50ZWVkIHRvIGJlIHplcm8uIENvdXBsZWQgd2l0aCB0aGUgYG1pbl90YCBsb2dpYywgdGhpcyBzaG91bGQgcmVzdWx0IGluIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaWYgYSBzaG9ydGVyIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiBUaGUgb2xkIGNvZGUgcmlza2VkIHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIG9ud2FyZHMgaWYgYG10NzkyNV90bV9xdWVyeWAgZmFpbGVkIG9yIHJldHVybmVkIGEgcGFydGlhbCByZXNwb25zZS5cblxuSSByZWFsbHkgbmVlZCB0byBzZWUgd2hhdCBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgICpkb2VzKiB3aXRoIGBldnRfcmVzcGAgYWZ0ZXIgdGhlIGNhbGwgdG8gYG10NzkyNV90bV9xdWVyeWAgdG8gYmUgY2VydGFpbi4gQnV0IGZyb20gdGhpcyBpbW1lZGlhdGUgYW5hbHlzaXMsIGl0IGxvb2tzIGxpa2UgYSBjb25jZXJ0ZWQgZWZmb3J0IHRvIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBzYWZldHksIGVuc3VyaW5nIHRoYXQgdGhlIGRyaXZlciBpcyBtb3JlIHJvYnVzdCB3aGVuIGRlYWxpbmcgd2l0aCB1bmV4cGVjdGVkIHJlc3BvbnNlcyBmcm9tIHRoZSBoYXJkd2FyZSwgb3IgcG90ZW50aWFsIGZhaWx1cmUgc3RhdGVzLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBpbXByb3ZlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMCwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowMzozOS4yNTYyNzgzODRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdGlmICh0YltNVDc2X1RNX0FUVFJfRFJWX0RBVEFdKSB7XFxuIDE4MzpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpkcnZfdGJbTlVNX01UNzkyNV9UTV9BVFRSU10sICpkYXRhO1xcbiAxODQ6XFx0XFx0XFx0aW50IHJldDtcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0XFx0ZGF0YSA9IHRiW01UNzZfVE1fQVRUUl9EUlZfREFUQV07XFxuIDE4NzpcXHRcXHRcXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQoZHJ2X3RiLFxcbiAxODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBNVDc5MjVfVE1fQVRUUl9NQVgsXFxuIDE4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGRhdGEsIG10NzkyNV90bV9wb2xpY3ksXFxuIDE5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbiAxOTE6XFx0XFx0XFx0aWYgKHJldClcXG4gMTkyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdFxcdGRhdGEgPSBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldO1xcbiAxOTU6XFx0XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTk2OlxcdFxcdFxcdFxcdGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRcXHRcXHRlcnIgPSBtdDc5MjVfdG1fcXVlcnkocGh5LVxcdTAwM2VkZXYsIG5sYV9kYXRhKGRhdGEpLFxcbiAxOTk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZXZ0X3Jlc3ApO1xcbiAyMDA6XFx0XFx0XFx0XFx0aWYgKGVycilcXG4gMjAxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdFxcdFxcdHJldHVybiBubGFfcHV0KG1zZywgTVQ3OTI1X1RNX0FUVFJfUlNQLFxcbiAyMDQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihldnRfcmVzcCksIGV2dF9yZXNwKTtcXG4gMjA1OlxcdFxcdFxcdH1cXG4gMjA2OlxcdFxcdH1cXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDIwOTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjAzOjM5LjI1NjQwMTcyNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTM0ODE0ODQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRlc3QgTW9kZSBSZXNwb25zZSBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGV2dF9yZXNwYCBnZXRzIHNlbnQgdG8gdXNlciBzcGFjZSB1c2luZyBgbmxhX3B1dGAuIFByZXZpb3VzbHksIGluIHRoZSBvbGRlciBjb2RlLCBpZiBgbXQ3OTI1X3RtX3F1ZXJ5YCB3YXMgc3VjY2Vzc2Z1bCwgaXQgcmVsaWFibHkgY29waWVkIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzLCBzbyBgZXZ0X3Jlc3BgIHdhcyBmdWxseSBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIG9sZCBjb2RlIGhhZCBhbiBpbXBvcnRhbnQgY2hlY2s6IGlmIGBza2ItXHUwMDNlbGVuYCB3YXMgbGVzcyB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4YCwgaXQgcmV0dXJuZWQgYC1FSU5WQUxgLCBwcmV2ZW50aW5nIHRoZSBgbmxhX3B1dGAgY2FsbC4gVGhlIG9sZCBsb2dpYyBhbHNvIG9ubHkgc2VudCBhIHJlc3BvbnNlIGlmIGByZXEtXHUwMDNlcGFkZGluZ2Agd2FzIGVpdGhlciBgTUNVX1VOSV9DTURfVEVTVE1PREVfQ1RSTGAgb3IgYE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVRgIGFuZCBpbml0aWFsaXplZCBgcmV0YCB0byBgMWAgb3RoZXJ3aXNlLCBwcmV2ZW50aW5nIGFueSByZXNwb25zZS5cblxuTm93LCBpZiBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgcmV0dXJuZWQgMCAoc3VjY2VzcykgYW5kIGBza2ItXHUwMDNlbGVuYCB3YXMgbGFyZ2UgZW5vdWdoLCB0aGUgb2xkIGNvZGUgY29waWVkIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiA4LCB0aGVyZWJ5IGZ1bGx5IGluaXRpYWxpemluZyBgZXZ0X3Jlc3BgLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoeSBkaWQgdGhlIHBhdGNoIGNoYW5nZSBgZXZ0X3Jlc3BgIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQ/IEl0IGFwcGVhcnMgdGhhdCB0aGUgbmV3IGNvZGUgbm93IHVzZXMgYHNrYl9wdWxsYCBhbmQgdGhlbiBjb3BpZXMgYSBudW1iZXIgb2YgYnl0ZXMgZGV0ZXJtaW5lZCBieSBgbWluX3QodTMyLCBza2ItXHUwMDNlbGVuLCBNVDc5MjVfRVZUX1JTUF9MRU4pYC4gSWYgYHNrYi1cdTAwM2VsZW5gIGlzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgaXQgY29waWVzIGZld2VyIGJ5dGVzLiBUaGlzIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB3aGVyZSB0aGUgdW5jb3BpZWQgYnl0ZXMgb2YgYGV2dF9yZXNwYCB3b3VsZCBiZSB1bmluaXRpYWxpemVkIGlmIHRoZXkgd2VyZW4ndCB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCB0aGVuIGJlIGxlYWtlZCB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dGAuIFRoaXMgaXMgYSAqZml4KiB0byBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB0aGF0IHdhcyAqaW50cm9kdWNlZCogYnkgdGhlIGNvZGUgY2hhbmdlIVxuXG5Ib3dldmVyLCB0aGUgb2xkIGNvZGUgZXhwbGljaXRseSBjaGVja2VkIGlmIGBza2ItXHUwMDNlbGVuYCB3YXMgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTiArIDhgIGJlZm9yZSBjb3B5aW5nLiBTbywgdGhlIG9yaWdpbmFsIGNvZGUgZ3VhcmFudGVlZCBmdWxsIGluaXRpYWxpemF0aW9uIHVuZGVyIHRoZSBub3JtYWwgZmxvdyBhbmQgZXJyb3IgY29uZGl0aW9ucy5cblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSBtYXkgYmUgdGhhdCB0aGUgYHNrYmAgbGVuZ3RoICpjYW4qIGJlIGxlc3MgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOGAsIGFuZCB0aGV5ICp3YW50KiB0byBzdXBwb3J0IHNob3J0ZXIgcmVzcG9uc2VzIG5vdy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc2tiX3B1bGwoc2tiLCBoZHIpYCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIHNwZWNpZmljYWxseSBhY2NvbW1vZGF0aW5nIHRoaXMuIFNpbmNlIGBza2ItXHUwMDNlbGVuYCBjYW4gYmUgc21hbGxlciB0aGFuIGBNVDc5MjVfRVZUX1JTUF9MRU5gIGFmdGVyIHB1bGxpbmcgdGhlIGhlYWRlciwgemVyby1pbml0aWFsaXphdGlvbiBvZiBgZXZ0X3Jlc3BgIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrLlxuXG5TbywgdGhlIHBhdGNoICpwcmV2ZW50cyogdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdoaWNoIGl0ICppbnRyb2R1Y2VkKiBieSB0aGlzIGxvZ2ljIGNoYW5nZS5cblxuV2FpdCwgaXMgdGhlcmUgKmFub3RoZXIqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlPyBMZXQncyBjaGVjayBgbXQ3OTI1X3RtX3F1ZXJ5YC4gVGhlIG9sZCBjb2RlIHdhcyB1c2luZyBgbWVtY3B5KHBjbWQgKyA0LCAuLi4pYCB3aGVyZSBgcGNtZGAgd2FzIGEgYGNoYXIgKmAuIFRoaXMgb2Zmc2V0IGJ5IGZvdXIgYnl0ZXMsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBhY3R1YWwgc3RydWN0IGxheW91dC4gXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NzYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDM6NTQuNjA0NTUyODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MzE0MTM0NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IG10NzkyNV9yZnRlc3RfY21kIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oPTY2Mj1zdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oLTY2OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaDo2NzA6c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NzEtXFx0dTggcGFkZGluZ1s0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MDAuMjM1OTcyMjczWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzczMDY5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgbXQ3OTI1X3JmdGVzdF9jbWQgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgTVQ3OTI1IGRyaXZlciBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIG91dCB0aGUgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAgZGVmaW5pdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHJmdGVzdCwgc28gcmFkaW8gZnJlcXVlbmN5IHRlc3RpbmcgY29tbWFuZC5cIiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHN0cnVjdHVyZSBmb3IgY29udHJvbGxpbmcgdGhlIHJhZGlvJ3Mgb3BlcmF0aW9uIGZvciBkaWFnbm9zdGljcyBhbmQgY2FsaWJyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGNvbW1hbmQgaXMgc3RydWN0dXJlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZpZWxkcywgaG93IGl0J3MgcGFja2VkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBNVDc2IE1DVS4gSXMgdGhpcyBzb21ldGhpbmcgd2hlcmUgSSBuZWVkIHRvIGNoZWNrIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBjb3JyZXNwb25kPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGNvbmZpZ3VyYWJsZT8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBjaGFuZ2luZyBhIGNlcnRhaW4gdmFsdWU/IERvZXMgdGhpcyByZWxhdGUgdG8gdGhlIHBvd2VyIGFtcGxpZmllciBpbiBhbnkgd2F5PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhpcyBjb21tYW5kIGlzIGNvbnN0cnVjdGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBkcml2ZXIgYW5kIHRoZSBNVDc2IGZpcm13YXJlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBoZWFkZXIgZmlsZSBhbmQgZ28gZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjAzLjc3MzI4MzEzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdH07XFxuIDY2MTpcXHRcXG4gNjYyOlxcdHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwge1xcbiA2NjM6XFx0XFx0dTE2IHRhZztcXG4gNjY0OlxcdFxcdHUxNiBsZW5ndGg7XFxuIDY2NTpcXHRcXHR1OCBhY3Rpb247XFxuIDY2NjpcXHRcXHR1OCByZXNlcnZlZFszXTtcXG4gNjY3OlxcdFxcdHVuaW9uIHRlc3Rtb2RlX2RhdGEgZGF0YTtcXG4gNjY4OlxcdH0gX19wYWNrZWQ7XFxuIDY2OTpcXHRcXG4gNjcwOlxcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCB7XFxuIDY3MTpcXHRcXHR1OCBwYWRkaW5nWzRdO1xcbiA2NzI6XFx0XFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCBjdHJsO1xcbiA2NzM6XFx0fSBfX3BhY2tlZDtcXG4gNjc0OlxcdFxcbiA2NzU6XFx0c3RhdGljIGlubGluZSBlbnVtIGNvbm5hYzNfbWN1X2NpcGhlcl90eXBlXFxuIDY3NjpcXHRtdDc5MjVfbWN1X2dldF9jaXBoZXIoaW50IGNpcGhlcilcXG4gNjc3OlxcdHtcXG4gNjc4OlxcdFxcdHN3aXRjaCAoY2lwaGVyKSB7XFxuIDY3OTpcXHRcXHRjYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowMy43NzM0MDYzOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxNzc2MzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBUZXN0bW9kZSBDb21tYW5kIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIEl0IGhhcyBzb21lIHBhZGRpbmcsIGB1OCBwYWRkaW5nWzRdYCwgYW5kIHRoZW4gYHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwgY3RybGAuIFRoZSBvbGRlciBjb2RlIGRvZXMgYSBgbWVtY3B5YCB0byB3cml0ZSBpbnRvIHRoZSBzdHJ1Y3R1cmUsIGJ1dCBvZmZzZXRzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIGJ5IDQgYnl0ZXM6IGBtZW1jcHkocGNtZCArIDQsIChjaGFyICopXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YC4gSSByZWNvZ25pemUgdGhpcyBpbW1lZGlhdGVseS5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlLCBgbWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7YCwgaXMgY2xlYXJseSBhIG1vcmUgZGlyZWN0IGFuZCBjbGVhbmVyIHdheSB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLiBJdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbDsgdGhlIG9mZnNldCBpbiB0aGUgb3JpZ2luYWwganVzdCB0YWtlcyBjYXJlIG9mIHRoZSBwYWRkaW5nLiBUaGlzIHBhcnQgb2YgdGhlIHBhdGNoIGlzIGVzc2VudGlhbGx5IGp1c3QgY2xlYW51cCDigJMgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBhdm9pZGluZyB0aGUgbWFudWFsIGJ5dGUgb2Zmc2V0IGNhbGN1bGF0aW9uLiBOb3RoaW5nIHJldm9sdXRpb25hcnkgaGVyZSwganVzdCBzb2xpZCwgbWFpbnRhaW5hYmxlIGNvZGUuXG5cbkJ1dCB3aGF0IGFib3V0IGByZXFgPyBJIHNob3VsZCBleGFtaW5lIHRoYXQgbW9yZSBjbG9zZWx5LiBUaGUgY29udGV4dCBvZiB0aGlzIHdob2xlIHRoaW5nIGlzIHRoYXQgYHJlcWAgaXMgYSBgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcWAsIHNvIGxldCdzIGRlbHZlIGludG8gdGhhdCBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjA4Ljc5MTE3Mjk5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MjgxNjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTg9ZW51bSBtdDc5MjVfdGVzdG1vZGVfYXR0ciB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTE4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmM6MTk6c3RydWN0IG10NzkyNV90bV9jbWQge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMjAtXFx0dTggcGFkZGluZ1s0XTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTQuMTU0MDE0NzQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjA4MzEyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBtdDc5MjVfdG1fY21kYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBgc3RydWN0IG10NzkyNV90bV9jbWRgLiBJbW1lZGlhdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIE1UNzkyNSBhcmNoaXRlY3R1cmUuIElzIHRoaXMgY29tbWFuZC1zcGVjaWZpYywgY29uZmlndXJhdGlvbi1vcmllbnRlZCwgb3IgZGF0YS10cmFuc2ZlciByZWxhdGVkPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQncyBhIGNvbW1hbmQgc3RydWN0dXJlLCBidXQgdGhhdCdzIGp1c3QgYSBzdGFydGluZyBwb2ludC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmaWVsZHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdHJhbnNsYXRlcyB0byBoYXJkd2FyZSBpbnRlcmFjdGlvbnMuIEFyZSB3ZSB0YWxraW5nIHJlZ2lzdGVycywgRE1BIGRlc2NyaXB0b3JzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cblxuTXkgYnJhaW4ncyBpbnN0YW50bHkgZ29pbmcgdG8gdGhlIHR5cGljYWwgc3VzcGVjdHM6IGEgY29tbWFuZCBvcGNvZGUsIHBvdGVudGlhbGx5IHN1Yi1vcGNvZGVzIGZvciBmaW5lciBncmFudWxhcml0eSwgc29tZSBmb3JtIG9mIGFkZHJlc3Npbmcgb3IgaWRlbnRpZmllciB0byB0YXJnZXQgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGVudGl0eSAoYSBzcGVjaWZpYyBNQUMsIGEgc3BlY2lmaWMgcXVldWUsIGEgc3BlY2lmaWMgY2hhbm5lbCksIGxlbmd0aCBmaWVsZHMgdG8gaW5kaWNhdGUgZGF0YSBzaXplcywgYW5kIG1heWJlIGEgc3RhdHVzL3Jlc3BvbnNlIGZpZWxkIHRvIHRyYWNrIGNvbW1hbmQgY29tcGxldGlvbiBvciBlcnJvcnMuIEknZCBiZSBsb29raW5nIGZvciBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMgaW1tZWRpYXRlbHkg4oCTIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhY2hlIGxpbmUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoZSBoYXJkd2FyZSBhY2Nlc3NlcyB0aGlzPyBQYWRkaW5nIGlzIGFsd2F5cyBhIGdpdmVhd2F5LlxuXG5UaGVuLCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgZGF0YSBwYXlsb2FkcywgaWYgYW55LiBXaGF0IGtpbmQgb2YgZGF0YSBpcyBiZWluZyBwYXNzZWQgd2l0aCB0aGlzIGNvbW1hbmQ/IElzIHRoaXMgZm9yIHJhdGUgY29udHJvbCwgdHJhZmZpYyBzaGFwaW5nLCBwb3dlciBtYW5hZ2VtZW50IHBhcmFtZXRlcnMsIG9yIG1heWJlIGV2ZW4gZmlybXdhcmUgY29udHJvbD8gVGhhdCB3aWxsIGluZmx1ZW5jZSBteSBleHBlY3RhdGlvbnMgb24gdGhlIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4sIGFuZCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgaW1wbGljYXRpb25zLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZS4uLiBhaGEuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwNSwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjE4LjQ3NDg1MDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdE5VTV9NVDc5MjVfVE1fQVRUUlMsXFxuICAxNjpcXHRcXHRNVDc5MjVfVE1fQVRUUl9NQVggPSBOVU1fTVQ3OTI1X1RNX0FUVFJTIC0gMSxcXG4gIDE3OlxcdH07XFxuICAxODpcXHRcXG4gIDE5OlxcdHN0cnVjdCBtdDc5MjVfdG1fY21kIHtcXG4gIDIwOlxcdFxcdHU4IHBhZGRpbmdbNF07XFxuICAyMTpcXHRcXHRzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIGM7XFxuICAyMjpcXHR9IF9fcGFja2VkO1xcbiAgMjM6XFx0XFxuICAyNDpcXHRzdHJ1Y3QgbXQ3OTI1X3RtX2V2dCB7XFxuICAyNTpcXHRcXHR1MzIgcGFyYW0wO1xcbiAgMjY6XFx0XFx0dTMyIHBhcmFtMTtcXG4gIDI3OlxcdH0gX19wYWNrZWQ7XFxuICAyODpcXHRcXG4gIDI5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBtdDc5MjVfdG1fcG9saWN5W05VTV9NVDc5MjVfVE1fQVRUUlNdID0ge1xcbiAgMzA6XFx0XFx0W01UNzkyNV9UTV9BVFRSX1NFVF0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKSxcXG4gIDMxOlxcdFxcdFtNVDc5MjVfVE1fQVRUUl9RVUVSWV0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKSxcXG4gIDMyOlxcdH07XFxuICAzMzpcXHRcXG4gIDM0OlxcdHN0YXRpYyBpbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguNDc1MDExMjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxODU3NzU5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSZWFkcyBpbiB0aGUgVGVzdG1vZGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGByZXFgIGlzIGEgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gVGhlIGNvZGUgY2hlY2tzIGAqKCh1aW50MTZfdCAqKXJlcS1cdTAwM2VwYWRkaW5nKWAuIGByZXEtXHUwMDNlcGFkZGluZ2AgaXMgYSBgdTggcGFkZGluZ1s0XWAsIHNvIHRoaXMgcmVhZHMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiB0aGF0IHBhZGRpbmcgZmllbGQuIGByZXFgIGNvbWVzIGZyb20gdXNlciBzcGFjZSB2aWEgYG5sYV9kYXRhKGRhdGEpYCwgd2hlcmUgYGRhdGFgIGNvbWVzIGZyb20gYGRydl90YltNVDc5MjVfVE1fQVRUUl9RVUVSWV1gLiBUaGUgcG9saWN5IGVuZm9yY2VzIGBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IG10NzkyNV90bV9jbWQpKWAsIG1lYW5pbmcgdGhlIHNpemUgb2YgYHJlcWAgaXMgZXhhY3RseSB3aGF0IHRoZSBzdHJ1Y3QgZGljdGF0ZXMuIFNpbmNlIHRoaXMgZGF0YSBvcmlnaW5hdGVzIGZyb20gdXNlcnNwYWNlLCB0aGUgbmV0bGluayBsYXllciBzaG91bGQgaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiwgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmUuXG5cbk5vdywgd2hhdCBhYm91dCBgZXZ0X3Jlc3BgPyBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBldnRfcmVzcGAgaXMgdXNlZCBpbiBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgIGFuZCBpcyBldmVudHVhbGx5IHNlbnQgdG8gdXNlciBzcGFjZSB2aWEgYG5sYV9wdXRgLiBQcmV2aW91c2x5LCBpZiBgbXQ3OTI1X3RtX3F1ZXJ5YCByZXR1cm5lZCAwLCBpdCB3b3VsZCBoYXZlIGNvcGllZCBleGFjdGx5IGBNVDc5MjVfRVZUX1JTUF9MRU5gIGJ5dGVzIGludG8gYGV2dF9yZXNwYC4gQnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGNvbmRpdGlvbnMgdG8gY29uc2lkZXIuXG5cbkxldCdzIHJldmlzaXQgdGhlIG9sZCBgbXQ3OTI1X3RtX3F1ZXJ5YCBmdW5jdGlvbi4gSWYgYHJlcS1cdTAwM2VwYWRkaW5nYCBkb2Vzbid0IG1hdGNoIGBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMYCBvciBgTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVGAsIGByZXRgIGJlY29tZXMgMSwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDEuIEluIHRoaXMgY2FzZSwgYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aWxsIHJldHVybiAxLCBhbmQgY3J1Y2lhbGx5LCBpdCAqd29uJ3QqIGNhbGwgYG5sYV9wdXRgLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGdldHMgbGVha2VkIGluIHRoYXQgc2NlbmFyaW8uXG5cbldoYXQgaWYgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIHJldHVybnMgMCBidXQgYHNrYmAgaXMgTlVMTD8gV2VsbCwgdGhlIGZ1bmN0aW9uIHNldHMgYHNrYmAgaWYgaXQgcmV0dXJucyAwLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgdG9vIHNob3J0LCBpdCByZXR1cm5zIGAtRUlOVkFMYC4gSWYgYHNrYi1cdTAwM2VsZW5gIGlzIHN1ZmZpY2llbnQsIHRoZSBjb2RlIGNvcGllcyBgTVQ3OTI1X0VWVF9SU1BfTEVOYCBieXRlcyBpbnRvIGBldnRfcmVzcGAuIFNvLCB0aGUgb2xkIGNvZGUgc2VlbXMgc2FmZTsgYGV2dF9yZXNwYCAqc2hvdWxkKiBiZSBmdWxseSBpbml0aWFsaXplZCBpbiB0aGUgc3VjY2Vzc2Z1bCBjYXNlcy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhlcmUgYW55IHBhdGggd2hlcmUgYG10NzkyNV90bV9xdWVyeWAgY291bGQgcmV0dXJuIDAsIGJ1dCBgZXZ0X3Jlc3BgIGlzIG5vdCBmdWxseSBpbml0aWFsaXplZD8gTm8uIEluIHRoZSBvbGQgY29kZSwgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgaXQgKm11c3QqIGhhdmUgY29waWVkIHRoZSBkYXRhIHZpYSBgbWVtY3B5YCwgbWVhbmluZyBpdCBpcyBpbml0aWFsaXplZC5cblxuV2hhdCBhYm91dCBhIHNpemUgbWlzbWF0Y2g/IFdoYXQgaWYgYE1UNzkyNV9FVlRfUlNQX0xFTmAgaXMgZ3JlYXRlciB0aGFuIGBza2ItXHUwMDNlZGF0YSArIDhgIGNvbnRhaW5zPyBUaGUgY2hlY2sgYGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBNVDc5MjVfRVZUX1JTUF9MRU4gKyA4KWAgcHJldmVudHMgdGhhdC4gT2theSwgd2hhdCBpZiBgc2tiLVx1MDAzZWxlbmAgaXMgbGFyZ2UgZW5vdWdoLCBidXQgdGhlIGFjdHVhbCBkYXRhIGZyb20gdGhlIE1DVSBpcyBnYXJiYWdlPyBUaGF0IGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgKmtlcm5lbCogbWVtb3J5IGlzc3VlLiBJdCdzIGEgcHJvYmxlbSB3aXRoIHRoZSBNQ1UgcHJvdmlkaW5nIGJhZCBkYXRhLCB3aGljaCBLTVNBTiB3b3VsZG4ndCBjYXRjaC5cblxuTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCwgbGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGRpZmZlcmVudC4gVGhlIGNoZWNrIGBpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOClgIGlzIHJlcGxhY2VkIHdpdGggYGlmICghc2tiX3B1bGwoc2tiLCBoZHIpKWAuIFNvIGBoZHJgIGlzIGBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKWAuIExldCdzIGNvbmZpcm0gd2hhdCBgaGRyYCBhY3R1YWxseSBpcy4gQWZ0ZXIgdGhhdCwgVGhlIGBtZW1jcHlgIGlzIGNoYW5nZWQgdG8gYG1lbWNweShldnRfcmVzcCwgc2tiLVx1MDAzZWRhdGEsIG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKSk7YC4gU28sIGlmIGBza2ItXHUwMDNlbGVuYCBpcyBzbWFsbGVyIHRoYW4gd2hhdCBpcyBleHBlY3RlZCwgYSBzbWFsbGVyIGFtb3VudCBvZiBieXRlcyB3aWxsIGJlIGNvcGllZCBmcm9tIGBza2JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDMwLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjM0LjY2MDc5MDU0OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzODE1NzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oPTY1Nj11bmlvbiB0ZXN0bW9kZV9ldnQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmgtNjYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5oOjY2MjpzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaC02NjMtXFx0dTE2IHRhZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzkuNjk4OTU2ODY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzg4NjY2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHVuaV9jbWRfdGVzdG1vZGVfY3RybGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybGAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCB3aGVyZSBhIHNwZWNpZmljIHBpZWNlIG9mIGl0IGlzIGNvbnRyb2xsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUsIHdoYXQgaXQncyBpbnRlbmRlZCB0byBkbywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgc3VzcGVjdCB0aGlzIHN0cnVjdCBsaWtlbHkgY29udGFpbnMgdGhlIGNvbnRyb2wgcGFyYW1ldGVycyBmb3Igd2hhdGV2ZXIgdGVzdGluZyBtb2RlIGlzIGltcGxlbWVudGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgYXMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgd2lsbCBiZSB3aGVyZSBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW91ciBpcyBsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgaXQgY2FuIHRha2UgYXJlLCBhcyB3ZWxsIGFzIHRoZSBleHBlY3RlZCByYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZC4gVGhlbiwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBjb250cm9sIHBhcmFtZXRlcnMgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjIzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDIuODc3ODc2MDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NjIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjI6XFx0c3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCB7XFxuIDY2MzpcXHRcXHR1MTYgdGFnO1xcbiA2NjQ6XFx0XFx0dTE2IGxlbmd0aDtcXG4gNjY1OlxcdFxcdHU4IGFjdGlvbjtcXG4gNjY2OlxcdFxcdHU4IHJlc2VydmVkWzNdO1xcbiA2Njc6XFx0XFx0dW5pb24gdGVzdG1vZGVfZGF0YSBkYXRhO1xcbiA2Njg6XFx0fSBfX3BhY2tlZDtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIHtcXG4gNjcxOlxcdFxcdHU4IHBhZGRpbmdbNF07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjQyLjg3ODAwODI4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTIzMjA4OTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgYW5kIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBvZmZzZXRvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsLCBkYXRhKWAgZXZhbHVhdGVzIHRvIDguIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgYGhkcmAgdmFsdWUgaXMgOC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGBza2ItXHUwMDNlZGF0YSArIDhgLCBhbmQgdGhlIG5ldyBjb2RlIHV0aWxpemVzIGBza2JfcHVsbChza2IsIGhkcilgLiBgc2tiX3B1bGxgIHNoaWZ0cyBgc2tiLVx1MDAzZWRhdGFgIGZvcndhcmQgYnkgOCBieXRlcyBhbmQgZGVjcmVtZW50cyBgc2tiLVx1MDAzZWxlbmAgYnkgOC4gVGhlbiBpdCBjb3BpZXMgYnl0ZXMgdXNpbmcgYG1pbl90KHUzMiwgc2tiLVx1MDAzZWxlbiwgTVQ3OTI1X0VWVF9SU1BfTEVOKWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCAoYWZ0ZXIgdGhlIHB1bGwpLCB0aGUgY29weSB3b3VsZCB3cml0ZSBmZXdlciBieXRlcyB0aGFuIGFsbG9jYXRlZCBpbiBgZXZ0X3Jlc3BgLiBTaW5jZSBgZXZ0X3Jlc3BgIGlzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBzaXplb2YoZXZ0X3Jlc3ApYCAoZXF1YWwgdG8gYE1UNzkyNV9FVlRfUlNQX0xFTmApLCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBsZWFrZWQuIEhvd2V2ZXIsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIGBldnRfcmVzcGAgd2l0aCBge31gLlxuXG5TbywgdGhpcyBwYXRjaCBhY3R1YWxseSAqaW50cm9kdWNlcyogYSBjYXNlIHdoZXJlIHRoZSBjb3B5IG1pZ2h0IGJlIHNob3J0ZXIsIGFuZCAqZml4ZXMqIHRoZSBwb3NzaWJsZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gQnV0IGRpZCB0aGUgb3JpZ2luYWwgY29kZSBoYXZlIGEgbGVhaz8gTm8sIGJlY2F1c2UsIHdpdGggdGhlIG9sZCBjb2RlLCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIHNtYWxsZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOICsgOGAsIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBgLUVJTlZBTGAuIFRoaXMgd291bGQgdGhlbiBwcm9wYWdhdGUgdG8gYG10NzkyNV90ZXN0bW9kZV9kdW1wYCB3aGljaCBhbHNvIHdvdWxkIHJldHVybiBgLUVJTlZBTGAgYW5kIHdvdWxkIG5vdCBjYWxsIGBubGFfcHV0YC4gVGhpcyBpbmRpY2F0ZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGxlYWtlZCBpbiB0aGUgb2xkZXIgY29kZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoZXJlIGFyZSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdoYXQgYWJvdXQgYHJlcS1cdTAwM2VwYWRkaW5nYD8gTGV0J3MgY2hlY2s6XG5cbmBgYGNcblx0aWYgKCooKHVpbnQxNl90ICopcmVxLVx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXG5gYGBcblxuSGVyZSwgYHJlcWAgaXMgYSBgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcWAsIHdoaWNoIGNvbWVzIGZyb20gYG5sYV9kYXRhKGRhdGEpYC4gYGRhdGFgIGlzIGBkcnZfdGJbTVQ3OTI1X1RNX0FUVFJfUVVFUlldYC4gVGhlIHBvbGljeSBpcyBgTkxBX1BPTElDWV9FWEFDVF9MRU4oc2l6ZW9mKHN0cnVjdCBtdDc5MjVfdG1fY21kKSlgLiBUaGlzIG1lYW5zIGByZXFgIGlzIGV4YWN0bHkgdGhlIHNpemUgb2YgYHN0cnVjdCBtdDc5MjVfdG1fY21kYC4gSXMgYHJlcS1cdTAwM2VwYWRkaW5nYCB1bmluaXRpYWxpemVkPyBObywgYmVjYXVzZSBpdCBpcyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHRoZSBuZXRsaW5rIGxheWVyLiBLTVNBTiB0cmFja3Mga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBpZiB0aGUgdXNlciBkb2VzIG5vdCBpbml0aWFsaXplIGl0LCBpdCdzIG5vdCBhIGtlcm5lbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS5cblxuTm93IGxldCdzIGNoZWNrIGBjbWRgOlxuYGBgY1xuIFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDtcbi1cdGNoYXIgKnBjbWQgPSAoY2hhciAqKVx1MDAyNmNtZDtcbitcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFx1MDAyNmNtZDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuLVx0aW50IHJldCA9IDE7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpO1xuLVx0bWVtY3B5KHBjbWQgKyA0LCAoY2hhciAqKVx1MDAyNnJlcS1cdTAwM2VjLCBzaXplb2Yoc3RydWN0IHVuaV9jbWRfdGVzdG1vZGVfY3RybCkpO1xuK1x0bWVtY3B5KFx1MDAyNnBjbWQtXHUwMDNlY3RybCwgXHUwMDI2cmVxLVx1MDAzZWMsIHNpemVvZihzdHJ1Y3QgdW5pX2NtZF90ZXN0bW9kZV9jdHJsKSk7XG5gYGBcbkluIHRoZSBvbGQgY29kZSwgYHBjbWRgIHdhcyBhIGBjaGFyICpgLiBUaGVuIGBzaXplb2YoKnBjbWQpYCB3b3VsZCBlcXVhbCBgc2l6ZW9mKGNoYXIpYCBvciBgMWAuIFRoaXMgbWVhbnMgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtgIG9ubHkgemVyb2VkIG9uZSBieXRlIG9mIGBjbWRgISBUaGF0J3MgYSBkZWZpbml0ZSBidWcuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MzEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDo1NC4xMTAxMDEzNzNaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0XFxuICA4NjpcXHRzdGF0aWMgaW50XFxuICA4NzpcXHRtdDc5MjVfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyNV90bV9jbWQgKnJlcSxcXG4gIDg4OlxcdFxcdFxcdGNoYXIgKmV2dF9yZXNwKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IGhkciA9IG9mZnNldG9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwsIGRhdGEpO1xcbiAgOTE6XFx0XFx0c3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZDtcXG4gIDkyOlxcdFxcdHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZCAqcGNtZCA9IFxcdTAwMjZjbWQ7XFxuICA5MzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gIDk0OlxcdFxcdGludCByZXQ7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKTtcXG4gIDk3OlxcdFxcdG1lbWNweShcXHUwMDI2cGNtZC1cXHUwMDNlY3RybCwgXFx1MDAyNnJlcS1cXHUwMDNlYywgc2l6ZW9mKHN0cnVjdCB1bmlfY21kX3Rlc3Rtb2RlX2N0cmwpKTtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0aWYgKCooKHVpbnQxNl90ICopcmVxLVxcdTAwM2VwYWRkaW5nKSA9PSBNQ1VfVU5JX0NNRF9URVNUTU9ERV9DVFJMKVxcbiAxMDA6XFx0XFx0XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxcbiAxMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFxcdTAwMjZza2IpO1xcbiAxMDI6XFx0XFx0ZWxzZSBpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX1JYX1NUQVQpXFxuIDEwMzpcXHRcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuIDEwNDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y21kLCBzaXplb2YoY21kKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU0LjExMDIyNDIxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDc5NDU5ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbmZvcm1hdGlvbiBMZWFrIGluIExlZ2FjeSBDb2RlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIG9sZGVyIEMgY29kZSwgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcmVkIGZsYWcuIFRoZXkncmUgdXNpbmcgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2hlcmUgYHBjbWRgIGlzIGNhc3QgdG8gYSBgY2hhciAqYCBhbmQgaXMgcG9pbnRpbmcgdG8gYGNtZGAsIHdoaWNoIGlzIGEgYHN0cnVjdCBtdDc5MjVfcmZ0ZXN0X2NtZGAuIFNpbmNlIGBzaXplb2YoY2hhcilgIGlzIDEsIHRoZXkncmUgb25seSB6ZXJvaW5nIHRoZSAqZmlyc3QgYnl0ZSogb2YgYGNtZGAuIFRoYXQncyBhIGNsYXNzaWMgcm9va2llIG1pc3Rha2UhXG5cblRoZW4sIHRoZXkncmUgdXNpbmcgYG1lbWNweWAgdG8gY29weSBkYXRhIHRvIGBjbWQgKyA0YCwgd2hpY2ggZWZmZWN0aXZlbHkgb3ZlcndyaXRlcyBvbmx5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gVGhlIGJ5dGVzIGF0IG9mZnNldHMgMSwgMiwgYW5kIDMgYXJlIGxlZnQgY29tcGxldGVseSB1bmluaXRpYWxpemVkLiBUaGVzZSB1bmluaXRpYWxpemVkIGJ5dGVzIGJlY29tZSBwYXJ0IG9mIHRoZSBgY21kYCBzdHJ1Y3QgdGhhdCdzIHNlbnQgdG8gdGhlIE1DVSwgd2hpY2ggaXMgY29uY2VybmluZy5cblxuTG9va2luZyBkZWVwZXIsIGBjbWRgIGlzIGluZGVlZCBhIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWRgLCB3aGljaCBjb250YWlucyBwYWRkaW5nIGFuZCBhIGNvbnRyb2wgc3RydWN0dXJlLiBTbywgdGhhdCBpbml0aWFsIGBtZW1zZXRgIG9ubHkgemVyb3Mgb3V0IGBwYWRkaW5nWzBdYCwgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgcGFkZGluZyBwb3RlbnRpYWxseSBob2xkaW5nIGdhcmJhZ2UgZGF0YS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGFuIGV4dGVybmFsIGRldmljZSwgaW4gdGhpcyBjYXNlLCB0aGUgTUNVLCBhbiBpbmZvcm1hdGlvbiBsZWFrPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU2VuZGluZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gYSBwb3RlbnRpYWxseSB1bnRydXN0ZWQgZXh0ZXJuYWwgZGV2aWNlIGlzIGEgZGlyZWN0IGluZm8tbGVhay4gVGhpcyBpcyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSFcblxuTm93LCBkb2VzIEtNU0FOIGNhdGNoIHRoaXM/IFRoYW5rZnVsbHksIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdCBleGFjdGx5IHRoaXMga2luZCBvZiBzY2VuYXJpbzogcGFzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBETUEgb3IgZXh0ZXJuYWwgZGV2aWNlcywgaWYgdGhlIGRyaXZlciB1c2VzIHN0YW5kYXJkIERNQSBBUElzIG9yIGlmIHRoZSBtZW1vcnkgaXMgY29waWVkIHRvIGEgYnVmZmVyIHNlbnQgdG8gdGhlIGRldmljZS4gU28sIHRoZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXQgS01TQU4gd291bGQgZmxhZyB0aGlzLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZ2AgdG8gc2VlIHdoYXQgaXQncyBkb2luZyB3aXRoIHRoYXQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkwNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjAxLjU4OTY4NzcwOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3MDIzNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmM9NTQ9RVhQT1JUX1NZTUJPTF9HUEwobXQ3Nl9tY3VfcnhfZXZlbnQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tY3UuYzo1NjppbnQgbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTU3LVxcdFxcdFxcdCAgICAgIGludCBsZW4sIGJvb2wgd2FpdF9yZXNwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnJldF9za2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jLTY5LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21jdS5jOjcwOkVYUE9SVF9TWU1CT0xfR1BMKG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2cpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWN1LmMtNzEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaD0xOTIzPXN0cnVjdCBza19idWZmICptdDc2X21jdV9nZXRfcmVzcG9uc2Uoc3RydWN0IG10NzZfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmgtMTkyNC1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGV4cGlyZXMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oOjE5MjU6aW50IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coc3RydWN0IG10NzZfZGV2ICpkZXYsIGludCBjbWQsIGNvbnN0IHZvaWQgKmRhdGEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmgtMTkyNi1cXHRcXHRcXHQgICAgICBpbnQgbGVuLCBib29sIHdhaXRfcmVzcCwgc3RydWN0IHNrX2J1ZmYgKipyZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2Lmg9MTk0MT1tdDc2X21jdV9zZW5kX21zZyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oLTE5NDMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oOjE5NDQ6XFx0cmV0dXJuIG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coZGV2LCBjbWQsIGRhdGEsIGxlbiwgd2FpdF9yZXNwLCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaC0xOTQ1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTIyMzI9aW50IG10NzkxNV9tY3VfbXVydV9kZWJ1Z19nZXQoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTIyNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6MjI0NzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfQ01EKE1VUlVfQ1RSTCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjI0OC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0yOTIwPWludCBtdDc5MTVfbWN1X2dldF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnJlYWRfYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMjkzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzoyOTMxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yOTMyLVxcdFxcdFxcdFxcdFxcdE1DVV9FWFRfUVVFUlkoRUZVU0VfQUNDRVNTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTI5NTQ9aW50IG10NzkxNV9tY3VfZ2V0X2VlcHJvbV9mcmVlX2Jsb2NrKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4ICpibG9ja19udW0pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0yOTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjI5Njc6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTI5NjgtXFx0XFx0XFx0XFx0XFx0TUNVX0VYVF9RVUVSWShFRlVTRV9GUkVFX0JMT0NLKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTMxNzg9aW50IG10NzkxNV9tY3VfZ2V0X2NoYW5fbWliX2luZm8oc3RydWN0IG10NzkxNV9waHkgKnBoeSwgYm9vbCBjaGFuX3N3aXRjaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTMyMTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6MzIxODpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfQ01EKEdFVF9NSUJfSU5GTyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzIxOS1cXHRcXHRcXHRcXHRcXHRyZXEsIGxlbiAqIHNpemVvZihyZXFbMF0pLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTM1NDM9aW50IG10NzkxNV9tY3VfZ2V0X3R4cG93ZXJfc2t1KHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHM4ICp0eHBvd2VyLCBpbnQgbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtMzU2MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYzozNTYxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zNTYyLVxcdFxcdFxcdFxcdFxcdE1DVV9FWFRfQ01EKFRYX1BPV0VSX0ZFQVRVUkVfQ1RSTCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYz0zODk1PWludCBtdDc5MTVfbWN1X2dldF9yeF9yYXRlKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zOTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jOjM5MTc6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfRVhUX0NNRChQSFlfU1RBVF9JTkZPKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYy0zOTE4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTQxMzY9aW50IG10NzkxNV9tY3Vfd2VkX3dhX3R4X3N0YXRzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUxNiB3bGFuX2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNjktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6NDE3MDpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9XQV9QQVJBTV9DTUQoUVVFUlkpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQxNzEtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgbGVuLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jPTQyMDQ9aW50IG10NzkxNV9tY3VfcmZfcmVndmFsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiByZWdpZHgsIHUzMiAqdmFsLCBib29sIHNldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jLTQyMjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmM6NDIyMjpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9FWFRfUVVFUlkoUkZfUkVHX0FDQ0VTUyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMtNDIyMy1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz03NT1zdGF0aWMgaW50IG10NzkyMV9tY3VfcmVhZF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTMyIG9mZnNldCwgdTggKnZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjg0OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX0VYVF9RVUVSWShFRlVTRV9BQ0NFU1MpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTg1LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTU3Nj1zdGF0aWMgaW50IG10NzkyMV9tY3VfZ2V0X25pY19jYXBhYmlsaXR5KHN0cnVjdCBtdDc5MnhfcGh5ICptcGh5KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtNTg1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jOjU4NjpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKHBoeS1cXHUwMDNlZGV2LCBNQ1VfQ0VfQ01EKEdFVF9OSUNfQ0FQQUIpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTU4Ny1cXHRcXHRcXHRcXHRcXHROVUxMLCAwLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTExMjg9aW50IG10NzkyMV9nZXRfdHhwd3JfaW5mbyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTIxX3R4cHdyICp0eHB3cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTExMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmM6MTEzNzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9DRV9DTUQoR0VUX1RYUFdSKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMTM4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3JlZ2QuYz0xNzc9bXQ3OTIxX3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcmVnZC5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmM6MjMyOlxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9yZWdkLmMtMjMzLVxcdFxcdFxcdFxcdFxcdFxcdE1DVV9DRV9DTUQoU0VUX1JFR0RfQ0gpLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYz04NT1tdDc5MjFfdG1fcXVlcnkoc3RydWN0IG10NzkyeF9kZXYgKmRldiwgc3RydWN0IG10NzkyMV90bV9jbWQgKnJlcSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3Rlc3Rtb2RlLmMtOTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdGVzdG1vZGUuYzo5NzpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9DRV9DTUQoVEVTVF9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS90ZXN0bW9kZS5jLTk4LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTc3PWludCBtdDc5MjVfbWN1X3JlZ3ZhbChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1MzIgcmVnaWR4LCB1MzIgKnZhbCwgYm9vbCBzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTIxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMjItXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoUkVHX0FDQ0VTUyksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz04MjY9c3RhdGljIGludCBtdDc5MjVfbWN1X3JlYWRfZWVwcm9tKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHU4ICp2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy04NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6ODYxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoRUZVU0VfQ1RSTCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtODYyLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jPTk2ND1pbnQgbXQ3OTI1X21jdV9md19sb2dfMl9ob3N0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4IGN0cmwpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy05ODAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6OTgxOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoV1NZU19DT05GSUcpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTk4Mi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz05ODY9aW50IG10NzkyNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwMDY6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTEwMDctXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoVEhFUk1BTCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xMDcwPW10NzkyNV9tY3VfZ2V0X25pY19jYXBhYmlsaXR5KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xMDg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjEwODk6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChDSElQX0NPTkZJRyksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMTA5MC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0xNjExPWludCBtdDc5MjVfbWN1X3NldF9lZXByb20oc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTE2MjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmM6MTYyOTpcXHRyZXR1cm4gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX0NNRChFRlVTRV9DVFJMKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy0xNjMwLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz0yMjM5PWludCBtdDc5MjVfZ2V0X3R4cHdyX2luZm8oc3RydWN0IG10NzkyeF9kZXYgKmRldiwgdTggYmFuZF9pZHgsIHN0cnVjdCBtdDc5MjVfdHhwd3IgKnR4cHdyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMjI1Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYzoyMjUzOlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1VOSV9DTUQoVFhQT1dFUiksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvbWN1LmMtMjI1NC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSwgXFx1MDAyNnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYz00MDc5PWludCBtdDc5MjVfbWN1X3dmX3JmX3Bpbl9jdHJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9tY3UuYy00MTAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jOjQxMDE6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L21jdS5jLTQxMDItXFx0XFx0XFx0XFx0XFx0TUNVX1VOSV9DTUQoUkFESU9fU1RBVFVTKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz0yMjM9bXQ3OTI1X3JlZ2RfcXVlcnlfcmVnZGIoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6MjgwOlxcdFxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjgxLVxcdFxcdFxcdFxcdFxcdFxcdE1DVV9VTklfQ01EKFNFVF9QT1dFUl9MSU1JVCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jPTg3PW10NzkyNV90bV9xdWVyeShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTI1X3RtX2NtZCAqcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy05OS1cXHRpZiAoKigodWludDE2X3QgKilyZXEtXFx1MDAzZXBhZGRpbmcpID09IE1DVV9VTklfQ01EX1RFU1RNT0RFX0NUUkwpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYzoxMDA6XFx0XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LCBNQ1VfVU5JX1FVRVJZKFRFU1RNT0RFX0NUUkwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3Rlc3Rtb2RlLmMtMTAxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjbWQsIHNpemVvZihjbWQpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jLTEwMi1cXHRlbHNlIGlmICgqKCh1aW50MTZfdCAqKXJlcS1cXHUwMDNlcGFkZGluZykgPT0gTUNVX1VOSV9DTURfVEVTVE1PREVfUlhfU1RBVClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS90ZXN0bW9kZS5jOjEwMzpcXHRcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9VTklfUVVFUlkoVEVTVE1PREVfUlhfU1RBVCksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvdGVzdG1vZGUuYy0xMDQtXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDM2Mz1pbnQgbXQ3OTk2X21jdV9nZXRfZWVwcm9tKHN0cnVjdCBtdDc5OTZfZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHU4ICpidWYsIHUzMiBidWZfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDM5MC1cXHRyZXEuaW5mby5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDM5MTpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIGNtZCwgXFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDM5Mi1cXHRcXHRcXHRcXHRcXHR0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ0Mzk9aW50IG10Nzk5Nl9tY3VfZ2V0X2VmdXNlX2ZyZWVfYmxvY2soc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTggKmJsb2NrX251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM6NDQ1ODpcXHRyZXQgPSBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKFxcdTAwMjZkZXYtXFx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EX1FVRVJZKEVGVVNFX0NUUkwpLCBcXHUwMDI2cmVxLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0NTktXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDQ2OT1pbnQgbXQ3OTk2X21jdV9nZXRfY2hpcF9jb25maWcoc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTMyICpjYXApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NDg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ0ODU6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2ZGV2LVxcdTAwM2VtdDc2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ0ODYtXFx0XFx0XFx0XFx0XFx0TUNVX1dNX1VOSV9DTURfUVVFUlkoQ0hJUF9DT05GSUcpLCBcXHUwMDI2cmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NDUyND1pbnQgbXQ3OTk2X21jdV9nZXRfY2hhbl9taWJfaW5mbyhzdHJ1Y3QgbXQ3OTk2X3BoeSAqcGh5LCBib29sIGNoYW5fc3dpdGNoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNDU2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo0NTY1OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NiwgTUNVX1dNX1VOSV9DTURfUVVFUlkoR0VUX01JQl9JTkZPKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NTY2LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXEsIHNpemVvZihyZXEpLCB0cnVlLCBcXHUwMDI2c2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jPTQ2MDM9aW50IG10Nzk5Nl9tY3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5OTZfcGh5ICpwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy00NjM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jOjQ2MzY6XFx0cmV0ID0gbXQ3Nl9tY3Vfc2VuZF9hbmRfZ2V0X21zZyhcXHUwMDI2cGh5LVxcdTAwM2VkZXYtXFx1MDAzZW10NzYsIE1DVV9XTV9VTklfQ01EKFRIRVJNQUwpLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L21jdS5jLTQ2MzctXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlcSwgc2l6ZW9mKHJlcSksIHRydWUsIFxcdTAwMjZza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmM9NTI4Mj1pbnQgbXQ3OTk2X21jdV9yZl9yZWd2YWwoc3RydWN0IG10Nzk5Nl9kZXYgKmRldiwgdTMyIHJlZ2lkeCwgdTMyICp2YWwsIGJvb2wgc2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvbWN1LmMtNTMwNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYzo1MzA4OlxcdHJldCA9IG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coXFx1MDAyNmRldi1cXHUwMDNlbXQ3NixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9tY3UuYy01MzA5LVxcdFxcdFxcdFxcdFxcdE1DVV9XTV9VTklfQ01EX1FVRVJZKFJFR19BQ0NFU1MpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNTowNS41NTk5ODA3OThaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NjgzNTYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0aWVzIGluIG10NzkyNSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtdDc5MjVfdG1fcXVlcnlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3ZW50IGxpa2UgdGhpczogYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgIGV2ZW50dWFsbHkgY29waWVzIGRhdGEgdG8gYSBETUEtbWFwcGVkIGJ1ZmZlciwgYW5kIEtNU0FOIHdvdWxkIGFic29sdXRlbHkgY2F0Y2ggYSBwcm9ibGVtIGlmIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGdldHMgc2VudCB0byB0aGUgTUNVLlxuXG5UaGUgY29kZSBkZWZpbmVzIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYCBvbiB0aGUgc3RhY2ssIHdoaWNoIGlzIGZpbmUsIGJ1dCB0aGUgb2xkIGNvZGUgdXNlZCBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYC4gSGVyZSdzIHdoZXJlIHRoZSBwcm9ibGVtIGxpZXMuIEJlY2F1c2UgYHBjbWRgIHdhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIHplcm9pbmcgb25seSB0aGUgKmZpcnN0KiBieXRlIG9mIHRoZSBgY21kYCBzdHJ1Y3R1cmUuIFRoaXMgbGVmdCB0aGUgYGNtZC5wYWRkaW5nYCBmaWVsZCwgc3BlY2lmaWNhbGx5IDMgYnl0ZXMsIHVuaW5pdGlhbGl6ZWQuIFN1YnNlcXVlbnQgYG1lbWNweWAgb3BlcmF0aW9ucyB0aGVuIHdyb3RlIHRvIG90aGVyIHBhcnRzIG9mIGBjbWRgLCBidXQgdGhvc2UgMyB1bmluaXRpYWxpemVkIGJ5dGVzIHdlcmUgc3RpbGwgc2VudCB0byB0aGUgTUNVLCBhIGNsZWFyIGluZm8tbGVhay4gS01TQU4gaXMgdGFpbG9yLW1hZGUgdG8gY2F0Y2ggdGhpcywgYW5kIHRoYXQncyBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgY2hhbmdpbmcgYHBjbWRgIHRvIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgKmAsIGVuc3VyaW5nIGBtZW1zZXRgIHplcm9lcyB0aGUgKmVudGlyZSogc3RydWN0dXJlLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBLTVNBTi1zcGVjaWZpYyBmaXguIEkgdGhlbiBkb3VibGUtY2hlY2tlZCB0aGUgbG9naWMgaW4gYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2dgLiBZZXMsIHRoZSBmdW5jdGlvbiBjYWxscyBgbXQ3Nl9tY3Vfc2VuZF9tc2dgLCB3aGljaCBhbGxvY2F0ZXMgYW4gc2tiLCAqY29waWVzKiB0aGUgZGF0YSwgYW5kIHNlbmRzIGl0IG91dCB0byB0aGUgZGV2aWNlIHRocm91Z2ggRE1BIG9yIFVTQi4gVGhpcyBjb3B5aW5nIHByb2Nlc3Mgd2lsbCBwcm9wYWdhdGUgdGhlIHVuaW5pdGlhbGl6ZWQgYml0cyBhbmQgS01TQU4gd2lsbCBmbGFnIGl0IGF0IHRoZSBza2IgY29weSBvciBhdCB0aGUgc2VuZCB0byB0aGUgZGV2aWNlLlxuXG5Ob3csIEkgbW92ZWQgb24gdG8gYSBzZWNvbmQgcG90ZW50aWFsIGlzc3VlLiBJbiBgbXQ3OTI1X3Rlc3Rtb2RlX2R1bXBgLCB0aGUgb3JpZ2luYWwgY29kZSB1c2VkIGBjaGFyIGV2dF9yZXNwW01UNzkyNV9FVlRfUlNQX0xFTl1gLiBBIG5ldyBjb2RlIHBhdGggaW4gdGhlIHBhdGNoIGFsbG93cyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIElmIHRoZSByZXNwb25zZSBmcm9tIGBtdDc5MjVfdG1fcXVlcnlgIHdhcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYGV2dF9yZXNwYCB3b3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVzZSBieXRlcyB3ZXJlIHRoZW4gY29waWVkIHRvIHVzZXIgc3BhY2UgdXNpbmcgYG5sYV9wdXRgLCBsZWFkaW5nIHRvIGFub3RoZXIgaW5mby1sZWFrLiBUaGUgcGF0Y2ggY2xldmVybHkgcHJldmVudHMgdGhpcyBieSB6ZXJvLWluaXRpYWxpemluZyBgZXZ0X3Jlc3BgIHdpdGggYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2AuXG5cbkkgd2VudCBiYWNrIGFuZCBjaGVja2VkIHRoZSBvbGQgY29kZS4gQWN0dWFsbHksIHRoZSBvbGQgY29kZSdzIGxvZ2ljIG9mIGBtdDc5MjVfdG1fcXVlcnlgIGFsd2F5cyByZXF1ZXN0ZWQgYXQgbGVhc3QgYE1UNzkyNV9FVlRfUlNQX0xFTmAgYnl0ZXMgZnJvbSB0aGUgZGV2aWNlLiBUaGlzIG1lYW50IHRoYXQgdGhlIGZ1bGwgYnVmZmVyIHdhcyBhbHdheXMgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBwYXRjaCAqaW50cm9kdWNlZCogdGhlIHBvdGVudGlhbCBmb3IgdGhpcyBzZWNvbmQgaW5mby1sZWFrIHRoYXQgaXQgZml4ZXMgdmlhIHRoZSB6ZXJvIGluaXRpYWxpemF0aW9uLlxuXG5DcnVjaWFsbHksIHN0YW5kYXJkIEtBU0FOIGRvZXNuJ3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyAqc3BlY2lmaWNhbGx5KiBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyBhbiBhcmVhIHdoZXJlIEtBU0FOIGlzIGZ1bmRhbWVudGFsbHkgYmxpbmQuIFRoZSBwYXRjaCBpcyBub3cgdHdvLWZvbGQ6IGFkZHJlc3NpbmcgdGhlIGBtZW1zZXRgIGJ1Zywgd2hpY2ggbGVhZHMgdG8gdGhlIGluZm8tbGVhayB0byB0aGUgZGV2aWNlLCBhbmQgZml4aW5nIGEgbmV3IGNvZGUgcGF0aCB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaW5mby1sZWFrIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgdGV4dGJvb2sgS01TQU4gZml4IGFuZCByZXF1aXJlcyBkZWRpY2F0ZWQgdGVzdGluZyB3aXRoIEtNU0FOLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBmaXhlcyB0aGUgYG1lbXNldGAgYnVnIGFuZCBhZGRyZXNzZXMgdGhlIGNoYW5nZXMgdG8gcmVzcG9uc2UgaGFuZGxpbmcuXG5cbkknbSBub3cgc2F0aXNmaWVkIHRoYXQgYE5lZWRzS01TQU49dHJ1ZWAgYW5kIHRoYXQgYSB0aG9yb3VnaCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIGNvbmZpcm0gdGhlIGZpeCBhbmQgc2VhcmNoIGZvciBhbnkgb3RoZXIgbGluZ2VyaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5MywiT3V0cHV0VG9rZW5zIjozNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjMxLjUyODM0MDQyOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG10NzkyNV90bV9xdWVyeSgpYCB3aGVyZSBgbWVtc2V0KHBjbWQsIDAsIHNpemVvZigqcGNtZCkpYCB3YXMgdXNlZCB0byBpbml0aWFsaXplIGEgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgbXQ3OTI1X3JmdGVzdF9jbWQgY21kYC4gQmVjYXVzZSBgcGNtZGAgd2FzIGRlY2xhcmVkIGFzIGEgYGNoYXIgKmAsIGBzaXplb2YoKnBjbWQpYCBldmFsdWF0ZWQgdG8gMSwgbWVhbmluZyBvbmx5IHRoZSBmaXJzdCBieXRlIG9mIHRoZSBzdHJ1Y3R1cmUgd2FzIHplcm9lZC4gVGhlIHJlbWFpbmluZyAzIGJ5dGVzIG9mIHRoZSBgcGFkZGluZ2AgZmllbGQgd2VyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgc3RydWN0dXJlIHdhcyB0aGVuIHNlbnQgdG8gdGhlIE1DVSB2aWEgYG10NzZfbWN1X3NlbmRfYW5kX2dldF9tc2coKWAsIHJlc3VsdGluZyBpbiBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHRoZSBkZXZpY2UuXFxuXFxuQWRkaXRpb25hbGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc3BvbnNlIGhhbmRsaW5nIHRvIGFsbG93IHNob3J0ZXIgcmVzcG9uc2VzIGZyb20gdGhlIE1DVS4gVG8gcHJldmVudCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBubGFfcHV0KClgIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHNob3J0ZXIgdGhhbiBgTVQ3OTI1X0VWVF9SU1BfTEVOYCwgdGhlIHBhdGNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIGBldnRfcmVzcGAgYnVmZmVyIChgY2hhciBldnRfcmVzcFtNVDc5MjVfRVZUX1JTUF9MRU5dID0ge307YCkuXFxuXFxuU3RhbmRhcmQgS0FTQU4gZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIGJ1dCBpdCBkb2VzIG5vdCB0cmFjayB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyAoYm90aCB0byB1c2VyIHNwYWNlIGFuZCB0byBoYXJkd2FyZSBkZXZpY2VzKS4gU2luY2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZCB0byB2ZXJpZnkgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBleGlzdCBpbiB0aGlzIGNvZGUgcGF0aC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtdDc5MjVfdG1fcXVlcnkoKWAgd2hlcmUgYG1lbXNldChwY21kLCAwLCBzaXplb2YoKnBjbWQpKWAgd2FzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IG10NzkyNV9yZnRlc3RfY21kIGNtZGAuIEJlY2F1c2UgYHBjbWRgIHdhcyBkZWNsYXJlZCBhcyBhIGBjaGFyICpgLCBgc2l6ZW9mKCpwY21kKWAgZXZhbHVhdGVkIHRvIDEsIG1lYW5pbmcgb25seSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RydWN0dXJlIHdhcyB6ZXJvZWQuIFRoZSByZW1haW5pbmcgMyBieXRlcyBvZiB0aGUgYHBhZGRpbmdgIGZpZWxkIHdlcmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGlzIHN0cnVjdHVyZSB3YXMgdGhlbiBzZW50IHRvIHRoZSBNQ1UgdmlhIGBtdDc2X21jdV9zZW5kX2FuZF9nZXRfbXNnKClgLCByZXN1bHRpbmcgaW4gYSBsZWFrIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB0aGUgZGV2aWNlLlxcblxcbkFkZGl0aW9uYWxseSwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXNwb25zZSBoYW5kbGluZyB0byBhbGxvdyBzaG9ydGVyIHJlc3BvbnNlcyBmcm9tIHRoZSBNQ1UuIFRvIHByZXZlbnQgbGVha2luZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgbmxhX3B1dCgpYCB3aGVuIHRoZSByZXNwb25zZSBpcyBzaG9ydGVyIHRoYW4gYE1UNzkyNV9FVlRfUlNQX0xFTmAsIHRoZSBwYXRjaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBgZXZ0X3Jlc3BgIGJ1ZmZlciAoYGNoYXIgZXZ0X3Jlc3BbTVQ3OTI1X0VWVF9SU1BfTEVOXSA9IHt9O2ApLlxcblxcblN0YW5kYXJkIEtBU0FOIGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLCBidXQgaXQgZG9lcyBub3QgdHJhY2sgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgKGJvdGggdG8gdXNlciBzcGFjZSBhbmQgdG8gaGFyZHdhcmUgZGV2aWNlcykuIFNpbmNlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQgdG8gdmVyaWZ5IHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZXhpc3QgaW4gdGhpcyBjb2RlIHBhdGguXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[1] Phase: Succeeded StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2] Phase: Succeeded StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:05:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 10:05:43 +0000 UTC FinishedAt: 2026-08-13 10:05:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow7d7dw/series-workflow7d7dw-convert-artifact-992138167/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 10:05:53 +0000 UTC FinishedAt: 2026-08-13 10:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 10:05:53 +0000 UTC FinishedAt: 2026-08-13 10:22:38 +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:*20337c49-06dd-4b7c-a4cb-b33f1d00bca0,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-workflow7d7dw/series-workflow7d7dw-convert-artifact-992138167/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": "2c11103f-e5cd-4fbc-8d6d-63e286c22b14", "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-workflow7d7dw/series-workflow7d7dw-build-action-1682453261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 10:05:53 +0000 UTC FinishedAt: 2026-08-13 10:22:28 +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:*20337c49-06dd-4b7c-a4cb-b33f1d00bca0,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-workflow7d7dw/series-workflow7d7dw-convert-artifact-992138167/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": "2c11103f-e5cd-4fbc-8d6d-63e286c22b14", "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-workflow7d7dw/series-workflow7d7dw-build-action-1682453261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 10:22:38 +0000 UTC FinishedAt: 2026-08-13 10:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 10:22:38 +0000 UTC FinishedAt: 2026-08-13 10:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 10:22:38 +0000 UTC FinishedAt: 2026-08-13 10:22:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 10:22:38 +0000 UTC FinishedAt: 2026-08-13 10:22:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-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-workflow7d7dw/series-workflow7d7dw-convert-artifact-4216081638/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 10:22:49 +0000 UTC FinishedAt: 2026-08-13 10:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 10:22:49 +0000 UTC FinishedAt: 2026-08-13 10:24:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c11103f-e5cd-4fbc-8d6d-63e286c22b14,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-workflow7d7dw/series-workflow7d7dw-build-action-1682453261/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-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 10:24:58 +0000 UTC FinishedAt: 2026-08-13 10:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 10:24:58 +0000 UTC FinishedAt: 2026-08-13 10:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 10:24:58 +0000 UTC FinishedAt: 2026-08-13 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 10:24:58 +0000 UTC FinishedAt: 2026-08-13 10:41:28 +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:*20337c49-06dd-4b7c-a4cb-b33f1d00bca0,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-workflow7d7dw/series-workflow7d7dw-convert-artifact-4216081638/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": "17083f87-4195-4a1e-9455-181bf5370189", "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-workflow7d7dw/series-workflow7d7dw-build-action-3961848490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 10:24:58 +0000 UTC FinishedAt: 2026-08-13 10:41:18 +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:*20337c49-06dd-4b7c-a4cb-b33f1d00bca0,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-workflow7d7dw/series-workflow7d7dw-convert-artifact-4216081638/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": "17083f87-4195-4a1e-9455-181bf5370189", "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-workflow7d7dw/series-workflow7d7dw-build-action-3961848490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 10:41:28 +0000 UTC FinishedAt: 2026-08-13 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 10:41:28 +0000 UTC FinishedAt: 2026-08-13 10:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 10:41:28 +0000 UTC FinishedAt: 2026-08-13 10:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 10:41:28 +0000 UTC FinishedAt: 2026-08-13 10:43: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:*17083f87-4195-4a1e-9455-181bf5370189,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-workflow7d7dw/series-workflow7d7dw-build-action-3961848490/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-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"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:*2c11103f-e5cd-4fbc-8d6d-63e286c22b14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17083f87-4195-4a1e-9455-181bf5370189,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-workflow7d7dw/series-workflow7d7dw-build-action-1682453261/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-workflow7d7dw/series-workflow7d7dw-build-action-3961848490/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:43: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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"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-workflow7d7dw/series-workflow7d7dw-convert-artifact-3476130859/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 10:43:52 +0000 UTC FinishedAt: 2026-08-13 10:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 10:44:02 +0000 UTC FinishedAt: 2026-08-13 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7d7dw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mt7925_testmode_dump"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MT7925U","NL80211_TESTMODE"],"series_id":"2c92199d-ff67-4a78-983d-776403a57280","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 10:44:02 +0000 UTC FinishedAt: 2026-08-13 10:45:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c11103f-e5cd-4fbc-8d6d-63e286c22b14,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17083f87-4195-4a1e-9455-181bf5370189,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-workflow7d7dw/series-workflow7d7dw-build-action-1682453261/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-workflow7d7dw/series-workflow7d7dw-build-action-3961848490/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-workflow7d7dw/series-workflow7d7dw-convert-artifact-3476130859/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,}