Name: series-workflowwng5g Phase: Succeeded StartedAt: 2026-08-26 16:05:20 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[0] Phase: Succeeded StartedAt: 2026-08-26 16:05:20 +0000 UTC FinishedAt: 2026-08-26 16:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 16:05:20 +0000 UTC FinishedAt: 2026-08-26 16:26:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC" ], "series_id": "b15b057d-c648-4a5c-abcb-6f3620a1476d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCSU5GTVRfTUlTQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgbG9naWMgZm9yIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBvdGhlciB0aGFuIGJhY2tzbGFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB3cml0aW5nIHRvIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RlciBmaWxlLiBGdXp6aW5nIHRoZSByZWdpc3RyYXRpb24gd3JpdGUgaGFuZGxlciBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTksNiAmIzQzOzE5LDkgQEAgVG8gYWN0dWFsbHkgcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IHR5cGUsIHlvdSBoYXZlIHRvIHNldCB1cCBhIHN0cmluZyBsb29raW5nIGxpa2VcbiBgYDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3NgYCAod2hlcmUgeW91IGNhbiBjaG9vc2UgdGhlXG4gYGA6YGAgdXBvbiB5b3VyIG5lZWRzKSBhbmQgZWNobyBpdCB0byBgYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmBgLlxuIFxuJiM0MztUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueVxuJiM0MztBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0aGUgYmFja3NsYXNoIGBgXFxgYC5cbiYjNDM7XG4gSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiBcbiAtIGBgbmFtZWBgXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IGRkZmQzYWE1N2FjODcuLjgwOWM5MWQyMWIzOTggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMTAwLDYgJiM0MzsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiBjICE9ICYjMzk7XFxcXCYjMzk7O1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcdFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXG5AQCAtODcyLDEwICYjNDM7ODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXG4gXHRkZWwgPSAqcCYjNDM7JiM0Mzs7XHQvKiBkZWxpbWl0ZXIgKi9cbiBcbi1cdHByX2RlYnVnKFwmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXG5cJiMzNDssIGRlbCwgZGVsKTtcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeFxcblwmIzM0OywgZGVsKTtcbiBcbi1cdC8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovXG4tXHRpZiAobWlzY19mbGFnX2J5X2NoYXIoZGVsKSlcbiYjNDM7XHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHQvKiBQYWQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWxpbSB0byBzaW1wbGlmeSBwYXJzaW5nIGJlbG93LiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTQ1LDYgJiM0Mzs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X3RyYW5zcGFyZW50X2ludGVycFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19sb2FkZXJcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWNcbiBcbiYjNDM7IyBPbmx5IEFTQ0lJIHB1bmN0dWF0aW9uIGRlbGltaXRzIHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcsIHNvIGEgbmV3XG4mIzQzOyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfZGVsaW1cbiYjNDM7XG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0OiBhIGxpYmJwZiBoYXJuZXNzIHBsdXMgaXRzXG4gIyBzdHJ1Y3Rfb3BzIG9iamVjdHMgYW5kIHRoZSB0ZXN0IGludGVycHJldGVyL2FwcCBpdCByb3V0ZXMgYmV0d2Vlbi4gT25seVxuICMgYnVpbHQgd2hlbiBjbGFuZywgYnBmdG9vbCwgdGhlIHZtbGludXggQlRGIGFuZCBsaWJicGYgYXJlIGFsbCBwcmVzZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZjMTdjYjc4NTQ1MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jXG5AQCAtMCwwICYjNDM7MSwxMjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB3aGljaCBjaGFyYWN0ZXJzIG1heSBkZWxpbWl0IHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JpbmZtdF9taXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU5UUllcdFwmIzM0O2JtZGVsaW1cJiMzNDtcbiYjNDM7LyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovXG4mIzQzOyNkZWZpbmUgTUFHSUNcdFwmIzM0O2JtbWFnaWNcJiMzNDtcbiYjNDM7I2RlZmluZSBJTlRFUlBcdFwmIzM0Oy9iaW4vdHJ1ZVwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQVNDSUkgcHVuY3R1YXRpb24gd2l0aG91dCAmIzM5O1xcJiMzOTsgYW5kICYjMzk7LyYjMzk7LiBUaGUgYmFja3NsYXNoIGlzIHJlZnVzZWQgYmVjYXVzZVxuJiM0MzsgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXFx4IHRvIGVzY2FwZSBzaG9ydC4gJiMzOTsvJiMzOTsgaXMgYWNjZXB0ZWRcbiYjNDM7ICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQVU5DVFVBVElPTlx0XCYjMzQ7IVxcXCYjMzQ7IyQlXHUwMDI2JiMzOTsoKSomIzQzOywtLjo7XHUwMDNjPVx1MDAzZT9AW11eX2B7fH1+XCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAmIzM5O00mIzM5OywgJiMzOTtFJiMzOTsgYW5kICYjMzk7QiYjMzk7IG5hbWUgdHlwZXMsICYjMzk7UCYjMzk7IHRocm91Z2ggJiMzOTtEJiMzOTsgYXJlIHRoZSBmbGFncy4gKi9cbiYjNDM7I2RlZmluZSBMRVRURVJTXHRcdFwmIzM0O01FQlBPQ0ZUTERxelwmIzM0O1xuJiM0MzsjZGVmaW5lIERJR0lUU1x0XHRcJiMzNDswMTU3XCYjMzQ7XG4mIzQzOyNkZWZpbmUgV0hJVEVTUEFDRVx0XCYjMzQ7IFxcdFxcblwmIzM0O1xuJiM0MzsjZGVmaW5lIENPTlRST0xcdFx0XCYjMzQ7XFwwMDFcXDAzM1xcMTc3XCYjMzQ7XG4mIzQzOyNkZWZpbmUgTk9OX0FTQ0lJXHRcJiMzNDtcXDIwMFxcMjQ0XFwzNzdcJiMzNDtcbiYjNDM7XG4mIzQzOy8qICYjMzk7OmJtZGVsaW06RTo6Ym1tYWdpYzo6L2Jpbi90cnVlOiYjMzk7IHdpdGggQGRlbCBpbiBwbGFjZSBvZiBldmVyeSAmIzM5OzomIzM5Oy4gKi9cbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl93aXRoKGNoYXIgZGVsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBydWxlWzEyOF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7JWMlcyVjRSVjJWMlcyVjJWMlcyVjXCYjMzQ7LCBkZWwsIEVOVFJZLCBkZWwsXG4mIzQzO1x0XHQgZGVsLCBkZWwsIE1BR0lDLCBkZWwsIGRlbCwgSU5URVJQLCBkZWwpO1xuJiM0MztcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBleHBlY3RfcmVmdXNlZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnNldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKmQ7XG4mIzQzO1xuJiM0MztcdGZvciAoZCA9IHNldDsgKmQ7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmMgPSByZWdpc3Rlcl93aXRoKCpkKTtcbiYjNDM7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmMsIC0xKVxuJiM0MztcdFx0XHRUSF9MT0coXCYjMzQ7JSN4IGRlbGltaXRlZCBhIHJlZ2lzdGVyIHN0cmluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcbiYjNDM7XHRcdGlmIChyYyA9PSAwKSB7XG4mIzQzO1x0XHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkUoZGVsaW0pIHtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoZGVsaW0pXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0dWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcJiMzNDspO1xuJiM0MztcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gYmluZm10X21pc2NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBIGtlcm5lbCB3aXRob3V0IHRoZSBhbGxvdy1saXN0IHRha2VzIGFueSBjaGFyYWN0ZXIgYnV0IGEgZmxhZy4gKi9cbiYjNDM7XHRpZiAocmVnaXN0ZXJfd2l0aCgmIzM5O3EmIzM5OykgPT0gMCkge1xuJiM0MztcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlIGRlbGltaXRlciBhbGxvdy1saXN0XCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXG4mIzQzO3tcbiYjNDM7XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHVuY3R1YXRpb24gZGVsaW1pdHMsIHdoaWNoIGlzIGFsbCBhbnl0aGluZyBkZXBsb3llZCBldmVyIHVzZXMuICovXG4mIzQzO1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApXG4mIzQzO1x0XHRcdFRIX0xPRyhcJiMzNDsmIzM5OyVjJiMzOTsgcmVmdXNlZCB3aXRoIGVycm5vICVkXCYjMzQ7LCAqZCwgZXJybm8pO1xuJiM0MztcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cbiYjNDM7VEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqL1xuJiM0MztURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZClcbiYjNDM7e1xuJiM0MztcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZClcbiYjNDM7e1xuJiM0MztcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovXG4mIzQzO1RFU1RfRihkZWxpbSwgYmFja3NsYXNoX3JlZnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFwmIzM0O1xcXFxcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE4bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2ZhMjIzNDM3MGFmYTk2YWE0ZjhkODAzNTEzOTQ1MmEzMzYzNTY0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjA3OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTksNiAmIzQzOzE5LDkgQEAgVG8gYWN0dWFsbHkgcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IHR5cGUsIHlvdSBoYXZlIHRvIHNldCB1cCBhIHN0cmluZyBsb29raW5nIGxpa2UKIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGUKIGBgOmBgIHVwb24geW91ciBuZWVkcykgYW5kIGVjaG8gaXQgdG8gYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgYC4KIAomIzQzO1RoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyBpcyBpdHMgZmllbGQgZGVsaW1pdGVyIGFuZCBjYW4gYmUgYW55CiYjNDM7QVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVyIG90aGVyIHRoYW4gdGhlIGJhY2tzbGFzaCBgYFxgYC4KJiM0MzsKIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46CiAKIC0gYGBuYW1lYGAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IGRkZmQzYWE1N2FjODcuLjgwOWM5MWQyMWIzOTggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTAwLDYgJiM0MzsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtaXNjX3ZhbGlkX2RlbGltKGNvbnN0IGNoYXIgYykKJiM0Mzt7CiYjNDM7CWlmICghaXNhc2NpaShjKSB8fCAhaXNwdW5jdChjKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIGMgIT0gJiMzOTtcXCYjMzk7OwomIzQzO30KJiM0MzsKIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogdHlwZSwgc3RhdHVzLCBldGMuICovCkBAIC04NzIsMTAgJiM0Mzs4NzksOSBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAogCWRlbCA9ICpwJiM0MzsmIzQzOzsJLyogZGVsaW1pdGVyICovCiAKLQlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cbiYjMzQ7LCBkZWwsIGRlbCk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGRlbGltOiAlI3hcbiYjMzQ7LCBkZWwpOwogCi0JLyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi8KLQlpZiAobWlzY19mbGFnX2J5X2NoYXIoZGVsKSkKJiM0MzsJaWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJLyogUGFkIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsaW0gdG8gc2ltcGxpZnkgcGFyc2luZyBiZWxvdy4gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCmluZGV4IGI2NDBhZjhmMDJiNTEuLjIyMjBlZDM0NWU5MjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQpAQCAtNDUsNiAmIzQzOzQ1LDEwIEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfbG9hZGVyCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWMKIAomIzQzOyMgT25seSBBU0NJSSBwdW5jdHVhdGlvbiBkZWxpbWl0cyB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLCBzbyBhIG5ldwomIzQzOyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLgomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kZWxpbQomIzQzOwogIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0OiBhIGxpYmJwZiBoYXJuZXNzIHBsdXMgaXRzCiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5CiAjIGJ1aWx0IHdoZW4gY2xhbmcsIGJwZnRvb2wsIHRoZSB2bWxpbnV4IEJURiBhbmQgbGliYnBmIGFyZSBhbGwgcHJlc2VudApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmYzE3Y2I3ODU0NTAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmMKQEAgLTAsMCAmIzQzOzEsMTI3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFRlc3Qgd2hpY2ggY2hhcmFjdGVycyBtYXkgZGVsaW1pdCB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiaW5mbXRfbWlzY19jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOVFJZCSYjMzQ7Ym1kZWxpbSYjMzQ7CiYjNDM7LyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovCiYjNDM7I2RlZmluZSBNQUdJQwkmIzM0O2JtbWFnaWMmIzM0OwomIzQzOyNkZWZpbmUgSU5URVJQCSYjMzQ7L2Jpbi90cnVlJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFTQ0lJIHB1bmN0dWF0aW9uIHdpdGhvdXQgJiMzOTtcJiMzOTsgYW5kICYjMzk7LyYjMzk7LiBUaGUgYmFja3NsYXNoIGlzIHJlZnVzZWQgYmVjYXVzZQomIzQzOyAqIGl0IHdvdWxkIGN1dCBhIG1hZ2ljIHRoYXQgdXNlcyBceCB0byBlc2NhcGUgc2hvcnQuICYjMzk7LyYjMzk7IGlzIGFjY2VwdGVkCiYjNDM7ICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUFVOQ1RVQVRJT04JJiMzNDshXCYjMzQ7IyQlJmFtcDsmIzM5OygpKiYjNDM7LC0uOjsmbHQ7PSZndDs/QFtdXl9ge3x9fiYjMzQ7CiYjNDM7CiYjNDM7LyogJiMzOTtNJiMzOTssICYjMzk7RSYjMzk7IGFuZCAmIzM5O0ImIzM5OyBuYW1lIHR5cGVzLCAmIzM5O1AmIzM5OyB0aHJvdWdoICYjMzk7RCYjMzk7IGFyZSB0aGUgZmxhZ3MuICovCiYjNDM7I2RlZmluZSBMRVRURVJTCQkmIzM0O01FQlBPQ0ZUTERxeiYjMzQ7CiYjNDM7I2RlZmluZSBESUdJVFMJCSYjMzQ7MDE1NyYjMzQ7CiYjNDM7I2RlZmluZSBXSElURVNQQUNFCSYjMzQ7IFx0XG4mIzM0OwomIzQzOyNkZWZpbmUgQ09OVFJPTAkJJiMzNDtcMDAxXDAzM1wxNzcmIzM0OwomIzQzOyNkZWZpbmUgTk9OX0FTQ0lJCSYjMzQ7XDIwMFwyNDRcMzc3JiMzNDsKJiM0MzsKJiM0MzsvKiAmIzM5OzpibWRlbGltOkU6OmJtbWFnaWM6Oi9iaW4vdHJ1ZTomIzM5OyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJiMzOTs6JiMzOTsuICovCiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl93aXRoKGNoYXIgZGVsKQomIzQzO3sKJiM0MzsJY2hhciBydWxlWzEyOF07CiYjNDM7CiYjNDM7CXNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgJiMzNDslYyVzJWNFJWMlYyVzJWMlYyVzJWMmIzM0OywgZGVsLCBFTlRSWSwgZGVsLAomIzQzOwkJIGRlbCwgZGVsLCBNQUdJQywgZGVsLCBkZWwsIElOVEVSUCwgZGVsKTsKJiM0MzsJcmV0dXJuIHdyaXRlX3JlZyhydWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gY2hhcmFjdGVyIG9mIEBzZXQgbWF5IGRlbGltaXQgYSByZWdpc3RlciBzdHJpbmcuICovCiYjNDM7c3RhdGljIHZvaWQgZXhwZWN0X3JlZnVzZWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBjb25zdCBjaGFyICpzZXQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpkOwomIzQzOwomIzQzOwlmb3IgKGQgPSBzZXQ7ICpkOyBkJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJjID0gcmVnaXN0ZXJfd2l0aCgqZCk7CiYjNDM7CiYjNDM7CQlFWFBFQ1RfRVEocmMsIC0xKQomIzQzOwkJCVRIX0xPRygmIzM0OyUjeCBkZWxpbWl0ZWQgYSByZWdpc3RlciBzdHJpbmcmIzM0OywKJiM0MzsJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIpKmQpOwomIzQzOwkJaWYgKHJjID09IDApIHsKJiM0MzsJCQl1bnJlZ2lzdGVyKEVOVFJZKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKGRlbGltKSB7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGRlbGltKQomIzQzO3sKJiM0MzsJaWYgKGdldHVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDt0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3QmIzM0Oyk7CiYjNDM7CWlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBiaW5mbXRfbWlzYyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQSBrZXJuZWwgd2l0aG91dCB0aGUgYWxsb3ctbGlzdCB0YWtlcyBhbnkgY2hhcmFjdGVyIGJ1dCBhIGZsYWcuICovCiYjNDM7CWlmIChyZWdpc3Rlcl93aXRoKCYjMzk7cSYjMzk7KSA9PSAwKSB7CiYjNDM7CQl1bnJlZ2lzdGVyKEVOVFJZKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdCYjMzQ7KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGRlbGltKQomIzQzO3sKJiM0MzsJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqLwomIzQzO1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpkOwomIzQzOwomIzQzOwlmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQmIzQzOyYjNDM7KSB7CiYjNDM7CQlFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApCiYjNDM7CQkJVEhfTE9HKCYjMzQ7JiMzOTslYyYjMzk7IHJlZnVzZWQgd2l0aCBlcnJubyAlZCYjMzQ7LCAqZCwgZXJybm8pOwomIzQzOwkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogTGV0dGVycyBuYW1lIHRoZSB0eXBlcyBhbmQgdGhlIGZsYWdzLCBzbyBub25lIG9mIHRoZW0gY2FuIGRlbGltaXQuICovCiYjNDM7VEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqLwomIzQzO1RFU1RfRihkZWxpbSwgZGlnaXRzX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIERJR0lUUyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihkZWxpbSwgd2hpdGVzcGFjZV9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBXSElURVNQQUNFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGRlbGltLCBjb250cm9sX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIENPTlRST0wpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZGVsaW0sIG5vbl9hc2NpaV9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBOT05fQVNDSUkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZXNjYXBlIGNoYXJhY3RlciB3b3VsZCBjdXQgZXZlcnkgbWFnaWMgdGhhdCB1c2VzIG9uZSBzaG9ydC4gKi8KJiM0MztURVNUX0YoZGVsaW0sIGJhY2tzbGFzaF9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCAmIzM0O1xcJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogYmluZm10X21pc2MgRGVsaW1pdGVyIFJlc3RyaWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCYjMzk7cyB0b3VjaGluZyBgZnMvYmluZm10X21pc2MuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aWdodGVuaW5nIHVwIHRoZSBhbGxvd2VkIGRlbGltaXRlcnMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MuIFByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBpZiBhIGNoYXJhY3RlciB3YXMgYSBmbGFnLCBidXQgbm93IGl0JiMzOTtzIHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQgbWUgZGlnIGludG8gYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hlcmUgYGNyZWF0ZV9lbnRyeWAgaXMgdXNlZC4gQWhhLCBmb3VuZCBpdCEgVGhlIHBhdGNoIHRvdWNoZXMgYGNyZWF0ZV9lbnRyeWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHdyaXRlcyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYC4gU28sIHRoaXMgaXMgYSB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBjaGFuZ2UsIHdoaWNoIG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQgbWlnaHQgZXZlbiBiZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBuYW1lc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIG1vdW50IG9wdGlvbnMsIGFsdGhvdWdoIGluIHRoZSBub3JtYWwgY2FzZSwgaXQgcmVxdWlyZXMgcm9vdC4KCk5vdywgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSBwYXJzaW5nIGxvZ2ljIG9mIGBiaW5mbXRfbWlzY2AsIGFuZCBldmVuIGEgc21hbGwgY2hhbmdlIHRvIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0JiMzOTtzIGFjY2Vzc2libGUsIGV2ZW4gaW4gYSBsaW1pdGVkIHdheSwgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgZXNwZWNpYWxseSBnaXZlbiByb290IGFjY2VzcyBpcyB1c3VhbGx5IHJlcXVpcmVkLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRyaWdnZXJzIGJpbmZtdF9taXNjLCB3aGVyZSYjMzk7cyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgYGJpbmZtdF9taXNjYD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBgQ09ORklHX0JJTkZNVF9NSVNDYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciB0aGF0IGluIGBmcy9LY29uZmlnLmJpbmZtdGAgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtsbCBsZXQgbWUga25vdyBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZC4gVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQklORk1UX01JU0MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNDQtXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1wmIzM0O1xuLS1cbmZzL0tjb25maWcuYmluZm10LTE3MC1cbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXHRib29sIFwmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBCSU5GTVRfTUlTQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBCSU5GTVRfTUlTQ2AgaXMgdGhlIGNvbmZpZyBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZnMvYmluZm10X21pc2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIHdvcmtzIGludGVybmFsbHksIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhlIGNvcmUgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgY3JlYXRlX2VudHJ5YC4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24g4oCTIHRoYXQgd2lsbCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBLbm93aW5nIHdoZXJlIGBjcmVhdGVfZW50cnlgIGlzIGludm9rZWQgZnJvbSB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGEgcHJvcGVyIG1lbnRhbCBtb2RlbCBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBCSU5GTVRfTUlTQyBhcmNoaXRlY3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyZWF0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz04MzM9c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy04NTYtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDc0LVxuZnMvYmluZm10X21pc2MuYzoxNDc1Olx0ZSA9IGNyZWF0ZV9lbnRyeShidWZmZXIsIGNvdW50KTtcbmZzL2JpbmZtdF9taXNjLmMtMTQ3Ni1cdGlmIChJU19FUlIoZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayoqCgpPa2F5LCBzbyBgY3JlYXRlX2VudHJ5YCBpcyBkZWNsYXJlZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXTigJlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQ7IGl0JiMzOTtzIG5vdCB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGlyZWN0bHkuIE5vdywgSSBzZWUgdGhhdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSBjYWxsZXIgb2YgYGNyZWF0ZV9lbnRyeWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBzdWdnZXN0cyBgY3JlYXRlX2VudHJ5YCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB0byByZWdpc3RlciBtYW5pcHVsYXRpb24uIFRoZSBjcml0aWNhbCBwYXRoIGZvciByZWdpc3RlciBvcGVyYXRpb25zIGRlZmluaXRlbHkgcnVucyB0aHJvdWdoIHRoZXNlIHR3by4gTGV0JiMzOTtzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIHVuZGVyc3RhbmQgaG93IGBjcmVhdGVfZW50cnlgIGZpdHMgaW4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTE0Mzc9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2Ny1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2OS1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6XHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUxMS1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQwCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIFBvdGVudGlhbCBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgbm93LCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIGFjdHVhbGx5IHRoZSBgLndyaXRlYCBoYW5kbGVyLCB0aGUgZnVuY3Rpb24gdGhhdCB3cml0ZXMgdG8gdGhlIGRldmljZSwgZm9yIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBnb2luZyBvbi4KCkJ1dCBub3cgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYSBiaXQuIFRoaXMgaGFzIG1lIHRoaW5raW5nLCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGRlZmluZWQgYXMgc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvYmluZm10X21pc2MuY2A/IEl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIGFtIGN1cmlvdXMgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoaXMgZmlsZS4gTGV0IG1lIGRvIGEgcXVpY2sgYXVkaXQgYW5kIHJldmlldyB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzAKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZzL2JpbmZtdF9taXNjLmNgIC0gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGZzL2JpbmZtdF9taXNjLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZW0sIG1lbnRhbGx5IGNhdGFsb2dpbmcgd2hhdCBlYWNoIG9uZSBkb2VzIGFuZCBpdHMgcG90ZW50aWFsIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBrZXJuZWwmIzM5O3MgYmluYXJ5IGZvcm1hdCBoYW5kbGluZy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGEgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIG1vZGlmaWNhdGlvbiwgdnVsbmVyYWJpbGl0eSwgb3Igc2ltcGx5IGFyZWFzIHdoZXJlIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGhlcmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMgb3IgY29kZSBzZWdtZW50cy4gSSYjMzk7bSBnb2luZyB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZpbGUgaW50ZXJmYWNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUXVpY2sgQW5hbHlzaXM6IEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSB0byBzdGFydC4gSW5zdGVhZCBvZiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGFuIGV4aGF1c3RpdmUgY29kZSByZXZpZXcgZnJvbSB0aGUgdG9wIGRvd24sIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRhcmdldGVkIHNlYXJjaCB0ZWNobmlxdWVzLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLCB0aGUgY2xhc3NpYyBzdXNwZWN0cyBqdW1wIG91dDogYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBhbmQgcG90ZW50aWFsbHkgYGluaXRfbWlzY19iaW5mbXRgIGlmIGl0IGlzIGEgYmluYXJ5IGZvcm1hdCBoYW5kbGVyLCBvciBhIHZlcnkgb2xkIGluaXQuIFNvLCBJJiMzOTttIHRoaW5raW5nIGEgcXVpY2sgcmVhZCBvZiB0aGUgZmlsZSwgb3IgYSBxdWljayBncmVwIG9uIHRob3NlLCB3aWxsIGxpa2VseSBnaXZlIG1lIGEgdmVyeSByYXBpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gaG9waW5nIHRvIGdldCBzb21lIGxvdy1oYW5naW5nIGZydWl0LCBhIGRlY2VudCBzaWduYWwgYW5kIHNvbWUgZWFzeSB3aW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgLippbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjEyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3RhdGljIEludGVnZXIgRGVjbGFyYXRpb25zIGluIGBmcy9iaW5mbXRfbWlzYy5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGZzL2JpbmZtdF9taXNjLmNgIGZpbGUuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBzdHVmZiByZWxhdGVkIHRvIGhvdyB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgbXkgZmlyc3QgbW92ZT8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBzb21ldGhpbmcgc3BlY2lmaWM6IEkgd2FudCB0byBzZWUgaG93IGludGVnZXIgdmFyaWFibGVzIGFyZSBkZWNsYXJlZCwgcGFydGljdWxhcmx5IGlmIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCBvciBqdXN0IGBpbnRgLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHNjb3Bpbmcgb3IgaG93IHRoZXkgYXJlIHVzZWQsIHNvIGEgcXVpY2sgYGdyZXBgIHdpbGwgYmUgZmFzdGVyIHRoYW4gYmxpbmRseSBicm93c2luZy4gTGV0JiMzOTtzIHJ1biBgZ3JlcCAmIzM5O15zdGF0aWMgaW50JiMzOTsgZnMvYmluZm10X21pc2MuY2AgYW5kIHRoZW4gYSBzaW1pbGFyIGBncmVwICYjMzk7XmludCYjMzk7IGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hhdCB3ZSBnZXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGhpZ2hsaWdodCB0aGUgaW1wb3J0YW50IHNlY3Rpb25zIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5LiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBiYXNlbGluZSB0aGUgaW50ZWdlciB1c2FnZSBpbiB0aGUgZmlsZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBuZXh0IGFwcHJvcHJpYXRlIHN0ZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGJpbmZtdF9taXNjLmNgIOKAkyBUaW1lIHRvIFRyYWNlIFN0YXRpYyBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgYGZzL2JpbmZtdF9taXNjLmNgIGZpbGUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGJpbmFyeSBmb3JtYXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGRpZmZlcmVudCBleGVjdXRhYmxlIHR5cGVzIGFyZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBkaXNwYXRjaGVzIGV4ZWN1dGlvbiBvZiB0aG9zZSBmb3JtYXRzLiBXaGF0IEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYXJlIHRoZSBzdGF0aWMgZGVjbGFyYXRpb25zLiBUaGUgc3RhdGljIGRlZmluaXRpb25zIHByb3ZpZGUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB0aGUgT1MgdXNlcyB0byByZWNvZ25pemUgdGhlIGJpbmFyeSBmb3JtYXRzLiBTbywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlZmluaXRpb25zIHdvcmsgYW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQuIFRoZXJlZm9yZSwgSSB3YW50IHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBgc3RhdGljYCBrZXl3b3JkcyBpbiB0aGlzIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZvY3VzZWQgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRoaXMgbW9kdWxlLCBoZWxwaW5nIG1lIGdyYXNwIGl0cyBpbnRlcm5hbCB3b3JraW5ncyB3aXRob3V0IHVubmVjZXNzYXJ5IG5vaXNlLiBJIHdpbGwgdGhlbiBleGFtaW5lIHRoZXNlIHN0YXRpYyBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYGJpbmZtdF9taXNjLmNgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTc3PXN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTgzLVxuZnMvYmluZm10X21pc2MuYzo4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgbWlzY19mbGFnc1tdID0ge1xuZnMvYmluZm10X21pc2MuYy04NS1cdHsgJiMzOTtQJiMzOTssIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFx0MCxcdFx0XHRcJiMzNDtwcmVzZXJ2ZSBhcmd2MFwmIzM0O1x0XHR9LFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtOTQtLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXG5mcy9iaW5mbXRfbWlzYy5jOjk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxuZnMvYmluZm10X21pc2MuYy05Ni17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDItXG5mcy9iaW5mbXRfbWlzYy5jOjEwMzpzdGF0aWMgYm9vbCBtaXNjX3ZhbGlkX2RlbGltKGNvbnN0IGNoYXIgYylcbmZzL2JpbmZtdF9taXNjLmMtMTA0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0Nz1ERUZJTkVfU1RBVElDX1NSQ1VfRkFTVChibV9lbnRyaWVzX3NyY3UpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ5LS8qIENoZWNrIGlmIEBlJiMzOTtzIG1hZ2ljIG1hdGNoZXMgQGJwcm0mIzM5O3MgYnVmZmVyLCBhcHBseWluZyB0aGUgbWFzayBpZiBzZXQuICovXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX21hZ2ljKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUxLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NS0vKiBDaGVjayBpZiBAZSYjMzk7cyByZWdpc3RlcmVkIGV4dGVuc2lvbiBtYXRjaGVzIEBleHQsIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTY2OnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfZXh0ZW5zaW9uKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTY3LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmV4dClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE4OC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTg5OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKlxuZnMvYmluZm10X21pc2MuYy0xOTAtc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTIzNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjM4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTIzOS1cdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTI1Mz1iaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjYzLS8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjY0OnN0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKVxuZnMvYmluZm10X21pc2MuYy0yNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MjcyPURFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yNzktICovXG5mcy9iaW5mbXRfbWlzYy5jOjI4MDpzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXG5mcy9iaW5mbXRfbWlzYy5jLTI4MS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0yOTEtLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXG5mcy9iaW5mbXRfbWlzYy5jOjI5MjpzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMjkzLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTMyMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MzIxOnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMzIyLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXG4tLVxuZnMvYmluZm10X21pc2MuYy0zNTgtXG5mcy9iaW5mbXRfbWlzYy5jOjM1OTpzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbmZzL2JpbmZtdF9taXNjLmMtMzYwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ny0gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mzc4OnN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG5mcy9iaW5mbXRfbWlzYy5jLTM3OS17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zOTA9REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM5Mi0vKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG5mcy9iaW5mbXRfbWlzYy5jOjM5MzpzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtMzk0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQxNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NDE4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbmZzL2JpbmZtdF9taXNjLmMtNDE5LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQ0NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NDQ1OnN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy00NDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDk1LSAqL1xuZnMvYmluZm10X21pc2MuYzo0OTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZW50cnlfaW52b2NhdGlvbl9mbGFncyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTQ5Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X21pc2MuYy01MzQtICovXG5mcy9iaW5mbXRfbWlzYy5jOjUzNTpzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy01MzYtXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X21pc2MuYy01NzctICovXG5mcy9iaW5mbXRfbWlzYy5jOjU3ODpzdGF0aWMgaW50IGJ1aWxkX2ludGVycF9hcmd2KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKmludGVycHJldGVyLFxuZnMvYmluZm10X21pc2MuYy01NzktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtNjI3LSAqL1xuZnMvYmluZm10X21pc2MuYzo2Mjg6c3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG5mcy9iaW5mbXRfbWlzYy5jLTYyOS17XG4tLVxuZnMvYmluZm10X21pc2MuYy03MDktICovXG5mcy9iaW5mbXRfbWlzYy5jOjcxMDpzdGF0aWMgY2hhciAqc2NhbmFyZyhjaGFyICpzLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtNzExLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTcyNy0vKiBQYXJzZSB0aGUgJiMzOTtmbGFncyYjMzk7IGZpZWxkLCBzdG9wcGluZyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90IG9uZS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzI4OnN0YXRpYyBjaGFyICpjaGVja19zcGVjaWFsX2ZsYWdzKGNoYXIgKnAsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtNzI5LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTc0MC0vKiBQYXJzZSB0aGUgJiMzOTtvZmZzZXQmIzM5OywgJiMzOTttYWdpYyYjMzk7IGFuZCAmIzM5O21hc2smIzM5OyBmaWVsZHMgb2YgYW4gJiMzOTtNJiMzOTsgZW50cnkuICovXG5mcy9iaW5mbXRfbWlzYy5jOjc0MTpzdGF0aWMgY2hhciAqcGFyc2VfbWFnaWNfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXG5mcy9iaW5mbXRfbWlzYy5jLTc0Mi17XG4tLVxuZnMvYmluZm10X21pc2MuYy04MDEtLyogUGFyc2UgdGhlICYjMzk7bWFnaWMmIzM5OyBmaWVsZCBvZiBhbiAmIzM5O0UmIzM5OyBlbnRyeTogdGhlIGZpbGVuYW1lIGV4dGVuc2lvbi4gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODAyOnN0YXRpYyBjaGFyICpwYXJzZV9leHRlbnNpb25fZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCxcbmZzL2JpbmZtdF9taXNjLmMtODAzLVx0XHRcdFx0ICAgIGNoYXIgZGVsKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtODMyLSAqL1xuZnMvYmluZm10X21pc2MuYzo4MzM6c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtODM0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy04NTYtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTEwMDc9ZW51bSBibV9jb21tYW5kIHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwMjAtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwMjE6c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcbmZzL2JpbmZtdF9taXNjLmMtMTAyMi17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDM4LS8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwMzk6c3RhdGljIGludCByZWFkX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuZnMvYmluZm10X21pc2MuYy0xMDQwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTItLyogVGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMDUzOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JpbmZtdF9taXNjLmMtMTA1NC17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDU3LVxuZnMvYmluZm10X21pc2MuYzoxMDU4OnN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTkte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTA2My1cbmZzL2JpbmZtdF9taXNjLmM6MTA2NDpzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXG5mcy9iaW5mbXRfbWlzYy5jLTEwNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTExMy1cbmZzL2JpbmZtdF9taXNjLmM6MTExNDpzdGF0aWMgc3RydWN0IGlub2RlICpibV9nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW1vZGVfdCBtb2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTE1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExMzYtICovXG5mcy9iaW5mbXRfbWlzYy5jOjExMzc6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqaV9iaW5mbXRfbWlzYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTM4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExNTQtKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE1NTpzdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTU2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExODQtICovXG5mcy9iaW5mbXRfbWlzYy5jOjExODU6c3RhdGljIHZvaWQgdW5saW5rX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMTE4Ni1cdFx0XHRcdCAgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTIwMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTIwMTpzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuZnMvYmluZm10X21pc2MuYy0xMjAyLVx0XHRcdFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjA4LS8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTIwOTpzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xMjEwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyMjAtLyogUmVtb3ZlIGFsbCBlbnRyaWVzIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZSBAbWlzYyBiZWxvbmdpbmcgdG8gQHNiLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMjIxOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTEyMjItXHRcdFx0XHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjUxLSAqL1xuZnMvYmluZm10X21pc2MuYzoxMjUyOnN0YXRpYyBpbnQgYm1fdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9iaW5mbXRfbWlzYy5jLTEyNTMte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTI2Mi1cbmZzL2JpbmZtdF9taXNjLmM6MTI2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYm1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTEyNjQtXHQubG9va3VwXHRcdD0gc2ltcGxlX2xvb2t1cCxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjktXG5mcy9iaW5mbXRfbWlzYy5jOjEyNzA6c3RhdGljIGludCBibV9lbnRyeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvYmluZm10X21pc2MuYy0xMjcxLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDYtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEzMDc6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDgtXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzY3LVxuZnMvYmluZm10X21pc2MuYzoxMzY4OnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xMzY5LVx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDI1LVxuZnMvYmluZm10X21pc2MuYzoxNDI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX2VudHJ5X29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE0MjctXHQub3Blblx0XHQ9IGJtX2VudHJ5X29wZW4sXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDM2LS8qIGFkZCB0byBmaWxlc3lzdGVtICovXG5mcy9iaW5mbXRfbWlzYy5jOjE0Mzc6c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xNDM4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjctXG5mcy9iaW5mbXRfbWlzYy5jOjE0Njg6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTUwOC1cbmZzL2JpbmZtdF9taXNjLmM6MTUwOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xuZnMvYmluZm10X21pc2MuYy0xNTEwLVx0LndyaXRlXHRcdD0gYm1fcmVnaXN0ZXJfd3JpdGUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTE1LVxuZnMvYmluZm10X21pc2MuYzoxNTE2OnN0YXRpYyBzc2l6ZV90XG5mcy9iaW5mbXRfbWlzYy5jLTE1MTctYm1fc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1MjYtXG5mcy9iaW5mbXRfbWlzYy5jOjE1Mjc6c3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xNTI4LVx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTAtXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fc3RhdHVzX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1NTItXHQucmVhZFx0XHQ9IGJtX3N0YXR1c19yZWFkLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU1OC1cbmZzL2JpbmZtdF9taXNjLmM6MTU1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYm1fc3VwZXJfb3BzID0ge1xuZnMvYmluZm10X21pc2MuYy0xNTYwLVx0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTYzLVxuZnMvYmluZm10X21pc2MuYzoxNTY0OnN0YXRpYyBpbnQgYm1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9iaW5mbXRfbWlzYy5jLTE1NjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTYzNy1cbmZzL2JpbmZtdF9taXNjLmM6MTYzODpzdGF0aWMgdm9pZCBibV9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTYzOS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjQzLVxuZnMvYmluZm10X21pc2MuYzoxNjQ0OnN0YXRpYyBpbnQgYm1fZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjQ1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NDk6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgYm1fY29udGV4dF9vcHMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NTAtXHQuZnJlZVx0XHQ9IGJtX2ZyZWUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjUzLVxuZnMvYmluZm10X21pc2MuYzoxNjU0OnN0YXRpYyB2b2lkIGJtX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JpbmZtdF9taXNjLmMtMTY1NS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjYxLVxuZnMvYmluZm10X21pc2MuYzoxNjYyOnN0YXRpYyBpbnQgYm1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTY2My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxuZnMvYmluZm10X21pc2MuYzoxNjY4OnN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IG1pc2NfZm9ybWF0ID0ge1xuZnMvYmluZm10X21pc2MuYy0xNjY5LVx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTY3Mi1cbmZzL2JpbmZtdF9taXNjLmM6MTY3MzpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZSA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY3NC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTY4MD1NT0RVTEVfQUxJQVNfRlMoXCYjMzQ7YmluZm10X21pc2NcJiMzNDspO1xuZnMvYmluZm10X21pc2MuYy0xNjgxLVxuZnMvYmluZm10X21pc2MuYzoxNjgyOnN0YXRpYyBpbnQgX19pbml0IGluaXRfbWlzY19iaW5mbXQodm9pZClcbmZzL2JpbmZtdF9taXNjLmMtMTY4My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjg5LVxuZnMvYmluZm10X21pc2MuYzoxNjkwOnN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21pc2NfYmluZm10KHZvaWQpXG5mcy9iaW5mbXRfbWlzYy5jLTE2OTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MAoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDU0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgYmluZm10X21pc2MgRGVsaW1pdGVyIFJlc3RyaWN0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRlbGltaXRlcnMgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0IHRocm91Z2ggYGJpbmZtdF9taXNjYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY3JlYXRlX2VudHJ5YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBibV9yZWdpc3Rlcl93cml0ZWAuIE5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgYC53cml0ZWAgaGFuZGxlciBmb3IgYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnNgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlIChvciB3aGVyZXZlciBgYmluZm10X21pc2NgIGlzIG1vdW50ZWQpLiBTaW5jZSBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB0aGlzIGNoYW5nZSB0b3VjaGVzIGNvcmUgaW5wdXQgdmFsaWRhdGlvbiBmb3IgYSBrZXJuZWwgZmVhdHVyZS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYGNyZWF0ZV9lbnRyeWAgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVsaW1pdGVyIHBhcnNpbmcgaGFwcGVucywgYnV0IGl04oCZcyBzdGF0aWMuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYyB0b28uIFdhaXQsIGJ1dCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIGFzc2lnbmVkIHRvIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zLndyaXRlYC4gSXQgY2FuJiMzOTt0IGJlIGlubGluZWQgYXMgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUhIFRoZSBwcm9tcHQgc2F5cyAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LgoKTGV0IG1lIGdvIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBpbiBgZnMvYmluZm10X21pc2MuY2AuIGBpbml0X21pc2NfYmluZm10YCBpcyBgX19pbml0YCwgc28gbm90IGlkZWFsLiBgbWlzY19mb3JtYXRgIGhhcyBgLmxvYWRfYmluYXJ5ID0gbG9hZF9taXNjX2JpbmFyeWAuIGBibV9mc190eXBlYCBoYXMgYC5pbml0X2ZzX2NvbnRleHQgPSBibV9pbml0X2ZzX2NvbnRleHRgLgoKT2theSwgc28gYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBzdGF0aWMsIHllcywgYnV0IGl04oCZcyBhIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIgc28gaXQmIzM5O3MgYSBjYWxsYmFjayBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLiBJbiBmYWN0LCBpZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQgY2Fubm90IGJlIGZ1bGx5IGlubGluZWQuIFRodXMsIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgYSBnb29kIGNhbmRpZGF0ZS4gQWxzbywgYGxvYWRfbWlzY19iaW5hcnlgIGlzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgLSBZZXAsIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgc3RhdGljLiBXYWl0LCBjaGVja2luZyBgZnMvYmluZm10X21pc2MuY2AgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uc+KApiBOb3BlLCBsb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgc3RhdGljIGV4Y2VwdCBmb3IgYGluaXRfbWlzY19iaW5mbXRgIGFuZCBgZXhpdF9taXNjX2JpbmZtdGAuIFNvIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgdGhlIHRvcCBjaG9pY2UgYmVjYXVzZSBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIG5vdCBiZSBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGlzIGBibV9yZWdpc3Rlcl93cml0ZWAgcmVhbGx5IHRoZSBiZXN0IHN5bWJvbCB0byBzdGFydCB3aXRoPyBSaWdodCwgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbW9kaWZpZWQgY29kZSwgc28gaXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UuIENvbmZpcm1lZC4KCk5leHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGNvbmZpZyBpcyB0aGF0IHRpZXMgaW50byB0aGlzOiBgQklORk1UX01JU0NgLiBBbHJpZ2h0LCBnb3QgaXQuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJJTkZNVF9NSVNDYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIG1vZGlmaWVkIGNvZGUuIExldCBtZSBkZWx2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCSU5GTVRfTUlTQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTEzOD1jb25maWcgQklORk1UX1pGTEFUXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQ1OmNvbmZpZyBCSU5GTVRfTUlTQ1xuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIE1JU0MgYmluYXJpZXNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBCSU5GTVRfTUlTQ2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBCSU5GTVRfTUlTQ2Agc2l0dWF0aW9uIGFnYWluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24gYW5kLCBjb252ZXJzZWx5LCB3aGF0IHJlbGllcyBvbiBpdC4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgSSB3ZXJlIHRvIG1ha2UgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdCwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIHRoaXMgc3BlY2lmaWMgZmlsZSBmb3JtYXQgc3VwcG9ydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBiaW5hcnkgZm9ybWF0IGhhbmRsZXJzLiBUaGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnByZXRlci1iYXNlZCBmb3JtYXRzLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25jZXJucy4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBtb2R1bGUmIzM5O3MgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYmluYXJ5IGV4ZWN1dGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD01PWNvbmZpZyBCSU5GTVRfRUxGXG5mcy9LY29uZmlnLmJpbmZtdC02LVx0Ym9vbCBcJiMzNDtLZXJuZWwgc3VwcG9ydCBmb3IgRUxGIGJpbmFyaWVzXCYjMzQ7XG5mcy9LY29uZmlnLmJpbmZtdDo3Olx0ZGVwZW5kcyBvbiBNTVVcbmZzL0tjb25maWcuYmluZm10LTgtXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcbmZzL0tjb25maWcuYmluZm10LTMyLVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgRUxGIGJpbmFyeSBzdXBwb3J0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL0tjb25maWcuYmluZm10OjMzOlx0ZGVwZW5kcyBvbiBLVU5JVD15IFx1MDAyNlx1MDAyNiBCSU5GTVRfRUxGPXlcbmZzL0tjb25maWcuYmluZm10LTM0LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD00MT1jb25maWcgQ09NUEFUX0JJTkZNVF9FTEZcbmZzL0tjb25maWcuYmluZm10LTQyLVx0ZGVmX2Jvb2wgeVxuZnMvS2NvbmZpZy5iaW5mbXQ6NDM6XHRkZXBlbmRzIG9uIENPTVBBVCBcdTAwMjZcdTAwMjYgQklORk1UX0VMRlxuZnMvS2NvbmZpZy5iaW5mbXQtNDQtXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTU4PWNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtNjAtXHRkZWZhdWx0IHkgaWYgIUJJTkZNVF9FTEZcbmZzL0tjb25maWcuYmluZm10OjYxOlx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFx1MDAyNlx1MDAyNiAhTU1VKVxuZnMvS2NvbmZpZy5iaW5mbXQtNjItXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTc3PWNvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xuLS1cbmZzL0tjb25maWcuYmluZm10LTc5LVx0ZGVmYXVsdCB5XG5mcy9LY29uZmlnLmJpbmZtdDo4MDpcdGRlcGVuZHMgb24gQklORk1UX0VMRiBcdTAwMjZcdTAwMjYgRUxGX0NPUkVcbmZzL0tjb25maWcuYmluZm10LTgxLVx0aGVscFxuLS1cbmZzL0tjb25maWcuYmluZm10PTExNj1jb25maWcgQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTExNy1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIGZsYXQgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjExODpcdGRlcGVuZHMgb24gQVJDSF9IQVNfQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTExOS1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xMzE9Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxuZnMvS2NvbmZpZy5iaW5mbXQtMTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjEzMzpcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTEzNC1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgWkZMQVQgc3VwcG9ydFwmIzM0O1xuZnMvS2NvbmZpZy5iaW5mbXQ6MTQwOlx0ZGVwZW5kcyBvbiBCSU5GTVRfRkxBVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQxLVx0c2VsZWN0IFpMSUJfSU5GTEFURVxuLS1cbmZzL0tjb25maWcuYmluZm10PTE3MT1jb25maWcgQklORk1UX01JU0NfQlBGXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXHRib29sIFwmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjE3MzpcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTc0Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbmZzL0tjb25maWcuYmluZm10LTE3NS1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xOTM9Y29uZmlnIEVYRUNfS1VOSVRfVEVTVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTk0LVx0Ym9vbCBcJiMzNDtCdWlsZCBleGVjdmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuZnMvS2NvbmZpZy5iaW5mbXQ6MTk1Olx0ZGVwZW5kcyBvbiBLVU5JVD15XG5mcy9LY29uZmlnLmJpbmZtdC0xOTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmZzL0tjb25maWcuYmluZm10PTIwMT1jb25maWcgQVJDSF9IQVNfRUxGX0NPUkVfRUZMQUdTXG5mcy9LY29uZmlnLmJpbmZtdC0yMDItXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdDoyMDM6XHRkZXBlbmRzIG9uIEJJTkZNVF9FTEYgXHUwMDI2XHUwMDI2IEVMRl9DT1JFXG5mcy9LY29uZmlnLmJpbmZtdC0yMDQtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzgKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJJTkZNVF9NSVNDIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlIHJldm9sdmVzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgYGZzL0tjb25maWcuYmluZm10YCBmaWxlIHRoYXQgdGhpcyBpcyB0aGUgb25seSBzeW1ib2wgZGVmaW5lZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGUgcmVsZXZhbnQgc3ltYm9sIGhlcmUgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgKm9ubHkqIGVudHJ5IHBvaW50LiBJdCBhcHBlYXJzIHRoYXQgaXQgaXM7IGl0JiMzOTtzIHRoZSBgLndyaXRlYCBoYW5kbGVyIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgIGZpbGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIHRoZSBgY3JlYXRlX2VudHJ5YCBmdW5jdGlvbiwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgYm1fcmVnaXN0ZXJfd3JpdGVgLiBBaCwgcmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gKmV4Y2VwdCogYFxgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsdGVyaW5nIGhvdyBgYmluZm10X21pc2NgIGhhbmRsZXMgcmVnaXN0cmF0aW9uIHN0cmluZ3MuIEl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgc29tZSBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBpcyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGEgc3RhdGljIGZ1bmN0aW9uPyBZdXAsIGl0IGlzLiBCdXQgd2FpdCwgSSYjMzk7bSBqdXN0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQ/IExldCYjMzk7cyBzZWUuLi4gYGxvYWRfbWlzY19iaW5hcnlgIGlzIHRoZSBgLmxvYWRfYmluYXJ5YCBoYW5kbGVyLiBPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGBibV9yZWdpc3Rlcl93cml0ZWAgZm9yIHdyaXRpbmcsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAgZm9yIGxvYWRpbmcuIFNpbmNlIHRoZXNlIGFyZSBmdW5jdGlvbiBwb2ludGVycywgSSBrbm93IHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBzbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIHNlZW1zIGxpa2UgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIGlzIHNvbGlkLiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgbG9naWMgZm9yIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBvdGhlciB0aGFuIGJhY2tzbGFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB3cml0aW5nIHRvIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RlciBmaWxlLiBGdXp6aW5nIHRoZSByZWdpc3RyYXRpb24gd3JpdGUgaGFuZGxlciBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKaW5kZXggZDI2YjYzYTI3YzI1OS4uOWU4NGI4NzdkMDZkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKQEAgLTE5LDYgJiM0MzsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlCiBgYDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3NgYCAod2hlcmUgeW91IGNhbiBjaG9vc2UgdGhlCiBgYDpgYCB1cG9uIHlvdXIgbmVlZHMpIGFuZCBlY2hvIGl0IHRvIGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYGAuCiAKJiM0MztUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueQomIzQzO0FTQ0lJIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuIHRoZSBiYWNrc2xhc2ggYGBcYGAuCiYjNDM7CiBIZXJlIGlzIHdoYXQgdGhlIGZpZWxkcyBtZWFuOgogCiAtIGBgbmFtZWBgCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCBkZGZkM2FhNTdhYzg3Li44MDljOTFkMjFiMzk4IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTEwMCw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpCiYjNDM7ewomIzQzOwlpZiAoIWlzYXNjaWkoYykgfHwgIWlzcHVuY3QoYykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBjICE9ICYjMzk7XFwmIzM5OzsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgewogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHR5cGUsIHN0YXR1cywgZXRjLiAqLwpAQCAtODcyLDEwICYjNDM7ODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAKIAlkZWwgPSAqcCYjNDM7JiM0Mzs7CS8qIGRlbGltaXRlciAqLwogCi0JcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeCB7JWN9XG4mIzM0OywgZGVsLCBkZWwpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4XG4mIzM0OywgZGVsKTsKIAotCS8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovCi0JaWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpCiYjNDM7CWlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCS8qIFBhZCB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbGltIHRvIHNpbXBsaWZ5IHBhcnNpbmcgYmVsb3cuICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQppbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKQEAgLTQ1LDYgJiM0Mzs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X3RyYW5zcGFyZW50X2ludGVycAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2xvYWRlcgogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9sb2FkZXJfcGF5bG9hZCBiaW5mbXRfbG9hZGVyX3BheWxvYWRfc3RhdGljCiAKJiM0MzsjIE9ubHkgQVNDSUkgcHVuY3R1YXRpb24gZGVsaW1pdHMgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZywgc28gYSBuZXcKJiM0MzsjIGZsYWcgY2hhcmFjdGVyIGNhbm5vdCBjaGFuZ2Ugd2hpY2ggc3RyaW5ncyByZWdpc3Rlci4gTm8gYnBmIHRvb2xjaGFpbi4KJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfZGVsaW0KJiM0MzsKICMgYmluZm10X21pc2MgYnBmLWJhY2tlZCAoJiMzOTtCJiMzOTspIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0cwogIyBzdHJ1Y3Rfb3BzIG9iamVjdHMgYW5kIHRoZSB0ZXN0IGludGVycHJldGVyL2FwcCBpdCByb3V0ZXMgYmV0d2Vlbi4gT25seQogIyBidWlsdCB3aGVuIGNsYW5nLCBicGZ0b29sLCB0aGUgdm1saW51eCBCVEYgYW5kIGxpYmJwZiBhcmUgYWxsIHByZXNlbnQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZmMxN2NiNzg1NDUwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jCkBAIC0wLDAgJiM0MzsxLDEyNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBUZXN0IHdoaWNoIGNoYXJhY3RlcnMgbWF5IGRlbGltaXQgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YmluZm10X21pc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBFTlRSWQkmIzM0O2JtZGVsaW0mIzM0OwomIzQzOy8qIFNoYXJlcyBubyBjaGFyYWN0ZXIgd2l0aCB0aGUgc2V0cyBiZWxvdywgb3IgYSByZWZ1c2FsIHByb3ZlcyBub3RoaW5nLiAqLwomIzQzOyNkZWZpbmUgTUFHSUMJJiMzNDtibW1hZ2ljJiMzNDsKJiM0MzsjZGVmaW5lIElOVEVSUAkmIzM0Oy9iaW4vdHJ1ZSYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBU0NJSSBwdW5jdHVhdGlvbiB3aXRob3V0ICYjMzk7XCYjMzk7IGFuZCAmIzM5Oy8mIzM5Oy4gVGhlIGJhY2tzbGFzaCBpcyByZWZ1c2VkIGJlY2F1c2UKJiM0MzsgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXHggdG8gZXNjYXBlIHNob3J0LiAmIzM5Oy8mIzM5OyBpcyBhY2NlcHRlZAomIzQzOyAqIGJ1dCBjYW5ub3QgZGVsaW1pdCBhIHJ1bGUgdGhhdCBuYW1lcyBhbiBhYnNvbHV0ZSBpbnRlcnByZXRlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBVTkNUVUFUSU9OCSYjMzQ7IVwmIzM0OyMkJSZhbXA7JiMzOTsoKSomIzQzOywtLjo7Jmx0Oz0mZ3Q7P0BbXV5fYHt8fX4mIzM0OwomIzQzOwomIzQzOy8qICYjMzk7TSYjMzk7LCAmIzM5O0UmIzM5OyBhbmQgJiMzOTtCJiMzOTsgbmFtZSB0eXBlcywgJiMzOTtQJiMzOTsgdGhyb3VnaCAmIzM5O0QmIzM5OyBhcmUgdGhlIGZsYWdzLiAqLwomIzQzOyNkZWZpbmUgTEVUVEVSUwkJJiMzNDtNRUJQT0NGVExEcXomIzM0OwomIzQzOyNkZWZpbmUgRElHSVRTCQkmIzM0OzAxNTcmIzM0OwomIzQzOyNkZWZpbmUgV0hJVEVTUEFDRQkmIzM0OyBcdFxuJiMzNDsKJiM0MzsjZGVmaW5lIENPTlRST0wJCSYjMzQ7XDAwMVwwMzNcMTc3JiMzNDsKJiM0MzsjZGVmaW5lIE5PTl9BU0NJSQkmIzM0O1wyMDBcMjQ0XDM3NyYjMzQ7CiYjNDM7CiYjNDM7LyogJiMzOTs6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JiMzOTsgd2l0aCBAZGVsIGluIHBsYWNlIG9mIGV2ZXJ5ICYjMzk7OiYjMzk7LiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfd2l0aChjaGFyIGRlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgcnVsZVsxMjhdOwomIzQzOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7JWMlcyVjRSVjJWMlcyVjJWMlcyVjJiMzNDssIGRlbCwgRU5UUlksIGRlbCwKJiM0MzsJCSBkZWwsIGRlbCwgTUFHSUMsIGRlbCwgZGVsLCBJTlRFUlAsIGRlbCk7CiYjNDM7CXJldHVybiB3cml0ZV9yZWcocnVsZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqLwomIzQzO3N0YXRpYyB2b2lkIGV4cGVjdF9yZWZ1c2VkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqc2V0KQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqZDsKJiM0MzsKJiM0MzsJZm9yIChkID0gc2V0OyAqZDsgZCYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByYyA9IHJlZ2lzdGVyX3dpdGgoKmQpOwomIzQzOwomIzQzOwkJRVhQRUNUX0VRKHJjLCAtMSkKJiM0MzsJCQlUSF9MT0coJiMzNDslI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nJiMzNDssCiYjNDM7CQkJICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTsKJiM0MzsJCWlmIChyYyA9PSAwKSB7CiYjNDM7CQkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShkZWxpbSkgewomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChkZWxpbSkKJiM0Mzt7CiYjNDM7CWlmIChnZXR1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBtdXN0IGJlIHJ1biBhcyByb290JiMzNDspOwomIzQzOwlpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gYmluZm10X21pc2MmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEEga2VybmVsIHdpdGhvdXQgdGhlIGFsbG93LWxpc3QgdGFrZXMgYW55IGNoYXJhY3RlciBidXQgYSBmbGFnLiAqLwomIzQzOwlpZiAocmVnaXN0ZXJfd2l0aCgmIzM5O3EmIzM5OykgPT0gMCkgewomIzQzOwkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgZGVsaW1pdGVyIGFsbG93LWxpc3QmIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihkZWxpbSkKJiM0Mzt7CiYjNDM7CXVucmVnaXN0ZXIoRU5UUlkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQdW5jdHVhdGlvbiBkZWxpbWl0cywgd2hpY2ggaXMgYWxsIGFueXRoaW5nIGRlcGxveWVkIGV2ZXIgdXNlcy4gKi8KJiM0MztURVNUX0YoZGVsaW0sIHB1bmN0dWF0aW9uX2FjY2VwdGVkKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqZDsKJiM0MzsKJiM0MzsJZm9yIChkID0gUFVOQ1RVQVRJT047ICpkOyBkJiM0MzsmIzQzOykgewomIzQzOwkJRVhQRUNUX0VRKHJlZ2lzdGVyX3dpdGgoKmQpLCAwKQomIzQzOwkJCVRIX0xPRygmIzM0OyYjMzk7JWMmIzM5OyByZWZ1c2VkIHdpdGggZXJybm8gJWQmIzM0OywgKmQsIGVycm5vKTsKJiM0MzsJCXVucmVnaXN0ZXIoRU5UUlkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIExldHRlcnMgbmFtZSB0aGUgdHlwZXMgYW5kIHRoZSBmbGFncywgc28gbm9uZSBvZiB0aGVtIGNhbiBkZWxpbWl0LiAqLwomIzQzO1RFU1RfRihkZWxpbSwgbGV0dGVyc19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi8KJiM0MztURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovCiYjNDM7VEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgJiMzNDtcXCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYmluZm10X21pc2NgIERlbGltaXRlciBSZXN0cmljdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgZnMvYmluZm10X21pc2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlLCB0aWdodGVuaW5nIHVwIHRoZSBpbnB1dCB2YWxpZGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIGJyb2FkZXIgdmFsaWRhdGlvbiB1c2luZyBgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpYC4gVGhpcyBuZXcgZnVuY3Rpb24gcmVzdHJpY3RzIGRlbGltaXRlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLiBUaGUgb2xkIGFwcHJvYWNoIHdhcyB0byBjaGVjayBpZiB0aGUgZGVsaW1pdGVyIHdhcyBhICYjMzk7ZmxhZyYjMzk7IGNoYXJhY3Rlci4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IHBhcnQgb2YgYGZzL2JpbmZtdF9taXNjLmNgIGFyb3VuZCBgY3JlYXRlX2VudHJ5YC4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlOgoKYGBgYwotCS8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovCi0JaWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpCiYjNDM7CWlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKYGBgCgpUaGUgb2xkIGNoZWNrIHdhc24mIzM5O3Qgc3VmZmljaWVudDsgaXQgYWxsb3dlZCBmb3IgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGlzIG5ldyBjaGVjayBhcHBlYXJzIHRvIGJlIGEgY2xlYW5lciwgc2FmZXIgYXBwcm9hY2guCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0JiMzOTtzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gTm9wZSwgaXQmIzM5O3MganVzdCBhIGNvbmRpdGlvbiBjaGVjayBvbiBhIHNpbmdsZSBjaGFyYWN0ZXIsIGBkZWxgLiBEb2VzIGl0IGV4cG9zZSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gQWdhaW4sIG5vLiBJdCYjMzk7cyBqdXN0IGlucHV0IHZhbGlkYXRpb24uIEFuZCBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm90IGF0IGFsbC4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvbXBsZXggc3RydWN0dXJlcyBpbnZvbHZlZC4KClRoaXMgYXBwZWFycyB0byBiZSBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSwgYSByZWZpbmVtZW50IG9mIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY2hhcmFjdGVycyBmcm9tIGJlaW5nIHVzZWQgYXMgZGVsaW1pdGVycy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCByZWFsbHkuIEEgcXVpY2sgcmUtY2hlY2sgb2YgYGNyZWF0ZV9lbnRyeWAgaW4gYGZzL2JpbmZtdF9taXNjLmNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLiB5ZXMsIGFsbCBsb29rcyBnb29kLiBJdCYjMzk7cyBhIGNsZWFuLCBzYWZlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTgzMz1zdGF0aWMgY2hhciAqcGFyc2VfYnBmX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtODU0LSAqL1xuZnMvYmluZm10X21pc2MuYzo4NTU6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQ2OD1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXG5mcy9iaW5mbXRfbWlzYy5jOjE0NzU6XHRlID0gY3JlYXRlX2VudHJ5KGJ1ZmZlciwgY291bnQpO1xuZnMvYmluZm10X21pc2MuYy0xNDc2LVx0aWYgKElTX0VSUihlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzOAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWN1cml0eSBJbXBsaWNhdGlvbnMgb2YgVGhpcyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgY3JlYXRlX2VudHJ5YCBmdW5jdGlvbiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgZGVhbHMgd2l0aCBwYXJzaW5nIGEgc3RyaW5nIGlucHV0IGZyb20gdGhlIHVzZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHJpZ2h0IGhlcmUsIHdoZXJlIGl0IGV4dHJhY3RzIGEgZGVsaW1pdGVyIGNoYXJhY3RlcjoKCmBgYGMKCWRlbCA9ICpwJiM0MzsmIzQzOzsJLyogZGVsaW1pdGVyICovCgoJcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeFxuJiMzNDssIGRlbCk7CgoJaWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpCgkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtaW5nICYjMzQ7S01TQU4gcmlzayYjMzQ7IGF0IG1lLiBXZSYjMzk7cmUgcmVhZGluZyBhIGRlbGltaXRlciBhbmQgdGhlbiB2YWxpZGF0aW5nIGl0LiBUaGUgYGRlbGAgdmFyaWFibGUgaXRzZWxmIGlzbiYjMzk7dCBiZWluZyB1c2VkIGFzIGEgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2VkLiBXZSYjMzk7cmUgKm5vdCogc2VlaW5nIGFueSBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhcnRpY3VsYXIgc25pcHBldCBqdXN0IGNoZWNrcyBpZiBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgdmFsaWQuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgdGhhdCAqbWlnaHQqIGV4aXN0IGluIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGluIHRoaXMgcGF0Y2ggYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyBJJiMzOTt2ZSBvdXRsaW5lZCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGFuZCB0aGUgZXhpc3RpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGl0cyBhdWRpdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjA3OjI4LjAxNjk0ODMwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYzMTg3ODEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC4wMTY5NTM0MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzIxNjg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IGQyNmI2M2EyN2MyNTkuLjllODRiODc3ZDA2ZGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xOSw2ICsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlXFxuIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGVcXG4gYGA6YGAgdXBvbiB5b3VyIG5lZWRzKSBhbmQgZWNobyBpdCB0byBgYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmBgLlxcbiBcXG4rVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGl0cyBmaWVsZCBkZWxpbWl0ZXIgYW5kIGNhbiBiZSBhbnlcXG4rQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVyIG90aGVyIHRoYW4gdGhlIGJhY2tzbGFzaCBgYFxcXFxgYC5cXG4rXFxuIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuIFxcbiAtIGBgbmFtZWBgXFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXFxuaW5kZXggZGRmZDNhYTU3YWM4Ny4uODA5YzkxZDIxYjM5OCAxMDA2NDRcXG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXFxuKysrIGIvZnMvYmluZm10X21pc2MuY1xcbkBAIC0xMDAsNiArMTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXFxuK3tcXG4rXFx0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBjICE9ICdcXFxcXFxcXCc7XFxuK31cXG4rXFxuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFx0XFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXFxuQEAgLTg3MiwxMCArODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcbiBcXHRkZWwgPSAqcCsrO1xcdC8qIGRlbGltaXRlciAqL1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXFxcblxcXCIsIGRlbCwgZGVsKTtcXG4rXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxcXG5cXFwiLCBkZWwpO1xcbiBcXG4tXFx0LyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi9cXG4tXFx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXFxuK1xcdGlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuIFxcdC8qIFBhZCB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbGltIHRvIHNpbXBsaWZ5IHBhcnNpbmcgYmVsb3cuICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXFxuaW5kZXggYjY0MGFmOGYwMmI1MS4uMjIyMGVkMzQ1ZTkyMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbkBAIC00NSw2ICs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2xvYWRlclxcbiBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfbG9hZGVyX3BheWxvYWQgYmluZm10X2xvYWRlcl9wYXlsb2FkX3N0YXRpY1xcbiBcXG4rIyBPbmx5IEFTQ0lJIHB1bmN0dWF0aW9uIGRlbGltaXRzIHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcsIHNvIGEgbmV3XFxuKyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxcbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kZWxpbVxcbitcXG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgnQicpIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0c1xcbiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5XFxuICMgYnVpbHQgd2hlbiBjbGFuZywgYnBmdG9vbCwgdGhlIHZtbGludXggQlRGIGFuZCBsaWJicGYgYXJlIGFsbCBwcmVzZW50XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZjMTdjYjc4NTQ1MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcXG5AQCAtMCwwICsxLDEyNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0IHdoaWNoIGNoYXJhY3RlcnMgbWF5IGRlbGltaXQgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZy5cXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJiaW5mbXRfbWlzY19jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIEVOVFJZXFx0XFxcImJtZGVsaW1cXFwiXFxuKy8qIFNoYXJlcyBubyBjaGFyYWN0ZXIgd2l0aCB0aGUgc2V0cyBiZWxvdywgb3IgYSByZWZ1c2FsIHByb3ZlcyBub3RoaW5nLiAqL1xcbisjZGVmaW5lIE1BR0lDXFx0XFxcImJtbWFnaWNcXFwiXFxuKyNkZWZpbmUgSU5URVJQXFx0XFxcIi9iaW4vdHJ1ZVxcXCJcXG4rXFxuKy8qXFxuKyAqIEFTQ0lJIHB1bmN0dWF0aW9uIHdpdGhvdXQgJ1xcXFwnIGFuZCAnLycuIFRoZSBiYWNrc2xhc2ggaXMgcmVmdXNlZCBiZWNhdXNlXFxuKyAqIGl0IHdvdWxkIGN1dCBhIG1hZ2ljIHRoYXQgdXNlcyBcXFxceCB0byBlc2NhcGUgc2hvcnQuICcvJyBpcyBhY2NlcHRlZFxcbisgKiBidXQgY2Fubm90IGRlbGltaXQgYSBydWxlIHRoYXQgbmFtZXMgYW4gYWJzb2x1dGUgaW50ZXJwcmV0ZXIuXFxuKyAqL1xcbisjZGVmaW5lIFBVTkNUVUFUSU9OXFx0XFxcIiFcXFxcXFxcIiMkJVxcdTAwMjYnKCkqKywtLjo7XFx1MDAzYz1cXHUwMDNlP0BbXV5fYHt8fX5cXFwiXFxuK1xcbisvKiAnTScsICdFJyBhbmQgJ0InIG5hbWUgdHlwZXMsICdQJyB0aHJvdWdoICdEJyBhcmUgdGhlIGZsYWdzLiAqL1xcbisjZGVmaW5lIExFVFRFUlNcXHRcXHRcXFwiTUVCUE9DRlRMRHF6XFxcIlxcbisjZGVmaW5lIERJR0lUU1xcdFxcdFxcXCIwMTU3XFxcIlxcbisjZGVmaW5lIFdISVRFU1BBQ0VcXHRcXFwiIFxcXFx0XFxcXG5cXFwiXFxuKyNkZWZpbmUgQ09OVFJPTFxcdFxcdFxcXCJcXFxcMDAxXFxcXDAzM1xcXFwxNzdcXFwiXFxuKyNkZWZpbmUgTk9OX0FTQ0lJXFx0XFxcIlxcXFwyMDBcXFxcMjQ0XFxcXDM3N1xcXCJcXG4rXFxuKy8qICc6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJzonLiAqL1xcbitzdGF0aWMgaW50IHJlZ2lzdGVyX3dpdGgoY2hhciBkZWwpXFxuK3tcXG4rXFx0Y2hhciBydWxlWzEyOF07XFxuK1xcbitcXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCIlYyVzJWNFJWMlYyVzJWMlYyVzJWNcXFwiLCBkZWwsIEVOVFJZLCBkZWwsXFxuK1xcdFxcdCBkZWwsIGRlbCwgTUFHSUMsIGRlbCwgZGVsLCBJTlRFUlAsIGRlbCk7XFxuK1xcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XFxuK31cXG4rXFxuKy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xcbitzdGF0aWMgdm9pZCBleHBlY3RfcmVmdXNlZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnNldClcXG4re1xcbitcXHRjb25zdCBjaGFyICpkO1xcbitcXG4rXFx0Zm9yIChkID0gc2V0OyAqZDsgZCsrKSB7XFxuK1xcdFxcdGludCByYyA9IHJlZ2lzdGVyX3dpdGgoKmQpO1xcbitcXG4rXFx0XFx0RVhQRUNUX0VRKHJjLCAtMSlcXG4rXFx0XFx0XFx0VEhfTE9HKFxcXCIlI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcXG4rXFx0XFx0aWYgKHJjID09IDApIHtcXG4rXFx0XFx0XFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0fVxcbit9XFxuK1xcbitGSVhUVVJFKGRlbGltKSB7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKGRlbGltKVxcbit7XFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFxcXCIpO1xcbitcXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIGJpbmZtdF9taXNjXFxcIik7XFxuK1xcbitcXHQvKiBBIGtlcm5lbCB3aXRob3V0IHRoZSBhbGxvdy1saXN0IHRha2VzIGFueSBjaGFyYWN0ZXIgYnV0IGEgZmxhZy4gKi9cXG4rXFx0aWYgKHJlZ2lzdGVyX3dpdGgoJ3EnKSA9PSAwKSB7XFxuK1xcdFxcdHVucmVnaXN0ZXIoRU5UUlkpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdFxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXFxuK3tcXG4rXFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK31cXG4rXFxuKy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqL1xcbitURVNUX0YoZGVsaW0sIHB1bmN0dWF0aW9uX2FjY2VwdGVkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmQ7XFxuK1xcbitcXHRmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQrKykge1xcbitcXHRcXHRFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApXFxuK1xcdFxcdFxcdFRIX0xPRyhcXFwiJyVjJyByZWZ1c2VkIHdpdGggZXJybm8gJWRcXFwiLCAqZCwgZXJybm8pO1xcbitcXHRcXHR1bnJlZ2lzdGVyKEVOVFJZKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cXG4rVEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXFxuK3tcXG4rXFx0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTtcXG4rfVxcbitcXG4rLyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi9cXG4rVEVTVF9GKGRlbGltLCBkaWdpdHNfcmVmdXNlZClcXG4re1xcbitcXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIERJR0lUUyk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgd2hpdGVzcGFjZV9yZWZ1c2VkKVxcbit7XFxuK1xcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKVxcbit7XFxuK1xcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgQ09OVFJPTCk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgbm9uX2FzY2lpX3JlZnVzZWQpXFxuK3tcXG4rXFx0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBOT05fQVNDSUkpO1xcbit9XFxuK1xcbisvKiBUaGUgZXNjYXBlIGNoYXJhY3RlciB3b3VsZCBjdXQgZXZlcnkgbWFnaWMgdGhhdCB1c2VzIG9uZSBzaG9ydC4gKi9cXG4rVEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZClcXG4re1xcbitcXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFxcXCJcXFxcXFxcXFxcXCIpO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC41MzA5ODQ5MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI5MjU0NTYxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZmEyMjM0MzcwYWZhOTZhYTRmOGQ4MDM1MTM5NDUyYTMzNjM1NjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MDc6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTksNiArMTksOSBAQCBUbyBhY3R1YWxseSByZWdpc3RlciBhIG5ldyBiaW5hcnkgdHlwZSwgeW91IGhhdmUgdG8gc2V0IHVwIGEgc3RyaW5nIGxvb2tpbmcgbGlrZVxuIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGVcbiBgYDpgYCB1cG9uIHlvdXIgbmVlZHMpIGFuZCBlY2hvIGl0IHRvIGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYGAuXG4gXG4rVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGl0cyBmaWVsZCBkZWxpbWl0ZXIgYW5kIGNhbiBiZSBhbnlcbitBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0aGUgYmFja3NsYXNoIGBgXFxgYC5cbitcbiBIZXJlIGlzIHdoYXQgdGhlIGZpZWxkcyBtZWFuOlxuIFxuIC0gYGBuYW1lYGBcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggZGRmZDNhYTU3YWM4Ny4uODA5YzkxZDIxYjM5OCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0xMDAsNiArMTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKVxuK3tcbitcdGlmICghaXNhc2NpaShjKSB8fCAhaXNwdW5jdChjKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIGMgIT0gJ1xcXFwnO1xuK31cbitcbiBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XHRcdC8qIHR5cGUsIHN0YXR1cywgZXRjLiAqL1xuQEAgLTg3MiwxMCArODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXG4gXHRkZWwgPSAqcCsrO1x0LyogZGVsaW1pdGVyICovXG4gXG4tXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXG5cIiwgZGVsLCBkZWwpO1xuK1x0cHJfZGVidWcoXCJyZWdpc3RlcjogZGVsaW06ICUjeFxcblwiLCBkZWwpO1xuIFxuLVx0LyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi9cbi1cdGlmIChtaXNjX2ZsYWdfYnlfY2hhcihkZWwpKVxuK1x0aWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuIFx0LyogUGFkIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsaW0gdG8gc2ltcGxpZnkgcGFyc2luZyBiZWxvdy4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggYjY0MGFmOGYwMmI1MS4uMjIyMGVkMzQ1ZTkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC00NSw2ICs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXG4gVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfbG9hZGVyXG4gVEVTVF9HRU5fRklMRVMgKz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWNcbiBcbisjIE9ubHkgQVNDSUkgcHVuY3R1YXRpb24gZGVsaW1pdHMgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZywgc28gYSBuZXdcbisjIGZsYWcgY2hhcmFjdGVyIGNhbm5vdCBjaGFuZ2Ugd2hpY2ggc3RyaW5ncyByZWdpc3Rlci4gTm8gYnBmIHRvb2xjaGFpbi5cbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kZWxpbVxuK1xuICMgYmluZm10X21pc2MgYnBmLWJhY2tlZCAoJ0InKSBoYW5kbGVyIHRlc3Q6IGEgbGliYnBmIGhhcm5lc3MgcGx1cyBpdHNcbiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5XG4gIyBidWlsdCB3aGVuIGNsYW5nLCBicGZ0b29sLCB0aGUgdm1saW51eCBCVEYgYW5kIGxpYmJwZiBhcmUgYWxsIHByZXNlbnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mZmMxN2NiNzg1NDUwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcbkBAIC0wLDAgKzEsMTI3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFRlc3Qgd2hpY2ggY2hhcmFjdGVycyBtYXkgZGVsaW1pdCB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpbmZtdF9taXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgRU5UUllcdFwiYm1kZWxpbVwiXG4rLyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovXG4rI2RlZmluZSBNQUdJQ1x0XCJibW1hZ2ljXCJcbisjZGVmaW5lIElOVEVSUFx0XCIvYmluL3RydWVcIlxuK1xuKy8qXG4rICogQVNDSUkgcHVuY3R1YXRpb24gd2l0aG91dCAnXFwnIGFuZCAnLycuIFRoZSBiYWNrc2xhc2ggaXMgcmVmdXNlZCBiZWNhdXNlXG4rICogaXQgd291bGQgY3V0IGEgbWFnaWMgdGhhdCB1c2VzIFxceCB0byBlc2NhcGUgc2hvcnQuICcvJyBpcyBhY2NlcHRlZFxuKyAqIGJ1dCBjYW5ub3QgZGVsaW1pdCBhIHJ1bGUgdGhhdCBuYW1lcyBhbiBhYnNvbHV0ZSBpbnRlcnByZXRlci5cbisgKi9cbisjZGVmaW5lIFBVTkNUVUFUSU9OXHRcIiFcXFwiIyQlXHUwMDI2JygpKissLS46O1x1MDAzYz1cdTAwM2U/QFtdXl9ge3x9flwiXG4rXG4rLyogJ00nLCAnRScgYW5kICdCJyBuYW1lIHR5cGVzLCAnUCcgdGhyb3VnaCAnRCcgYXJlIHRoZSBmbGFncy4gKi9cbisjZGVmaW5lIExFVFRFUlNcdFx0XCJNRUJQT0NGVExEcXpcIlxuKyNkZWZpbmUgRElHSVRTXHRcdFwiMDE1N1wiXG4rI2RlZmluZSBXSElURVNQQUNFXHRcIiBcXHRcXG5cIlxuKyNkZWZpbmUgQ09OVFJPTFx0XHRcIlxcMDAxXFwwMzNcXDE3N1wiXG4rI2RlZmluZSBOT05fQVNDSUlcdFwiXFwyMDBcXDI0NFxcMzc3XCJcbitcbisvKiAnOmJtZGVsaW06RTo6Ym1tYWdpYzo6L2Jpbi90cnVlOicgd2l0aCBAZGVsIGluIHBsYWNlIG9mIGV2ZXJ5ICc6Jy4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX3dpdGgoY2hhciBkZWwpXG4re1xuK1x0Y2hhciBydWxlWzEyOF07XG4rXG4rXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwiJWMlcyVjRSVjJWMlcyVjJWMlcyVjXCIsIGRlbCwgRU5UUlksIGRlbCxcbitcdFx0IGRlbCwgZGVsLCBNQUdJQywgZGVsLCBkZWwsIElOVEVSUCwgZGVsKTtcbitcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4rfVxuK1xuKy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xuK3N0YXRpYyB2b2lkIGV4cGVjdF9yZWZ1c2VkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqc2V0KVxuK3tcbitcdGNvbnN0IGNoYXIgKmQ7XG4rXG4rXHRmb3IgKGQgPSBzZXQ7ICpkOyBkKyspIHtcbitcdFx0aW50IHJjID0gcmVnaXN0ZXJfd2l0aCgqZCk7XG4rXG4rXHRcdEVYUEVDVF9FUShyYywgLTEpXG4rXHRcdFx0VEhfTE9HKFwiJSN4IGRlbGltaXRlZCBhIHJlZ2lzdGVyIHN0cmluZ1wiLFxuK1x0XHRcdCAgICAgICAodW5zaWduZWQgY2hhcikqZCk7XG4rXHRcdGlmIChyYyA9PSAwKSB7XG4rXHRcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1x0fVxuK31cbitcbitGSVhUVVJFKGRlbGltKSB7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGRlbGltKVxuK3tcbitcdGlmIChnZXR1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIik7XG4rXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBiaW5mbXRfbWlzY1wiKTtcbitcbitcdC8qIEEga2VybmVsIHdpdGhvdXQgdGhlIGFsbG93LWxpc3QgdGFrZXMgYW55IGNoYXJhY3RlciBidXQgYSBmbGFnLiAqL1xuK1x0aWYgKHJlZ2lzdGVyX3dpdGgoJ3EnKSA9PSAwKSB7XG4rXHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgZGVsaW1pdGVyIGFsbG93LWxpc3RcIik7XG4rXHR9XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXG4re1xuK1x0dW5yZWdpc3RlcihFTlRSWSk7XG4rfVxuK1xuKy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqL1xuK1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpXG4re1xuK1x0Y29uc3QgY2hhciAqZDtcbitcbitcdGZvciAoZCA9IFBVTkNUVUFUSU9OOyAqZDsgZCsrKSB7XG4rXHRcdEVYUEVDVF9FUShyZWdpc3Rlcl93aXRoKCpkKSwgMClcbitcdFx0XHRUSF9MT0coXCInJWMnIHJlZnVzZWQgd2l0aCBlcnJubyAlZFwiLCAqZCwgZXJybm8pO1xuK1x0XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbitcdH1cbit9XG4rXG4rLyogTGV0dGVycyBuYW1lIHRoZSB0eXBlcyBhbmQgdGhlIGZsYWdzLCBzbyBub25lIG9mIHRoZW0gY2FuIGRlbGltaXQuICovXG4rVEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTtcbit9XG4rXG4rLyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi9cbitURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKVxuK3tcbitcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgRElHSVRTKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCB3aGl0ZXNwYWNlX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBXSElURVNQQUNFKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCBjb250cm9sX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIE5PTl9BU0NJSSk7XG4rfVxuK1xuKy8qIFRoZSBlc2NhcGUgY2hhcmFjdGVyIHdvdWxkIGN1dCBldmVyeSBtYWdpYyB0aGF0IHVzZXMgb25lIHNob3J0LiAqL1xuK1RFU1RfRihkZWxpbSwgYmFja3NsYXNoX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBcIlxcXFxcIik7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC41MzA5ODYzMTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3MzY5MjcwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBiaW5mbXRfbWlzYyBEZWxpbWl0ZXIgUmVzdHJpY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCdzIHRvdWNoaW5nIGBmcy9iaW5mbXRfbWlzYy5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgbmV3IGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGl0J3MgdGlnaHRlbmluZyB1cCB0aGUgYWxsb3dlZCBkZWxpbWl0ZXJzIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBQcmV2aW91c2x5LCBpdCB3YXMgY2hlY2tpbmcgaWYgYSBjaGFyYWN0ZXIgd2FzIGEgZmxhZywgYnV0IG5vdyBpdCdzIHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLlxuXG5SaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExldCBtZSBkaWcgaW50byBgZnMvYmluZm10X21pc2MuY2AgYW5kIHNlZSB3aGVyZSBgY3JlYXRlX2VudHJ5YCBpcyB1c2VkLiBBaGEsIGZvdW5kIGl0ISBUaGUgcGF0Y2ggdG91Y2hlcyBgY3JlYXRlX2VudHJ5YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHNvbWVvbmUgd3JpdGVzIHRvIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgLiBTbywgdGhpcyBpcyBhIHVzZXJzcGFjZS1hY2Nlc3NpYmxlIGNoYW5nZSwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCBtaWdodCBldmVuIGJlIGFjY2Vzc2libGUgZnJvbSB1c2VyIG5hbWVzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgbW91bnQgb3B0aW9ucywgYWx0aG91Z2ggaW4gdGhlIG5vcm1hbCBjYXNlLCBpdCByZXF1aXJlcyByb290LlxuXG5Ob3csIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGNoYW5naW5nIHRoZSBwYXJzaW5nIGxvZ2ljIG9mIGBiaW5mbXRfbWlzY2AsIGFuZCBldmVuIGEgc21hbGwgY2hhbmdlIHRvIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0J3MgYWNjZXNzaWJsZSwgZXZlbiBpbiBhIGxpbWl0ZWQgd2F5LCBpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHJvb3QgYWNjZXNzIGlzIHVzdWFsbHkgcmVxdWlyZWQuXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGF0IHRyaWdnZXJzIGJpbmZtdF9taXNjLCB3aGVyZSdzIHRoZSBjb25maWcgb3B0aW9uIGZvciBgYmluZm10X21pc2NgPyBJJ20gcHJldHR5IHN1cmUgaXQncyBgQ09ORklHX0JJTkZNVF9NSVNDYC4gSSdsbCB1c2UgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW4gYGZzL0tjb25maWcuYmluZm10YCB0byBtYWtlIHN1cmUuIFRoYXQnbGwgbGV0IG1lIGtub3cgaG93IHRoZSBrZXJuZWwgaXMgY29tcGlsZWQuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo0My4yNjc5MTY3NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2NTEwMjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX01JU0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE0NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1xcXCJcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE3MC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo0Ni42MzMwMjU2MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NDA4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEJJTkZNVF9NSVNDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQklORk1UX01JU0NgIGlzIHRoZSBjb25maWcgb3B0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZnMvYmluZm10X21pc2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIHdvcmtzIGludGVybmFsbHksIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhlIGNvcmUgZnVuY3Rpb24uIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBjcmVhdGVfZW50cnlgLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBhbiBpbW1lZGlhdGUgc2Vuc2Ugb2YgaXRzIHNjb3BlLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gS25vd2luZyB3aGVyZSBgY3JlYXRlX2VudHJ5YCBpcyBpbnZva2VkIGZyb20gd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhIHByb3BlciBtZW50YWwgbW9kZWwgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgQklORk1UX01JU0MgYXJjaGl0ZWN0dXJlLiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MTQ6NTAuOTUwNDM2NzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzU5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9ODMzPXN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXFxuZnMvYmluZm10X21pc2MuYzoxNDc1OlxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuZnMvYmluZm10X21pc2MuYy0xNDc2LVxcdGlmIChJU19FUlIoZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE0OjUxLjAwMTIxMDA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDYwMTM3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayoqXG5cbk9rYXksIHNvIGBjcmVhdGVfZW50cnlgIGlzIGRlY2xhcmVkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZDsgaXQncyBub3QgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGRpcmVjdGx5LiBOb3csIEkgc2VlIHRoYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgY2FsbGVyIG9mIGBjcmVhdGVfZW50cnlgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgc3VnZ2VzdHMgYGNyZWF0ZV9lbnRyeWAgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLiBUaGUgY3JpdGljYWwgcGF0aCBmb3IgcmVnaXN0ZXIgb3BlcmF0aW9ucyBkZWZpbml0ZWx5IHJ1bnMgdGhyb3VnaCB0aGVzZSB0d28uIExldCdzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgYGNyZWF0ZV9lbnRyeWAgZml0cyBpbi4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo1NS40NDcyMzAyNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTg5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm1fcmVnaXN0ZXJfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfbWlzYy5jPTE0Mzc9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYzoxNTEwOlxcdC53cml0ZVxcdFxcdD0gYm1fcmVnaXN0ZXJfd3JpdGUsXFxuZnMvYmluZm10X21pc2MuYy0xNTExLVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo1NS40OTQ3NTM2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQ4MzQ2MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBQb3RlbnRpYWwgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBpdCdzIGZsYWdnZWQgYXMgYHN0YXRpY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIG5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBhY3R1YWxseSB0aGUgYC53cml0ZWAgaGFuZGxlciwgdGhlIGZ1bmN0aW9uIHRoYXQgd3JpdGVzIHRvIHRoZSBkZXZpY2UsIGZvciBgYm1fcmVnaXN0ZXJfb3BlcmF0aW9uc2AuIFJpZ2h0LCB0aGF0J3Mgd2hhdCdzIGdvaW5nIG9uLlxuXG5CdXQgbm93IEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBUaGlzIGhhcyBtZSB0aGlua2luZywgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGZzL2JpbmZtdF9taXNjLmNgPyBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZS4gSSBhbSBjdXJpb3VzIHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGlzIGZpbGUuIExldCBtZSBkbyBhIHF1aWNrIGF1ZGl0IGFuZCByZXZpZXcgdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MCwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjAyLjc0MzEwMzA3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMDQxMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjAyLjc5MjIxNzIzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDE3ODYyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZzL2JpbmZtdF9taXNjLmNgIC0gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvYmluZm10X21pc2MuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGVtLCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgZWFjaCBvbmUgZG9lcyBhbmQgaXRzIHBvdGVudGlhbCByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgYmluYXJ5IGZvcm1hdCBoYW5kbGluZy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBwb2ludCBvZiBpbnRlcmVzdCBmb3IgbW9kaWZpY2F0aW9uLCB2dWxuZXJhYmlsaXR5LCBvciBzaW1wbHkgYXJlYXMgd2hlcmUgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsIGZvciB0aGlzIHNwZWNpZmljIHRhc2suIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgaGVyZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxscyBvciBjb2RlIHNlZ21lbnRzLiBJJ20gZ29pbmcgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmaWxlIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzAsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNTowOS4yMTAwODc5MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQwNjQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNTowOS4yNjA1MzQ5NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTAwNjg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUXVpY2sgQW5hbHlzaXM6IEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdG8gc3RhcnQuIEluc3RlYWQgb2YgZ2V0dGluZyBib2dnZWQgZG93biBpbiBhbiBleGhhdXN0aXZlIGNvZGUgcmV2aWV3IGZyb20gdGhlIHRvcCBkb3duLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSB0YXJnZXRlZCBzZWFyY2ggdGVjaG5pcXVlcy4gR2l2ZW4gdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLCB0aGUgY2xhc3NpYyBzdXNwZWN0cyBqdW1wIG91dDogYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBhbmQgcG90ZW50aWFsbHkgYGluaXRfbWlzY19iaW5mbXRgIGlmIGl0IGlzIGEgYmluYXJ5IGZvcm1hdCBoYW5kbGVyLCBvciBhIHZlcnkgb2xkIGluaXQuIFNvLCBJJ20gdGhpbmtpbmcgYSBxdWljayByZWFkIG9mIHRoZSBmaWxlLCBvciBhIHF1aWNrIGdyZXAgb24gdGhvc2UsIHdpbGwgbGlrZWx5IGdpdmUgbWUgYSB2ZXJ5IHJhcGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGhvcGluZyB0byBnZXQgc29tZSBsb3ctaGFuZ2luZyBmcnVpdCwgYSBkZWNlbnQgc2lnbmFsIGFuZCBzb21lIGVhc3kgd2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjEzLjMzMTU0NDI3MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NDc3MjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgLippbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjEzLjM4MDQxODA4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTYxNjIwNDAyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3RhdGljIEludGVnZXIgRGVjbGFyYXRpb25zIGluIGBmcy9iaW5mbXRfbWlzYy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgZnMvYmluZm10X21pc2MuY2AgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHN0dWZmIHJlbGF0ZWQgdG8gaG93IHRoZXNlIG1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMgYXJlIGhhbmRsZWQuIExldCdzIHNlZS4uLiB3aGF0J3MgbXkgZmlyc3QgbW92ZT8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIHNvbWV0aGluZyBzcGVjaWZpYzogSSB3YW50IHRvIHNlZSBob3cgaW50ZWdlciB2YXJpYWJsZXMgYXJlIGRlY2xhcmVkLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIG9yIGp1c3QgYGludGAuIFRoaXMgY291bGQgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2Ygc2NvcGluZyBvciBob3cgdGhleSBhcmUgdXNlZCwgc28gYSBxdWljayBgZ3JlcGAgd2lsbCBiZSBmYXN0ZXIgdGhhbiBibGluZGx5IGJyb3dzaW5nLiBMZXQncyBydW4gYGdyZXAgJ15zdGF0aWMgaW50JyBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgdGhlbiBhIHNpbWlsYXIgYGdyZXAgJ15pbnQnIGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hhdCB3ZSBnZXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGhpZ2hsaWdodCB0aGUgaW1wb3J0YW50IHNlY3Rpb25zIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5LiBJdCdzIGEgcXVpY2sgd2F5IHRvIGJhc2VsaW5lIHRoZSBpbnRlZ2VyIHVzYWdlIGluIHRoZSBmaWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG5leHQgYXBwcm9wcmlhdGUgc3RlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjYxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjI5LjU0MjQ2MTYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MzA4NDMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNToyOS45NDA3NzgyNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MTcxNzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBiaW5mbXRfbWlzYy5jYCDigJMgVGltZSB0byBUcmFjZSBTdGF0aWMgRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIHRoZSBgZnMvYmluZm10X21pc2MuY2AgZmlsZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYmluYXJ5IGZvcm1hdHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyBkaWZmZXJlbnQgZXhlY3V0YWJsZSB0eXBlcyBhcmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgZGlzcGF0Y2hlcyBleGVjdXRpb24gb2YgdGhvc2UgZm9ybWF0cy4gV2hhdCBJJ20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYXJlIHRoZSBzdGF0aWMgZGVjbGFyYXRpb25zLiBUaGUgc3RhdGljIGRlZmluaXRpb25zIHByb3ZpZGUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB0aGUgT1MgdXNlcyB0byByZWNvZ25pemUgdGhlIGJpbmFyeSBmb3JtYXRzLiBTbywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlZmluaXRpb25zIHdvcmsgYW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQuIFRoZXJlZm9yZSwgSSB3YW50IHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBgc3RhdGljYCBrZXl3b3JkcyBpbiB0aGlzIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZvY3VzZWQgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRoaXMgbW9kdWxlLCBoZWxwaW5nIG1lIGdyYXNwIGl0cyBpbnRlcm5hbCB3b3JraW5ncyB3aXRob3V0IHVubmVjZXNzYXJ5IG5vaXNlLiBJIHdpbGwgdGhlbiBleGFtaW5lIHRoZXNlIHN0YXRpYyBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYGJpbmZtdF9taXNjLmNgIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTozNC43OTI0OTc5OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTQyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz03Nz1zdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTgzLVxcbmZzL2JpbmZtdF9taXNjLmM6ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTg1LVxcdHsgJ1AnLCBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCxcXHQwLFxcdFxcdFxcdFxcXCJwcmVzZXJ2ZSBhcmd2MFxcXCJcXHRcXHR9LFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy05NC0vKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbmZzL2JpbmZtdF9taXNjLmMtOTYte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDItXFxuZnMvYmluZm10X21pc2MuYzoxMDM6c3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXFxuZnMvYmluZm10X21pc2MuYy0xMDQte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDc9REVGSU5FX1NUQVRJQ19TUkNVX0ZBU1QoYm1fZW50cmllc19zcmN1KTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ5LS8qIENoZWNrIGlmIEBlJ3MgbWFnaWMgbWF0Y2hlcyBAYnBybSdzIGJ1ZmZlciwgYXBwbHlpbmcgdGhlIG1hc2sgaWYgc2V0LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTUwOnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfbWFnaWMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtMTUxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NS0vKiBDaGVjayBpZiBAZSdzIHJlZ2lzdGVyZWQgZXh0ZW5zaW9uIG1hdGNoZXMgQGV4dCwgTlVMTCBpZiB0aGVyZSBpcyBub25lLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTY2OnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfZXh0ZW5zaW9uKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE2Ny1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZXh0KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xODgtICovXFxuZnMvYmluZm10X21pc2MuYzoxODk6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqXFxuZnMvYmluZm10X21pc2MuYy0xOTAtc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjM3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MjM4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0yMzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI1Mz1iaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yNjMtLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MjY0OnN0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKVxcbmZzL2JpbmZtdF9taXNjLmMtMjY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MjcyPURFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTI3OS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjI4MDpzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXFxuZnMvYmluZm10X21pc2MuYy0yODEte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yOTEtLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXFxuZnMvYmluZm10X21pc2MuYzoyOTI6c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuZnMvYmluZm10X21pc2MuYy0yOTMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zMjAtICovXFxuZnMvYmluZm10X21pc2MuYzozMjE6c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtMzIyLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zNTgtXFxuZnMvYmluZm10X21pc2MuYzozNTk6c3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuZnMvYmluZm10X21pc2MuYy0zNjAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zNzctICovXFxuZnMvYmluZm10X21pc2MuYzozNzg6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTM3OS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM5MD1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zOTItLyogRHJvcCBldmVyeXRoaW5nIGEgbG9hZCBwcm9ncmFtIHN0YWdlZCBmb3IgdGhpcyBleGVjLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzkzOnN0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbmZzL2JpbmZtdF9taXNjLmMtMzk0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDE3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDE4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcXG5mcy9iaW5mbXRfbWlzYy5jLTQxOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQ0NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQ0NTpzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTQ0Ni1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDk1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDk2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGVudHJ5X2ludm9jYXRpb25fZmxhZ3MoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtNDk3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01MzQtICovXFxuZnMvYmluZm10X21pc2MuYzo1MzU6c3RhdGljIHN0cnVjdCBmaWxlICplbnRyeV9vcGVuX2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTUzNi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01NzctICovXFxuZnMvYmluZm10X21pc2MuYzo1Nzg6c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTU3OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTYyNy0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjYyODpzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTYyOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTcwOS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjcxMDpzdGF0aWMgY2hhciAqc2NhbmFyZyhjaGFyICpzLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTcxMS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTcyNy0vKiBQYXJzZSB0aGUgJ2ZsYWdzJyBmaWVsZCwgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBvbmUuICovXFxuZnMvYmluZm10X21pc2MuYzo3Mjg6c3RhdGljIGNoYXIgKmNoZWNrX3NwZWNpYWxfZmxhZ3MoY2hhciAqcCwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtNzI5LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNzQwLS8qIFBhcnNlIHRoZSAnb2Zmc2V0JywgJ21hZ2ljJyBhbmQgJ21hc2snIGZpZWxkcyBvZiBhbiAnTScgZW50cnkuICovXFxuZnMvYmluZm10X21pc2MuYzo3NDE6c3RhdGljIGNoYXIgKnBhcnNlX21hZ2ljX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxcbmZzL2JpbmZtdF9taXNjLmMtNzQyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtODAxLS8qIFBhcnNlIHRoZSAnbWFnaWMnIGZpZWxkIG9mIGFuICdFJyBlbnRyeTogdGhlIGZpbGVuYW1lIGV4dGVuc2lvbi4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjgwMjpzdGF0aWMgY2hhciAqcGFyc2VfZXh0ZW5zaW9uX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsXFxuZnMvYmluZm10X21pc2MuYy04MDMtXFx0XFx0XFx0XFx0ICAgIGNoYXIgZGVsKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy04MzItICovXFxuZnMvYmluZm10X21pc2MuYzo4MzM6c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTgzNC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEwMDc9ZW51bSBibV9jb21tYW5kIHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTAyMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEwMjE6c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcXG5mcy9iaW5mbXRfbWlzYy5jLTEwMjIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDM4LS8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXFxuZnMvYmluZm10X21pc2MuYzoxMDM5OnN0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG5mcy9iaW5mbXRfbWlzYy5jLTEwNDAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDUyLS8qIFRoZSByb290IGRpcmVjdG9yeSdzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTA1MzpzdGF0aWMgc3RydWN0IGlub2RlICpibV9yb290X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xMDU0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTg6c3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTkte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTA2NDpzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXFxuZnMvYmluZm10X21pc2MuYy0xMDY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTExMy1cXG5mcy9iaW5mbXRfbWlzYy5jOjExMTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTExMTUte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTM2LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTEzNzpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICppX2JpbmZtdF9taXNjKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvYmluZm10X21pc2MuYy0xMTM4LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTE1NC0qL1xcbmZzL2JpbmZtdF9taXNjLmM6MTE1NTpzdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2JpbmZtdF9taXNjLmMtMTE1Ni17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExODQtICovXFxuZnMvYmluZm10X21pc2MuYzoxMTg1OnN0YXRpYyB2b2lkIHVubGlua19iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0xMTg2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjAwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIwMTpzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTIwMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTIwOC0vKiBSZW1vdmUgQGUgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IHJlbW92ZWQuICovXFxuZnMvYmluZm10X21pc2MuYzoxMjA5OnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xMjEwLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTIyMC0vKiBSZW1vdmUgYWxsIGVudHJpZXMgb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIEBtaXNjIGJlbG9uZ2luZyB0byBAc2IuICovXFxuZnMvYmluZm10X21pc2MuYzoxMjIxOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0xMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI1MS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNTI6c3RhdGljIGludCBibV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNTMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjYyLVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYm1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xMjY0LVxcdC5sb29rdXBcXHRcXHQ9IHNpbXBsZV9sb29rdXAsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjktXFxuZnMvYmluZm10X21pc2MuYzoxMjcwOnN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzEte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzA2LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTMwNzpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTM2ODpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjktXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0MjUtXFxuZnMvYmluZm10X21pc2MuYzoxNDI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX2VudHJ5X29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNDI3LVxcdC5vcGVuXFx0XFx0PSBibV9lbnRyeV9vcGVuLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDM2LS8qIGFkZCB0byBmaWxlc3lzdGVtICovXFxuZnMvYmluZm10X21pc2MuYzoxNDM3OnN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iaW5mbXRfbWlzYy5jLTE0Mzgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTA4LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUwOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTUxMC1cXHQud3JpdGVcXHRcXHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTE1LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUxNjpzdGF0aWMgc3NpemVfdFxcbmZzL2JpbmZtdF9taXNjLmMtMTUxNy1ibV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTI2LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUyNzpzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNTI4LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTUwLVxcbmZzL2JpbmZtdF9taXNjLmM6MTU1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9zdGF0dXNfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTItXFx0LnJlYWRcXHRcXHQ9IGJtX3N0YXR1c19yZWFkLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTU4LVxcbmZzL2JpbmZtdF9taXNjLmM6MTU1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYm1fc3VwZXJfb3BzID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTU2MC1cXHQuc3RhdGZzXFx0XFx0PSBzaW1wbGVfc3RhdGZzLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTU2NDpzdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTU2NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzctXFxuZnMvYmluZm10X21pc2MuYzoxNjM4OnN0YXRpYyB2b2lkIGJtX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTYzOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDMtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ0OnN0YXRpYyBpbnQgYm1fZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY0NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJtX2NvbnRleHRfb3BzID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTY1MC1cXHQuZnJlZVxcdFxcdD0gYm1fZnJlZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY1My1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTQ6c3RhdGljIHZvaWQgYm1fa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY1NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjEtXFxuZnMvYmluZm10X21pc2MuYzoxNjYyOnN0YXRpYyBpbnQgYm1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTY2ODpzdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBtaXNjX2Zvcm1hdCA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjktXFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjcyLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY3MzpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZSA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NzQtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTY4MD1NT0RVTEVfQUxJQVNfRlMoXFxcImJpbmZtdF9taXNjXFxcIik7XFxuZnMvYmluZm10X21pc2MuYy0xNjgxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY4MjpzdGF0aWMgaW50IF9faW5pdCBpbml0X21pc2NfYmluZm10KHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy0xNjgzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY4OS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2OTA6c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbWlzY19iaW5mbXQodm9pZClcXG5mcy9iaW5mbXRfbWlzYy5jLTE2OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTozNC44NDA2NDkzMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTk5ODYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24gZm9yIGJpbmZtdF9taXNjIERlbGltaXRlciBSZXN0cmljdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRlbGltaXRlcnMgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0IHRocm91Z2ggYGJpbmZtdF9taXNjYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY3JlYXRlX2VudHJ5YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBibV9yZWdpc3Rlcl93cml0ZWAuIE5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgYC53cml0ZWAgaGFuZGxlciBmb3IgYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnNgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlIChvciB3aGVyZXZlciBgYmluZm10X21pc2NgIGlzIG1vdW50ZWQpLiBTaW5jZSBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgYXQgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIHRoaXMgY2hhbmdlIHRvdWNoZXMgY29yZSBpbnB1dCB2YWxpZGF0aW9uIGZvciBhIGtlcm5lbCBmZWF0dXJlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBjcmVhdGVfZW50cnlgIGFzIHRoYXQncyB3aGVyZSB0aGUgZGVsaW1pdGVyIHBhcnNpbmcgaGFwcGVucywgYnV0IGl04oCZcyBzdGF0aWMuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGJ1dCB0aGF0J3Mgc3RhdGljIHRvby4gV2FpdCwgYnV0IGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgYXNzaWduZWQgdG8gYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMud3JpdGVgLiBJdCBjYW4ndCBiZSBpbmxpbmVkIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUhIFRoZSBwcm9tcHQgc2F5cyBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLlxuXG5MZXQgbWUgZ28gYmFjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIGluIGBmcy9iaW5mbXRfbWlzYy5jYC4gYGluaXRfbWlzY19iaW5mbXRgIGlzIGBfX2luaXRgLCBzbyBub3QgaWRlYWwuIGBtaXNjX2Zvcm1hdGAgaGFzIGAubG9hZF9iaW5hcnkgPSBsb2FkX21pc2NfYmluYXJ5YC4gYGJtX2ZzX3R5cGVgIGhhcyBgLmluaXRfZnNfY29udGV4dCA9IGJtX2luaXRfZnNfY29udGV4dGAuXG5cbk9rYXksIHNvIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgc3RhdGljLCB5ZXMsIGJ1dCBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiBoYW5kbGVyIHNvIGl0J3MgYSBjYWxsYmFjayBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIEluIGZhY3QsIGlmIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCBjYW5ub3QgYmUgZnVsbHkgaW5saW5lZC4gVGh1cywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBhIGdvb2QgY2FuZGlkYXRlLiBBbHNvLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIC0gWWVwLCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHN0YXRpYy4gV2FpdCwgY2hlY2tpbmcgYGZzL2JpbmZtdF9taXNjLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnPigKYgTm9wZSwgbG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIHN0YXRpYyBleGNlcHQgZm9yIGBpbml0X21pc2NfYmluZm10YCBhbmQgYGV4aXRfbWlzY19iaW5mbXRgLiBTbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSB0b3AgY2hvaWNlIGJlY2F1c2UgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYSBjYWxsYmFjayB0aGF0IHdpbGwgbm90IGJlIGlubGluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTcwLCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjQ4LjM2MDYzOTA3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTQ2MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjQ4LjQwOTk2MjM3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjEwNDMzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEZpcnN0IHRoaW5ncyBmaXJzdDogaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYCByZWFsbHkgdGhlIGJlc3Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGg/IFJpZ2h0LCBpdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIG1vZGlmaWVkIGNvZGUsIHNvIGl0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlLiBDb25maXJtZWQuXG5cbk5leHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGNvbmZpZyBpcyB0aGF0IHRpZXMgaW50byB0aGlzOiBgQklORk1UX01JU0NgLiBBbHJpZ2h0LCBnb3QgaXQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQklORk1UX01JU0NgIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgbW9kaWZpZWQgY29kZS4gTGV0IG1lIGRlbHZlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTo1OC4wMjAzOTc5NzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjIzNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfTUlTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxcbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXFxcIlxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVxcdGJvb2wgXFxcIkJQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjU4LjA2OTYyNjI2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5Mjc4ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBCSU5GTVRfTUlTQ2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgQklORk1UX01JU0NgIHNpdHVhdGlvbiBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFuZCwgY29udmVyc2VseSwgd2hhdCByZWxpZXMgb24gaXQuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIEkgd2VyZSB0byBtYWtlIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdCwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIHRoaXMgc3BlY2lmaWMgZmlsZSBmb3JtYXQgc3VwcG9ydC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGJpbmFyeSBmb3JtYXQgaGFuZGxlcnMuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdGhlIGludGVycHJldGVyLWJhc2VkIGZvcm1hdHMsIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmNlcm5zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIG1vZHVsZSdzIHBsYWNlIHdpdGhpbiB0aGUga2VybmVsJ3MgYmluYXJ5IGV4ZWN1dGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MDguNDYyNDE3MDI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgxOTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWcuYmluZm10XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWcuYmluZm10PTU9Y29uZmlnIEJJTkZNVF9FTEZcXG5mcy9LY29uZmlnLmJpbmZtdC02LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBFTEYgYmluYXJpZXNcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6NzpcXHRkZXBlbmRzIG9uIE1NVVxcbmZzL0tjb25maWcuYmluZm10LTgtXFx0c2VsZWN0IEVMRkNPUkVcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcXG5mcy9LY29uZmlnLmJpbmZtdC0zMi1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgRUxGIGJpbmFyeSBzdXBwb3J0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MzM6XFx0ZGVwZW5kcyBvbiBLVU5JVD15IFxcdTAwMjZcXHUwMDI2IEJJTkZNVF9FTEY9eVxcbmZzL0tjb25maWcuYmluZm10LTM0LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD00MT1jb25maWcgQ09NUEFUX0JJTkZNVF9FTEZcXG5mcy9LY29uZmlnLmJpbmZtdC00Mi1cXHRkZWZfYm9vbCB5XFxuZnMvS2NvbmZpZy5iaW5mbXQ6NDM6XFx0ZGVwZW5kcyBvbiBDT01QQVQgXFx1MDAyNlxcdTAwMjYgQklORk1UX0VMRlxcbmZzL0tjb25maWcuYmluZm10LTQ0LVxcdHNlbGVjdCBFTEZDT1JFXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD01OD1jb25maWcgQklORk1UX0VMRl9GRFBJQ1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtNjAtXFx0ZGVmYXVsdCB5IGlmICFCSU5GTVRfRUxGXFxuZnMvS2NvbmZpZy5iaW5mbXQ6NjE6XFx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFxcdTAwMjZcXHUwMDI2ICFNTVUpXFxuZnMvS2NvbmZpZy5iaW5mbXQtNjItXFx0c2VsZWN0IEVMRkNPUkVcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTc3PWNvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtNzktXFx0ZGVmYXVsdCB5XFxuZnMvS2NvbmZpZy5iaW5mbXQ6ODA6XFx0ZGVwZW5kcyBvbiBCSU5GTVRfRUxGIFxcdTAwMjZcXHUwMDI2IEVMRl9DT1JFXFxuZnMvS2NvbmZpZy5iaW5mbXQtODEtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTE2PWNvbmZpZyBCSU5GTVRfRkxBVFxcbmZzL0tjb25maWcuYmluZm10LTExNy1cXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllc1xcXCJcXG5mcy9LY29uZmlnLmJpbmZtdDoxMTg6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbmZzL0tjb25maWcuYmluZm10LTExOS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0xMzE9Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxcbmZzL0tjb25maWcuYmluZm10LTEzMi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTMzOlxcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMzQtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMzktXFx0Ym9vbCBcXFwiRW5hYmxlIFpGTEFUIHN1cHBvcnRcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQwOlxcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDEtXFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTcxPWNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXFx0Ym9vbCBcXFwiQlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1xcXCJcXG5mcy9LY29uZmlnLmJpbmZtdDoxNzM6XFx0ZGVwZW5kcyBvbiBCSU5GTVRfTUlTQz15XFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTc0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbmZzL0tjb25maWcuYmluZm10LTE3NS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0xOTM9Y29uZmlnIEVYRUNfS1VOSVRfVEVTVFxcbmZzL0tjb25maWcuYmluZm10LTE5NC1cXHRib29sIFxcXCJCdWlsZCBleGVjdmUgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5mcy9LY29uZmlnLmJpbmZtdDoxOTU6XFx0ZGVwZW5kcyBvbiBLVU5JVD15XFxuZnMvS2NvbmZpZy5iaW5mbXQtMTk2LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0yMDE9Y29uZmlnIEFSQ0hfSEFTX0VMRl9DT1JFX0VGTEFHU1xcbmZzL0tjb25maWcuYmluZm10LTIwMi1cXHRib29sXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MjAzOlxcdGRlcGVuZHMgb24gQklORk1UX0VMRiBcXHUwMDI2XFx1MDAyNiBFTEZfQ09SRVxcbmZzL0tjb25maWcuYmluZm10LTIwNC1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MDguNTEyMjQwNTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxODk3NzI0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQklORk1UX01JU0MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlIHJldm9sdmVzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgYGZzL0tjb25maWcuYmluZm10YCBmaWxlIHRoYXQgdGhpcyBpcyB0aGUgb25seSBzeW1ib2wgZGVmaW5lZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGUgcmVsZXZhbnQgc3ltYm9sIGhlcmUgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQuIEl0IGFwcGVhcnMgdGhhdCBpdCBpczsgaXQncyB0aGUgYC53cml0ZWAgaGFuZGxlciB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyB0aGUgYGNyZWF0ZV9lbnRyeWAgZnVuY3Rpb24sIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGJtX3JlZ2lzdGVyX3dyaXRlYC4gQWgsIHJpZ2h0LCB0aGlzIHBhdGNoIGlzIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyIHRvIEFTQ0lJIHB1bmN0dWF0aW9uICpleGNlcHQqIGBcXGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWx0ZXJpbmcgaG93IGBiaW5mbXRfbWlzY2AgaGFuZGxlcyByZWdpc3RyYXRpb24gc3RyaW5ncy4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyDigJMgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhIHN0YXRpYyBmdW5jdGlvbj8gWXVwLCBpdCBpcy4gQnV0IHdhaXQsIEknbSBqdXN0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQ/IExldCdzIHNlZS4uLiBgbG9hZF9taXNjX2JpbmFyeWAgaXMgdGhlIGAubG9hZF9iaW5hcnlgIGhhbmRsZXIuIE9rYXksIHNvIHdlJ3ZlIGdvdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGZvciB3cml0aW5nLCBhbmQgYGxvYWRfbWlzY19iaW5hcnlgIGZvciBsb2FkaW5nLiBTaW5jZSB0aGVzZSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkga25vdyB0aGV5IGFyZW4ndCBpbmxpbmVkLCBzbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIHNlZW1zIGxpa2UgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIGlzIHNvbGlkLiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc3OCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MTcuNzAyMDE1MTU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1Mjc0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNjoxNy43ODU1NTAzMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwMTY5MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MTcuNzg2MTYyNzAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NTQ5NTUyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGJpbmZtdF9taXNjYCByZWdpc3RyYXRpb24gc3RyaW5ncyBieSByZXN0cmljdGluZyB0aGUgYWxsb3dlZCBkZWxpbWl0ZXIgY2hhcmFjdGVycyB0byBBU0NJSSBwdW5jdHVhdGlvbiAoZXhjbHVkaW5nIGJhY2tzbGFzaCkuIEl0IHJlcGxhY2VzIGEgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIHN0cmljdGVyIGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBpbiBwYXJzaW5nIHVzZXIgaW5wdXQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBwYXJzaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IGQyNmI2M2EyN2MyNTkuLjllODRiODc3ZDA2ZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0xOSw2ICsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlXG4gYGA6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOmZsYWdzYGAgKHdoZXJlIHlvdSBjYW4gY2hvb3NlIHRoZVxuIGBgOmBgIHVwb24geW91ciBuZWVkcykgYW5kIGVjaG8gaXQgdG8gYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgYC5cbiBcbitUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueVxuK0FTQ0lJIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuIHRoZSBiYWNrc2xhc2ggYGBcXGBgLlxuK1xuIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XG4gXG4gLSBgYG5hbWVgYFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXG5pbmRleCBkZGZkM2FhNTdhYzg3Li44MDljOTFkMjFiMzk4IDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xuKysrIGIvZnMvYmluZm10X21pc2MuY1xuQEAgLTEwMCw2ICsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXG4re1xuK1x0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gYyAhPSAnXFxcXCc7XG4rfVxuK1xuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcdFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXG5AQCAtODcyLDEwICs4NzksOSBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcbiBcdGRlbCA9ICpwKys7XHQvKiBkZWxpbWl0ZXIgKi9cbiBcbi1cdHByX2RlYnVnKFwicmVnaXN0ZXI6IGRlbGltOiAlI3ggeyVjfVxcblwiLCBkZWwsIGRlbCk7XG4rXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxuXCIsIGRlbCk7XG4gXG4tXHQvKiBBIGZsYWctY2hhciBkZWxpbWl0ZXIgcnVucyB0aGUgZmxhZyBzY2FuIG9mZiB0aGUgYnVmZmVyLiAqL1xuLVx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXG4rXHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHQvKiBQYWQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWxpbSB0byBzaW1wbGlmeSBwYXJzaW5nIGJlbG93LiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTQ1LDYgKzQ1LDEwIEBAIFRFU1RfR0VOX0ZJTEVTICs9IGJpbmZtdF90cmFuc3BhcmVudF9pbnRlcnBcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19sb2FkZXJcbiBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfbG9hZGVyX3BheWxvYWQgYmluZm10X2xvYWRlcl9wYXlsb2FkX3N0YXRpY1xuIFxuKyMgT25seSBBU0NJSSBwdW5jdHVhdGlvbiBkZWxpbWl0cyB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLCBzbyBhIG5ld1xuKyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2RlbGltXG4rXG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgnQicpIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0c1xuICMgc3RydWN0X29wcyBvYmplY3RzIGFuZCB0aGUgdGVzdCBpbnRlcnByZXRlci9hcHAgaXQgcm91dGVzIGJldHdlZW4uIE9ubHlcbiAjIGJ1aWx0IHdoZW4gY2xhbmcsIGJwZnRvb2wsIHRoZSB2bWxpbnV4IEJURiBhbmQgbGliYnBmIGFyZSBhbGwgcHJlc2VudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmYzE3Y2I3ODU0NTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xuQEAgLTAsMCArMSwxMjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogVGVzdCB3aGljaCBjaGFyYWN0ZXJzIG1heSBkZWxpbWl0IHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYmluZm10X21pc2NfY29tbW9uLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rI2RlZmluZSBFTlRSWVx0XCJibWRlbGltXCJcbisvKiBTaGFyZXMgbm8gY2hhcmFjdGVyIHdpdGggdGhlIHNldHMgYmVsb3csIG9yIGEgcmVmdXNhbCBwcm92ZXMgbm90aGluZy4gKi9cbisjZGVmaW5lIE1BR0lDXHRcImJtbWFnaWNcIlxuKyNkZWZpbmUgSU5URVJQXHRcIi9iaW4vdHJ1ZVwiXG4rXG4rLypcbisgKiBBU0NJSSBwdW5jdHVhdGlvbiB3aXRob3V0ICdcXCcgYW5kICcvJy4gVGhlIGJhY2tzbGFzaCBpcyByZWZ1c2VkIGJlY2F1c2VcbisgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXFx4IHRvIGVzY2FwZSBzaG9ydC4gJy8nIGlzIGFjY2VwdGVkXG4rICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLlxuKyAqL1xuKyNkZWZpbmUgUFVOQ1RVQVRJT05cdFwiIVxcXCIjJCVcdTAwMjYnKCkqKywtLjo7XHUwMDNjPVx1MDAzZT9AW11eX2B7fH1+XCJcbitcbisvKiAnTScsICdFJyBhbmQgJ0InIG5hbWUgdHlwZXMsICdQJyB0aHJvdWdoICdEJyBhcmUgdGhlIGZsYWdzLiAqL1xuKyNkZWZpbmUgTEVUVEVSU1x0XHRcIk1FQlBPQ0ZUTERxelwiXG4rI2RlZmluZSBESUdJVFNcdFx0XCIwMTU3XCJcbisjZGVmaW5lIFdISVRFU1BBQ0VcdFwiIFxcdFxcblwiXG4rI2RlZmluZSBDT05UUk9MXHRcdFwiXFwwMDFcXDAzM1xcMTc3XCJcbisjZGVmaW5lIE5PTl9BU0NJSVx0XCJcXDIwMFxcMjQ0XFwzNzdcIlxuK1xuKy8qICc6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJzonLiAqL1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfd2l0aChjaGFyIGRlbClcbit7XG4rXHRjaGFyIHJ1bGVbMTI4XTtcbitcbitcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCIlYyVzJWNFJWMlYyVzJWMlYyVzJWNcIiwgZGVsLCBFTlRSWSwgZGVsLFxuK1x0XHQgZGVsLCBkZWwsIE1BR0lDLCBkZWwsIGRlbCwgSU5URVJQLCBkZWwpO1xuK1x0cmV0dXJuIHdyaXRlX3JlZyhydWxlKTtcbit9XG4rXG4rLyogTm8gY2hhcmFjdGVyIG9mIEBzZXQgbWF5IGRlbGltaXQgYSByZWdpc3RlciBzdHJpbmcuICovXG4rc3RhdGljIHZvaWQgZXhwZWN0X3JlZnVzZWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBjb25zdCBjaGFyICpzZXQpXG4re1xuK1x0Y29uc3QgY2hhciAqZDtcbitcbitcdGZvciAoZCA9IHNldDsgKmQ7IGQrKykge1xuK1x0XHRpbnQgcmMgPSByZWdpc3Rlcl93aXRoKCpkKTtcbitcbitcdFx0RVhQRUNUX0VRKHJjLCAtMSlcbitcdFx0XHRUSF9MT0coXCIlI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nXCIsXG4rXHRcdFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcbitcdFx0aWYgKHJjID09IDApIHtcbitcdFx0XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHR9XG4rfVxuK1xuK0ZJWFRVUkUoZGVsaW0pIHtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoZGVsaW0pXG4re1xuK1x0aWYgKGdldHVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwiKTtcbitcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIGJpbmZtdF9taXNjXCIpO1xuK1xuK1x0LyogQSBrZXJuZWwgd2l0aG91dCB0aGUgYWxsb3ctbGlzdCB0YWtlcyBhbnkgY2hhcmFjdGVyIGJ1dCBhIGZsYWcuICovXG4rXHRpZiAocmVnaXN0ZXJfd2l0aCgncScpID09IDApIHtcbitcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdFwiKTtcbitcdH1cbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihkZWxpbSlcbit7XG4rXHR1bnJlZ2lzdGVyKEVOVFJZKTtcbit9XG4rXG4rLyogUHVuY3R1YXRpb24gZGVsaW1pdHMsIHdoaWNoIGlzIGFsbCBhbnl0aGluZyBkZXBsb3llZCBldmVyIHVzZXMuICovXG4rVEVTVF9GKGRlbGltLCBwdW5jdHVhdGlvbl9hY2NlcHRlZClcbit7XG4rXHRjb25zdCBjaGFyICpkO1xuK1xuK1x0Zm9yIChkID0gUFVOQ1RVQVRJT047ICpkOyBkKyspIHtcbitcdFx0RVhQRUNUX0VRKHJlZ2lzdGVyX3dpdGgoKmQpLCAwKVxuK1x0XHRcdFRIX0xPRyhcIiclYycgcmVmdXNlZCB3aXRoIGVycm5vICVkXCIsICpkLCBlcnJubyk7XG4rXHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuK1x0fVxuK31cbitcbisvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cbitURVNUX0YoZGVsaW0sIGxldHRlcnNfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpO1xuK31cbitcbisvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqL1xuK1RFU1RfRihkZWxpbSwgZGlnaXRzX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFdISVRFU1BBQ0UpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIGNvbnRyb2xfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIENPTlRST0wpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIG5vbl9hc2NpaV9yZWZ1c2VkKVxuK3tcbitcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTtcbit9XG4rXG4rLyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovXG4rVEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFwiXFxcXFwiKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI2OjE3Ljc4NjE2NTk3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTA5NDAxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJpbmZtdF9taXNjYCBEZWxpbWl0ZXIgUmVzdHJpY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgZnMvYmluZm10X21pc2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUsIHRpZ2h0ZW5pbmcgdXAgdGhlIGlucHV0IHZhbGlkYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgdGhlIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBicm9hZGVyIHZhbGlkYXRpb24gdXNpbmcgYG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKWAuIFRoaXMgbmV3IGZ1bmN0aW9uIHJlc3RyaWN0cyBkZWxpbWl0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uLCAqZXhjbHVkaW5nKiBiYWNrc2xhc2hlcy4gVGhlIG9sZCBhcHByb2FjaCB3YXMgdG8gY2hlY2sgaWYgdGhlIGRlbGltaXRlciB3YXMgYSAnZmxhZycgY2hhcmFjdGVyLlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IHBhcnQgb2YgYGZzL2JpbmZtdF9taXNjLmNgIGFyb3VuZCBgY3JlYXRlX2VudHJ5YC4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlOlxuXG5gYGBjXG4tXHQvKiBBIGZsYWctY2hhciBkZWxpbWl0ZXIgcnVucyB0aGUgZmxhZyBzY2FuIG9mZiB0aGUgYnVmZmVyLiAqL1xuLVx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXG4rXHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG5gYGBcblxuVGhlIG9sZCBjaGVjayB3YXNuJ3Qgc3VmZmljaWVudDsgaXQgYWxsb3dlZCBmb3IgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGlzIG5ldyBjaGVjayBhcHBlYXJzIHRvIGJlIGEgY2xlYW5lciwgc2FmZXIgYXBwcm9hY2guXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnM/IExldCdzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gTm9wZSwgaXQncyBqdXN0IGEgY29uZGl0aW9uIGNoZWNrIG9uIGEgc2luZ2xlIGNoYXJhY3RlciwgYGRlbGAuIERvZXMgaXQgZXhwb3NlIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0J3MganVzdCBpbnB1dCB2YWxpZGF0aW9uLiBBbmQgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vdCBhdCBhbGwuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IHN0cnVjdHVyZXMgaW52b2x2ZWQuXG5cblRoaXMgYXBwZWFycyB0byBiZSBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSwgYSByZWZpbmVtZW50IG9mIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY2hhcmFjdGVycyBmcm9tIGJlaW5nIHVzZWQgYXMgZGVsaW1pdGVycy4gSXQncyBhIGdvb2QgcHJhY3RpY2UsIHJlYWxseS4gQSBxdWljayByZS1jaGVjayBvZiBgY3JlYXRlX2VudHJ5YCBpbiBgZnMvYmluZm10X21pc2MuY2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uIHllcywgYWxsIGxvb2tzIGdvb2QuIEl0J3MgYSBjbGVhbiwgc2FmZSBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNjoyNy4yOTU1Njk4MTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQ2MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9ODMzPXN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXFxuZnMvYmluZm10X21pc2MuYzoxNDc1OlxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuZnMvYmluZm10X21pc2MuYy0xNDc2LVxcdGlmIChJU19FUlIoZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI2OjI3LjM0NDQxOTg0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxMjc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjcmVhdGVfZW50cnlgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoIHBhcnNpbmcgYSBzdHJpbmcgaW5wdXQgZnJvbSB0aGUgdXNlci4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgcmlnaHQgaGVyZSwgd2hlcmUgaXQgZXh0cmFjdHMgYSBkZWxpbWl0ZXIgY2hhcmFjdGVyOlxuXG5gYGBjXG5cdGRlbCA9ICpwKys7XHQvKiBkZWxpbWl0ZXIgKi9cblxuXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxuXCIsIGRlbCk7XG5cblx0aWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpXG5cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBzY3JlYW1pbmcgXCJLTVNBTiByaXNrXCIgYXQgbWUuIFdlJ3JlIHJlYWRpbmcgYSBkZWxpbWl0ZXIgYW5kIHRoZW4gdmFsaWRhdGluZyBpdC4gVGhlIGBkZWxgIHZhcmlhYmxlIGl0c2VsZiBpc24ndCBiZWluZyB1c2VkIGFzIGEgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2VkLiBXZSdyZSAqbm90KiBzZWVpbmcgYW55IG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgYW55IG9wZXJhdGlvbnMgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGFydGljdWxhciBzbmlwcGV0IGp1c3QgY2hlY2tzIGlmIGEgc2luZ2xlIGNoYXJhY3RlciBpcyB2YWxpZC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgYXJlIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB0aGF0ICptaWdodCogZXhpc3QgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBpbiB0aGlzIHBhdGNoIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcgSSd2ZSBvdXRsaW5lZCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGFuZCB0aGUgZXhpc3RpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGl0cyBhdWRpdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzOCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MzQuMzM1Njk5NzA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGJpbmZtdF9taXNjYCByZWdpc3RyYXRpb24gc3RyaW5ncyBieSByZXN0cmljdGluZyB0aGUgYWxsb3dlZCBkZWxpbWl0ZXIgY2hhcmFjdGVycyB0byBBU0NJSSBwdW5jdHVhdGlvbiAoZXhjbHVkaW5nIGJhY2tzbGFzaCkuIEl0IHJlcGxhY2VzIGEgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIHN0cmljdGVyIGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBpbiBwYXJzaW5nIHVzZXIgaW5wdXQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBwYXJzaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 16:05:20 +0000 UTC FinishedAt: 2026-08-26 16:26:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC" ], "series_id": "b15b057d-c648-4a5c-abcb-6f3620a1476d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCSU5GTVRfTUlTQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgbG9naWMgZm9yIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBvdGhlciB0aGFuIGJhY2tzbGFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB3cml0aW5nIHRvIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RlciBmaWxlLiBGdXp6aW5nIHRoZSByZWdpc3RyYXRpb24gd3JpdGUgaGFuZGxlciBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTksNiAmIzQzOzE5LDkgQEAgVG8gYWN0dWFsbHkgcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IHR5cGUsIHlvdSBoYXZlIHRvIHNldCB1cCBhIHN0cmluZyBsb29raW5nIGxpa2VcbiBgYDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3NgYCAod2hlcmUgeW91IGNhbiBjaG9vc2UgdGhlXG4gYGA6YGAgdXBvbiB5b3VyIG5lZWRzKSBhbmQgZWNobyBpdCB0byBgYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmBgLlxuIFxuJiM0MztUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueVxuJiM0MztBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0aGUgYmFja3NsYXNoIGBgXFxgYC5cbiYjNDM7XG4gSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiBcbiAtIGBgbmFtZWBgXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IGRkZmQzYWE1N2FjODcuLjgwOWM5MWQyMWIzOTggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMTAwLDYgJiM0MzsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdHJldHVybiBjICE9ICYjMzk7XFxcXCYjMzk7O1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcdFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXG5AQCAtODcyLDEwICYjNDM7ODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXG4gXHRkZWwgPSAqcCYjNDM7JiM0Mzs7XHQvKiBkZWxpbWl0ZXIgKi9cbiBcbi1cdHByX2RlYnVnKFwmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXG5cJiMzNDssIGRlbCwgZGVsKTtcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeFxcblwmIzM0OywgZGVsKTtcbiBcbi1cdC8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovXG4tXHRpZiAobWlzY19mbGFnX2J5X2NoYXIoZGVsKSlcbiYjNDM7XHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHQvKiBQYWQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWxpbSB0byBzaW1wbGlmeSBwYXJzaW5nIGJlbG93LiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTQ1LDYgJiM0Mzs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X3RyYW5zcGFyZW50X2ludGVycFxuIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19sb2FkZXJcbiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWNcbiBcbiYjNDM7IyBPbmx5IEFTQ0lJIHB1bmN0dWF0aW9uIGRlbGltaXRzIHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcsIHNvIGEgbmV3XG4mIzQzOyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfZGVsaW1cbiYjNDM7XG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0OiBhIGxpYmJwZiBoYXJuZXNzIHBsdXMgaXRzXG4gIyBzdHJ1Y3Rfb3BzIG9iamVjdHMgYW5kIHRoZSB0ZXN0IGludGVycHJldGVyL2FwcCBpdCByb3V0ZXMgYmV0d2Vlbi4gT25seVxuICMgYnVpbHQgd2hlbiBjbGFuZywgYnBmdG9vbCwgdGhlIHZtbGludXggQlRGIGFuZCBsaWJicGYgYXJlIGFsbCBwcmVzZW50XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZjMTdjYjc4NTQ1MFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jXG5AQCAtMCwwICYjNDM7MSwxMjcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB3aGljaCBjaGFyYWN0ZXJzIG1heSBkZWxpbWl0IHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JpbmZtdF9taXNjX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU5UUllcdFwmIzM0O2JtZGVsaW1cJiMzNDtcbiYjNDM7LyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovXG4mIzQzOyNkZWZpbmUgTUFHSUNcdFwmIzM0O2JtbWFnaWNcJiMzNDtcbiYjNDM7I2RlZmluZSBJTlRFUlBcdFwmIzM0Oy9iaW4vdHJ1ZVwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQVNDSUkgcHVuY3R1YXRpb24gd2l0aG91dCAmIzM5O1xcJiMzOTsgYW5kICYjMzk7LyYjMzk7LiBUaGUgYmFja3NsYXNoIGlzIHJlZnVzZWQgYmVjYXVzZVxuJiM0MzsgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXFx4IHRvIGVzY2FwZSBzaG9ydC4gJiMzOTsvJiMzOTsgaXMgYWNjZXB0ZWRcbiYjNDM7ICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQVU5DVFVBVElPTlx0XCYjMzQ7IVxcXCYjMzQ7IyQlXHUwMDI2JiMzOTsoKSomIzQzOywtLjo7XHUwMDNjPVx1MDAzZT9AW11eX2B7fH1+XCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiAmIzM5O00mIzM5OywgJiMzOTtFJiMzOTsgYW5kICYjMzk7QiYjMzk7IG5hbWUgdHlwZXMsICYjMzk7UCYjMzk7IHRocm91Z2ggJiMzOTtEJiMzOTsgYXJlIHRoZSBmbGFncy4gKi9cbiYjNDM7I2RlZmluZSBMRVRURVJTXHRcdFwmIzM0O01FQlBPQ0ZUTERxelwmIzM0O1xuJiM0MzsjZGVmaW5lIERJR0lUU1x0XHRcJiMzNDswMTU3XCYjMzQ7XG4mIzQzOyNkZWZpbmUgV0hJVEVTUEFDRVx0XCYjMzQ7IFxcdFxcblwmIzM0O1xuJiM0MzsjZGVmaW5lIENPTlRST0xcdFx0XCYjMzQ7XFwwMDFcXDAzM1xcMTc3XCYjMzQ7XG4mIzQzOyNkZWZpbmUgTk9OX0FTQ0lJXHRcJiMzNDtcXDIwMFxcMjQ0XFwzNzdcJiMzNDtcbiYjNDM7XG4mIzQzOy8qICYjMzk7OmJtZGVsaW06RTo6Ym1tYWdpYzo6L2Jpbi90cnVlOiYjMzk7IHdpdGggQGRlbCBpbiBwbGFjZSBvZiBldmVyeSAmIzM5OzomIzM5Oy4gKi9cbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl93aXRoKGNoYXIgZGVsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBydWxlWzEyOF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7JWMlcyVjRSVjJWMlcyVjJWMlcyVjXCYjMzQ7LCBkZWwsIEVOVFJZLCBkZWwsXG4mIzQzO1x0XHQgZGVsLCBkZWwsIE1BR0lDLCBkZWwsIGRlbCwgSU5URVJQLCBkZWwpO1xuJiM0MztcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBleHBlY3RfcmVmdXNlZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnNldClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKmQ7XG4mIzQzO1xuJiM0MztcdGZvciAoZCA9IHNldDsgKmQ7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmMgPSByZWdpc3Rlcl93aXRoKCpkKTtcbiYjNDM7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmMsIC0xKVxuJiM0MztcdFx0XHRUSF9MT0coXCYjMzQ7JSN4IGRlbGltaXRlZCBhIHJlZ2lzdGVyIHN0cmluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcbiYjNDM7XHRcdGlmIChyYyA9PSAwKSB7XG4mIzQzO1x0XHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkUoZGVsaW0pIHtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAoZGVsaW0pXG4mIzQzO3tcbiYjNDM7XHRpZiAoZ2V0dWlkKCkgIT0gMClcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDt0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcJiMzNDspO1xuJiM0MztcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7bm8gYmluZm10X21pc2NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBIGtlcm5lbCB3aXRob3V0IHRoZSBhbGxvdy1saXN0IHRha2VzIGFueSBjaGFyYWN0ZXIgYnV0IGEgZmxhZy4gKi9cbiYjNDM7XHRpZiAocmVnaXN0ZXJfd2l0aCgmIzM5O3EmIzM5OykgPT0gMCkge1xuJiM0MztcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlIGRlbGltaXRlciBhbGxvdy1saXN0XCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXG4mIzQzO3tcbiYjNDM7XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHVuY3R1YXRpb24gZGVsaW1pdHMsIHdoaWNoIGlzIGFsbCBhbnl0aGluZyBkZXBsb3llZCBldmVyIHVzZXMuICovXG4mIzQzO1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApXG4mIzQzO1x0XHRcdFRIX0xPRyhcJiMzNDsmIzM5OyVjJiMzOTsgcmVmdXNlZCB3aXRoIGVycm5vICVkXCYjMzQ7LCAqZCwgZXJybm8pO1xuJiM0MztcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cbiYjNDM7VEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqL1xuJiM0MztURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZClcbiYjNDM7e1xuJiM0MztcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZClcbiYjNDM7e1xuJiM0MztcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovXG4mIzQzO1RFU1RfRihkZWxpbSwgYmFja3NsYXNoX3JlZnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFwmIzM0O1xcXFxcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE4bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2ZhMjIzNDM3MGFmYTk2YWE0ZjhkODAzNTEzOTQ1MmEzMzYzNTY0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjA3OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTksNiAmIzQzOzE5LDkgQEAgVG8gYWN0dWFsbHkgcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IHR5cGUsIHlvdSBoYXZlIHRvIHNldCB1cCBhIHN0cmluZyBsb29raW5nIGxpa2UKIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGUKIGBgOmBgIHVwb24geW91ciBuZWVkcykgYW5kIGVjaG8gaXQgdG8gYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgYC4KIAomIzQzO1RoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyBpcyBpdHMgZmllbGQgZGVsaW1pdGVyIGFuZCBjYW4gYmUgYW55CiYjNDM7QVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVyIG90aGVyIHRoYW4gdGhlIGJhY2tzbGFzaCBgYFxgYC4KJiM0MzsKIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46CiAKIC0gYGBuYW1lYGAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IGRkZmQzYWE1N2FjODcuLjgwOWM5MWQyMWIzOTggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTAwLDYgJiM0MzsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBtaXNjX3ZhbGlkX2RlbGltKGNvbnN0IGNoYXIgYykKJiM0Mzt7CiYjNDM7CWlmICghaXNhc2NpaShjKSB8fCAhaXNwdW5jdChjKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIGMgIT0gJiMzOTtcXCYjMzk7OwomIzQzO30KJiM0MzsKIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogdHlwZSwgc3RhdHVzLCBldGMuICovCkBAIC04NzIsMTAgJiM0Mzs4NzksOSBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAogCWRlbCA9ICpwJiM0MzsmIzQzOzsJLyogZGVsaW1pdGVyICovCiAKLQlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cbiYjMzQ7LCBkZWwsIGRlbCk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGRlbGltOiAlI3hcbiYjMzQ7LCBkZWwpOwogCi0JLyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi8KLQlpZiAobWlzY19mbGFnX2J5X2NoYXIoZGVsKSkKJiM0MzsJaWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJLyogUGFkIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsaW0gdG8gc2ltcGxpZnkgcGFyc2luZyBiZWxvdy4gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCmluZGV4IGI2NDBhZjhmMDJiNTEuLjIyMjBlZDM0NWU5MjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQpAQCAtNDUsNiAmIzQzOzQ1LDEwIEBAIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfbG9hZGVyCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWMKIAomIzQzOyMgT25seSBBU0NJSSBwdW5jdHVhdGlvbiBkZWxpbWl0cyB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLCBzbyBhIG5ldwomIzQzOyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLgomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kZWxpbQomIzQzOwogIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgmIzM5O0ImIzM5OykgaGFuZGxlciB0ZXN0OiBhIGxpYmJwZiBoYXJuZXNzIHBsdXMgaXRzCiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5CiAjIGJ1aWx0IHdoZW4gY2xhbmcsIGJwZnRvb2wsIHRoZSB2bWxpbnV4IEJURiBhbmQgbGliYnBmIGFyZSBhbGwgcHJlc2VudApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmYzE3Y2I3ODU0NTAKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmMKQEAgLTAsMCAmIzQzOzEsMTI3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIFRlc3Qgd2hpY2ggY2hhcmFjdGVycyBtYXkgZGVsaW1pdCB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiaW5mbXRfbWlzY19jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOVFJZCSYjMzQ7Ym1kZWxpbSYjMzQ7CiYjNDM7LyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovCiYjNDM7I2RlZmluZSBNQUdJQwkmIzM0O2JtbWFnaWMmIzM0OwomIzQzOyNkZWZpbmUgSU5URVJQCSYjMzQ7L2Jpbi90cnVlJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFTQ0lJIHB1bmN0dWF0aW9uIHdpdGhvdXQgJiMzOTtcJiMzOTsgYW5kICYjMzk7LyYjMzk7LiBUaGUgYmFja3NsYXNoIGlzIHJlZnVzZWQgYmVjYXVzZQomIzQzOyAqIGl0IHdvdWxkIGN1dCBhIG1hZ2ljIHRoYXQgdXNlcyBceCB0byBlc2NhcGUgc2hvcnQuICYjMzk7LyYjMzk7IGlzIGFjY2VwdGVkCiYjNDM7ICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUFVOQ1RVQVRJT04JJiMzNDshXCYjMzQ7IyQlJmFtcDsmIzM5OygpKiYjNDM7LC0uOjsmbHQ7PSZndDs/QFtdXl9ge3x9fiYjMzQ7CiYjNDM7CiYjNDM7LyogJiMzOTtNJiMzOTssICYjMzk7RSYjMzk7IGFuZCAmIzM5O0ImIzM5OyBuYW1lIHR5cGVzLCAmIzM5O1AmIzM5OyB0aHJvdWdoICYjMzk7RCYjMzk7IGFyZSB0aGUgZmxhZ3MuICovCiYjNDM7I2RlZmluZSBMRVRURVJTCQkmIzM0O01FQlBPQ0ZUTERxeiYjMzQ7CiYjNDM7I2RlZmluZSBESUdJVFMJCSYjMzQ7MDE1NyYjMzQ7CiYjNDM7I2RlZmluZSBXSElURVNQQUNFCSYjMzQ7IFx0XG4mIzM0OwomIzQzOyNkZWZpbmUgQ09OVFJPTAkJJiMzNDtcMDAxXDAzM1wxNzcmIzM0OwomIzQzOyNkZWZpbmUgTk9OX0FTQ0lJCSYjMzQ7XDIwMFwyNDRcMzc3JiMzNDsKJiM0MzsKJiM0MzsvKiAmIzM5OzpibWRlbGltOkU6OmJtbWFnaWM6Oi9iaW4vdHJ1ZTomIzM5OyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJiMzOTs6JiMzOTsuICovCiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl93aXRoKGNoYXIgZGVsKQomIzQzO3sKJiM0MzsJY2hhciBydWxlWzEyOF07CiYjNDM7CiYjNDM7CXNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgJiMzNDslYyVzJWNFJWMlYyVzJWMlYyVzJWMmIzM0OywgZGVsLCBFTlRSWSwgZGVsLAomIzQzOwkJIGRlbCwgZGVsLCBNQUdJQywgZGVsLCBkZWwsIElOVEVSUCwgZGVsKTsKJiM0MzsJcmV0dXJuIHdyaXRlX3JlZyhydWxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gY2hhcmFjdGVyIG9mIEBzZXQgbWF5IGRlbGltaXQgYSByZWdpc3RlciBzdHJpbmcuICovCiYjNDM7c3RhdGljIHZvaWQgZXhwZWN0X3JlZnVzZWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBjb25zdCBjaGFyICpzZXQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpkOwomIzQzOwomIzQzOwlmb3IgKGQgPSBzZXQ7ICpkOyBkJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJjID0gcmVnaXN0ZXJfd2l0aCgqZCk7CiYjNDM7CiYjNDM7CQlFWFBFQ1RfRVEocmMsIC0xKQomIzQzOwkJCVRIX0xPRygmIzM0OyUjeCBkZWxpbWl0ZWQgYSByZWdpc3RlciBzdHJpbmcmIzM0OywKJiM0MzsJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIpKmQpOwomIzQzOwkJaWYgKHJjID09IDApIHsKJiM0MzsJCQl1bnJlZ2lzdGVyKEVOVFJZKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCUVYUEVDVF9FUShlcnJubywgRUlOVkFMKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKGRlbGltKSB7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKGRlbGltKQomIzQzO3sKJiM0MzsJaWYgKGdldHVpZCgpICE9IDApCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDt0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3QmIzM0Oyk7CiYjNDM7CWlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBiaW5mbXRfbWlzYyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQSBrZXJuZWwgd2l0aG91dCB0aGUgYWxsb3ctbGlzdCB0YWtlcyBhbnkgY2hhcmFjdGVyIGJ1dCBhIGZsYWcuICovCiYjNDM7CWlmIChyZWdpc3Rlcl93aXRoKCYjMzk7cSYjMzk7KSA9PSAwKSB7CiYjNDM7CQl1bnJlZ2lzdGVyKEVOVFJZKTsKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O2tlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdCYjMzQ7KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGRlbGltKQomIzQzO3sKJiM0MzsJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqLwomIzQzO1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpkOwomIzQzOwomIzQzOwlmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQmIzQzOyYjNDM7KSB7CiYjNDM7CQlFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApCiYjNDM7CQkJVEhfTE9HKCYjMzQ7JiMzOTslYyYjMzk7IHJlZnVzZWQgd2l0aCBlcnJubyAlZCYjMzQ7LCAqZCwgZXJybm8pOwomIzQzOwkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogTGV0dGVycyBuYW1lIHRoZSB0eXBlcyBhbmQgdGhlIGZsYWdzLCBzbyBub25lIG9mIHRoZW0gY2FuIGRlbGltaXQuICovCiYjNDM7VEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqLwomIzQzO1RFU1RfRihkZWxpbSwgZGlnaXRzX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIERJR0lUUyk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihkZWxpbSwgd2hpdGVzcGFjZV9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBXSElURVNQQUNFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGRlbGltLCBjb250cm9sX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIENPTlRST0wpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZGVsaW0sIG5vbl9hc2NpaV9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBOT05fQVNDSUkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZXNjYXBlIGNoYXJhY3RlciB3b3VsZCBjdXQgZXZlcnkgbWFnaWMgdGhhdCB1c2VzIG9uZSBzaG9ydC4gKi8KJiM0MztURVNUX0YoZGVsaW0sIGJhY2tzbGFzaF9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCAmIzM0O1xcJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTQzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogYmluZm10X21pc2MgRGVsaW1pdGVyIFJlc3RyaWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCYjMzk7cyB0b3VjaGluZyBgZnMvYmluZm10X21pc2MuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aWdodGVuaW5nIHVwIHRoZSBhbGxvd2VkIGRlbGltaXRlcnMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MuIFByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBpZiBhIGNoYXJhY3RlciB3YXMgYSBmbGFnLCBidXQgbm93IGl0JiMzOTtzIHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQgbWUgZGlnIGludG8gYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hlcmUgYGNyZWF0ZV9lbnRyeWAgaXMgdXNlZC4gQWhhLCBmb3VuZCBpdCEgVGhlIHBhdGNoIHRvdWNoZXMgYGNyZWF0ZV9lbnRyeWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBzb21lb25lIHdyaXRlcyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYC4gU28sIHRoaXMgaXMgYSB1c2Vyc3BhY2UtYWNjZXNzaWJsZSBjaGFuZ2UsIHdoaWNoIG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQgbWlnaHQgZXZlbiBiZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBuYW1lc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIG1vdW50IG9wdGlvbnMsIGFsdGhvdWdoIGluIHRoZSBub3JtYWwgY2FzZSwgaXQgcmVxdWlyZXMgcm9vdC4KCk5vdywgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGNoYW5naW5nIHRoZSBwYXJzaW5nIGxvZ2ljIG9mIGBiaW5mbXRfbWlzY2AsIGFuZCBldmVuIGEgc21hbGwgY2hhbmdlIHRvIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0JiMzOTtzIGFjY2Vzc2libGUsIGV2ZW4gaW4gYSBsaW1pdGVkIHdheSwgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgZXNwZWNpYWxseSBnaXZlbiByb290IGFjY2VzcyBpcyB1c3VhbGx5IHJlcXVpcmVkLgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRyaWdnZXJzIGJpbmZtdF9taXNjLCB3aGVyZSYjMzk7cyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgYGJpbmZtdF9taXNjYD8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBgQ09ORklHX0JJTkZNVF9NSVNDYC4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciB0aGF0IGluIGBmcy9LY29uZmlnLmJpbmZtdGAgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtsbCBsZXQgbWUga25vdyBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZC4gVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQklORk1UX01JU0MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNDQtXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1wmIzM0O1xuLS1cbmZzL0tjb25maWcuYmluZm10LTE3MC1cbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXHRib29sIFwmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBCSU5GTVRfTUlTQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBCSU5GTVRfTUlTQ2AgaXMgdGhlIGNvbmZpZyBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZnMvYmluZm10X21pc2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIHdvcmtzIGludGVybmFsbHksIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhlIGNvcmUgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgY3JlYXRlX2VudHJ5YC4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoZXRoZXIgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24g4oCTIHRoYXQgd2lsbCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBLbm93aW5nIHdoZXJlIGBjcmVhdGVfZW50cnlgIGlzIGludm9rZWQgZnJvbSB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGEgcHJvcGVyIG1lbnRhbCBtb2RlbCBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBCSU5GTVRfTUlTQyBhcmNoaXRlY3R1cmUuIEkmIzM5O20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyZWF0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYz04MzM9c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy04NTYtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDc0LVxuZnMvYmluZm10X21pc2MuYzoxNDc1Olx0ZSA9IGNyZWF0ZV9lbnRyeShidWZmZXIsIGNvdW50KTtcbmZzL2JpbmZtdF9taXNjLmMtMTQ3Ni1cdGlmIChJU19FUlIoZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayoqCgpPa2F5LCBzbyBgY3JlYXRlX2VudHJ5YCBpcyBkZWNsYXJlZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXTigJlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQ7IGl0JiMzOTtzIG5vdCB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gZGlyZWN0bHkuIE5vdywgSSBzZWUgdGhhdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSBjYWxsZXIgb2YgYGNyZWF0ZV9lbnRyeWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBzdWdnZXN0cyBgY3JlYXRlX2VudHJ5YCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB0byByZWdpc3RlciBtYW5pcHVsYXRpb24uIFRoZSBjcml0aWNhbCBwYXRoIGZvciByZWdpc3RlciBvcGVyYXRpb25zIGRlZmluaXRlbHkgcnVucyB0aHJvdWdoIHRoZXNlIHR3by4gTGV0JiMzOTtzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlIHRvIHVuZGVyc3RhbmQgaG93IGBjcmVhdGVfZW50cnlgIGZpdHMgaW4uIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTE0Mzc9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ2Ny1cbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTQ2OS1cdFx0XHQgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jOjE1MTA6XHQud3JpdGVcdFx0PSBibV9yZWdpc3Rlcl93cml0ZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUxMS1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQwCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIFBvdGVudGlhbCBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBgc3RhdGljYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBXYWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgbm93LCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIGFjdHVhbGx5IHRoZSBgLndyaXRlYCBoYW5kbGVyLCB0aGUgZnVuY3Rpb24gdGhhdCB3cml0ZXMgdG8gdGhlIGRldmljZSwgZm9yIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBnb2luZyBvbi4KCkJ1dCBub3cgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYSBiaXQuIFRoaXMgaGFzIG1lIHRoaW5raW5nLCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGRlZmluZWQgYXMgc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvYmluZm10X21pc2MuY2A/IEl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBJIGFtIGN1cmlvdXMgdG8gY2hlY2sgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoaXMgZmlsZS4gTGV0IG1lIGRvIGEgcXVpY2sgYXVkaXQgYW5kIHJldmlldyB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzAKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGZzL2JpbmZtdF9taXNjLmNgIC0gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYGZzL2JpbmZtdF9taXNjLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZW0sIG1lbnRhbGx5IGNhdGFsb2dpbmcgd2hhdCBlYWNoIG9uZSBkb2VzIGFuZCBpdHMgcG90ZW50aWFsIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBrZXJuZWwmIzM5O3MgYmluYXJ5IGZvcm1hdCBoYW5kbGluZy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGEgcG9pbnQgb2YgaW50ZXJlc3QgZm9yIG1vZGlmaWNhdGlvbiwgdnVsbmVyYWJpbGl0eSwgb3Igc2ltcGx5IGFyZWFzIHdoZXJlIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGhlcmUgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBkZWVwZXIgaW50byBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMgb3IgY29kZSBzZWdtZW50cy4gSSYjMzk7bSBnb2luZyB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGZpbGUgaW50ZXJmYWNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUXVpY2sgQW5hbHlzaXM6IEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgY29kZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSB0byBzdGFydC4gSW5zdGVhZCBvZiBnZXR0aW5nIGJvZ2dlZCBkb3duIGluIGFuIGV4aGF1c3RpdmUgY29kZSByZXZpZXcgZnJvbSB0aGUgdG9wIGRvd24sIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIHRhcmdldGVkIHNlYXJjaCB0ZWNobmlxdWVzLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLCB0aGUgY2xhc3NpYyBzdXNwZWN0cyBqdW1wIG91dDogYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBhbmQgcG90ZW50aWFsbHkgYGluaXRfbWlzY19iaW5mbXRgIGlmIGl0IGlzIGEgYmluYXJ5IGZvcm1hdCBoYW5kbGVyLCBvciBhIHZlcnkgb2xkIGluaXQuIFNvLCBJJiMzOTttIHRoaW5raW5nIGEgcXVpY2sgcmVhZCBvZiB0aGUgZmlsZSwgb3IgYSBxdWljayBncmVwIG9uIHRob3NlLCB3aWxsIGxpa2VseSBnaXZlIG1lIGEgdmVyeSByYXBpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O20gaG9waW5nIHRvIGdldCBzb21lIGxvdy1oYW5naW5nIGZydWl0LCBhIGRlY2VudCBzaWduYWwgYW5kIHNvbWUgZWFzeSB3aW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgLippbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjEyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgU3RhdGljIEludGVnZXIgRGVjbGFyYXRpb25zIGluIGBmcy9iaW5mbXRfbWlzYy5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGZzL2JpbmZtdF9taXNjLmNgIGZpbGUuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBzdHVmZiByZWxhdGVkIHRvIGhvdyB0aGVzZSBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzIGFyZSBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgbXkgZmlyc3QgbW92ZT8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBzb21ldGhpbmcgc3BlY2lmaWM6IEkgd2FudCB0byBzZWUgaG93IGludGVnZXIgdmFyaWFibGVzIGFyZSBkZWNsYXJlZCwgcGFydGljdWxhcmx5IGlmIHRoZXkgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWMgaW50YCBvciBqdXN0IGBpbnRgLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHNjb3Bpbmcgb3IgaG93IHRoZXkgYXJlIHVzZWQsIHNvIGEgcXVpY2sgYGdyZXBgIHdpbGwgYmUgZmFzdGVyIHRoYW4gYmxpbmRseSBicm93c2luZy4gTGV0JiMzOTtzIHJ1biBgZ3JlcCAmIzM5O15zdGF0aWMgaW50JiMzOTsgZnMvYmluZm10X21pc2MuY2AgYW5kIHRoZW4gYSBzaW1pbGFyIGBncmVwICYjMzk7XmludCYjMzk7IGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hhdCB3ZSBnZXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGhpZ2hsaWdodCB0aGUgaW1wb3J0YW50IHNlY3Rpb25zIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5LiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBiYXNlbGluZSB0aGUgaW50ZWdlciB1c2FnZSBpbiB0aGUgZmlsZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBuZXh0IGFwcHJvcHJpYXRlIHN0ZXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYGJpbmZtdF9taXNjLmNgIOKAkyBUaW1lIHRvIFRyYWNlIFN0YXRpYyBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgYGZzL2JpbmZtdF9taXNjLmNgIGZpbGUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGJpbmFyeSBmb3JtYXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgaG93IGRpZmZlcmVudCBleGVjdXRhYmxlIHR5cGVzIGFyZSBsb2FkZWQgYW5kIGV4ZWN1dGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBkaXNwYXRjaGVzIGV4ZWN1dGlvbiBvZiB0aG9zZSBmb3JtYXRzLiBXaGF0IEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYXJlIHRoZSBzdGF0aWMgZGVjbGFyYXRpb25zLiBUaGUgc3RhdGljIGRlZmluaXRpb25zIHByb3ZpZGUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB0aGUgT1MgdXNlcyB0byByZWNvZ25pemUgdGhlIGJpbmFyeSBmb3JtYXRzLiBTbywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlZmluaXRpb25zIHdvcmsgYW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQuIFRoZXJlZm9yZSwgSSB3YW50IHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBgc3RhdGljYCBrZXl3b3JkcyBpbiB0aGlzIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZvY3VzZWQgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRoaXMgbW9kdWxlLCBoZWxwaW5nIG1lIGdyYXNwIGl0cyBpbnRlcm5hbCB3b3JraW5ncyB3aXRob3V0IHVubmVjZXNzYXJ5IG5vaXNlLiBJIHdpbGwgdGhlbiBleGFtaW5lIHRoZXNlIHN0YXRpYyBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYGJpbmZtdF9taXNjLmNgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTc3PXN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTgzLVxuZnMvYmluZm10X21pc2MuYzo4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgbWlzY19mbGFnc1tdID0ge1xuZnMvYmluZm10X21pc2MuYy04NS1cdHsgJiMzOTtQJiMzOTssIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwLFx0MCxcdFx0XHRcJiMzNDtwcmVzZXJ2ZSBhcmd2MFwmIzM0O1x0XHR9LFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtOTQtLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXG5mcy9iaW5mbXRfbWlzYy5jOjk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxuZnMvYmluZm10X21pc2MuYy05Ni17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDItXG5mcy9iaW5mbXRfbWlzYy5jOjEwMzpzdGF0aWMgYm9vbCBtaXNjX3ZhbGlkX2RlbGltKGNvbnN0IGNoYXIgYylcbmZzL2JpbmZtdF9taXNjLmMtMTA0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0Nz1ERUZJTkVfU1RBVElDX1NSQ1VfRkFTVChibV9lbnRyaWVzX3NyY3UpO1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTQ5LS8qIENoZWNrIGlmIEBlJiMzOTtzIG1hZ2ljIG1hdGNoZXMgQGJwcm0mIzM5O3MgYnVmZmVyLCBhcHBseWluZyB0aGUgbWFzayBpZiBzZXQuICovXG5mcy9iaW5mbXRfbWlzYy5jOjE1MDpzdGF0aWMgYm9vbCBlbnRyeV9tYXRjaGVzX21hZ2ljKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTUxLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NS0vKiBDaGVjayBpZiBAZSYjMzk7cyByZWdpc3RlcmVkIGV4dGVuc2lvbiBtYXRjaGVzIEBleHQsIE5VTEwgaWYgdGhlcmUgaXMgbm9uZS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTY2OnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfZXh0ZW5zaW9uKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMTY3LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmV4dClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE4OC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTg5OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKlxuZnMvYmluZm10X21pc2MuYy0xOTAtc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTIzNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjM4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTIzOS1cdFx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTI1Mz1iaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMjYzLS8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MjY0OnN0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKVxuZnMvYmluZm10X21pc2MuYy0yNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9MjcyPURFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4tLVxuZnMvYmluZm10X21pc2MuYy0yNzktICovXG5mcy9iaW5mbXRfbWlzYy5jOjI4MDpzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXG5mcy9iaW5mbXRfbWlzYy5jLTI4MS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0yOTEtLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXG5mcy9iaW5mbXRfbWlzYy5jOjI5MjpzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtMjkzLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTMyMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MzIxOnN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtMzIyLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsXG4tLVxuZnMvYmluZm10X21pc2MuYy0zNTgtXG5mcy9iaW5mbXRfbWlzYy5jOjM1OTpzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbmZzL2JpbmZtdF9taXNjLmMtMzYwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM3Ny0gKi9cbmZzL2JpbmZtdF9taXNjLmM6Mzc4OnN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG5mcy9iaW5mbXRfbWlzYy5jLTM3OS17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zOTA9REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM5Mi0vKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG5mcy9iaW5mbXRfbWlzYy5jOjM5MzpzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbmZzL2JpbmZtdF9taXNjLmMtMzk0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQxNy0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NDE4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbmZzL2JpbmZtdF9taXNjLmMtNDE5LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQ0NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NDQ1OnN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy00NDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtNDk1LSAqL1xuZnMvYmluZm10X21pc2MuYzo0OTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgZW50cnlfaW52b2NhdGlvbl9mbGFncyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTQ5Ny1cdFx0XHRcdFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvYmluZm10X21pc2MuYy01MzQtICovXG5mcy9iaW5mbXRfbWlzYy5jOjUzNTpzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy01MzYtXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X21pc2MuYy01NzctICovXG5mcy9iaW5mbXRfbWlzYy5jOjU3ODpzdGF0aWMgaW50IGJ1aWxkX2ludGVycF9hcmd2KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKmludGVycHJldGVyLFxuZnMvYmluZm10X21pc2MuYy01NzktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtNjI3LSAqL1xuZnMvYmluZm10X21pc2MuYzo2Mjg6c3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG5mcy9iaW5mbXRfbWlzYy5jLTYyOS17XG4tLVxuZnMvYmluZm10X21pc2MuYy03MDktICovXG5mcy9iaW5mbXRfbWlzYy5jOjcxMDpzdGF0aWMgY2hhciAqc2NhbmFyZyhjaGFyICpzLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtNzExLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTcyNy0vKiBQYXJzZSB0aGUgJiMzOTtmbGFncyYjMzk7IGZpZWxkLCBzdG9wcGluZyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaXMgbm90IG9uZS4gKi9cbmZzL2JpbmZtdF9taXNjLmM6NzI4OnN0YXRpYyBjaGFyICpjaGVja19zcGVjaWFsX2ZsYWdzKGNoYXIgKnAsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbmZzL2JpbmZtdF9taXNjLmMtNzI5LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTc0MC0vKiBQYXJzZSB0aGUgJiMzOTtvZmZzZXQmIzM5OywgJiMzOTttYWdpYyYjMzk7IGFuZCAmIzM5O21hc2smIzM5OyBmaWVsZHMgb2YgYW4gJiMzOTtNJiMzOTsgZW50cnkuICovXG5mcy9iaW5mbXRfbWlzYy5jOjc0MTpzdGF0aWMgY2hhciAqcGFyc2VfbWFnaWNfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXG5mcy9iaW5mbXRfbWlzYy5jLTc0Mi17XG4tLVxuZnMvYmluZm10X21pc2MuYy04MDEtLyogUGFyc2UgdGhlICYjMzk7bWFnaWMmIzM5OyBmaWVsZCBvZiBhbiAmIzM5O0UmIzM5OyBlbnRyeTogdGhlIGZpbGVuYW1lIGV4dGVuc2lvbi4gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODAyOnN0YXRpYyBjaGFyICpwYXJzZV9leHRlbnNpb25fZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCxcbmZzL2JpbmZtdF9taXNjLmMtODAzLVx0XHRcdFx0ICAgIGNoYXIgZGVsKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtODMyLSAqL1xuZnMvYmluZm10X21pc2MuYzo4MzM6c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcbmZzL2JpbmZtdF9taXNjLmMtODM0LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6ODU1OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy04NTYtXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTEwMDc9ZW51bSBibV9jb21tYW5kIHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwMjAtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwMjE6c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcbmZzL2JpbmZtdF9taXNjLmMtMTAyMi17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDM4LS8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXG5mcy9iaW5mbXRfbWlzYy5jOjEwMzk6c3RhdGljIGludCByZWFkX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuZnMvYmluZm10X21pc2MuYy0xMDQwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTItLyogVGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMDUzOnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JpbmZtdF9taXNjLmMtMTA1NC17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMDU3LVxuZnMvYmluZm10X21pc2MuYzoxMDU4OnN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTkte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTA2My1cbmZzL2JpbmZtdF9taXNjLmM6MTA2NDpzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXG5mcy9iaW5mbXRfbWlzYy5jLTEwNjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTExMy1cbmZzL2JpbmZtdF9taXNjLmM6MTExNDpzdGF0aWMgc3RydWN0IGlub2RlICpibV9nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW1vZGVfdCBtb2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTE1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExMzYtICovXG5mcy9iaW5mbXRfbWlzYy5jOjExMzc6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqaV9iaW5mbXRfbWlzYyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTM4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExNTQtKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE1NTpzdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvYmluZm10X21pc2MuYy0xMTU2LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExODQtICovXG5mcy9iaW5mbXRfbWlzYy5jOjExODU6c3RhdGljIHZvaWQgdW5saW5rX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbmZzL2JpbmZtdF9taXNjLmMtMTE4Ni1cdFx0XHRcdCAgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTIwMC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTIwMTpzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuZnMvYmluZm10X21pc2MuYy0xMjAyLVx0XHRcdFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjA4LS8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cbmZzL2JpbmZtdF9taXNjLmM6MTIwOTpzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xMjEwLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyMjAtLyogUmVtb3ZlIGFsbCBlbnRyaWVzIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZSBAbWlzYyBiZWxvbmdpbmcgdG8gQHNiLiAqL1xuZnMvYmluZm10X21pc2MuYzoxMjIxOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG5mcy9iaW5mbXRfbWlzYy5jLTEyMjItXHRcdFx0XHQgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjUxLSAqL1xuZnMvYmluZm10X21pc2MuYzoxMjUyOnN0YXRpYyBpbnQgYm1fdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9iaW5mbXRfbWlzYy5jLTEyNTMte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTI2Mi1cbmZzL2JpbmZtdF9taXNjLmM6MTI2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYm1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTEyNjQtXHQubG9va3VwXHRcdD0gc2ltcGxlX2xvb2t1cCxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjktXG5mcy9iaW5mbXRfbWlzYy5jOjEyNzA6c3RhdGljIGludCBibV9lbnRyeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvYmluZm10X21pc2MuYy0xMjcxLXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDYtICovXG5mcy9iaW5mbXRfbWlzYy5jOjEzMDc6c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDgtXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzY3LVxuZnMvYmluZm10X21pc2MuYzoxMzY4OnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xMzY5LVx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDI1LVxuZnMvYmluZm10X21pc2MuYzoxNDI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX2VudHJ5X29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE0MjctXHQub3Blblx0XHQ9IGJtX2VudHJ5X29wZW4sXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDM2LS8qIGFkZCB0byBmaWxlc3lzdGVtICovXG5mcy9iaW5mbXRfbWlzYy5jOjE0Mzc6c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvYmluZm10X21pc2MuYy0xNDM4LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjctXG5mcy9iaW5mbXRfbWlzYy5jOjE0Njg6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTUwOC1cbmZzL2JpbmZtdF9taXNjLmM6MTUwOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xuZnMvYmluZm10X21pc2MuYy0xNTEwLVx0LndyaXRlXHRcdD0gYm1fcmVnaXN0ZXJfd3JpdGUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTE1LVxuZnMvYmluZm10X21pc2MuYzoxNTE2OnN0YXRpYyBzc2l6ZV90XG5mcy9iaW5mbXRfbWlzYy5jLTE1MTctYm1fc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1MjYtXG5mcy9iaW5mbXRfbWlzYy5jOjE1Mjc6c3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xNTI4LVx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTAtXG5mcy9iaW5mbXRfbWlzYy5jOjE1NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fc3RhdHVzX29wZXJhdGlvbnMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE1NTItXHQucmVhZFx0XHQ9IGJtX3N0YXR1c19yZWFkLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTU1OC1cbmZzL2JpbmZtdF9taXNjLmM6MTU1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYm1fc3VwZXJfb3BzID0ge1xuZnMvYmluZm10X21pc2MuYy0xNTYwLVx0LnN0YXRmc1x0XHQ9IHNpbXBsZV9zdGF0ZnMsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNTYzLVxuZnMvYmluZm10X21pc2MuYzoxNTY0OnN0YXRpYyBpbnQgYm1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9iaW5mbXRfbWlzYy5jLTE1NjUte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTYzNy1cbmZzL2JpbmZtdF9taXNjLmM6MTYzODpzdGF0aWMgdm9pZCBibV9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTYzOS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjQzLVxuZnMvYmluZm10X21pc2MuYzoxNjQ0OnN0YXRpYyBpbnQgYm1fZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvYmluZm10X21pc2MuYy0xNjQ1LXtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgtXG5mcy9iaW5mbXRfbWlzYy5jOjE2NDk6c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgYm1fY29udGV4dF9vcHMgPSB7XG5mcy9iaW5mbXRfbWlzYy5jLTE2NTAtXHQuZnJlZVx0XHQ9IGJtX2ZyZWUsXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjUzLVxuZnMvYmluZm10X21pc2MuYzoxNjU0OnN0YXRpYyB2b2lkIGJtX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2JpbmZtdF9taXNjLmMtMTY1NS17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjYxLVxuZnMvYmluZm10X21pc2MuYzoxNjYyOnN0YXRpYyBpbnQgYm1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2JpbmZtdF9taXNjLmMtMTY2My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxuZnMvYmluZm10X21pc2MuYzoxNjY4OnN0YXRpYyBzdHJ1Y3QgbGludXhfYmluZm10IG1pc2NfZm9ybWF0ID0ge1xuZnMvYmluZm10X21pc2MuYy0xNjY5LVx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTY3Mi1cbmZzL2JpbmZtdF9taXNjLmM6MTY3MzpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZSA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY3NC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTY4MD1NT0RVTEVfQUxJQVNfRlMoXCYjMzQ7YmluZm10X21pc2NcJiMzNDspO1xuZnMvYmluZm10X21pc2MuYy0xNjgxLVxuZnMvYmluZm10X21pc2MuYzoxNjgyOnN0YXRpYyBpbnQgX19pbml0IGluaXRfbWlzY19iaW5mbXQodm9pZClcbmZzL2JpbmZtdF9taXNjLmMtMTY4My17XG4tLVxuZnMvYmluZm10X21pc2MuYy0xNjg5LVxuZnMvYmluZm10X21pc2MuYzoxNjkwOnN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21pc2NfYmluZm10KHZvaWQpXG5mcy9iaW5mbXRfbWlzYy5jLTE2OTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3MAoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDU0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgYmluZm10X21pc2MgRGVsaW1pdGVyIFJlc3RyaWN0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRlbGltaXRlcnMgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0IHRocm91Z2ggYGJpbmZtdF9taXNjYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY3JlYXRlX2VudHJ5YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBibV9yZWdpc3Rlcl93cml0ZWAuIE5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgYC53cml0ZWAgaGFuZGxlciBmb3IgYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnNgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlIChvciB3aGVyZXZlciBgYmluZm10X21pc2NgIGlzIG1vdW50ZWQpLiBTaW5jZSBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB0aGlzIGNoYW5nZSB0b3VjaGVzIGNvcmUgaW5wdXQgdmFsaWRhdGlvbiBmb3IgYSBrZXJuZWwgZmVhdHVyZS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYGNyZWF0ZV9lbnRyeWAgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVsaW1pdGVyIHBhcnNpbmcgaGFwcGVucywgYnV0IGl04oCZcyBzdGF0aWMuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYyB0b28uIFdhaXQsIGJ1dCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIGFzc2lnbmVkIHRvIGBibV9yZWdpc3Rlcl9vcGVyYXRpb25zLndyaXRlYC4gSXQgY2FuJiMzOTt0IGJlIGlubGluZWQgYXMgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUhIFRoZSBwcm9tcHQgc2F5cyAmIzM0O1ByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyYjMzQ7LgoKTGV0IG1lIGdvIGJhY2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBpbiBgZnMvYmluZm10X21pc2MuY2AuIGBpbml0X21pc2NfYmluZm10YCBpcyBgX19pbml0YCwgc28gbm90IGlkZWFsLiBgbWlzY19mb3JtYXRgIGhhcyBgLmxvYWRfYmluYXJ5ID0gbG9hZF9taXNjX2JpbmFyeWAuIGBibV9mc190eXBlYCBoYXMgYC5pbml0X2ZzX2NvbnRleHQgPSBibV9pbml0X2ZzX2NvbnRleHRgLgoKT2theSwgc28gYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBzdGF0aWMsIHllcywgYnV0IGl04oCZcyBhIGZpbGUgb3BlcmF0aW9uIGhhbmRsZXIgc28gaXQmIzM5O3MgYSBjYWxsYmFjayBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLiBJbiBmYWN0LCBpZiBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQgY2Fubm90IGJlIGZ1bGx5IGlubGluZWQuIFRodXMsIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgYSBnb29kIGNhbmRpZGF0ZS4gQWxzbywgYGxvYWRfbWlzY19iaW5hcnlgIGlzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZS4KCkxldCBtZSBkb3VibGUtY2hlY2sgLSBZZXAsIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgc3RhdGljLiBXYWl0LCBjaGVja2luZyBgZnMvYmluZm10X21pc2MuY2AgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uc+KApiBOb3BlLCBsb29rcyBsaWtlIGV2ZXJ5dGhpbmcgaXMgc3RhdGljIGV4Y2VwdCBmb3IgYGluaXRfbWlzY19iaW5mbXRgIGFuZCBgZXhpdF9taXNjX2JpbmZtdGAuIFNvIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgdGhlIHRvcCBjaG9pY2UgYmVjYXVzZSBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIG5vdCBiZSBpbmxpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qXFxzJiM0MztcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9taXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE0NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgdGhpcyBzdHJhaWdodCBpbiBteSBoZWFkLiBGaXJzdCB0aGluZ3MgZmlyc3Q6IGlzIGBibV9yZWdpc3Rlcl93cml0ZWAgcmVhbGx5IHRoZSBiZXN0IHN5bWJvbCB0byBzdGFydCB3aXRoPyBSaWdodCwgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbW9kaWZpZWQgY29kZSwgc28gaXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UuIENvbmZpcm1lZC4KCk5leHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGNvbmZpZyBpcyB0aGF0IHRpZXMgaW50byB0aGlzOiBgQklORk1UX01JU0NgLiBBbHJpZ2h0LCBnb3QgaXQuCgpOb3csIGFzIGFuIGV4cGVydCBpbiB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJJTkZNVF9NSVNDYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgdGhlIG1vZGlmaWVkIGNvZGUuIExldCBtZSBkZWx2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCSU5GTVRfTUlTQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTEzOD1jb25maWcgQklORk1UX1pGTEFUXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQ1OmNvbmZpZyBCSU5GTVRfTUlTQ1xuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIE1JU0MgYmluYXJpZXNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTQ2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBCSU5GTVRfTUlTQ2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBCSU5GTVRfTUlTQ2Agc2l0dWF0aW9uIGFnYWluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24gYW5kLCBjb252ZXJzZWx5LCB3aGF0IHJlbGllcyBvbiBpdC4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgaWYgSSB3ZXJlIHRvIG1ha2UgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byBpdC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdCwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIHRoaXMgc3BlY2lmaWMgZmlsZSBmb3JtYXQgc3VwcG9ydC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBiaW5hcnkgZm9ybWF0IGhhbmRsZXJzLiBUaGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnByZXRlci1iYXNlZCBmb3JtYXRzLCBhbmQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25jZXJucy4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIHRoZSBtb2R1bGUmIzM5O3MgcGxhY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYmluYXJ5IGV4ZWN1dGlvbiBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD01PWNvbmZpZyBCSU5GTVRfRUxGXG5mcy9LY29uZmlnLmJpbmZtdC02LVx0Ym9vbCBcJiMzNDtLZXJuZWwgc3VwcG9ydCBmb3IgRUxGIGJpbmFyaWVzXCYjMzQ7XG5mcy9LY29uZmlnLmJpbmZtdDo3Olx0ZGVwZW5kcyBvbiBNTVVcbmZzL0tjb25maWcuYmluZm10LTgtXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcbmZzL0tjb25maWcuYmluZm10LTMyLVx0Ym9vbCBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgRUxGIGJpbmFyeSBzdXBwb3J0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL0tjb25maWcuYmluZm10OjMzOlx0ZGVwZW5kcyBvbiBLVU5JVD15IFx1MDAyNlx1MDAyNiBCSU5GTVRfRUxGPXlcbmZzL0tjb25maWcuYmluZm10LTM0LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD00MT1jb25maWcgQ09NUEFUX0JJTkZNVF9FTEZcbmZzL0tjb25maWcuYmluZm10LTQyLVx0ZGVmX2Jvb2wgeVxuZnMvS2NvbmZpZy5iaW5mbXQ6NDM6XHRkZXBlbmRzIG9uIENPTVBBVCBcdTAwMjZcdTAwMjYgQklORk1UX0VMRlxuZnMvS2NvbmZpZy5iaW5mbXQtNDQtXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTU4PWNvbmZpZyBCSU5GTVRfRUxGX0ZEUElDXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtNjAtXHRkZWZhdWx0IHkgaWYgIUJJTkZNVF9FTEZcbmZzL0tjb25maWcuYmluZm10OjYxOlx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFx1MDAyNlx1MDAyNiAhTU1VKVxuZnMvS2NvbmZpZy5iaW5mbXQtNjItXHRzZWxlY3QgRUxGQ09SRVxuLS1cbmZzL0tjb25maWcuYmluZm10PTc3PWNvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xuLS1cbmZzL0tjb25maWcuYmluZm10LTc5LVx0ZGVmYXVsdCB5XG5mcy9LY29uZmlnLmJpbmZtdDo4MDpcdGRlcGVuZHMgb24gQklORk1UX0VMRiBcdTAwMjZcdTAwMjYgRUxGX0NPUkVcbmZzL0tjb25maWcuYmluZm10LTgxLVx0aGVscFxuLS1cbmZzL0tjb25maWcuYmluZm10PTExNj1jb25maWcgQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTExNy1cdGJvb2wgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIGZsYXQgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjExODpcdGRlcGVuZHMgb24gQVJDSF9IQVNfQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTExOS1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xMzE9Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxuZnMvS2NvbmZpZy5iaW5mbXQtMTMyLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjEzMzpcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcbmZzL0tjb25maWcuYmluZm10LTEzNC1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgWkZMQVQgc3VwcG9ydFwmIzM0O1xuZnMvS2NvbmZpZy5iaW5mbXQ6MTQwOlx0ZGVwZW5kcyBvbiBCSU5GTVRfRkxBVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQxLVx0c2VsZWN0IFpMSUJfSU5GTEFURVxuLS1cbmZzL0tjb25maWcuYmluZm10PTE3MT1jb25maWcgQklORk1UX01JU0NfQlBGXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXHRib29sIFwmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcJiMzNDtcbmZzL0tjb25maWcuYmluZm10OjE3MzpcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTc0Olx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbmZzL0tjb25maWcuYmluZm10LTE3NS1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLmJpbmZtdD0xOTM9Y29uZmlnIEVYRUNfS1VOSVRfVEVTVFxuZnMvS2NvbmZpZy5iaW5mbXQtMTk0LVx0Ym9vbCBcJiMzNDtCdWlsZCBleGVjdmUgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuZnMvS2NvbmZpZy5iaW5mbXQ6MTk1Olx0ZGVwZW5kcyBvbiBLVU5JVD15XG5mcy9LY29uZmlnLmJpbmZtdC0xOTYtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmZzL0tjb25maWcuYmluZm10PTIwMT1jb25maWcgQVJDSF9IQVNfRUxGX0NPUkVfRUZMQUdTXG5mcy9LY29uZmlnLmJpbmZtdC0yMDItXHRib29sXG5mcy9LY29uZmlnLmJpbmZtdDoyMDM6XHRkZXBlbmRzIG9uIEJJTkZNVF9FTEYgXHUwMDI2XHUwMDI2IEVMRl9DT1JFXG5mcy9LY29uZmlnLmJpbmZtdC0yMDQtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NzgKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJJTkZNVF9NSVNDIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlIHJldm9sdmVzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgYGZzL0tjb25maWcuYmluZm10YCBmaWxlIHRoYXQgdGhpcyBpcyB0aGUgb25seSBzeW1ib2wgZGVmaW5lZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGUgcmVsZXZhbnQgc3ltYm9sIGhlcmUgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgKm9ubHkqIGVudHJ5IHBvaW50LiBJdCBhcHBlYXJzIHRoYXQgaXQgaXM7IGl0JiMzOTtzIHRoZSBgLndyaXRlYCBoYW5kbGVyIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgIGZpbGUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIHRoZSBgY3JlYXRlX2VudHJ5YCBmdW5jdGlvbiwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgYm1fcmVnaXN0ZXJfd3JpdGVgLiBBaCwgcmlnaHQsIHRoaXMgcGF0Y2ggaXMgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gKmV4Y2VwdCogYFxgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIGFsdGVyaW5nIGhvdyBgYmluZm10X21pc2NgIGhhbmRsZXMgcmVnaXN0cmF0aW9uIHN0cmluZ3MuIEl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgc29tZSBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBpcyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGEgc3RhdGljIGZ1bmN0aW9uPyBZdXAsIGl0IGlzLiBCdXQgd2FpdCwgSSYjMzk7bSBqdXN0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQ/IExldCYjMzk7cyBzZWUuLi4gYGxvYWRfbWlzY19iaW5hcnlgIGlzIHRoZSBgLmxvYWRfYmluYXJ5YCBoYW5kbGVyLiBPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGBibV9yZWdpc3Rlcl93cml0ZWAgZm9yIHdyaXRpbmcsIGFuZCBgbG9hZF9taXNjX2JpbmFyeWAgZm9yIGxvYWRpbmcuIFNpbmNlIHRoZXNlIGFyZSBmdW5jdGlvbiBwb2ludGVycywgSSBrbm93IHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBzbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIHNlZW1zIGxpa2UgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIGlzIHNvbGlkLiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBzZXQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhcnNpbmcgbG9naWMgZm9yIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLCBzcGVjaWZpY2FsbHkgcmVzdHJpY3RpbmcgdGhlIGRlbGltaXRlciBjaGFyYWN0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVycyBvdGhlciB0aGFuIGJhY2tzbGFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZmVhdHVyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB3cml0aW5nIHRvIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RlciBmaWxlLiBGdXp6aW5nIHRoZSByZWdpc3RyYXRpb24gd3JpdGUgaGFuZGxlciBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKaW5kZXggZDI2YjYzYTI3YzI1OS4uOWU4NGI4NzdkMDZkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKQEAgLTE5LDYgJiM0MzsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlCiBgYDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ZmxhZ3NgYCAod2hlcmUgeW91IGNhbiBjaG9vc2UgdGhlCiBgYDpgYCB1cG9uIHlvdXIgbmVlZHMpIGFuZCBlY2hvIGl0IHRvIGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYGAuCiAKJiM0MztUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueQomIzQzO0FTQ0lJIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuIHRoZSBiYWNrc2xhc2ggYGBcYGAuCiYjNDM7CiBIZXJlIGlzIHdoYXQgdGhlIGZpZWxkcyBtZWFuOgogCiAtIGBgbmFtZWBgCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCBkZGZkM2FhNTdhYzg3Li44MDljOTFkMjFiMzk4IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTEwMCw2ICYjNDM7MTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpCiYjNDM7ewomIzQzOwlpZiAoIWlzYXNjaWkoYykgfHwgIWlzcHVuY3QoYykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBjICE9ICYjMzk7XFwmIzM5OzsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgewogCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHR5cGUsIHN0YXR1cywgZXRjLiAqLwpAQCAtODcyLDEwICYjNDM7ODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAKIAlkZWwgPSAqcCYjNDM7JiM0Mzs7CS8qIGRlbGltaXRlciAqLwogCi0JcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeCB7JWN9XG4mIzM0OywgZGVsLCBkZWwpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiBkZWxpbTogJSN4XG4mIzM0OywgZGVsKTsKIAotCS8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovCi0JaWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpCiYjNDM7CWlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCS8qIFBhZCB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbGltIHRvIHNpbXBsaWZ5IHBhcnNpbmcgYmVsb3cuICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQppbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKQEAgLTQ1LDYgJiM0Mzs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X3RyYW5zcGFyZW50X2ludGVycAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2xvYWRlcgogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9sb2FkZXJfcGF5bG9hZCBiaW5mbXRfbG9hZGVyX3BheWxvYWRfc3RhdGljCiAKJiM0MzsjIE9ubHkgQVNDSUkgcHVuY3R1YXRpb24gZGVsaW1pdHMgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZywgc28gYSBuZXcKJiM0MzsjIGZsYWcgY2hhcmFjdGVyIGNhbm5vdCBjaGFuZ2Ugd2hpY2ggc3RyaW5ncyByZWdpc3Rlci4gTm8gYnBmIHRvb2xjaGFpbi4KJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2NfZGVsaW0KJiM0MzsKICMgYmluZm10X21pc2MgYnBmLWJhY2tlZCAoJiMzOTtCJiMzOTspIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0cwogIyBzdHJ1Y3Rfb3BzIG9iamVjdHMgYW5kIHRoZSB0ZXN0IGludGVycHJldGVyL2FwcCBpdCByb3V0ZXMgYmV0d2Vlbi4gT25seQogIyBidWlsdCB3aGVuIGNsYW5nLCBicGZ0b29sLCB0aGUgdm1saW51eCBCVEYgYW5kIGxpYmJwZiBhcmUgYWxsIHByZXNlbnQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZmMxN2NiNzg1NDUwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kZWxpbS5jCkBAIC0wLDAgJiM0MzsxLDEyNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBUZXN0IHdoaWNoIGNoYXJhY3RlcnMgbWF5IGRlbGltaXQgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YmluZm10X21pc2NfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBFTlRSWQkmIzM0O2JtZGVsaW0mIzM0OwomIzQzOy8qIFNoYXJlcyBubyBjaGFyYWN0ZXIgd2l0aCB0aGUgc2V0cyBiZWxvdywgb3IgYSByZWZ1c2FsIHByb3ZlcyBub3RoaW5nLiAqLwomIzQzOyNkZWZpbmUgTUFHSUMJJiMzNDtibW1hZ2ljJiMzNDsKJiM0MzsjZGVmaW5lIElOVEVSUAkmIzM0Oy9iaW4vdHJ1ZSYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBU0NJSSBwdW5jdHVhdGlvbiB3aXRob3V0ICYjMzk7XCYjMzk7IGFuZCAmIzM5Oy8mIzM5Oy4gVGhlIGJhY2tzbGFzaCBpcyByZWZ1c2VkIGJlY2F1c2UKJiM0MzsgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXHggdG8gZXNjYXBlIHNob3J0LiAmIzM5Oy8mIzM5OyBpcyBhY2NlcHRlZAomIzQzOyAqIGJ1dCBjYW5ub3QgZGVsaW1pdCBhIHJ1bGUgdGhhdCBuYW1lcyBhbiBhYnNvbHV0ZSBpbnRlcnByZXRlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBVTkNUVUFUSU9OCSYjMzQ7IVwmIzM0OyMkJSZhbXA7JiMzOTsoKSomIzQzOywtLjo7Jmx0Oz0mZ3Q7P0BbXV5fYHt8fX4mIzM0OwomIzQzOwomIzQzOy8qICYjMzk7TSYjMzk7LCAmIzM5O0UmIzM5OyBhbmQgJiMzOTtCJiMzOTsgbmFtZSB0eXBlcywgJiMzOTtQJiMzOTsgdGhyb3VnaCAmIzM5O0QmIzM5OyBhcmUgdGhlIGZsYWdzLiAqLwomIzQzOyNkZWZpbmUgTEVUVEVSUwkJJiMzNDtNRUJQT0NGVExEcXomIzM0OwomIzQzOyNkZWZpbmUgRElHSVRTCQkmIzM0OzAxNTcmIzM0OwomIzQzOyNkZWZpbmUgV0hJVEVTUEFDRQkmIzM0OyBcdFxuJiMzNDsKJiM0MzsjZGVmaW5lIENPTlRST0wJCSYjMzQ7XDAwMVwwMzNcMTc3JiMzNDsKJiM0MzsjZGVmaW5lIE5PTl9BU0NJSQkmIzM0O1wyMDBcMjQ0XDM3NyYjMzQ7CiYjNDM7CiYjNDM7LyogJiMzOTs6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JiMzOTsgd2l0aCBAZGVsIGluIHBsYWNlIG9mIGV2ZXJ5ICYjMzk7OiYjMzk7LiAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfd2l0aChjaGFyIGRlbCkKJiM0Mzt7CiYjNDM7CWNoYXIgcnVsZVsxMjhdOwomIzQzOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7JWMlcyVjRSVjJWMlcyVjJWMlcyVjJiMzNDssIGRlbCwgRU5UUlksIGRlbCwKJiM0MzsJCSBkZWwsIGRlbCwgTUFHSUMsIGRlbCwgZGVsLCBJTlRFUlAsIGRlbCk7CiYjNDM7CXJldHVybiB3cml0ZV9yZWcocnVsZSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqLwomIzQzO3N0YXRpYyB2b2lkIGV4cGVjdF9yZWZ1c2VkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqc2V0KQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqZDsKJiM0MzsKJiM0MzsJZm9yIChkID0gc2V0OyAqZDsgZCYjNDM7JiM0MzspIHsKJiM0MzsJCWludCByYyA9IHJlZ2lzdGVyX3dpdGgoKmQpOwomIzQzOwomIzQzOwkJRVhQRUNUX0VRKHJjLCAtMSkKJiM0MzsJCQlUSF9MT0coJiMzNDslI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nJiMzNDssCiYjNDM7CQkJICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTsKJiM0MzsJCWlmIChyYyA9PSAwKSB7CiYjNDM7CQkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRShkZWxpbSkgewomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChkZWxpbSkKJiM0Mzt7CiYjNDM7CWlmIChnZXR1aWQoKSAhPSAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBtdXN0IGJlIHJ1biBhcyByb290JiMzNDspOwomIzQzOwlpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gYmluZm10X21pc2MmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEEga2VybmVsIHdpdGhvdXQgdGhlIGFsbG93LWxpc3QgdGFrZXMgYW55IGNoYXJhY3RlciBidXQgYSBmbGFnLiAqLwomIzQzOwlpZiAocmVnaXN0ZXJfd2l0aCgmIzM5O3EmIzM5OykgPT0gMCkgewomIzQzOwkJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgZGVsaW1pdGVyIGFsbG93LWxpc3QmIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihkZWxpbSkKJiM0Mzt7CiYjNDM7CXVucmVnaXN0ZXIoRU5UUlkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQdW5jdHVhdGlvbiBkZWxpbWl0cywgd2hpY2ggaXMgYWxsIGFueXRoaW5nIGRlcGxveWVkIGV2ZXIgdXNlcy4gKi8KJiM0MztURVNUX0YoZGVsaW0sIHB1bmN0dWF0aW9uX2FjY2VwdGVkKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqZDsKJiM0MzsKJiM0MzsJZm9yIChkID0gUFVOQ1RVQVRJT047ICpkOyBkJiM0MzsmIzQzOykgewomIzQzOwkJRVhQRUNUX0VRKHJlZ2lzdGVyX3dpdGgoKmQpLCAwKQomIzQzOwkJCVRIX0xPRygmIzM0OyYjMzk7JWMmIzM5OyByZWZ1c2VkIHdpdGggZXJybm8gJWQmIzM0OywgKmQsIGVycm5vKTsKJiM0MzsJCXVucmVnaXN0ZXIoRU5UUlkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIExldHRlcnMgbmFtZSB0aGUgdHlwZXMgYW5kIHRoZSBmbGFncywgc28gbm9uZSBvZiB0aGVtIGNhbiBkZWxpbWl0LiAqLwomIzQzO1RFU1RfRihkZWxpbSwgbGV0dGVyc19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi8KJiM0MztURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKQomIzQzO3sKJiM0MzsJZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovCiYjNDM7VEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZCkKJiM0Mzt7CiYjNDM7CWV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgJiMzNDtcXCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYmluZm10X21pc2NgIERlbGltaXRlciBSZXN0cmljdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgZnMvYmluZm10X21pc2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBhIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlLCB0aWdodGVuaW5nIHVwIHRoZSBpbnB1dCB2YWxpZGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIGJyb2FkZXIgdmFsaWRhdGlvbiB1c2luZyBgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpYC4gVGhpcyBuZXcgZnVuY3Rpb24gcmVzdHJpY3RzIGRlbGltaXRlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLiBUaGUgb2xkIGFwcHJvYWNoIHdhcyB0byBjaGVjayBpZiB0aGUgZGVsaW1pdGVyIHdhcyBhICYjMzk7ZmxhZyYjMzk7IGNoYXJhY3Rlci4KCkxldCYjMzk7cyBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IHBhcnQgb2YgYGZzL2JpbmZtdF9taXNjLmNgIGFyb3VuZCBgY3JlYXRlX2VudHJ5YC4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlOgoKYGBgYwotCS8qIEEgZmxhZy1jaGFyIGRlbGltaXRlciBydW5zIHRoZSBmbGFnIHNjYW4gb2ZmIHRoZSBidWZmZXIuICovCi0JaWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpCiYjNDM7CWlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKYGBgCgpUaGUgb2xkIGNoZWNrIHdhc24mIzM5O3Qgc3VmZmljaWVudDsgaXQgYWxsb3dlZCBmb3IgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGlzIG5ldyBjaGVjayBhcHBlYXJzIHRvIGJlIGEgY2xlYW5lciwgc2FmZXIgYXBwcm9hY2guCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGlzc3Vlcy4gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0JiMzOTtzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gTm9wZSwgaXQmIzM5O3MganVzdCBhIGNvbmRpdGlvbiBjaGVjayBvbiBhIHNpbmdsZSBjaGFyYWN0ZXIsIGBkZWxgLiBEb2VzIGl0IGV4cG9zZSBleGlzdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gQWdhaW4sIG5vLiBJdCYjMzk7cyBqdXN0IGlucHV0IHZhbGlkYXRpb24uIEFuZCBkb2VzIGl0IGNvcHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm90IGF0IGFsbC4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvbXBsZXggc3RydWN0dXJlcyBpbnZvbHZlZC4KClRoaXMgYXBwZWFycyB0byBiZSBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSwgYSByZWZpbmVtZW50IG9mIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY2hhcmFjdGVycyBmcm9tIGJlaW5nIHVzZWQgYXMgZGVsaW1pdGVycy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCByZWFsbHkuIEEgcXVpY2sgcmUtY2hlY2sgb2YgYGNyZWF0ZV9lbnRyeWAgaW4gYGZzL2JpbmZtdF9taXNjLmNgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLiB5ZXMsIGFsbCBsb29rcyBnb29kLiBJdCYjMzk7cyBhIGNsZWFuLCBzYWZlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3JlYXRlX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYmluZm10X21pc2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9iaW5mbXRfbWlzYy5jPTgzMz1zdGF0aWMgY2hhciAqcGFyc2VfYnBmX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtODU0LSAqL1xuZnMvYmluZm10X21pc2MuYzo4NTU6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQ2OD1zdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXG5mcy9iaW5mbXRfbWlzYy5jOjE0NzU6XHRlID0gY3JlYXRlX2VudHJ5KGJ1ZmZlciwgY291bnQpO1xuZnMvYmluZm10X21pc2MuYy0xNDc2LVx0aWYgKElTX0VSUihlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzOAoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWN1cml0eSBJbXBsaWNhdGlvbnMgb2YgVGhpcyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgY3JlYXRlX2VudHJ5YCBmdW5jdGlvbiBhbmQgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgZGVhbHMgd2l0aCBwYXJzaW5nIGEgc3RyaW5nIGlucHV0IGZyb20gdGhlIHVzZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIHJpZ2h0IGhlcmUsIHdoZXJlIGl0IGV4dHJhY3RzIGEgZGVsaW1pdGVyIGNoYXJhY3RlcjoKCmBgYGMKCWRlbCA9ICpwJiM0MzsmIzQzOzsJLyogZGVsaW1pdGVyICovCgoJcHJfZGVidWcoJiMzNDtyZWdpc3RlcjogZGVsaW06ICUjeFxuJiMzNDssIGRlbCk7CgoJaWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpCgkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtaW5nICYjMzQ7S01TQU4gcmlzayYjMzQ7IGF0IG1lLiBXZSYjMzk7cmUgcmVhZGluZyBhIGRlbGltaXRlciBhbmQgdGhlbiB2YWxpZGF0aW5nIGl0LiBUaGUgYGRlbGAgdmFyaWFibGUgaXRzZWxmIGlzbiYjMzk7dCBiZWluZyB1c2VkIGFzIGEgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2VkLiBXZSYjMzk7cmUgKm5vdCogc2VlaW5nIGFueSBtZW1vcnkgYWxsb2NhdGlvbiwgaW5pdGlhbGl6YXRpb24sIG9yIGFueSBvcGVyYXRpb25zIHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGlzIHBhcnRpY3VsYXIgc25pcHBldCBqdXN0IGNoZWNrcyBpZiBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgdmFsaWQuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIG91ciBzdGFuZGFyZCBtZW1vcnkgZGVidWdnaW5nIHRvb2xzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yIGNhdGNoaW5nIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgdGhhdCAqbWlnaHQqIGV4aXN0IGluIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgIGluIHRoaXMgcGF0Y2ggYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZyBJJiMzOTt2ZSBvdXRsaW5lZCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGFuZCB0aGUgZXhpc3RpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGl0cyBhdWRpdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjA3OjI4LjAxNjk0ODMwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDYzMTg3ODEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGlucHV0IHZhbGlkYXRpb24gbG9naWMgZm9yIGBiaW5mbXRfbWlzY2AgcmVnaXN0cmF0aW9uIHN0cmluZ3MgYnkgcmVzdHJpY3RpbmcgdGhlIGFsbG93ZWQgZGVsaW1pdGVyIGNoYXJhY3RlcnMgdG8gQVNDSUkgcHVuY3R1YXRpb24gKGV4Y2x1ZGluZyBiYWNrc2xhc2gpLiBJdCByZXBsYWNlcyBhIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBzdHJpY3RlciBgbWlzY192YWxpZF9kZWxpbWAgZnVuY3Rpb24uIFRoaXMgaXMgYSBwdXJlbHkgbG9naWNhbCBjaGFuZ2UgaW4gcGFyc2luZyB1c2VyIGlucHV0LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBkdXJpbmcgcGFyc2luZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC4wMTY5NTM0MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzIxNjg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IGQyNmI2M2EyN2MyNTkuLjllODRiODc3ZDA2ZGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xOSw2ICsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlXFxuIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGVcXG4gYGA6YGAgdXBvbiB5b3VyIG5lZWRzKSBhbmQgZWNobyBpdCB0byBgYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmBgLlxcbiBcXG4rVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGl0cyBmaWVsZCBkZWxpbWl0ZXIgYW5kIGNhbiBiZSBhbnlcXG4rQVNDSUkgcHVuY3R1YXRpb24gY2hhcmFjdGVyIG90aGVyIHRoYW4gdGhlIGJhY2tzbGFzaCBgYFxcXFxgYC5cXG4rXFxuIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuIFxcbiAtIGBgbmFtZWBgXFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXFxuaW5kZXggZGRmZDNhYTU3YWM4Ny4uODA5YzkxZDIxYjM5OCAxMDA2NDRcXG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXFxuKysrIGIvZnMvYmluZm10X21pc2MuY1xcbkBAIC0xMDAsNiArMTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXFxuK3tcXG4rXFx0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBjICE9ICdcXFxcXFxcXCc7XFxuK31cXG4rXFxuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFx0XFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXFxuQEAgLTg3MiwxMCArODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcbiBcXHRkZWwgPSAqcCsrO1xcdC8qIGRlbGltaXRlciAqL1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXFxcblxcXCIsIGRlbCwgZGVsKTtcXG4rXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxcXG5cXFwiLCBkZWwpO1xcbiBcXG4tXFx0LyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi9cXG4tXFx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXFxuK1xcdGlmICghbWlzY192YWxpZF9kZWxpbShkZWwpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuIFxcdC8qIFBhZCB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbGltIHRvIHNpbXBsaWZ5IHBhcnNpbmcgYmVsb3cuICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXFxuaW5kZXggYjY0MGFmOGYwMmI1MS4uMjIyMGVkMzQ1ZTkyMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbkBAIC00NSw2ICs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2xvYWRlclxcbiBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfbG9hZGVyX3BheWxvYWQgYmluZm10X2xvYWRlcl9wYXlsb2FkX3N0YXRpY1xcbiBcXG4rIyBPbmx5IEFTQ0lJIHB1bmN0dWF0aW9uIGRlbGltaXRzIHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcsIHNvIGEgbmV3XFxuKyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxcbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kZWxpbVxcbitcXG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgnQicpIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0c1xcbiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5XFxuICMgYnVpbHQgd2hlbiBjbGFuZywgYnBmdG9vbCwgdGhlIHZtbGludXggQlRGIGFuZCBsaWJicGYgYXJlIGFsbCBwcmVzZW50XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZjMTdjYjc4NTQ1MFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcXG5AQCAtMCwwICsxLDEyNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0IHdoaWNoIGNoYXJhY3RlcnMgbWF5IGRlbGltaXQgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZy5cXG4rICovXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJiaW5mbXRfbWlzY19jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuK1xcbisjZGVmaW5lIEVOVFJZXFx0XFxcImJtZGVsaW1cXFwiXFxuKy8qIFNoYXJlcyBubyBjaGFyYWN0ZXIgd2l0aCB0aGUgc2V0cyBiZWxvdywgb3IgYSByZWZ1c2FsIHByb3ZlcyBub3RoaW5nLiAqL1xcbisjZGVmaW5lIE1BR0lDXFx0XFxcImJtbWFnaWNcXFwiXFxuKyNkZWZpbmUgSU5URVJQXFx0XFxcIi9iaW4vdHJ1ZVxcXCJcXG4rXFxuKy8qXFxuKyAqIEFTQ0lJIHB1bmN0dWF0aW9uIHdpdGhvdXQgJ1xcXFwnIGFuZCAnLycuIFRoZSBiYWNrc2xhc2ggaXMgcmVmdXNlZCBiZWNhdXNlXFxuKyAqIGl0IHdvdWxkIGN1dCBhIG1hZ2ljIHRoYXQgdXNlcyBcXFxceCB0byBlc2NhcGUgc2hvcnQuICcvJyBpcyBhY2NlcHRlZFxcbisgKiBidXQgY2Fubm90IGRlbGltaXQgYSBydWxlIHRoYXQgbmFtZXMgYW4gYWJzb2x1dGUgaW50ZXJwcmV0ZXIuXFxuKyAqL1xcbisjZGVmaW5lIFBVTkNUVUFUSU9OXFx0XFxcIiFcXFxcXFxcIiMkJVxcdTAwMjYnKCkqKywtLjo7XFx1MDAzYz1cXHUwMDNlP0BbXV5fYHt8fX5cXFwiXFxuK1xcbisvKiAnTScsICdFJyBhbmQgJ0InIG5hbWUgdHlwZXMsICdQJyB0aHJvdWdoICdEJyBhcmUgdGhlIGZsYWdzLiAqL1xcbisjZGVmaW5lIExFVFRFUlNcXHRcXHRcXFwiTUVCUE9DRlRMRHF6XFxcIlxcbisjZGVmaW5lIERJR0lUU1xcdFxcdFxcXCIwMTU3XFxcIlxcbisjZGVmaW5lIFdISVRFU1BBQ0VcXHRcXFwiIFxcXFx0XFxcXG5cXFwiXFxuKyNkZWZpbmUgQ09OVFJPTFxcdFxcdFxcXCJcXFxcMDAxXFxcXDAzM1xcXFwxNzdcXFwiXFxuKyNkZWZpbmUgTk9OX0FTQ0lJXFx0XFxcIlxcXFwyMDBcXFxcMjQ0XFxcXDM3N1xcXCJcXG4rXFxuKy8qICc6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJzonLiAqL1xcbitzdGF0aWMgaW50IHJlZ2lzdGVyX3dpdGgoY2hhciBkZWwpXFxuK3tcXG4rXFx0Y2hhciBydWxlWzEyOF07XFxuK1xcbitcXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCIlYyVzJWNFJWMlYyVzJWMlYyVzJWNcXFwiLCBkZWwsIEVOVFJZLCBkZWwsXFxuK1xcdFxcdCBkZWwsIGRlbCwgTUFHSUMsIGRlbCwgZGVsLCBJTlRFUlAsIGRlbCk7XFxuK1xcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XFxuK31cXG4rXFxuKy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xcbitzdGF0aWMgdm9pZCBleHBlY3RfcmVmdXNlZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnNldClcXG4re1xcbitcXHRjb25zdCBjaGFyICpkO1xcbitcXG4rXFx0Zm9yIChkID0gc2V0OyAqZDsgZCsrKSB7XFxuK1xcdFxcdGludCByYyA9IHJlZ2lzdGVyX3dpdGgoKmQpO1xcbitcXG4rXFx0XFx0RVhQRUNUX0VRKHJjLCAtMSlcXG4rXFx0XFx0XFx0VEhfTE9HKFxcXCIlI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcXG4rXFx0XFx0aWYgKHJjID09IDApIHtcXG4rXFx0XFx0XFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0fVxcbit9XFxuK1xcbitGSVhUVVJFKGRlbGltKSB7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKGRlbGltKVxcbit7XFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFxcXCIpO1xcbitcXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIGJpbmZtdF9taXNjXFxcIik7XFxuK1xcbitcXHQvKiBBIGtlcm5lbCB3aXRob3V0IHRoZSBhbGxvdy1saXN0IHRha2VzIGFueSBjaGFyYWN0ZXIgYnV0IGEgZmxhZy4gKi9cXG4rXFx0aWYgKHJlZ2lzdGVyX3dpdGgoJ3EnKSA9PSAwKSB7XFxuK1xcdFxcdHVucmVnaXN0ZXIoRU5UUlkpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdFxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXFxuK3tcXG4rXFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK31cXG4rXFxuKy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqL1xcbitURVNUX0YoZGVsaW0sIHB1bmN0dWF0aW9uX2FjY2VwdGVkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKmQ7XFxuK1xcbitcXHRmb3IgKGQgPSBQVU5DVFVBVElPTjsgKmQ7IGQrKykge1xcbitcXHRcXHRFWFBFQ1RfRVEocmVnaXN0ZXJfd2l0aCgqZCksIDApXFxuK1xcdFxcdFxcdFRIX0xPRyhcXFwiJyVjJyByZWZ1c2VkIHdpdGggZXJybm8gJWRcXFwiLCAqZCwgZXJybm8pO1xcbitcXHRcXHR1bnJlZ2lzdGVyKEVOVFJZKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cXG4rVEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXFxuK3tcXG4rXFx0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTtcXG4rfVxcbitcXG4rLyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi9cXG4rVEVTVF9GKGRlbGltLCBkaWdpdHNfcmVmdXNlZClcXG4re1xcbitcXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIERJR0lUUyk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgd2hpdGVzcGFjZV9yZWZ1c2VkKVxcbit7XFxuK1xcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgV0hJVEVTUEFDRSk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgY29udHJvbF9yZWZ1c2VkKVxcbit7XFxuK1xcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgQ09OVFJPTCk7XFxuK31cXG4rXFxuK1RFU1RfRihkZWxpbSwgbm9uX2FzY2lpX3JlZnVzZWQpXFxuK3tcXG4rXFx0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBOT05fQVNDSUkpO1xcbit9XFxuK1xcbisvKiBUaGUgZXNjYXBlIGNoYXJhY3RlciB3b3VsZCBjdXQgZXZlcnkgbWFnaWMgdGhhdCB1c2VzIG9uZSBzaG9ydC4gKi9cXG4rVEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZClcXG4re1xcbitcXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFxcXCJcXFxcXFxcXFxcXCIpO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC41MzA5ODQ5MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTI5MjU0NTYxNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZmEyMjM0MzcwYWZhOTZhYTRmOGQ4MDM1MTM5NDUyYTMzNjM1NjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MDc6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBkMjZiNjNhMjdjMjU5Li45ZTg0Yjg3N2QwNmRlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTksNiArMTksOSBAQCBUbyBhY3R1YWxseSByZWdpc3RlciBhIG5ldyBiaW5hcnkgdHlwZSwgeW91IGhhdmUgdG8gc2V0IHVwIGEgc3RyaW5nIGxvb2tpbmcgbGlrZVxuIGBgOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjpmbGFnc2BgICh3aGVyZSB5b3UgY2FuIGNob29zZSB0aGVcbiBgYDpgYCB1cG9uIHlvdXIgbmVlZHMpIGFuZCBlY2hvIGl0IHRvIGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYGAuXG4gXG4rVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIGlzIGl0cyBmaWVsZCBkZWxpbWl0ZXIgYW5kIGNhbiBiZSBhbnlcbitBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0aGUgYmFja3NsYXNoIGBgXFxgYC5cbitcbiBIZXJlIGlzIHdoYXQgdGhlIGZpZWxkcyBtZWFuOlxuIFxuIC0gYGBuYW1lYGBcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggZGRmZDNhYTU3YWM4Ny4uODA5YzkxZDIxYjM5OCAxMDA2NDRcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcbkBAIC0xMDAsNiArMTAwLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBib29sIG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKVxuK3tcbitcdGlmICghaXNhc2NpaShjKSB8fCAhaXNwdW5jdChjKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIGMgIT0gJ1xcXFwnO1xuK31cbitcbiBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XHRcdC8qIHR5cGUsIHN0YXR1cywgZXRjLiAqL1xuQEAgLTg3MiwxMCArODc5LDkgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXG4gXHRkZWwgPSAqcCsrO1x0LyogZGVsaW1pdGVyICovXG4gXG4tXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4IHslY31cXG5cIiwgZGVsLCBkZWwpO1xuK1x0cHJfZGVidWcoXCJyZWdpc3RlcjogZGVsaW06ICUjeFxcblwiLCBkZWwpO1xuIFxuLVx0LyogQSBmbGFnLWNoYXIgZGVsaW1pdGVyIHJ1bnMgdGhlIGZsYWcgc2NhbiBvZmYgdGhlIGJ1ZmZlci4gKi9cbi1cdGlmIChtaXNjX2ZsYWdfYnlfY2hhcihkZWwpKVxuK1x0aWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuIFx0LyogUGFkIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsaW0gdG8gc2ltcGxpZnkgcGFyc2luZyBiZWxvdy4gKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggYjY0MGFmOGYwMmI1MS4uMjIyMGVkMzQ1ZTkyMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC00NSw2ICs0NSwxMCBAQCBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXG4gVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfbG9hZGVyXG4gVEVTVF9HRU5fRklMRVMgKz0gYmluZm10X2xvYWRlcl9wYXlsb2FkIGJpbmZtdF9sb2FkZXJfcGF5bG9hZF9zdGF0aWNcbiBcbisjIE9ubHkgQVNDSUkgcHVuY3R1YXRpb24gZGVsaW1pdHMgdGhlIGZpZWxkcyBvZiBhIHJlZ2lzdGVyIHN0cmluZywgc28gYSBuZXdcbisjIGZsYWcgY2hhcmFjdGVyIGNhbm5vdCBjaGFuZ2Ugd2hpY2ggc3RyaW5ncyByZWdpc3Rlci4gTm8gYnBmIHRvb2xjaGFpbi5cbitURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19kZWxpbVxuK1xuICMgYmluZm10X21pc2MgYnBmLWJhY2tlZCAoJ0InKSBoYW5kbGVyIHRlc3Q6IGEgbGliYnBmIGhhcm5lc3MgcGx1cyBpdHNcbiAjIHN0cnVjdF9vcHMgb2JqZWN0cyBhbmQgdGhlIHRlc3QgaW50ZXJwcmV0ZXIvYXBwIGl0IHJvdXRlcyBiZXR3ZWVuLiBPbmx5XG4gIyBidWlsdCB3aGVuIGNsYW5nLCBicGZ0b29sLCB0aGUgdm1saW51eCBCVEYgYW5kIGxpYmJwZiBhcmUgYWxsIHByZXNlbnRcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mZmMxN2NiNzg1NDUwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2RlbGltLmNcbkBAIC0wLDAgKzEsMTI3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFRlc3Qgd2hpY2ggY2hhcmFjdGVycyBtYXkgZGVsaW1pdCB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpbmZtdF9taXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgRU5UUllcdFwiYm1kZWxpbVwiXG4rLyogU2hhcmVzIG5vIGNoYXJhY3RlciB3aXRoIHRoZSBzZXRzIGJlbG93LCBvciBhIHJlZnVzYWwgcHJvdmVzIG5vdGhpbmcuICovXG4rI2RlZmluZSBNQUdJQ1x0XCJibW1hZ2ljXCJcbisjZGVmaW5lIElOVEVSUFx0XCIvYmluL3RydWVcIlxuK1xuKy8qXG4rICogQVNDSUkgcHVuY3R1YXRpb24gd2l0aG91dCAnXFwnIGFuZCAnLycuIFRoZSBiYWNrc2xhc2ggaXMgcmVmdXNlZCBiZWNhdXNlXG4rICogaXQgd291bGQgY3V0IGEgbWFnaWMgdGhhdCB1c2VzIFxceCB0byBlc2NhcGUgc2hvcnQuICcvJyBpcyBhY2NlcHRlZFxuKyAqIGJ1dCBjYW5ub3QgZGVsaW1pdCBhIHJ1bGUgdGhhdCBuYW1lcyBhbiBhYnNvbHV0ZSBpbnRlcnByZXRlci5cbisgKi9cbisjZGVmaW5lIFBVTkNUVUFUSU9OXHRcIiFcXFwiIyQlXHUwMDI2JygpKissLS46O1x1MDAzYz1cdTAwM2U/QFtdXl9ge3x9flwiXG4rXG4rLyogJ00nLCAnRScgYW5kICdCJyBuYW1lIHR5cGVzLCAnUCcgdGhyb3VnaCAnRCcgYXJlIHRoZSBmbGFncy4gKi9cbisjZGVmaW5lIExFVFRFUlNcdFx0XCJNRUJQT0NGVExEcXpcIlxuKyNkZWZpbmUgRElHSVRTXHRcdFwiMDE1N1wiXG4rI2RlZmluZSBXSElURVNQQUNFXHRcIiBcXHRcXG5cIlxuKyNkZWZpbmUgQ09OVFJPTFx0XHRcIlxcMDAxXFwwMzNcXDE3N1wiXG4rI2RlZmluZSBOT05fQVNDSUlcdFwiXFwyMDBcXDI0NFxcMzc3XCJcbitcbisvKiAnOmJtZGVsaW06RTo6Ym1tYWdpYzo6L2Jpbi90cnVlOicgd2l0aCBAZGVsIGluIHBsYWNlIG9mIGV2ZXJ5ICc6Jy4gKi9cbitzdGF0aWMgaW50IHJlZ2lzdGVyX3dpdGgoY2hhciBkZWwpXG4re1xuK1x0Y2hhciBydWxlWzEyOF07XG4rXG4rXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwiJWMlcyVjRSVjJWMlcyVjJWMlcyVjXCIsIGRlbCwgRU5UUlksIGRlbCxcbitcdFx0IGRlbCwgZGVsLCBNQUdJQywgZGVsLCBkZWwsIElOVEVSUCwgZGVsKTtcbitcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4rfVxuK1xuKy8qIE5vIGNoYXJhY3RlciBvZiBAc2V0IG1heSBkZWxpbWl0IGEgcmVnaXN0ZXIgc3RyaW5nLiAqL1xuK3N0YXRpYyB2b2lkIGV4cGVjdF9yZWZ1c2VkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqc2V0KVxuK3tcbitcdGNvbnN0IGNoYXIgKmQ7XG4rXG4rXHRmb3IgKGQgPSBzZXQ7ICpkOyBkKyspIHtcbitcdFx0aW50IHJjID0gcmVnaXN0ZXJfd2l0aCgqZCk7XG4rXG4rXHRcdEVYUEVDVF9FUShyYywgLTEpXG4rXHRcdFx0VEhfTE9HKFwiJSN4IGRlbGltaXRlZCBhIHJlZ2lzdGVyIHN0cmluZ1wiLFxuK1x0XHRcdCAgICAgICAodW5zaWduZWQgY2hhcikqZCk7XG4rXHRcdGlmIChyYyA9PSAwKSB7XG4rXHRcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1x0fVxuK31cbitcbitGSVhUVVJFKGRlbGltKSB7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGRlbGltKVxuK3tcbitcdGlmIChnZXR1aWQoKSAhPSAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIik7XG4rXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBiaW5mbXRfbWlzY1wiKTtcbitcbitcdC8qIEEga2VybmVsIHdpdGhvdXQgdGhlIGFsbG93LWxpc3QgdGFrZXMgYW55IGNoYXJhY3RlciBidXQgYSBmbGFnLiAqL1xuK1x0aWYgKHJlZ2lzdGVyX3dpdGgoJ3EnKSA9PSAwKSB7XG4rXHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgZGVsaW1pdGVyIGFsbG93LWxpc3RcIik7XG4rXHR9XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZGVsaW0pXG4re1xuK1x0dW5yZWdpc3RlcihFTlRSWSk7XG4rfVxuK1xuKy8qIFB1bmN0dWF0aW9uIGRlbGltaXRzLCB3aGljaCBpcyBhbGwgYW55dGhpbmcgZGVwbG95ZWQgZXZlciB1c2VzLiAqL1xuK1RFU1RfRihkZWxpbSwgcHVuY3R1YXRpb25fYWNjZXB0ZWQpXG4re1xuK1x0Y29uc3QgY2hhciAqZDtcbitcbitcdGZvciAoZCA9IFBVTkNUVUFUSU9OOyAqZDsgZCsrKSB7XG4rXHRcdEVYUEVDVF9FUShyZWdpc3Rlcl93aXRoKCpkKSwgMClcbitcdFx0XHRUSF9MT0coXCInJWMnIHJlZnVzZWQgd2l0aCBlcnJubyAlZFwiLCAqZCwgZXJybm8pO1xuK1x0XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbitcdH1cbit9XG4rXG4rLyogTGV0dGVycyBuYW1lIHRoZSB0eXBlcyBhbmQgdGhlIGZsYWdzLCBzbyBub25lIG9mIHRoZW0gY2FuIGRlbGltaXQuICovXG4rVEVTVF9GKGRlbGltLCBsZXR0ZXJzX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBMRVRURVJTKTtcbit9XG4rXG4rLyogVGhlIG9mZnNldCBmaWVsZCBpcyB3cml0dGVuIGluIGRpZ2l0cy4gKi9cbitURVNUX0YoZGVsaW0sIGRpZ2l0c19yZWZ1c2VkKVxuK3tcbitcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgRElHSVRTKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCB3aGl0ZXNwYWNlX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBXSElURVNQQUNFKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCBjb250cm9sX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBDT05UUk9MKTtcbit9XG4rXG4rVEVTVF9GKGRlbGltLCBub25fYXNjaWlfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIE5PTl9BU0NJSSk7XG4rfVxuK1xuKy8qIFRoZSBlc2NhcGUgY2hhcmFjdGVyIHdvdWxkIGN1dCBldmVyeSBtYWdpYyB0aGF0IHVzZXMgb25lIHNob3J0LiAqL1xuK1RFU1RfRihkZWxpbSwgYmFja3NsYXNoX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBcIlxcXFxcIik7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjowNzoyOC41MzA5ODYzMTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ3MzY5MjcwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBiaW5mbXRfbWlzYyBEZWxpbWl0ZXIgUmVzdHJpY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCdzIHRvdWNoaW5nIGBmcy9iaW5mbXRfbWlzYy5jYC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXMgbmV3IGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGl0J3MgdGlnaHRlbmluZyB1cCB0aGUgYWxsb3dlZCBkZWxpbWl0ZXJzIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBQcmV2aW91c2x5LCBpdCB3YXMgY2hlY2tpbmcgaWYgYSBjaGFyYWN0ZXIgd2FzIGEgZmxhZywgYnV0IG5vdyBpdCdzIHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgdG8gQVNDSUkgcHVuY3R1YXRpb24sICpleGNsdWRpbmcqIGJhY2tzbGFzaGVzLlxuXG5SaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIExldCBtZSBkaWcgaW50byBgZnMvYmluZm10X21pc2MuY2AgYW5kIHNlZSB3aGVyZSBgY3JlYXRlX2VudHJ5YCBpcyB1c2VkLiBBaGEsIGZvdW5kIGl0ISBUaGUgcGF0Y2ggdG91Y2hlcyBgY3JlYXRlX2VudHJ5YCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIHNvbWVvbmUgd3JpdGVzIHRvIGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgLiBTbywgdGhpcyBpcyBhIHVzZXJzcGFjZS1hY2Nlc3NpYmxlIGNoYW5nZSwgd2hpY2ggbWFrZXMgaXQgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCBtaWdodCBldmVuIGJlIGFjY2Vzc2libGUgZnJvbSB1c2VyIG5hbWVzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgbW91bnQgb3B0aW9ucywgYWx0aG91Z2ggaW4gdGhlIG5vcm1hbCBjYXNlLCBpdCByZXF1aXJlcyByb290LlxuXG5Ob3csIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCdzIGNoYW5naW5nIHRoZSBwYXJzaW5nIGxvZ2ljIG9mIGBiaW5mbXRfbWlzY2AsIGFuZCBldmVuIGEgc21hbGwgY2hhbmdlIHRvIGEgY29yZSBrZXJuZWwgZmVhdHVyZSB0aGF0J3MgYWNjZXNzaWJsZSwgZXZlbiBpbiBhIGxpbWl0ZWQgd2F5LCBpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBlc3BlY2lhbGx5IGdpdmVuIHJvb3QgYWNjZXNzIGlzIHVzdWFsbHkgcmVxdWlyZWQuXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGF0IHRyaWdnZXJzIGJpbmZtdF9taXNjLCB3aGVyZSdzIHRoZSBjb25maWcgb3B0aW9uIGZvciBgYmluZm10X21pc2NgPyBJJ20gcHJldHR5IHN1cmUgaXQncyBgQ09ORklHX0JJTkZNVF9NSVNDYC4gSSdsbCB1c2UgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW4gYGZzL0tjb25maWcuYmluZm10YCB0byBtYWtlIHN1cmUuIFRoYXQnbGwgbGV0IG1lIGtub3cgaG93IHRoZSBrZXJuZWwgaXMgY29tcGlsZWQuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo0My4yNjc5MTY3NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM2NTEwMjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX01JU0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE0NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1xcXCJcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE3MC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo0Ni42MzMwMjU2MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE3NDA4ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEJJTkZNVF9NSVNDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQklORk1UX01JU0NgIGlzIHRoZSBjb25maWcgb3B0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZnMvYmluZm10X21pc2MuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIHdvcmtzIGludGVybmFsbHksIGFuZCB0aGF0IG1lYW5zIHRyYWNpbmcgdGhlIGNvcmUgZnVuY3Rpb24uIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBjcmVhdGVfZW50cnlgLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uIOKAkyB0aGF0IHdpbGwgZ2l2ZSBtZSBhbiBpbW1lZGlhdGUgc2Vuc2Ugb2YgaXRzIHNjb3BlLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gS25vd2luZyB3aGVyZSBgY3JlYXRlX2VudHJ5YCBpcyBpbnZva2VkIGZyb20gd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhIHByb3BlciBtZW50YWwgbW9kZWwgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgQklORk1UX01JU0MgYXJjaGl0ZWN0dXJlLiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MTQ6NTAuOTUwNDM2NzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzU5MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9ODMzPXN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXFxuZnMvYmluZm10X21pc2MuYzoxNDc1OlxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuZnMvYmluZm10X21pc2MuYy0xNDc2LVxcdGlmIChJU19FUlIoZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE0OjUxLjAwMTIxMDA4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDYwMTM3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayoqXG5cbk9rYXksIHNvIGBjcmVhdGVfZW50cnlgIGlzIGRlY2xhcmVkIGFzIGEgYHN0YXRpY2AgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoaXMgY29tcGlsYXRpb24gdW5pdC4gVGhhdOKAmXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZDsgaXQncyBub3QgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGRpcmVjdGx5LiBOb3csIEkgc2VlIHRoYXQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgY2FsbGVyIG9mIGBjcmVhdGVfZW50cnlgLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgc3VnZ2VzdHMgYGNyZWF0ZV9lbnRyeWAgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLiBUaGUgY3JpdGljYWwgcGF0aCBmb3IgcmVnaXN0ZXIgb3BlcmF0aW9ucyBkZWZpbml0ZWx5IHJ1bnMgdGhyb3VnaCB0aGVzZSB0d28uIExldCdzIGRpZyBpbnRvIGBibV9yZWdpc3Rlcl93cml0ZWAgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgdGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgYGNyZWF0ZV9lbnRyeWAgZml0cyBpbi4gVGhpcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo1NS40NDcyMzAyNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTg5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm1fcmVnaXN0ZXJfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYmluZm10X21pc2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9iaW5mbXRfbWlzYy5jPTE0Mzc9c3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNTA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYzoxNTEwOlxcdC53cml0ZVxcdFxcdD0gYm1fcmVnaXN0ZXJfd3JpdGUsXFxuZnMvYmluZm10X21pc2MuYy0xNTExLVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNDo1NS40OTQ3NTM2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjQ4MzQ2MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBQb3RlbnRpYWwgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFuZCBpdCdzIGZsYWdnZWQgYXMgYHN0YXRpY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gV2FpdCBhIG1pbnV0ZS4uLiBJIHJlbWVtYmVyIG5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBhY3R1YWxseSB0aGUgYC53cml0ZWAgaGFuZGxlciwgdGhlIGZ1bmN0aW9uIHRoYXQgd3JpdGVzIHRvIHRoZSBkZXZpY2UsIGZvciBgYm1fcmVnaXN0ZXJfb3BlcmF0aW9uc2AuIFJpZ2h0LCB0aGF0J3Mgd2hhdCdzIGdvaW5nIG9uLlxuXG5CdXQgbm93IEkgbmVlZCB0byBicm9hZGVuIG15IHNjb3BlIGEgYml0LiBUaGlzIGhhcyBtZSB0aGlua2luZywgYXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMgaW4gYGZzL2JpbmZtdF9taXNjLmNgPyBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuIGlzIHVzZWQgYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZS4gSSBhbSBjdXJpb3VzIHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGlzIGZpbGUuIExldCBtZSBkbyBhIHF1aWNrIGF1ZGl0IGFuZCByZXZpZXcgdGhlIG90aGVyIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MCwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjAyLjc0MzEwMzA3M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMDQxMzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjAyLjc5MjIxNzIzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDE3ODYyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZzL2JpbmZtdF9taXNjLmNgIC0gTm9uLVN0YXRpYyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnMvYmluZm10X21pc2MuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGVtLCBtZW50YWxseSBjYXRhbG9naW5nIHdoYXQgZWFjaCBvbmUgZG9lcyBhbmQgaXRzIHBvdGVudGlhbCByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJ3MgYmluYXJ5IGZvcm1hdCBoYW5kbGluZy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgYSBwb2ludCBvZiBpbnRlcmVzdCBmb3IgbW9kaWZpY2F0aW9uLCB2dWxuZXJhYmlsaXR5LCBvciBzaW1wbHkgYXJlYXMgd2hlcmUgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsIGZvciB0aGlzIHNwZWNpZmljIHRhc2suIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgaGVyZSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIGFueSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxscyBvciBjb2RlIHNlZ21lbnRzLiBJJ20gZ29pbmcgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBmaWxlIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzAsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNTowOS4yMTAwODc5MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQwNjQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFxzK1xcXFwqP1thLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoxNTowOS4yNjA1MzQ5NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTAwNjg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUXVpY2sgQW5hbHlzaXM6IEtlcm5lbCBNb2R1bGUgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgdG8gc3RhcnQuIEluc3RlYWQgb2YgZ2V0dGluZyBib2dnZWQgZG93biBpbiBhbiBleGhhdXN0aXZlIGNvZGUgcmV2aWV3IGZyb20gdGhlIHRvcCBkb3duLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSB0YXJnZXRlZCBzZWFyY2ggdGVjaG5pcXVlcy4gR2l2ZW4gdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLCB0aGUgY2xhc3NpYyBzdXNwZWN0cyBqdW1wIG91dDogYEVYUE9SVF9TWU1CT0xgLCBgbW9kdWxlX2luaXRgLCBhbmQgcG90ZW50aWFsbHkgYGluaXRfbWlzY19iaW5mbXRgIGlmIGl0IGlzIGEgYmluYXJ5IGZvcm1hdCBoYW5kbGVyLCBvciBhIHZlcnkgb2xkIGluaXQuIFNvLCBJJ20gdGhpbmtpbmcgYSBxdWljayByZWFkIG9mIHRoZSBmaWxlLCBvciBhIHF1aWNrIGdyZXAgb24gdGhvc2UsIHdpbGwgbGlrZWx5IGdpdmUgbWUgYSB2ZXJ5IHJhcGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdtIGhvcGluZyB0byBnZXQgc29tZSBsb3ctaGFuZ2luZyBmcnVpdCwgYSBkZWNlbnQgc2lnbmFsIGFuZCBzb21lIGVhc3kgd2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjEzLjMzMTU0NDI3MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4NDc3MjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgLippbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjE1OjEzLjM4MDQxODA4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTYxNjIwNDAyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3RhdGljIEludGVnZXIgRGVjbGFyYXRpb25zIGluIGBmcy9iaW5mbXRfbWlzYy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgZnMvYmluZm10X21pc2MuY2AgZmlsZS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHN0dWZmIHJlbGF0ZWQgdG8gaG93IHRoZXNlIG1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMgYXJlIGhhbmRsZWQuIExldCdzIHNlZS4uLiB3aGF0J3MgbXkgZmlyc3QgbW92ZT8gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIHNvbWV0aGluZyBzcGVjaWZpYzogSSB3YW50IHRvIHNlZSBob3cgaW50ZWdlciB2YXJpYWJsZXMgYXJlIGRlY2xhcmVkLCBwYXJ0aWN1bGFybHkgaWYgdGhleSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpYyBpbnRgIG9yIGp1c3QgYGludGAuIFRoaXMgY291bGQgZ2l2ZSBtZSBhIHF1aWNrIHVuZGVyc3RhbmRpbmcgb2Ygc2NvcGluZyBvciBob3cgdGhleSBhcmUgdXNlZCwgc28gYSBxdWljayBgZ3JlcGAgd2lsbCBiZSBmYXN0ZXIgdGhhbiBibGluZGx5IGJyb3dzaW5nLiBMZXQncyBydW4gYGdyZXAgJ15zdGF0aWMgaW50JyBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgdGhlbiBhIHNpbWlsYXIgYGdyZXAgJ15pbnQnIGZzL2JpbmZtdF9taXNjLmNgIGFuZCBzZWUgd2hhdCB3ZSBnZXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGhpZ2hsaWdodCB0aGUgaW1wb3J0YW50IHNlY3Rpb25zIHRvIGV4YW1pbmUgbW9yZSBjbG9zZWx5LiBJdCdzIGEgcXVpY2sgd2F5IHRvIGJhc2VsaW5lIHRoZSBpbnRlZ2VyIHVzYWdlIGluIHRoZSBmaWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG5leHQgYXBwcm9wcmlhdGUgc3RlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjYxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjI5LjU0MjQ2MTYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MzA4NDMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNToyOS45NDA3NzgyNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg1MTcxNzIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGBiaW5mbXRfbWlzYy5jYCDigJMgVGltZSB0byBUcmFjZSBTdGF0aWMgRGVmaW5pdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgZGlnZ2luZyBpbnRvIHRoZSBgZnMvYmluZm10X21pc2MuY2AgZmlsZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYmluYXJ5IGZvcm1hdHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIEknbSBwcm9iYWJseSBsb29raW5nIGF0IGhvdyBkaWZmZXJlbnQgZXhlY3V0YWJsZSB0eXBlcyBhcmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgZGlzcGF0Y2hlcyBleGVjdXRpb24gb2YgdGhvc2UgZm9ybWF0cy4gV2hhdCBJJ20gcmVhbGx5IGN1cmlvdXMgYWJvdXQgYXJlIHRoZSBzdGF0aWMgZGVjbGFyYXRpb25zLiBUaGUgc3RhdGljIGRlZmluaXRpb25zIHByb3ZpZGUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCB0aGUgT1MgdXNlcyB0byByZWNvZ25pemUgdGhlIGJpbmFyeSBmb3JtYXRzLiBTbywgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlZmluaXRpb25zIHdvcmsgYW5kIHdoZXJlIHRoZXkgYXJlIHVzZWQuIFRoZXJlZm9yZSwgSSB3YW50IHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBmaW5kIHRoZSBgc3RhdGljYCBrZXl3b3JkcyBpbiB0aGlzIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGZvY3VzZWQgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW1wb3J0YW50IHRvIHRoaXMgbW9kdWxlLCBoZWxwaW5nIG1lIGdyYXNwIGl0cyBpbnRlcm5hbCB3b3JraW5ncyB3aXRob3V0IHVubmVjZXNzYXJ5IG5vaXNlLiBJIHdpbGwgdGhlbiBleGFtaW5lIHRoZXNlIHN0YXRpYyBkZWZpbml0aW9ucyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYGJpbmZtdF9taXNjLmNgIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTozNC43OTI0OTc5OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTQyNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYmluZm10X21pc2MuYz03Nz1zdHJ1Y3QgYmluZm10X21pc2NfZmxhZyB7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTgzLVxcbmZzL2JpbmZtdF9taXNjLmM6ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTg1LVxcdHsgJ1AnLCBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCxcXHQwLFxcdFxcdFxcdFxcXCJwcmVzZXJ2ZSBhcmd2MFxcXCJcXHRcXHR9LFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy05NC0vKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAqbWlzY19mbGFnX2J5X2NoYXIoY29uc3QgY2hhciBjKVxcbmZzL2JpbmZtdF9taXNjLmMtOTYte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDItXFxuZnMvYmluZm10X21pc2MuYzoxMDM6c3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXFxuZnMvYmluZm10X21pc2MuYy0xMDQte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDc9REVGSU5FX1NUQVRJQ19TUkNVX0ZBU1QoYm1fZW50cmllc19zcmN1KTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ5LS8qIENoZWNrIGlmIEBlJ3MgbWFnaWMgbWF0Y2hlcyBAYnBybSdzIGJ1ZmZlciwgYXBwbHlpbmcgdGhlIG1hc2sgaWYgc2V0LiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTUwOnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfbWFnaWMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtMTUxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NS0vKiBDaGVjayBpZiBAZSdzIHJlZ2lzdGVyZWQgZXh0ZW5zaW9uIG1hdGNoZXMgQGV4dCwgTlVMTCBpZiB0aGVyZSBpcyBub25lLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTY2OnN0YXRpYyBib29sIGVudHJ5X21hdGNoZXNfZXh0ZW5zaW9uKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE2Ny1cXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqZXh0KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xODgtICovXFxuZnMvYmluZm10X21pc2MuYzoxODk6c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqXFxuZnMvYmluZm10X21pc2MuYy0xOTAtc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjM3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MjM4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0yMzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI1Mz1iaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yNjMtLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MjY0OnN0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKVxcbmZzL2JpbmZtdF9taXNjLmMtMjY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MjcyPURFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTI3OS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjI4MDpzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXFxuZnMvYmluZm10X21pc2MuYy0yODEte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0yOTEtLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXFxuZnMvYmluZm10X21pc2MuYzoyOTI6c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuZnMvYmluZm10X21pc2MuYy0yOTMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zMjAtICovXFxuZnMvYmluZm10X21pc2MuYzozMjE6c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtMzIyLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zNTgtXFxuZnMvYmluZm10X21pc2MuYzozNTk6c3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuZnMvYmluZm10X21pc2MuYy0zNjAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zNzctICovXFxuZnMvYmluZm10X21pc2MuYzozNzg6c3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTM3OS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM5MD1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0zOTItLyogRHJvcCBldmVyeXRoaW5nIGEgbG9hZCBwcm9ncmFtIHN0YWdlZCBmb3IgdGhpcyBleGVjLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MzkzOnN0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbmZzL2JpbmZtdF9taXNjLmMtMzk0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDE3LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDE4OnN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcXG5mcy9iaW5mbXRfbWlzYy5jLTQxOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQ0NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjQ0NTpzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTQ0Ni1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDk1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDk2OnN0YXRpYyB1bnNpZ25lZCBsb25nIGVudHJ5X2ludm9jYXRpb25fZmxhZ3MoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtNDk3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01MzQtICovXFxuZnMvYmluZm10X21pc2MuYzo1MzU6c3RhdGljIHN0cnVjdCBmaWxlICplbnRyeV9vcGVuX2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTUzNi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01NzctICovXFxuZnMvYmluZm10X21pc2MuYzo1Nzg6c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTU3OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTYyNy0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjYyODpzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG5mcy9iaW5mbXRfbWlzYy5jLTYyOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTcwOS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjcxMDpzdGF0aWMgY2hhciAqc2NhbmFyZyhjaGFyICpzLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTcxMS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTcyNy0vKiBQYXJzZSB0aGUgJ2ZsYWdzJyBmaWVsZCwgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBvbmUuICovXFxuZnMvYmluZm10X21pc2MuYzo3Mjg6c3RhdGljIGNoYXIgKmNoZWNrX3NwZWNpYWxfZmxhZ3MoY2hhciAqcCwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbmZzL2JpbmZtdF9taXNjLmMtNzI5LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNzQwLS8qIFBhcnNlIHRoZSAnb2Zmc2V0JywgJ21hZ2ljJyBhbmQgJ21hc2snIGZpZWxkcyBvZiBhbiAnTScgZW50cnkuICovXFxuZnMvYmluZm10X21pc2MuYzo3NDE6c3RhdGljIGNoYXIgKnBhcnNlX21hZ2ljX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsIGNoYXIgZGVsKVxcbmZzL2JpbmZtdF9taXNjLmMtNzQyLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtODAxLS8qIFBhcnNlIHRoZSAnbWFnaWMnIGZpZWxkIG9mIGFuICdFJyBlbnRyeTogdGhlIGZpbGVuYW1lIGV4dGVuc2lvbi4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjgwMjpzdGF0aWMgY2hhciAqcGFyc2VfZXh0ZW5zaW9uX2ZpZWxkcyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIGNoYXIgKnAsXFxuZnMvYmluZm10X21pc2MuYy04MDMtXFx0XFx0XFx0XFx0ICAgIGNoYXIgZGVsKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy04MzItICovXFxuZnMvYmluZm10X21pc2MuYzo4MzM6c3RhdGljIGNoYXIgKnBhcnNlX2JwZl9maWVsZHMoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBjaGFyICpwLCBjaGFyIGRlbClcXG5mcy9iaW5mbXRfbWlzYy5jLTgzNC17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEwMDc9ZW51bSBibV9jb21tYW5kIHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTAyMC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEwMjE6c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcXG5mcy9iaW5mbXRfbWlzYy5jLTEwMjIte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDM4LS8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXFxuZnMvYmluZm10X21pc2MuYzoxMDM5OnN0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG5mcy9iaW5mbXRfbWlzYy5jLTEwNDAte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDUyLS8qIFRoZSByb290IGRpcmVjdG9yeSdzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTA1MzpzdGF0aWMgc3RydWN0IGlub2RlICpibV9yb290X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xMDU0LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTA1Ny1cXG5mcy9iaW5mbXRfbWlzYy5jOjEwNTg6c3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEwNTkte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMDYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTA2NDpzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXFxuZnMvYmluZm10X21pc2MuYy0xMDY1LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTExMy1cXG5mcy9iaW5mbXRfbWlzYy5jOjExMTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVtb2RlX3QgbW9kZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTExMTUte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTM2LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTEzNzpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICppX2JpbmZtdF9taXNjKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvYmluZm10X21pc2MuYy0xMTM4LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTE1NC0qL1xcbmZzL2JpbmZtdF9taXNjLmM6MTE1NTpzdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2JpbmZtdF9taXNjLmMtMTE1Ni17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTExODQtICovXFxuZnMvYmluZm10X21pc2MuYzoxMTg1OnN0YXRpYyB2b2lkIHVubGlua19iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0xMTg2LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjAwLSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTIwMTpzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbmZzL2JpbmZtdF9taXNjLmMtMTIwMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTIwOC0vKiBSZW1vdmUgQGUgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IHJlbW92ZWQuICovXFxuZnMvYmluZm10X21pc2MuYzoxMjA5OnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvYmluZm10X21pc2MuYy0xMjEwLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTIyMC0vKiBSZW1vdmUgYWxsIGVudHJpZXMgb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIEBtaXNjIGJlbG9uZ2luZyB0byBAc2IuICovXFxuZnMvYmluZm10X21pc2MuYzoxMjIxOnN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuZnMvYmluZm10X21pc2MuYy0xMjIyLVxcdFxcdFxcdFxcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTI1MS0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjEyNTI6c3RhdGljIGludCBibV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNTMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjYyLVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2MzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYm1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xMjY0LVxcdC5sb29rdXBcXHRcXHQ9IHNpbXBsZV9sb29rdXAsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNjktXFxuZnMvYmluZm10X21pc2MuYzoxMjcwOnN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzEte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzA2LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTMwNzpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEzMDgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTM2ODpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjktXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0MjUtXFxuZnMvYmluZm10X21pc2MuYzoxNDI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJtX2VudHJ5X29wZXJhdGlvbnMgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNDI3LVxcdC5vcGVuXFx0XFx0PSBibV9lbnRyeV9vcGVuLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDM2LS8qIGFkZCB0byBmaWxlc3lzdGVtICovXFxuZnMvYmluZm10X21pc2MuYzoxNDM3OnN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9iaW5mbXRfbWlzYy5jLTE0Mzgte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTQ2ODpzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTE0NjktXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTA4LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUwOTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTUxMC1cXHQud3JpdGVcXHRcXHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTE1LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUxNjpzdGF0aWMgc3NpemVfdFxcbmZzL2JpbmZtdF9taXNjLmMtMTUxNy1ibV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTI2LVxcbmZzL2JpbmZtdF9taXNjLmM6MTUyNzpzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNTI4LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTUwLVxcbmZzL2JpbmZtdF9taXNjLmM6MTU1MTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9zdGF0dXNfb3BlcmF0aW9ucyA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE1NTItXFx0LnJlYWRcXHRcXHQ9IGJtX3N0YXR1c19yZWFkLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTU4LVxcbmZzL2JpbmZtdF9taXNjLmM6MTU1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYm1fc3VwZXJfb3BzID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTU2MC1cXHQuc3RhdGZzXFx0XFx0PSBzaW1wbGVfc3RhdGZzLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNTYzLVxcbmZzL2JpbmZtdF9taXNjLmM6MTU2NDpzdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTU2NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2MzctXFxuZnMvYmluZm10X21pc2MuYzoxNjM4OnN0YXRpYyB2b2lkIGJtX2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTYzOS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDMtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ0OnN0YXRpYyBpbnQgYm1fZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY0NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NDgtXFxuZnMvYmluZm10X21pc2MuYzoxNjQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGJtX2NvbnRleHRfb3BzID0ge1xcbmZzL2JpbmZtdF9taXNjLmMtMTY1MC1cXHQuZnJlZVxcdFxcdD0gYm1fZnJlZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY1My1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTQ6c3RhdGljIHZvaWQgYm1fa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2JpbmZtdF9taXNjLmMtMTY1NS17XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjEtXFxuZnMvYmluZm10X21pc2MuYzoxNjYyOnN0YXRpYyBpbnQgYm1faW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjMte1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjY3LVxcbmZzL2JpbmZtdF9taXNjLmM6MTY2ODpzdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBtaXNjX2Zvcm1hdCA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NjktXFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjcyLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY3MzpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZSA9IHtcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NzQtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTY4MD1NT0RVTEVfQUxJQVNfRlMoXFxcImJpbmZtdF9taXNjXFxcIik7XFxuZnMvYmluZm10X21pc2MuYy0xNjgxLVxcbmZzL2JpbmZtdF9taXNjLmM6MTY4MjpzdGF0aWMgaW50IF9faW5pdCBpbml0X21pc2NfYmluZm10KHZvaWQpXFxuZnMvYmluZm10X21pc2MuYy0xNjgzLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTY4OS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE2OTA6c3RhdGljIHZvaWQgX19leGl0IGV4aXRfbWlzY19iaW5mbXQodm9pZClcXG5mcy9iaW5mbXRfbWlzYy5jLTE2OTEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTozNC44NDA2NDkzMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTk5ODYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUHJpb3JpdGl6YXRpb24gZm9yIGJpbmZtdF9taXNjIERlbGltaXRlciBSZXN0cmljdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRlbGltaXRlcnMgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0IHRocm91Z2ggYGJpbmZtdF9taXNjYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgY3JlYXRlX2VudHJ5YCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBibV9yZWdpc3Rlcl93cml0ZWAuIE5vdywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyB0aGUgYC53cml0ZWAgaGFuZGxlciBmb3IgYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnNgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSB3cml0aW5nIHRvIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlIChvciB3aGVyZXZlciBgYmluZm10X21pc2NgIGlzIG1vdW50ZWQpLiBTaW5jZSBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGxvb2tpbmcgYXQgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIHRoaXMgY2hhbmdlIHRvdWNoZXMgY29yZSBpbnB1dCB2YWxpZGF0aW9uIGZvciBhIGtlcm5lbCBmZWF0dXJlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBjcmVhdGVfZW50cnlgIGFzIHRoYXQncyB3aGVyZSB0aGUgZGVsaW1pdGVyIHBhcnNpbmcgaGFwcGVucywgYnV0IGl04oCZcyBzdGF0aWMuIFRoZW4gSSB0aG91Z2h0IGFib3V0IGBibV9yZWdpc3Rlcl93cml0ZWAsIGJ1dCB0aGF0J3Mgc3RhdGljIHRvby4gV2FpdCwgYnV0IGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgYXNzaWduZWQgdG8gYGJtX3JlZ2lzdGVyX29wZXJhdGlvbnMud3JpdGVgLiBJdCBjYW4ndCBiZSBpbmxpbmVkIGFzIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBzbyBpdCdzIGEgZ29vZCBjYW5kaWRhdGUhIFRoZSBwcm9tcHQgc2F5cyBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1wiLlxuXG5MZXQgbWUgZ28gYmFjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIGluIGBmcy9iaW5mbXRfbWlzYy5jYC4gYGluaXRfbWlzY19iaW5mbXRgIGlzIGBfX2luaXRgLCBzbyBub3QgaWRlYWwuIGBtaXNjX2Zvcm1hdGAgaGFzIGAubG9hZF9iaW5hcnkgPSBsb2FkX21pc2NfYmluYXJ5YC4gYGJtX2ZzX3R5cGVgIGhhcyBgLmluaXRfZnNfY29udGV4dCA9IGJtX2luaXRfZnNfY29udGV4dGAuXG5cbk9rYXksIHNvIGBibV9yZWdpc3Rlcl93cml0ZWAgaXMgc3RhdGljLCB5ZXMsIGJ1dCBpdOKAmXMgYSBmaWxlIG9wZXJhdGlvbiBoYW5kbGVyIHNvIGl0J3MgYSBjYWxsYmFjayBhbmQgd2lsbCBub3QgYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIEluIGZhY3QsIGlmIGl0cyBhZGRyZXNzIGlzIHRha2VuLCBpdCBjYW5ub3QgYmUgZnVsbHkgaW5saW5lZC4gVGh1cywgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpcyBhIGdvb2QgY2FuZGlkYXRlLiBBbHNvLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIC0gWWVwLCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHN0YXRpYy4gV2FpdCwgY2hlY2tpbmcgYGZzL2JpbmZtdF9taXNjLmNgIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnPigKYgTm9wZSwgbG9va3MgbGlrZSBldmVyeXRoaW5nIGlzIHN0YXRpYyBleGNlcHQgZm9yIGBpbml0X21pc2NfYmluZm10YCBhbmQgYGV4aXRfbWlzY19iaW5mbXRgLiBTbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSB0b3AgY2hvaWNlIGJlY2F1c2UgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMsIGl0J3MgYSBjYWxsYmFjayB0aGF0IHdpbGwgbm90IGJlIGlubGluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTcwLCJPdXRwdXRUb2tlbnMiOjY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjQ4LjM2MDYzOTA3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTQ2MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qXFxcXHMrXFxcXCo/W2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2JpbmZtdF9taXNjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjQ4LjQwOTk2MjM3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjEwNDMzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29yZSBDb2RlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIEZpcnN0IHRoaW5ncyBmaXJzdDogaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYCByZWFsbHkgdGhlIGJlc3Qgc3ltYm9sIHRvIHN0YXJ0IHdpdGg/IFJpZ2h0LCBpdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIG1vZGlmaWVkIGNvZGUsIHNvIGl0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBsYWNlLiBDb25maXJtZWQuXG5cbk5leHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoYXQgdGhlIGNvbmZpZyBpcyB0aGF0IHRpZXMgaW50byB0aGlzOiBgQklORk1UX01JU0NgLiBBbHJpZ2h0LCBnb3QgaXQuXG5cbk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgQklORk1UX01JU0NgIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgbW9kaWZpZWQgY29kZS4gTGV0IG1lIGRlbHZlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNTo1OC4wMjAzOTc5NzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjIzNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCSU5GTVRfTUlTQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnLmJpbmZtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnLmJpbmZtdD0xMzg9Y29uZmlnIEJJTkZNVF9aRkxBVFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxcbmZzL0tjb25maWcuYmluZm10OjE0NTpjb25maWcgQklORk1UX01JU0NcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDYtXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBNSVNDIGJpbmFyaWVzXFxcIlxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQklORk1UX01JU0NfQlBGXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVxcdGJvb2wgXFxcIkJQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI1OjU4LjA2OTYyNjI2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5Mjc4ODkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBCSU5GTVRfTUlTQ2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgQklORk1UX01JU0NgIHNpdHVhdGlvbiBhZ2Fpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgcmVsaWVzIG9uIGFuZCwgY29udmVyc2VseSwgd2hhdCByZWxpZXMgb24gaXQuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIEkgd2VyZSB0byBtYWtlIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmaXJzdCwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIHRoaXMgc3BlY2lmaWMgZmlsZSBmb3JtYXQgc3VwcG9ydC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGJpbmFyeSBmb3JtYXQgaGFuZGxlcnMuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2UgdGhlIGludGVycHJldGVyLWJhc2VkIGZvcm1hdHMsIGFuZCBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmNlcm5zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIG1vZHVsZSdzIHBsYWNlIHdpdGhpbiB0aGUga2VybmVsJ3MgYmluYXJ5IGV4ZWN1dGlvbiBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MDguNDYyNDE3MDI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgxOTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWcuYmluZm10XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWcuYmluZm10PTU9Y29uZmlnIEJJTkZNVF9FTEZcXG5mcy9LY29uZmlnLmJpbmZtdC02LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciBFTEYgYmluYXJpZXNcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6NzpcXHRkZXBlbmRzIG9uIE1NVVxcbmZzL0tjb25maWcuYmluZm10LTgtXFx0c2VsZWN0IEVMRkNPUkVcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcXG5mcy9LY29uZmlnLmJpbmZtdC0zMi1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgRUxGIGJpbmFyeSBzdXBwb3J0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MzM6XFx0ZGVwZW5kcyBvbiBLVU5JVD15IFxcdTAwMjZcXHUwMDI2IEJJTkZNVF9FTEY9eVxcbmZzL0tjb25maWcuYmluZm10LTM0LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD00MT1jb25maWcgQ09NUEFUX0JJTkZNVF9FTEZcXG5mcy9LY29uZmlnLmJpbmZtdC00Mi1cXHRkZWZfYm9vbCB5XFxuZnMvS2NvbmZpZy5iaW5mbXQ6NDM6XFx0ZGVwZW5kcyBvbiBDT01QQVQgXFx1MDAyNlxcdTAwMjYgQklORk1UX0VMRlxcbmZzL0tjb25maWcuYmluZm10LTQ0LVxcdHNlbGVjdCBFTEZDT1JFXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD01OD1jb25maWcgQklORk1UX0VMRl9GRFBJQ1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtNjAtXFx0ZGVmYXVsdCB5IGlmICFCSU5GTVRfRUxGXFxuZnMvS2NvbmZpZy5iaW5mbXQ6NjE6XFx0ZGVwZW5kcyBvbiBBUk0gfHwgKChNNjhLIHx8IFJJU0NWIHx8IFNVUEVSSCB8fCBYVEVOU0EpIFxcdTAwMjZcXHUwMDI2ICFNTVUpXFxuZnMvS2NvbmZpZy5iaW5mbXQtNjItXFx0c2VsZWN0IEVMRkNPUkVcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTc3PWNvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtNzktXFx0ZGVmYXVsdCB5XFxuZnMvS2NvbmZpZy5iaW5mbXQ6ODA6XFx0ZGVwZW5kcyBvbiBCSU5GTVRfRUxGIFxcdTAwMjZcXHUwMDI2IEVMRl9DT1JFXFxuZnMvS2NvbmZpZy5iaW5mbXQtODEtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTE2PWNvbmZpZyBCSU5GTVRfRkxBVFxcbmZzL0tjb25maWcuYmluZm10LTExNy1cXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllc1xcXCJcXG5mcy9LY29uZmlnLmJpbmZtdDoxMTg6XFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19CSU5GTVRfRkxBVFxcbmZzL0tjb25maWcuYmluZm10LTExOS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0xMzE9Y29uZmlnIEJJTkZNVF9GTEFUX09MRFxcbmZzL0tjb25maWcuYmluZm10LTEzMi1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgdmVyeSBvbGQgbGVnYWN5IGZsYXQgYmluYXJpZXNcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTMzOlxcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMzQtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xMzktXFx0Ym9vbCBcXFwiRW5hYmxlIFpGTEFUIHN1cHBvcnRcXFwiXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQwOlxcdGRlcGVuZHMgb24gQklORk1UX0ZMQVRcXG5mcy9LY29uZmlnLmJpbmZtdC0xNDEtXFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQ9MTcxPWNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXFx0Ym9vbCBcXFwiQlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1xcXCJcXG5mcy9LY29uZmlnLmJpbmZtdDoxNzM6XFx0ZGVwZW5kcyBvbiBCSU5GTVRfTUlTQz15XFxuZnMvS2NvbmZpZy5iaW5mbXQ6MTc0OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXFx1MDAyNlxcdTAwMjYgQlBGX0pJVCBcXHUwMDI2XFx1MDAyNiBERUJVR19JTkZPX0JURlxcbmZzL0tjb25maWcuYmluZm10LTE3NS1cXHRoZWxwXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0xOTM9Y29uZmlnIEVYRUNfS1VOSVRfVEVTVFxcbmZzL0tjb25maWcuYmluZm10LTE5NC1cXHRib29sIFxcXCJCdWlsZCBleGVjdmUgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5mcy9LY29uZmlnLmJpbmZtdDoxOTU6XFx0ZGVwZW5kcyBvbiBLVU5JVD15XFxuZnMvS2NvbmZpZy5iaW5mbXQtMTk2LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5mcy9LY29uZmlnLmJpbmZtdD0yMDE9Y29uZmlnIEFSQ0hfSEFTX0VMRl9DT1JFX0VGTEFHU1xcbmZzL0tjb25maWcuYmluZm10LTIwMi1cXHRib29sXFxuZnMvS2NvbmZpZy5iaW5mbXQ6MjAzOlxcdGRlcGVuZHMgb24gQklORk1UX0VMRiBcXHUwMDI2XFx1MDAyNiBFTEZfQ09SRVxcbmZzL0tjb25maWcuYmluZm10LTIwNC1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MDguNTEyMjQwNTQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxODk3NzI0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQklORk1UX01JU0MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlIHJldm9sdmVzIGFyb3VuZCBgQklORk1UX01JU0NgLiBJIGNhbiBzZWUgZnJvbSB0aGUgYGZzL0tjb25maWcuYmluZm10YCBmaWxlIHRoYXQgdGhpcyBpcyB0aGUgb25seSBzeW1ib2wgZGVmaW5lZCwgYW5kIHRoZXJlIGFyZSBubyBkaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGUgcmVsZXZhbnQgc3ltYm9sIGhlcmUgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgYm1fcmVnaXN0ZXJfd3JpdGVgIGlzIHRoZSAqb25seSogZW50cnkgcG9pbnQuIEl0IGFwcGVhcnMgdGhhdCBpdCBpczsgaXQncyB0aGUgYC53cml0ZWAgaGFuZGxlciB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCBmaWxlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1vZGlmeWluZyB0aGUgYGNyZWF0ZV9lbnRyeWAgZnVuY3Rpb24sIHdoaWNoIGlzLCBpbiB0dXJuLCBjYWxsZWQgYnkgYGJtX3JlZ2lzdGVyX3dyaXRlYC4gQWgsIHJpZ2h0LCB0aGlzIHBhdGNoIGlzIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBkZWxpbWl0ZXIgY2hhcmFjdGVyIHRvIEFTQ0lJIHB1bmN0dWF0aW9uICpleGNlcHQqIGBcXGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWx0ZXJpbmcgaG93IGBiaW5mbXRfbWlzY2AgaGFuZGxlcyByZWdpc3RyYXRpb24gc3RyaW5ncy4gSXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZGlzY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyDigJMgaXMgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhIHN0YXRpYyBmdW5jdGlvbj8gWXVwLCBpdCBpcy4gQnV0IHdhaXQsIEknbSBqdXN0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQ/IExldCdzIHNlZS4uLiBgbG9hZF9taXNjX2JpbmFyeWAgaXMgdGhlIGAubG9hZF9iaW5hcnlgIGhhbmRsZXIuIE9rYXksIHNvIHdlJ3ZlIGdvdCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGZvciB3cml0aW5nLCBhbmQgYGxvYWRfbWlzY19iaW5hcnlgIGZvciBsb2FkaW5nLiBTaW5jZSB0aGVzZSBhcmUgZnVuY3Rpb24gcG9pbnRlcnMsIEkga25vdyB0aGV5IGFyZW4ndCBpbmxpbmVkLCBzbyBgYm1fcmVnaXN0ZXJfd3JpdGVgIHNlZW1zIGxpa2UgdGhlIGJlc3Qgc3ltYm9sIHRvIGZvY3VzIG9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBUaGlzIGlzIHNvbGlkLiBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc3OCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MTcuNzAyMDE1MTU0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1Mjc0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFyc2luZyBsb2dpYyBmb3IgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHN0cmluZ3MsIHNwZWNpZmljYWxseSByZXN0cmljdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlciB0byBBU0NJSSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYmFja3NsYXNoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmZWF0dXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHdyaXRpbmcgdG8gdGhlIGJpbmZtdF9taXNjIHJlZ2lzdGVyIGZpbGUuIEZ1enppbmcgdGhlIHJlZ2lzdHJhdGlvbiB3cml0ZSBoYW5kbGVyIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNjoxNy43ODU1NTAzMTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwMTY5MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MTcuNzg2MTYyNzAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NTQ5NTUyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGJpbmZtdF9taXNjYCByZWdpc3RyYXRpb24gc3RyaW5ncyBieSByZXN0cmljdGluZyB0aGUgYWxsb3dlZCBkZWxpbWl0ZXIgY2hhcmFjdGVycyB0byBBU0NJSSBwdW5jdHVhdGlvbiAoZXhjbHVkaW5nIGJhY2tzbGFzaCkuIEl0IHJlcGxhY2VzIGEgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIHN0cmljdGVyIGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBpbiBwYXJzaW5nIHVzZXIgaW5wdXQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBwYXJzaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmYTIyMzQzNzBhZmE5NmFhNGY4ZDgwMzUxMzk0NTJhMzM2MzU2NGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IGQyNmI2M2EyN2MyNTkuLjllODRiODc3ZDA2ZGUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0xOSw2ICsxOSw5IEBAIFRvIGFjdHVhbGx5IHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSB0eXBlLCB5b3UgaGF2ZSB0byBzZXQgdXAgYSBzdHJpbmcgbG9va2luZyBsaWtlXG4gYGA6bmFtZTp0eXBlOm9mZnNldDptYWdpYzptYXNrOmludGVycHJldGVyOmZsYWdzYGAgKHdoZXJlIHlvdSBjYW4gY2hvb3NlIHRoZVxuIGBgOmBgIHVwb24geW91ciBuZWVkcykgYW5kIGVjaG8gaXQgdG8gYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJgYC5cbiBcbitUaGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgaXRzIGZpZWxkIGRlbGltaXRlciBhbmQgY2FuIGJlIGFueVxuK0FTQ0lJIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBvdGhlciB0aGFuIHRoZSBiYWNrc2xhc2ggYGBcXGBgLlxuK1xuIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XG4gXG4gLSBgYG5hbWVgYFxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXG5pbmRleCBkZGZkM2FhNTdhYzg3Li44MDljOTFkMjFiMzk4IDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xuKysrIGIvZnMvYmluZm10X21pc2MuY1xuQEAgLTEwMCw2ICsxMDAsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnICptaXNjX2ZsYWdfYnlfY2hhcihjb25zdCBjaGFyIGMpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbWlzY192YWxpZF9kZWxpbShjb25zdCBjaGFyIGMpXG4re1xuK1x0aWYgKCFpc2FzY2lpKGMpIHx8ICFpc3B1bmN0KGMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gYyAhPSAnXFxcXCc7XG4rfVxuK1xuIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcdFx0LyogdHlwZSwgc3RhdHVzLCBldGMuICovXG5AQCAtODcyLDEwICs4NzksOSBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcbiBcdGRlbCA9ICpwKys7XHQvKiBkZWxpbWl0ZXIgKi9cbiBcbi1cdHByX2RlYnVnKFwicmVnaXN0ZXI6IGRlbGltOiAlI3ggeyVjfVxcblwiLCBkZWwsIGRlbCk7XG4rXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxuXCIsIGRlbCk7XG4gXG4tXHQvKiBBIGZsYWctY2hhciBkZWxpbWl0ZXIgcnVucyB0aGUgZmxhZyBzY2FuIG9mZiB0aGUgYnVmZmVyLiAqL1xuLVx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXG4rXHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4gXHQvKiBQYWQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBkZWxpbSB0byBzaW1wbGlmeSBwYXJzaW5nIGJlbG93LiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCBiNjQwYWY4ZjAyYjUxLi4yMjIwZWQzNDVlOTIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTQ1LDYgKzQ1LDEwIEBAIFRFU1RfR0VOX0ZJTEVTICs9IGJpbmZtdF90cmFuc3BhcmVudF9pbnRlcnBcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19sb2FkZXJcbiBURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfbG9hZGVyX3BheWxvYWQgYmluZm10X2xvYWRlcl9wYXlsb2FkX3N0YXRpY1xuIFxuKyMgT25seSBBU0NJSSBwdW5jdHVhdGlvbiBkZWxpbWl0cyB0aGUgZmllbGRzIG9mIGEgcmVnaXN0ZXIgc3RyaW5nLCBzbyBhIG5ld1xuKyMgZmxhZyBjaGFyYWN0ZXIgY2Fubm90IGNoYW5nZSB3aGljaCBzdHJpbmdzIHJlZ2lzdGVyLiBObyBicGYgdG9vbGNoYWluLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2RlbGltXG4rXG4gIyBiaW5mbXRfbWlzYyBicGYtYmFja2VkICgnQicpIGhhbmRsZXIgdGVzdDogYSBsaWJicGYgaGFybmVzcyBwbHVzIGl0c1xuICMgc3RydWN0X29wcyBvYmplY3RzIGFuZCB0aGUgdGVzdCBpbnRlcnByZXRlci9hcHAgaXQgcm91dGVzIGJldHdlZW4uIE9ubHlcbiAjIGJ1aWx0IHdoZW4gY2xhbmcsIGJwZnRvb2wsIHRoZSB2bWxpbnV4IEJURiBhbmQgbGliYnBmIGFyZSBhbGwgcHJlc2VudFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmYzE3Y2I3ODU0NTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGVsaW0uY1xuQEAgLTAsMCArMSwxMjcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogVGVzdCB3aGljaCBjaGFyYWN0ZXJzIG1heSBkZWxpbWl0IHRoZSBmaWVsZHMgb2YgYSByZWdpc3RlciBzdHJpbmcuXG4rICovXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYmluZm10X21pc2NfY29tbW9uLmhcIlxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFwiXG4rXG4rI2RlZmluZSBFTlRSWVx0XCJibWRlbGltXCJcbisvKiBTaGFyZXMgbm8gY2hhcmFjdGVyIHdpdGggdGhlIHNldHMgYmVsb3csIG9yIGEgcmVmdXNhbCBwcm92ZXMgbm90aGluZy4gKi9cbisjZGVmaW5lIE1BR0lDXHRcImJtbWFnaWNcIlxuKyNkZWZpbmUgSU5URVJQXHRcIi9iaW4vdHJ1ZVwiXG4rXG4rLypcbisgKiBBU0NJSSBwdW5jdHVhdGlvbiB3aXRob3V0ICdcXCcgYW5kICcvJy4gVGhlIGJhY2tzbGFzaCBpcyByZWZ1c2VkIGJlY2F1c2VcbisgKiBpdCB3b3VsZCBjdXQgYSBtYWdpYyB0aGF0IHVzZXMgXFx4IHRvIGVzY2FwZSBzaG9ydC4gJy8nIGlzIGFjY2VwdGVkXG4rICogYnV0IGNhbm5vdCBkZWxpbWl0IGEgcnVsZSB0aGF0IG5hbWVzIGFuIGFic29sdXRlIGludGVycHJldGVyLlxuKyAqL1xuKyNkZWZpbmUgUFVOQ1RVQVRJT05cdFwiIVxcXCIjJCVcdTAwMjYnKCkqKywtLjo7XHUwMDNjPVx1MDAzZT9AW11eX2B7fH1+XCJcbitcbisvKiAnTScsICdFJyBhbmQgJ0InIG5hbWUgdHlwZXMsICdQJyB0aHJvdWdoICdEJyBhcmUgdGhlIGZsYWdzLiAqL1xuKyNkZWZpbmUgTEVUVEVSU1x0XHRcIk1FQlBPQ0ZUTERxelwiXG4rI2RlZmluZSBESUdJVFNcdFx0XCIwMTU3XCJcbisjZGVmaW5lIFdISVRFU1BBQ0VcdFwiIFxcdFxcblwiXG4rI2RlZmluZSBDT05UUk9MXHRcdFwiXFwwMDFcXDAzM1xcMTc3XCJcbisjZGVmaW5lIE5PTl9BU0NJSVx0XCJcXDIwMFxcMjQ0XFwzNzdcIlxuK1xuKy8qICc6Ym1kZWxpbTpFOjpibW1hZ2ljOjovYmluL3RydWU6JyB3aXRoIEBkZWwgaW4gcGxhY2Ugb2YgZXZlcnkgJzonLiAqL1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfd2l0aChjaGFyIGRlbClcbit7XG4rXHRjaGFyIHJ1bGVbMTI4XTtcbitcbitcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCIlYyVzJWNFJWMlYyVzJWMlYyVzJWNcIiwgZGVsLCBFTlRSWSwgZGVsLFxuK1x0XHQgZGVsLCBkZWwsIE1BR0lDLCBkZWwsIGRlbCwgSU5URVJQLCBkZWwpO1xuK1x0cmV0dXJuIHdyaXRlX3JlZyhydWxlKTtcbit9XG4rXG4rLyogTm8gY2hhcmFjdGVyIG9mIEBzZXQgbWF5IGRlbGltaXQgYSByZWdpc3RlciBzdHJpbmcuICovXG4rc3RhdGljIHZvaWQgZXhwZWN0X3JlZnVzZWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBjb25zdCBjaGFyICpzZXQpXG4re1xuK1x0Y29uc3QgY2hhciAqZDtcbitcbitcdGZvciAoZCA9IHNldDsgKmQ7IGQrKykge1xuK1x0XHRpbnQgcmMgPSByZWdpc3Rlcl93aXRoKCpkKTtcbitcbitcdFx0RVhQRUNUX0VRKHJjLCAtMSlcbitcdFx0XHRUSF9MT0coXCIlI3ggZGVsaW1pdGVkIGEgcmVnaXN0ZXIgc3RyaW5nXCIsXG4rXHRcdFx0ICAgICAgICh1bnNpZ25lZCBjaGFyKSpkKTtcbitcdFx0aWYgKHJjID09IDApIHtcbitcdFx0XHR1bnJlZ2lzdGVyKEVOVFJZKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHR9XG4rfVxuK1xuK0ZJWFRVUkUoZGVsaW0pIHtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoZGVsaW0pXG4re1xuK1x0aWYgKGdldHVpZCgpICE9IDApXG4rXHRcdFNLSVAocmV0dXJuLCBcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwiKTtcbitcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIGJpbmZtdF9taXNjXCIpO1xuK1xuK1x0LyogQSBrZXJuZWwgd2l0aG91dCB0aGUgYWxsb3ctbGlzdCB0YWtlcyBhbnkgY2hhcmFjdGVyIGJ1dCBhIGZsYWcuICovXG4rXHRpZiAocmVnaXN0ZXJfd2l0aCgncScpID09IDApIHtcbitcdFx0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IHRoZSBkZWxpbWl0ZXIgYWxsb3ctbGlzdFwiKTtcbitcdH1cbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihkZWxpbSlcbit7XG4rXHR1bnJlZ2lzdGVyKEVOVFJZKTtcbit9XG4rXG4rLyogUHVuY3R1YXRpb24gZGVsaW1pdHMsIHdoaWNoIGlzIGFsbCBhbnl0aGluZyBkZXBsb3llZCBldmVyIHVzZXMuICovXG4rVEVTVF9GKGRlbGltLCBwdW5jdHVhdGlvbl9hY2NlcHRlZClcbit7XG4rXHRjb25zdCBjaGFyICpkO1xuK1xuK1x0Zm9yIChkID0gUFVOQ1RVQVRJT047ICpkOyBkKyspIHtcbitcdFx0RVhQRUNUX0VRKHJlZ2lzdGVyX3dpdGgoKmQpLCAwKVxuK1x0XHRcdFRIX0xPRyhcIiclYycgcmVmdXNlZCB3aXRoIGVycm5vICVkXCIsICpkLCBlcnJubyk7XG4rXHRcdHVucmVnaXN0ZXIoRU5UUlkpO1xuK1x0fVxuK31cbitcbisvKiBMZXR0ZXJzIG5hbWUgdGhlIHR5cGVzIGFuZCB0aGUgZmxhZ3MsIHNvIG5vbmUgb2YgdGhlbSBjYW4gZGVsaW1pdC4gKi9cbitURVNUX0YoZGVsaW0sIGxldHRlcnNfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIExFVFRFUlMpO1xuK31cbitcbisvKiBUaGUgb2Zmc2V0IGZpZWxkIGlzIHdyaXR0ZW4gaW4gZGlnaXRzLiAqL1xuK1RFU1RfRihkZWxpbSwgZGlnaXRzX3JlZnVzZWQpXG4re1xuK1x0ZXhwZWN0X3JlZnVzZWQoX21ldGFkYXRhLCBESUdJVFMpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIHdoaXRlc3BhY2VfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFdISVRFU1BBQ0UpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIGNvbnRyb2xfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIENPTlRST0wpO1xuK31cbitcbitURVNUX0YoZGVsaW0sIG5vbl9hc2NpaV9yZWZ1c2VkKVxuK3tcbitcdGV4cGVjdF9yZWZ1c2VkKF9tZXRhZGF0YSwgTk9OX0FTQ0lJKTtcbit9XG4rXG4rLyogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgd291bGQgY3V0IGV2ZXJ5IG1hZ2ljIHRoYXQgdXNlcyBvbmUgc2hvcnQuICovXG4rVEVTVF9GKGRlbGltLCBiYWNrc2xhc2hfcmVmdXNlZClcbit7XG4rXHRleHBlY3RfcmVmdXNlZChfbWV0YWRhdGEsIFwiXFxcXFwiKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI2OjE3Ljc4NjE2NTk3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTA5NDAxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJpbmZtdF9taXNjYCBEZWxpbWl0ZXIgUmVzdHJpY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgZnMvYmluZm10X21pc2MuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRlbGltaXRlciBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGEgc2VjdXJpdHkgaGFyZGVuaW5nIG1lYXN1cmUsIHRpZ2h0ZW5pbmcgdXAgdGhlIGlucHV0IHZhbGlkYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgdGhlIGNoZWNrIGFnYWluc3QgZmxhZyBjaGFyYWN0ZXJzIHdpdGggYSBicm9hZGVyIHZhbGlkYXRpb24gdXNpbmcgYG1pc2NfdmFsaWRfZGVsaW0oY29uc3QgY2hhciBjKWAuIFRoaXMgbmV3IGZ1bmN0aW9uIHJlc3RyaWN0cyBkZWxpbWl0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uLCAqZXhjbHVkaW5nKiBiYWNrc2xhc2hlcy4gVGhlIG9sZCBhcHByb2FjaCB3YXMgdG8gY2hlY2sgaWYgdGhlIGRlbGltaXRlciB3YXMgYSAnZmxhZycgY2hhcmFjdGVyLlxuXG5MZXQncyBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IHBhcnQgb2YgYGZzL2JpbmZtdF9taXNjLmNgIGFyb3VuZCBgY3JlYXRlX2VudHJ5YC4gSSBzZWUgdGhlIGNvZGUgY2hhbmdlOlxuXG5gYGBjXG4tXHQvKiBBIGZsYWctY2hhciBkZWxpbWl0ZXIgcnVucyB0aGUgZmxhZyBzY2FuIG9mZiB0aGUgYnVmZmVyLiAqL1xuLVx0aWYgKG1pc2NfZmxhZ19ieV9jaGFyKGRlbCkpXG4rXHRpZiAoIW1pc2NfdmFsaWRfZGVsaW0oZGVsKSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG5gYGBcblxuVGhlIG9sZCBjaGVjayB3YXNuJ3Qgc3VmZmljaWVudDsgaXQgYWxsb3dlZCBmb3IgY2hhcmFjdGVycyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGlzIG5ldyBjaGVjayBhcHBlYXJzIHRvIGJlIGEgY2xlYW5lciwgc2FmZXIgYXBwcm9hY2guXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpc3N1ZXMuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG1lbW9yeSBzYWZldHkgY29uY2VybnM/IExldCdzIHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZT8gTm9wZSwgaXQncyBqdXN0IGEgY29uZGl0aW9uIGNoZWNrIG9uIGEgc2luZ2xlIGNoYXJhY3RlciwgYGRlbGAuIERvZXMgaXQgZXhwb3NlIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0J3MganVzdCBpbnB1dCB2YWxpZGF0aW9uLiBBbmQgZG9lcyBpdCBjb3B5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vdCBhdCBhbGwuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IHN0cnVjdHVyZXMgaW52b2x2ZWQuXG5cblRoaXMgYXBwZWFycyB0byBiZSBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSwgYSByZWZpbmVtZW50IG9mIHRoZSBpbnB1dCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgY2hhcmFjdGVycyBmcm9tIGJlaW5nIHVzZWQgYXMgZGVsaW1pdGVycy4gSXQncyBhIGdvb2QgcHJhY3RpY2UsIHJlYWxseS4gQSBxdWljayByZS1jaGVjayBvZiBgY3JlYXRlX2VudHJ5YCBpbiBgZnMvYmluZm10X21pc2MuY2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLi4uIHllcywgYWxsIGxvb2tzIGdvb2QuIEl0J3MgYSBjbGVhbiwgc2FmZSBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyNjoyNy4yOTU1Njk4MTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODQ2MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9iaW5mbXRfbWlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9taXNjLmM9ODMzPXN0YXRpYyBjaGFyICpwYXJzZV9icGZfZmllbGRzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgY2hhciAqcCwgY2hhciBkZWwpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTg1NC0gKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjg1NTpzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTg1Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE0Njg9c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTE0NzQtXFxuZnMvYmluZm10X21pc2MuYzoxNDc1OlxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuZnMvYmluZm10X21pc2MuYy0xNDc2LVxcdGlmIChJU19FUlIoZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjI2OjI3LjM0NDQxOTg0M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxMjc3MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgSW1wbGljYXRpb25zIG9mIFRoaXMgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjcmVhdGVfZW50cnlgIGZ1bmN0aW9uIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoIHBhcnNpbmcgYSBzdHJpbmcgaW5wdXQgZnJvbSB0aGUgdXNlci4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgcmlnaHQgaGVyZSwgd2hlcmUgaXQgZXh0cmFjdHMgYSBkZWxpbWl0ZXIgY2hhcmFjdGVyOlxuXG5gYGBjXG5cdGRlbCA9ICpwKys7XHQvKiBkZWxpbWl0ZXIgKi9cblxuXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBkZWxpbTogJSN4XFxuXCIsIGRlbCk7XG5cblx0aWYgKCFtaXNjX3ZhbGlkX2RlbGltKGRlbCkpXG5cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBzY3JlYW1pbmcgXCJLTVNBTiByaXNrXCIgYXQgbWUuIFdlJ3JlIHJlYWRpbmcgYSBkZWxpbWl0ZXIgYW5kIHRoZW4gdmFsaWRhdGluZyBpdC4gVGhlIGBkZWxgIHZhcmlhYmxlIGl0c2VsZiBpc24ndCBiZWluZyB1c2VkIGFzIGEgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2VkLiBXZSdyZSAqbm90KiBzZWVpbmcgYW55IG1lbW9yeSBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiwgb3IgYW55IG9wZXJhdGlvbnMgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGFydGljdWxhciBzbmlwcGV0IGp1c3QgY2hlY2tzIGlmIGEgc2luZ2xlIGNoYXJhY3RlciBpcyB2YWxpZC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgYXJlIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgY2F0Y2hpbmcgYW55IG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyB0aGF0ICptaWdodCogZXhpc3QgaW4gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBpbiB0aGlzIHBhdGNoIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcgSSd2ZSBvdXRsaW5lZCBoZXJlLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UsIGFuZCB0aGUgZXhpc3RpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQgZm9yIGl0cyBhdWRpdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzOCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjY6MzQuMzM1Njk5NzA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGJpbmZtdF9taXNjYCByZWdpc3RyYXRpb24gc3RyaW5ncyBieSByZXN0cmljdGluZyB0aGUgYWxsb3dlZCBkZWxpbWl0ZXIgY2hhcmFjdGVycyB0byBBU0NJSSBwdW5jdHVhdGlvbiAoZXhjbHVkaW5nIGJhY2tzbGFzaCkuIEl0IHJlcGxhY2VzIGEgY2hlY2sgYWdhaW5zdCBmbGFnIGNoYXJhY3RlcnMgd2l0aCBhIHN0cmljdGVyIGBtaXNjX3ZhbGlkX2RlbGltYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHB1cmVseSBsb2dpY2FsIGNoYW5nZSBpbiBwYXJzaW5nIHVzZXIgaW5wdXQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgZXhwb3NlZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIGR1cmluZyBwYXJzaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnB1dCB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgYmluZm10X21pc2NgIHJlZ2lzdHJhdGlvbiBzdHJpbmdzIGJ5IHJlc3RyaWN0aW5nIHRoZSBhbGxvd2VkIGRlbGltaXRlciBjaGFyYWN0ZXJzIHRvIEFTQ0lJIHB1bmN0dWF0aW9uIChleGNsdWRpbmcgYmFja3NsYXNoKS4gSXQgcmVwbGFjZXMgYSBjaGVjayBhZ2FpbnN0IGZsYWcgY2hhcmFjdGVycyB3aXRoIGEgc3RyaWN0ZXIgYG1pc2NfdmFsaWRfZGVsaW1gIGZ1bmN0aW9uLiBUaGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgY2hhbmdlIGluIHBhcnNpbmcgdXNlciBpbnB1dC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVyaW5nIHBhcnNpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[1] Phase: Succeeded StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 16:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 16:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2] Phase: Succeeded StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 16:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 16:26:45 +0000 UTC FinishedAt: 2026-08-26 16:26:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowwng5g/series-workflowwng5g-convert-artifact-2252290270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 16:26:56 +0000 UTC FinishedAt: 2026-08-26 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 16:26:56 +0000 UTC FinishedAt: 2026-08-26 16:42:57 +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:*8bebbe78-00bc-4fc5-b642-c26ca9b4b774,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-workflowwng5g/series-workflowwng5g-convert-artifact-2252290270/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": "3396f6d7-291d-4e2b-a6ed-581e9d336206", "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-workflowwng5g/series-workflowwng5g-build-action-1539004868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 16:26:56 +0000 UTC FinishedAt: 2026-08-26 16:42:47 +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:*8bebbe78-00bc-4fc5-b642-c26ca9b4b774,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-workflowwng5g/series-workflowwng5g-convert-artifact-2252290270/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": "3396f6d7-291d-4e2b-a6ed-581e9d336206", "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-workflowwng5g/series-workflowwng5g-build-action-1539004868/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 16:42:57 +0000 UTC FinishedAt: 2026-08-26 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 16:42:57 +0000 UTC FinishedAt: 2026-08-26 16:42:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 16:42:57 +0000 UTC FinishedAt: 2026-08-26 16:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 16:42:57 +0000 UTC FinishedAt: 2026-08-26 16:43:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowwng5g/series-workflowwng5g-convert-artifact-2621846161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 16:43:07 +0000 UTC FinishedAt: 2026-08-26 16:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 16:43:07 +0000 UTC FinishedAt: 2026-08-26 16:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3396f6d7-291d-4e2b-a6ed-581e9d336206,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-workflowwng5g/series-workflowwng5g-build-action-1539004868/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-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 16:45:20 +0000 UTC FinishedAt: 2026-08-26 16:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 16:45:20 +0000 UTC FinishedAt: 2026-08-26 16:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 16:45:20 +0000 UTC FinishedAt: 2026-08-26 17:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 16:45:20 +0000 UTC FinishedAt: 2026-08-26 17:01:19 +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:*8bebbe78-00bc-4fc5-b642-c26ca9b4b774,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-workflowwng5g/series-workflowwng5g-convert-artifact-2621846161/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": "f0ec2a06-3ea4-4cd9-9635-0e05b5c8120d", "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-workflowwng5g/series-workflowwng5g-build-action-1381835357/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 16:45:20 +0000 UTC FinishedAt: 2026-08-26 17:01:09 +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:*8bebbe78-00bc-4fc5-b642-c26ca9b4b774,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-workflowwng5g/series-workflowwng5g-convert-artifact-2621846161/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": "f0ec2a06-3ea4-4cd9-9635-0e05b5c8120d", "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-workflowwng5g/series-workflowwng5g-build-action-1381835357/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 17:01:19 +0000 UTC FinishedAt: 2026-08-26 17:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 17:01:19 +0000 UTC FinishedAt: 2026-08-26 17:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 17:01:19 +0000 UTC FinishedAt: 2026-08-26 17:03:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 17:01:19 +0000 UTC FinishedAt: 2026-08-26 17:03:18 +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:*f0ec2a06-3ea4-4cd9-9635-0e05b5c8120d,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-workflowwng5g/series-workflowwng5g-build-action-1381835357/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-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},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:*3396f6d7-291d-4e2b-a6ed-581e9d336206,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0ec2a06-3ea4-4cd9-9635-0e05b5c8120d,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-workflowwng5g/series-workflowwng5g-build-action-1539004868/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-workflowwng5g/series-workflowwng5g-build-action-1381835357/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 17:03:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 17:03:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},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-workflowwng5g/series-workflowwng5g-convert-artifact-3936279494/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 17:03:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 17:03:27 +0000 UTC FinishedAt: 2026-08-26 17:03:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 17:03:28 +0000 UTC FinishedAt: 2026-08-26 17:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 17:03:38 +0000 UTC FinishedAt: 2026-08-26 20:11:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwng5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC"],"series_id":"b15b057d-c648-4a5c-abcb-6f3620a1476d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 17:03:38 +0000 UTC FinishedAt: 2026-08-26 20:11:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3396f6d7-291d-4e2b-a6ed-581e9d336206,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f0ec2a06-3ea4-4cd9-9635-0e05b5c8120d,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-workflowwng5g/series-workflowwng5g-build-action-1539004868/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-workflowwng5g/series-workflowwng5g-build-action-1381835357/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-workflowwng5g/series-workflowwng5g-convert-artifact-3936279494/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,}